Skip to content

fix(syntax): resolve topology providers in benchmark - #180

Merged
zoeyrose merged 1 commit into
mainfrom
fix/138-provider-topology-main
Aug 12, 2026
Merged

zoeyrose merged 1 commit into
mainfrom
fix/138-provider-topology-main

Conversation

@zoeyrose

Copy link
Copy Markdown
Member

Summary

  • resolve logical benchmark dependency roles through either legacy role-keyed components or the wrapper's current provider-keyed topology
  • fail closed on incomplete, non-string, unresolved, malformed, or conflicting role/provider mappings while preserving exact resolved head, dirty state, and path
  • cover both accepted shapes, current mixed identity/renamed providers, and the complete invalid/ambiguous matrix with focused tests

Canonical main companion for #138 after the independently validated 1.x companion merged as #179. Under the master #154 closure constraint, this pull request intentionally has no closing keyword; #138 remains open for the terminal exact-tip audit and human closure.

Exact coordinates and release-line relationship

  • Base: main@dc37068cc514c4a22a02f0156f54b74f6c845938
  • Head: ac8db6af7bb801472ab84cb1f63e1ecc52ba620e
  • Tree: 9e510692a1ed698cc8c0f221e926ecfef3bb5b24
  • Merged 1.x squash: 07f9bd418926066503d569b8457175191176434d
  • Shape: one commit, four modified paths, no additions/deletions/renames/mode or binary changes

The decision document, measurement baseline, and benchmark implementation are byte-identical to the merged companion. The test result differs only by retaining main's existing three-line comment that historical measurements keep their captured grammar lock rather than being relabelled by later grammar evolution.

Behavior and compatibility

The extracted resolver returns the existing logical-role-keyed report shape. When providers is absent, every dependency must exist directly in components. When it is present, every dependency must have a non-empty string provider resolving to a component. A logical role also present as a component key may map only to itself, so partial hybrid collisions fail rather than silently selecting another record. Component metadata must contain non-empty string head/path values and a Boolean dirty flag; the existing dirty-input refusal is retained.

The live wrapper's current eight-role Classic topology mixes identity providers such as resources -> resources with renamed providers such as content -> content-1x and server -> classic-server; a read-only probe confirmed all eight resolve to the exact provider head, clean state, and path. Legacy role-keyed fixtures produce the same logical input schema.

Raw timing observations remain immutable. Only the syntax implementation digest changes to 66ee02231579189622dc74d23117fee42be4969a922eba7b2d9e540d89dc49af, and the decision document records the accepted topology shapes and fail-closed contract.

Validation and review

  • python3 -m unittest -v tools.tests.test_syntax_evaluation — 16 tests passed
  • current mixed provider topology probe — eight logical inputs resolved exactly
  • python3 tools/validate.py — 132 tests passed; 1,355 archetypes/3,651 maps, 11,682 light instances with zero unreviewed, schema/catalog/contracts/syntax, and isolated collection passed
  • implementation digest, exact cross-line blob comparison, and git diff --check — passed
  • primary cumulative review and independent exact-head review — zero actionable findings

The earlier 1.x independent review found a partial-hybrid ambiguity in the first candidate. The corrected implementation checks conflicts per role; both line reviews directly verified the former collision now raises PrototypeError, while the current mixed provider shape succeeds.

No authored maps, light ledgers, retired renderer evidence/capture surfaces, generated runtime output, or runtime state are touched. Runtime/gameplay verification is not applicable to this pure read-only benchmark metadata resolver.

@zoeyrose
zoeyrose marked this pull request as ready for review August 12, 2026 16:42
@zoeyrose
zoeyrose merged commit 3ebb171 into main Aug 12, 2026
4 checks passed
@zoeyrose
zoeyrose deleted the fix/138-provider-topology-main branch August 12, 2026 16:50
@github-actions

Copy link
Copy Markdown

🎉 This PR is included in version 2.12.1 🎉

The release is available on:

Your semantic-release bot 📦🚀

zoeyrose added a commit that referenced this pull request Aug 23, 2026
## Summary

- replace the invalid `isinstance(..., (int, None))` repeat-delay check
with the valid `NoneType`
- preserve the existing acceptance of integer delays and unset delays
- deliver the compatible fix on `main`; paired `1.x` companion:
#170

## Validation

- `python3 -m compileall -q maps/python`
- `python3 tools/validate.py`
- `git diff --check`

## Program context

Discovered by the App-authored lock PR
atrinik/classic#180 while delivering
atrinik/atrinik#356 and atrinik/classic#169. PR #180 must not merge
until a corrected 1.x release is published and the updater refreshes it.

This PR intentionally does not close the program or Classic issue;
downstream publication, lock, rehearsal, and audit gates remain.
zoeyrose added a commit that referenced this pull request Aug 23, 2026
## Summary

- resolve logical benchmark dependency roles through either legacy
role-keyed components or the wrapper's current provider-keyed topology
- fail closed on incomplete, non-string, unresolved, malformed, or
conflicting role/provider mappings while preserving exact resolved head,
dirty state, and path
- cover both accepted shapes, current mixed identity/renamed providers,
and the complete invalid/ambiguous matrix with focused tests

Canonical `main` companion for #138 after the independently validated
`1.x` companion merged as
[#179](#179). Under the master
#154 closure constraint, this pull request intentionally has no closing
keyword; #138 remains open for the terminal exact-tip audit and human
closure.

## Exact coordinates and release-line relationship

- Base: `main@fd58ac463aa8a8a8a3d2b04e9507c314c6c41bd1`
- Head: `0070853ee0d743abd5f226bc8a11b544bcbb7ea5`
- Tree: `9e510692a1ed698cc8c0f221e926ecfef3bb5b24`
- Merged `1.x` squash: `7a4966330474b387f517463d4bf56daae6523f6a`
- Shape: one commit, four modified paths, no
additions/deletions/renames/mode or binary changes

The decision document, measurement baseline, and benchmark
implementation are byte-identical to the merged companion. The test
result differs only by retaining `main`'s existing three-line comment
that historical measurements keep their captured grammar lock rather
than being relabelled by later grammar evolution.

## Behavior and compatibility

The extracted resolver returns the existing logical-role-keyed report
shape. When `providers` is absent, every dependency must exist directly
in `components`. When it is present, every dependency must have a
non-empty string provider resolving to a component. A logical role also
present as a component key may map only to itself, so partial hybrid
collisions fail rather than silently selecting another record. Component
metadata must contain non-empty string head/path values and a Boolean
dirty flag; the existing dirty-input refusal is retained.

The live wrapper's current eight-role Classic topology mixes identity
providers such as `resources -> resources` with renamed providers such
as `content -> content-1x` and `server -> classic-server`; a read-only
probe confirmed all eight resolve to the exact provider head, clean
state, and path. Legacy role-keyed fixtures produce the same logical
input schema.

Raw timing observations remain immutable. Only the syntax implementation
digest changes to
`66ee02231579189622dc74d23117fee42be4969a922eba7b2d9e540d89dc49af`, and
the decision document records the accepted topology shapes and
fail-closed contract.

## Validation and review

- `python3 -m unittest -v tools.tests.test_syntax_evaluation` — 16 tests
passed
- current mixed provider topology probe — eight logical inputs resolved
exactly
- `python3 tools/validate.py` — 132 tests passed; 1,355 archetypes/3,651
maps, 11,682 light instances with zero unreviewed,
schema/catalog/contracts/syntax, and isolated collection passed
- implementation digest, exact cross-line blob comparison, and `git diff
--check` — passed
- primary cumulative review and independent exact-head review — zero
actionable findings

The earlier `1.x` independent review found a partial-hybrid ambiguity in
the first candidate. The corrected implementation checks conflicts per
role; both line reviews directly verified the former collision now
raises `PrototypeError`, while the current mixed provider shape
succeeds.

No authored maps, light ledgers, retired renderer evidence/capture
surfaces, generated runtime output, or runtime state are touched.
Runtime/gameplay verification is not applicable to this pure read-only
benchmark metadata resolver.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant