rename(vocab): apex→root, wave→batch, cascade→restack across all surfaces (AB#3259) - #500
Merged
PolyphonyRequiem merged 3 commits intoMay 21, 2026
Conversation
Pre-rename prep for AB#3259. Three changes to the vocab lint that make the upcoming mechanical rename safe: 1. *_<suffix> becomes a token-suffix rule with identifier-end boundary. _dispatch now matches plan_level_dispatch (end of identifier) but NOT items_dispatched_count (mid-identifier). Glossary spelling updated _dispatch -> *_dispatch to match. 2. <prefix>_* becomes a token-prefix rule with identifier-start boundary. erminal_* matches erminal_abort_run (start of identifier) but NOT �_terminal_state (mid-identifier). Glossary spelling updated erminal_ -> erminal_* to match. Snake_case only by design — the English-noun usage erminal in lifecycle vocab (\, \) is semantically distinct from the workflow-node-name prefix convention and must not be falsely flagged. 3. New Primary* PascalCase term (case-sensitive, identifier-start) added to glossary. Catches PrimaryId, PrimaryRouter etc. so the primary -> oot domain-noun rename covers C# code as well as snake_case YAML. Sibling to existing primary_* snake_case rule. Drop conductor-failure-model.md from deferred-spec list — file was deleted in 835f4e1 (superseded by upstream conductor failure-model brief). Re-baseline: 3160 -> 3105 violations across 166 files (69 false positives removed; 14 new PascalCase Primary* hits added). 18/18 Pester tests pass. Refs AB#3259 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Extends New-ForbiddenTermSpec to detect pure-alpha forbidden terms used as PascalCase suffixes (e.g. ResetApex, EdgeGraphWave, PlanCascade) in addition to the prefix form (ApexId, RootDriver) already covered. Adds the third regex alternative (?<=(?-i:[a-z0-9]))(?-i:Apex)(?![A-Za-z0-9]) to the pure-alpha branch. Also self-skips the lint script and its Pester test file from the scan. Both files intentionally contain forbidden terms — the lint as regex literals, the tests as detection fixtures. Without the self-skip they self-flag, and the AB#3259 mechanical rename pass mangled both files. Adds two Pester tests for the new behaviour (suffix-flag positive case + non-lowercase-boundary negative case). All 20 tests pass. Refs AB#3259.
…aces (AB#3259)
Wave 1 of the polyphony architecture-rationalization epic (AB#3253):
mechanical vocabulary rename pass per the authoritative glossary at
docs/glossary.md. EXHAUSTIVE / no aliases / hard-break — there is no
compatibility layer.
Term renames (from docs/glossary.md forbidden-terms block):
apex → root
apex-driver → polyphony (top-level workflow)
tree-walker → (concept folded into polyphony.yaml)
primary_* → root_* (workflow node names + result fields)
Primary* → Root* (PascalCase compounds)
wave → batch
cascade → restack (dependent-PR-tree remedy operation)
*_dispatch → drop (suffix on type:workflow invocation nodes)
terminal_* → drop (prefix on workflow exit-state nodes)
Mechanics:
- Authoritative glossary in docs/glossary.md; vocab lint at
.conductor/registry/tests/lint-vocabulary.ps1 enforces every term
(PascalCase prefix + PascalCase suffix + snake_case + escape-boundary
inside C# string literals).
- File renames (git mv preserves history):
apex-driver.yaml → polyphony.yaml
apex-wave-dispatch.yaml → root-batch-dispatch.yaml
apex-item-dispatch.yaml → root-item-dispatch.yaml
reset-apex.yaml → reset-root.yaml
cascade-remedy.yaml → restack-remedy.yaml
e2e-apex-driver.Tests.ps1 → e2e-polyphony.Tests.ps1
lint-apex-driver.* → lint-polyphony.*
lint-primary-completer-trust-chain.* → lint-root-completer-trust-chain.*
- Content rewrites across C# source, test fixtures, scripts, YAMLs, docs,
and skill files.
- VERB003 jinja-resolver test now uses a synthetic verb-output-schemas
registry (post-Move-#2 RequiredInput sentinel pattern means no live
verb has required:true, so the test needs a fake required-input verb
to exercise the lint plumbing).
- Refreshed tests/lint/fixtures/verb-output-schemas.json from the live
registry to pick up Root* result-field renames.
Verification:
- vocab lint: 0 violations, 0 warnings across 658 files
- dotnet build: 0 warnings, 0 errors
- dotnet test: 3841/3841 passing
- Pester sweep: 759/759 across .conductor/registry/tests + tests/
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
W1 of the polyphony architecture-rationalization epic — AB#3259 (mechanical vocabulary rename pass). Part of Epic AB#3253.
Posture
EXHAUSTIVE / no aliases / hard-break. There is no compatibility layer. Existing callers, branch names, prior tags, and downstream tooling that hardcode the old terms WILL break and need to be updated.
What changed
Renames per
docs/glossary.mdforbidden-terms block:apexrootapex-driverpolyphony(the keystone workflow)tree-walkerpolyphony.yamlprimary_*root_*(workflow node names + result fields)Primary*(PascalCase)Root*wavebatchcascaderestack(dependent-PR-tree remedy)*_dispatchsuffixtype: workflowalready implies it)terminal_*prefixFile renames (
git mvpreserves history):apex-driver.yaml→polyphony.yamlapex-wave-dispatch.yaml→root-batch-dispatch.yamlapex-item-dispatch.yaml→root-item-dispatch.yamlreset-apex.yaml→reset-root.yamlcascade-remedy.yaml→restack-remedy.yamle2e-apex-driver.Tests.ps1→e2e-polyphony.Tests.ps1lint-apex-driver.*→lint-polyphony.*lint-primary-completer-trust-chain.*→lint-root-completer-trust-chain.*Enforcement
The vocab lint at
.conductor/registry/tests/lint-vocabulary.ps1is the source of truth — every term is policed via PascalCase prefix, PascalCase suffix, snake_case boundary, and (new) escape-boundary lookbehind for C# string literals like"...\napex_facets...".Verification
dotnet build: 0 warnings, 0 errorsdotnet test: 3841/3841 passing.conductor/registry/tests/+tests/: 759/759 passingNotes for reviewers
tests/lint/fixtures/verb-output-schemas-verb003.jsonbecause post-Move-feat: Phase Detection, Routing Engine, and Command Implementations (PG-3) AB#2593 AB#2594 #2 the live registry has NO verbs withrequired:true(everything uses theRequiredInput.MissingIntsentinel pattern). The synthetic registry has a single fake verb with a true-required input so the lint plumbing still gets exercised.tests/lint/fixtures/verb-output-schemas.jsonwas refreshed from the live registry to pick upRoot*result-field renames.What's NOT in this PR (separate waves)
BREAKING CHANGESentry — let's land this PR first and decide CHANGELOG cadence as part of the broader epicon_errorroute action work (separate upstream brief)Closes AB#3259.