self-verify never compares a trigger's schema default or prose to route-table.json #135

Closed
opened 2026-08-15 14:33:37 +00:00 by john · 2 comments
Owner

Source: strict re-review C-20
Verdict: AGREE - medium

Claim as reviewed

Current semantic contradictions and current bug paths coexist with green CI, self-verify and typecheck; test and self-audit coverage has demonstrated blind spots.

At HEAD f354864 (v3.3.0)

Structural cause located: cadence-core/bin/self-verify.mjs:1059-1079 cross-checks route-table.json against the schema's gate values (the vocabulary) and against stakes.values, but never compares a trigger's schema default, or its purpose prose, to the table's stakes row.

Consequence: no CI run can catch the config get divergence, the phase_diff schema sentence, or the config-catalog.md menu drift. All three are live at HEAD with every group green.

Note

This is the assertion that would have caught three separate issues in this batch, so it is worth more than any one of them.

**Source:** strict re-review C-20 **Verdict:** AGREE - medium ### Claim as reviewed Current semantic contradictions and current bug paths coexist with green CI, self-verify and typecheck; test and self-audit coverage has demonstrated blind spots. ### At HEAD f354864 (v3.3.0) Structural cause located: `cadence-core/bin/self-verify.mjs:1059-1079` cross-checks `route-table.json` against the schema's gate `values` (the vocabulary) and against `stakes.values`, but never compares a trigger's schema `default`, or its `purpose` prose, to the table's stakes row. Consequence: no CI run can catch the `config get` divergence, the `phase_diff` schema sentence, or the `config-catalog.md` menu drift. All three are live at HEAD with every group green. ### Note This is the assertion that would have caught three separate issues in this batch, so it is worth more than any one of them.
john added this to the v3.4.1 milestone 2026-08-15 15:01:09 +00:00
Author
Owner

Sequencing within v3.4.1 — land this one first

This milestone is three views of one defect (#129, #134, #135). Order is not free, and it matters here because Cadence plans and executes this milestone itself.

#135 goes first. Reasons, in order:

  1. It is the only one that can fail on the current tree. The assertion reddens against HEAD as written, which proves #129 and #134 are real before either is touched. Land the fixes first and the assertion is written against an already-green tree - a test that never failed, which is the class this project treats as no coverage at all.
  2. It is the only one that keeps them fixed. #129 and #134 are a fallback and a sentence. Both can drift back in one edit. self-verify.mjs:1059-1079 currently compares gate vocabulary to the table and nothing else, so nothing in CI notices.
  3. It scopes the other two. The assertion's failure output enumerates every trigger whose schema default or purpose prose disagrees with route-table.json. That list is the work item for #129 and #134 - derived, not hand-transcribed from a review document.

Planning consequence: #135 and the other two should not be one plan with parallel tasks. #129/#134 consume #135's output, so the file leases overlap in effect even where they do not overlap on paper. Sequential, or two phases.

One thing to check while implementing #135 - it has no issue of its own and should not be lost:

cadence-core/references/config-catalog.md:61 is the /cad-config menu's source of gate defaults and prints adjudicated for plan, advisory for diff/phase_diff. Per cadence-core/workflows/config.md:48-49 a knob absent from the repo file is shown "at its effective/default value unlabelled", so the interactive walk shows three gates that resolve off. That is the same drift as #129 on the surface a user actually touches. If the assertion can cover the catalog table as well as the schema, cover it here rather than filing a fourth issue.

## Sequencing within v3.4.1 — land this one first This milestone is three views of one defect (#129, #134, #135). Order is not free, and it matters here because Cadence plans and executes this milestone itself. **#135 goes first.** Reasons, in order: 1. **It is the only one that can fail on the current tree.** The assertion reddens against HEAD as written, which proves #129 and #134 are real before either is touched. Land the fixes first and the assertion is written against an already-green tree - a test that never failed, which is the class this project treats as no coverage at all. 2. **It is the only one that keeps them fixed.** #129 and #134 are a fallback and a sentence. Both can drift back in one edit. `self-verify.mjs:1059-1079` currently compares gate *vocabulary* to the table and nothing else, so nothing in CI notices. 3. **It scopes the other two.** The assertion's failure output enumerates every trigger whose schema `default` or `purpose` prose disagrees with `route-table.json`. That list is the work item for #129 and #134 - derived, not hand-transcribed from a review document. **Planning consequence:** #135 and the other two should not be one plan with parallel tasks. #129/#134 consume #135's output, so the file leases overlap in effect even where they do not overlap on paper. Sequential, or two phases. **One thing to check while implementing #135** - it has no issue of its own and should not be lost: `cadence-core/references/config-catalog.md:61` is the `/cad-config` menu's source of gate defaults and prints `adjudicated` for plan, `advisory` for diff/phase_diff. Per `cadence-core/workflows/config.md:48-49` a knob absent from the repo file is shown "at its effective/default value unlabelled", so the interactive walk shows three gates that resolve `off`. That is the same drift as #129 on the surface a user actually touches. If the assertion can cover the catalog table as well as the schema, cover it here rather than filing a fourth issue.
Author
Owner
Shipped in v3.4.1 (#177). https://git.jcrenshaw.dev/crenshawdev/cadence/releases/tag/v3.4.1
john closed this issue 2026-08-15 19:54:03 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: crenshawdev/cadence-archived#135
No description provided.