Skip to content

rename(vocab): apex→root, wave→batch, cascade→restack across all surfaces (AB#3259) - #500

Merged
PolyphonyRequiem merged 3 commits into
architecture/rationalizationfrom
arch-rat/wave-1-rename
May 21, 2026
Merged

rename(vocab): apex→root, wave→batch, cascade→restack across all surfaces (AB#3259)#500
PolyphonyRequiem merged 3 commits into
architecture/rationalizationfrom
arch-rat/wave-1-rename

Conversation

@PolyphonyRequiem

Copy link
Copy Markdown
Owner

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.md forbidden-terms block:

Old New
apex root
apex-driver polyphony (the keystone workflow)
tree-walker concept folded into polyphony.yaml
primary_* root_* (workflow node names + result fields)
Primary* (PascalCase) Root*
wave batch
cascade restack (dependent-PR-tree remedy)
*_dispatch suffix dropped (type: workflow already implies it)
terminal_* prefix dropped (workflow exit-state nodes)

File renames (git mv preserves history):

  • apex-driver.yamlpolyphony.yaml
  • apex-wave-dispatch.yamlroot-batch-dispatch.yaml
  • apex-item-dispatch.yamlroot-item-dispatch.yaml
  • reset-apex.yamlreset-root.yaml
  • cascade-remedy.yamlrestack-remedy.yaml
  • e2e-apex-driver.Tests.ps1e2e-polyphony.Tests.ps1
  • lint-apex-driver.*lint-polyphony.*
  • lint-primary-completer-trust-chain.*lint-root-completer-trust-chain.*

Enforcement

The vocab lint at .conductor/registry/tests/lint-vocabulary.ps1 is 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

  • vocab lint: 0 violations, 0 warnings across 658 files
  • dotnet build: 0 warnings, 0 errors
  • dotnet test: 3841/3841 passing
  • Full Pester sweep across .conductor/registry/tests/ + tests/: 759/759 passing

Notes for reviewers

  • The VERB003 jinja-resolver test now uses a synthetic tests/lint/fixtures/verb-output-schemas-verb003.json because post-Move-feat: Phase Detection, Routing Engine, and Command Implementations (PG-3) AB#2593 AB#2594 #2 the live registry has NO verbs with required:true (everything uses the RequiredInput.MissingInt sentinel 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.json was refreshed from the live registry to pick up Root* result-field renames.

What's NOT in this PR (separate waves)

  • ADO/GitHub state cleanup of pre-rename branches/tags/PRs — operator runbook concern
  • CHANGELOG BREAKING CHANGES entry — let's land this PR first and decide CHANGELOG cadence as part of the broader epic
  • The conductor-side on_error route action work (separate upstream brief)

Closes AB#3259.

Daniel Green and others added 3 commits May 21, 2026 13:17
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>
@PolyphonyRequiem
PolyphonyRequiem merged commit e1e745f into architecture/rationalization May 21, 2026
@PolyphonyRequiem
PolyphonyRequiem deleted the arch-rat/wave-1-rename branch May 21, 2026 22:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant