feat(ultraplan-local): seal Opus-4.7 schema-drift defense in Phase 8
Inline STEP_HEADING_REGEX, FORBIDDEN_HEADING_REGEX, the canonical step+manifest example, and the post-write plan-validator self-check directly into Phase 8 of commands/ultraplan-local.md. This eliminates the dependency on Opus 4.7 implicitly loading agents/planning-orchestrator.md — the format contract now travels with the command file itself. Source: research/04 D5 + plan-v2 Step 7. Pin in tests/lib/doc-consistency.test.mjs locks the substrings so future edits cannot silently regress the seal.
This commit is contained in:
parent
50f0629baf
commit
84eae1fad7
2 changed files with 92 additions and 0 deletions
|
|
@ -157,3 +157,32 @@ test('rule-catalogue has exactly 12 entries', async () => {
|
|||
'lib/review/rule-catalogue.mjs RULE_CATALOGUE size invariant: must be 12 (v1.0 baseline)',
|
||||
);
|
||||
});
|
||||
|
||||
test('commands/ultraplan-local.md Phase 8 seals Opus-4.7 schema-drift defense', () => {
|
||||
const cmd = read('commands/ultraplan-local.md');
|
||||
// Locate Phase 8 section
|
||||
const phase8Start = cmd.indexOf('## Phase 8');
|
||||
assert.ok(phase8Start >= 0, 'Phase 8 heading missing');
|
||||
const phase8End = cmd.indexOf('## Phase 9', phase8Start);
|
||||
assert.ok(phase8End > phase8Start, 'Phase 9 heading missing — could not bound Phase 8');
|
||||
const phase8 = cmd.slice(phase8Start, phase8End);
|
||||
// Required regex source-of-truth references
|
||||
assert.ok(
|
||||
phase8.includes('STEP_HEADING_REGEX'),
|
||||
'Phase 8 should inline STEP_HEADING_REGEX so format contract survives without orchestrator-doc loading',
|
||||
);
|
||||
assert.ok(
|
||||
phase8.includes('FORBIDDEN_HEADING_REGEX'),
|
||||
'Phase 8 should inline FORBIDDEN_HEADING_REGEX (Step 7 — schema-drift seal)',
|
||||
);
|
||||
// Required validator self-check
|
||||
assert.ok(
|
||||
phase8.includes('plan-validator.mjs --strict'),
|
||||
'Phase 8 should mandate post-write `plan-validator.mjs --strict` self-check',
|
||||
);
|
||||
// Forbidden-headings list (literal "FORBIDDEN" appears more than once: in regex const + in human-readable list)
|
||||
assert.ok(
|
||||
/FORBIDDEN/.test(phase8),
|
||||
'Phase 8 should explicitly enumerate FORBIDDEN headings',
|
||||
);
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue