Skip to content

release(v8.5.0): Advertised-Accept-Set Conformance + agnosticism codification + P0 safety hardening - #92

Merged
aimsise merged 15 commits into
mainfrom
impl/eval-p0-batch
Jun 19, 2026
Merged

release(v8.5.0): Advertised-Accept-Set Conformance + agnosticism codification + P0 safety hardening#92
aimsise merged 15 commits into
mainfrom
impl/eval-p0-batch

Conversation

@aimsise

@aimsise aimsise commented Jun 19, 2026

Copy link
Copy Markdown
Owner

v8.5.0 — Advertised-Accept-Set Conformance + agnosticism codification + P0 safety hardening

Releases the AASC arc (the product-/language-/domain-agnostic meet-or-beat verification upgrade), the agnosticism codification, and the P0 safety/state hardening batch. 14 commits on top of v8.4.2; main is an ancestor (clean merge).

Highlights (full detail in CHANGELOG.md [8.5.0]):

  • AASC executed accept-set sweep — for a boundary advertising strict/canonical/lossless/limit (or a shared-input sibling), the ac-evaluator EXECUTES a generative grammar-complement sweep (Grammar Card A/U/W/K, MR-FINITE/MR-ALPHABET/MR-CANONICAL/MR-KEYFAITH) in scratch vs an independent hand-coded oracle — catching parse-accepted overflow, input-alphabet leaks (incl. astral Unicode digits), non-canonical accepts, and structural-key / prototype-pollution injection by construction. Per-AC deterministic trigger + persisted ## Accept-set sweep observability + constraints.accept_set_conformance kill switch + committed design-oracles/ proofs.
  • AASC determinism hook (hooks/accept-set-verify.sh) — a recognition-independent PostToolUse(Write|Edit) gate over the persisted sweep line; enforces by default (SW_ACCEPT_SET_CONFORMANCE_MODE=on; metric-only/off to downgrade), fail-OPEN.
  • Product/language/domain agnosticism codificationCLAUDE.md (A)/(B) substrate line + the meet-or-beat rule + CT-DECONTAM-1 product-instance recidivism guard over the 14-file normative set.
  • P0 safety / state-machinery hardeningpre-bash-contract-guard + jq-missing / state-field / bash-state guards + element-scoped state parsers + loop-guard / post-ship integrity self-heal (all SW_*_MODE kill-switched).

Verification: test-skill-contracts 852/852, test-accept-set-verify 32/32, test-path-consistency 144/144, full per-suite sweep green, ShellCheck --severity=warning clean. plugin.json 8.5.0 == newest CHANGELOG [8.5.0] (CT-MODE-13/14). Validated across dogfood43-53 (a leak-inviting strict subject produced correct strict artifacts on every historically-failing trap; a live decision:block de-risk confirmed the enforce path). Additive + kill-switchedconstraints.accept_set_conformance: off (or SW_ACCEPT_SET_CONFORMANCE_MODE=off) reverts byte-for-byte to the pre-v8.5.0 read-only behaviour.

🤖 Generated with Claude Code

https://claude.ai/code/session_019irBw7wTgiT1YG3rUy5T5a

aimsise and others added 15 commits June 17, 2026 01:57
…cket sibling-guard

Comprehensive eval-P0-batch increment on impl/eval-p0-batch. Multiple efforts are
committed together because the contract-test file (tests/test-skill-contracts.sh)
entangles their CTs and partial staging is unavailable in this environment.

- Agnosticism (charter P0): bind a "Product/Language/Domain Agnosticism" section in
  CLAUDE.md (property-not-membership rule + the (A) user-product-substrate=agnostic /
  (B) harness-own-substrate=fixed line + meet-or-beat + HARD-LINE-vs-JUDGMENT
  enforcement boundary); de-falsify the detect-tautological-assertions.sh header
  (it is JS/Jest-Vitest-targeted, not "language/framework-agnostic"; other languages
  rely on the ac-evaluator semantic pass); demote the verification-depth criticality
  domain-name list to illustrative and promote the domain-independent property
  trigger (shared-boundary + correctness-critical) to primary.

- De-contamination (CT-DECONTAM-1): product-instance recidivism guard over the
  13-file normative set held at 0 hits; independent-oracle-harness uses a neutral
  worked example while keeping its four-part contract.

- Cross-ticket sibling-guard (P-A): the decomposer emits a mandatory-present,
  unconditional cross-ticket `shared_input_boundary` signal naming the sibling
  tickets that share one external input class; create-ticket forwards each ticket's
  membership into BOTH its planner and its ticket-evaluator spawn; a
  "delegation is NOT an automatic n/a" clause forces each delegating sibling to
  carry its own hostile / accept-set failure-class row. New RED-first contract test
  CT-EV-SHARED-INPUT-XTICKET pins the signal + the clause across producer, schema,
  forwarder, canonical rubric, both ac-evaluator twins, planner, and ticket-evaluator.

- eval-P0 batch + strictness-leniency hardening across skills / agents / hooks.

Verification: test-skill-contracts 838/838, test-path-consistency 144/144; hook
suites all green (pre-bash-safety 200, pre-write-safety 33, pre-edit-safety 35,
pre-bash-contract-guard 8, hooks-lib 163, state-parsers 33, autopilot-continue 53);
ShellCheck --severity=warning rc=0; ac-evaluator twins byte-identical (CT-EV-MODEL-1);
CT-DECONTAM-1 / CT-AR-13 / CT-EV-GATE10-2 green.

P-A sibling-artifact omission rationale (CLAUDE.md ## Modifications): the
delegation-not-n/a clause is propagated to the canonical rubric + both ac-evaluator
twins + planner + ticket-evaluator + the ticket-template R2 row, but intentionally
NOT to the other CT-AR-13 sibling-guard carriers (test-authoring-guidance,
verification-depth, implementer, test-writer) -- those are downstream authoring /
impl guidance, not graders of the cross-ticket signal, which reaches the grading
path via the planner self-audit + ticket-evaluator + ac-evaluator without them.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
NAC #4 in tests/test-ac-evaluator-static-rules.sh asserts that tautological-
assertion-rules.md names no test framework "outside example blocks", but the
implementation grepped the WHOLE file (fence-unaware), so a framework token inside
a fenced worked example would false-trip it. Align the implementation with its own
comment by filtering fenced code blocks before the count, transcribing the proven
three-backtick toggle awk from hooks/pre-write-safety.sh:51-64.

Behaviour-identical on the current tree (the rules file has 0 framework tokens and
0 fences, so the count stays 0 -> PASS). RED-first demo confirmed: on a fixture
with one prose token + one FENCED token, the old whole-file grep counts 2 (false
trip) while the fence-aware filter counts 1 (prose only). Suite 21/21,
ShellCheck --severity=warning rc=0.

Prerequisite for AASC: a future accept-set worked example carrying a runner token
must not RED-fail this guard.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…s (AASC prereq)

The scratch-carve-out note said its "single exception ... for a computational AC",
but point 5 of the same section ALREADY directs a behavioral, time-bounded watchdog
probe of an external-input boundary via the .simple-workflow/scratch/ carve-out (and
the EC-SELFDOC real-build probe likewise). That is a pre-existing internal
inconsistency, independent of any new mechanism. Reconcile it: the carve-out permits
EVIDENCE-GATHERING on already-built behaviour (computational oracle probe AND the
behavioral watchdog / EC-SELFDOC probes this section already directs), NEVER a
substitute for missing test coverage (the :199 ban is preserved in intent).

Deliberately scoped: this names NO accept-set / complement-sweep (that is the gated
AASC mechanism, deferred until the charter F-4 discriminating dogfood passes). Applied
BYTE-IDENTICALLY to both ac-evaluator twins. New RED-first CT-EV-SCRATCH-EVIDENCE pins
the clarification in both twins (token HEAD=0 before this change).

Verification: test-skill-contracts 839/839, ac-evaluator twins byte-identical
(CT-EV-MODEL-1 + cmp), CT-DECONTAM-1 green, ShellCheck --severity=warning rc=0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…pe (charter F-1)

Preserve the charter section I probe as a durable, runnable design-oracle under
design-oracles/aasc-accept-set/ (it previously lived only in gitignored scratch).
It pairs an independent hand-coded spec oracle with a property-generated complement
corpus (the Unicode decimal-digit codepoints that are NOT ASCII, BMP + astral,
enumerated by Unicode property so the generator names no script) and diffs each
implementation black-box against the oracle.

Reproduced: node probe.js -> buggy caught, correct clean (astral 0 is correct, the
JS native parser is ASCII-only); python3 probe.py -> buggy leaks the full Unicode-Nd
alphabet incl ~390 astral codepoints caught by construction, correct clean. Source
names no script and carries no product-instance denylist token.

This is a PROOF ARTIFACT, not normative plugin content: the AASC mechanism is NOT
wired into the harness and its implementation stays gated on the charter section F-4
discriminating-subject live dogfood. The directory is run by no test suite or CI;
test-path-consistency 144/144 and test-skill-contracts 839/839 stay green with it
present. The illustrative boundary (strict unsigned decimal octet) is illustrative only.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add loop-engineering framing in three README locations without growing
the body or naming skills in the top blurb:
- opening blurb: the Harness brings loop engineering to the development
  lifecycle via a closed inner loop (act -> verify -> correct ->
  continue) bounded by contract stopping conditions
- Usage > Execution chains: annotate the autopilot per-ticket loop in
  patterns 2 and 3 with 'loop engineering fires'; the all-manual
  pattern 1 stays unannotated because the human drives that loop there
- Why simple-workflow?: tie the three pillars to the inner loop of loop
  engineering and the engineering around it (no new bullet)

Docs-only; path-consistency 144/144 green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Wire Advertised-Accept-Set Conformance into the ac-evaluator: when a boundary's
contract advertises strict/canonical/lossless/limit (or a shared-input-class
sibling exists), the evaluator EXECUTES a generative grammar-complement sweep in
scratch against an independent hand-coded oracle, rather than only reasoning about
the accept set. Per the charter's innovation-theater analysis, the load-bearing
addition is the executed act, not more prose contract.

Load-bearing edits (twin/sibling byte-identical):
- ac-evaluator{,-hi}.md L-ROBUSTNESS lens: EXECUTE mandate + Grammar Card
  (A/U/W/K) + four metamorphic relations (MR-FINITE/ALPHABET/CANONICAL/KEYFAITH,
  MR-ALPHABET enumerating the Unicode decimal-digit property complement naming no
  script) + two-tier oracle-authoritative FAIL gating (no false-positive storm) +
  always-on + no-runnable-artifact caveat arm.
- ac-evaluator{,-hi}.md scratch carve-out: admit the sweep as a behavioral
  evidence probe.
- ac-evaluator{,-hi}.md persisted observability: a "## Accept-set sweep" section
  in the terminal-rewrite report body (per-boundary triggered/ran/astral/
  divergences/authoritative lines) so non-execution is falsifiable.
- implementer.md / test-writer.md: producer-side commit-on-leak retained corpus
  (a fixed rejection characterization test, conditioned on a sweep-found leak).

Scaffold: new skills/impl/references/accept-set-conformance-harness.md (copyable
shape, non-product worked example, illustrative-only); EC-METAMORPHIC in
evidence-channels.md; a test-authoring-guidance cross-link.

Tests: CT-AASC-1/2/3/5 (RED-first proven), new doc added as the 14th
CT-DECONTAM-1 normative-set file. test-skill-contracts 843/843, path-consistency
144/144, twins byte-identical, ShellCheck clean, CT-DECONTAM-1 zero
product-instance hits.

Efficacy (dogfood46, record-locator library, 3 siblings, patched tree): QUALIFIED
PASS. Self-elicitation is REAL (not theater) -- an evaluator actually executed a
property-enumerated BMP Nd-complement sweep (corpus-size corroborated by the tool
call and an independent oracle); the committed test layer now locks in the
Unicode-digit reject class (a one-character [0-9]->\d / isdigit regression makes
the committed suite go RED, the opposite of the prior baseline); product correct
with zero new bugs. meet-or-beat achieved over the baseline.

Known iterate targets (follow-up hardening): execution is non-uniform (only one of
three siblings ran a genuine property-enumerated sweep; one hand-picked a small
sample, one stood the sweep down on delegation grounds), the astral planes were
not swept, and the stderr observability twin did not fire. The kill switch
(constraints.accept_set_conformance) is intentionally deferred to the hardening
pass so this efficacy delta stays cleanly attributable; the absent-field default
keeps the mechanism active.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…x self-incrimination (load-bearing core)

Hardens the AASC accept-set sweep after the dogfood46 efficacy run showed
self-elicitation is real but non-uniform (1 of 3 evaluators ran a genuine
property-enumerated sweep; one hand-picked a sample, one stood the sweep down on
delegation grounds; astral was never swept). An adversarial design review trimmed
~60% of the proposed hardening as recognition-gated cue-accretion (the astral /
no-script / property-enumeration prose already existed and was ignored); this
ships only the load-bearing core.

- skills/impl/SKILL.md: the orchestrator computes a per-AC deterministic trigger at
  the Step-15 handoff (a lexical strict/canonical/lossless/limit scan + the
  shared_input_boundary sibling signal) and inlines it into the evaluator spawn as
  `Accept-set conformance: {auto|off} triggered-on={AC-ids}`, emitting
  [ACCEPT-SET-TRIGGER] to stderr. Roster updated (fields a-m, + Accept-set
  conformance).
- agents/ac-evaluator{,-hi}.md (byte-identical): the lens READS triggered-on= and
  sweeps exactly those ACs without re-recognizing; a triggered-on AC may NOT be
  stood down on delegation grounds (kills the dogfood46 ticket-002 archetype by
  coupling the obligation to the orchestrator's list); a black-box
  no-implementation-peek prohibition (do not skip astral by inspecting the unit's
  internals to argue an input class cannot occur); and a self-incrimination rule
  (ran=y astral=n on a triggered AC is a NON-CONFORMANT shallow sweep, recorded as
  such -- turning the persisted `## Accept-set sweep` line into a falsifiable
  instrument).
- tests/test-skill-contracts.sh: CT-AASC-6 (the trigger wire) + CT-AASC-7
  (implementation-peek + shallow-sweep), RED-first proven.

Deliberately NOT changed: the astral / no-script / property-enumeration prose
(already maximal); accept-set-conformance-harness.md (re-stating it is accretion);
the deferred kill-switch declaration L1/L2 + the stderr twin.

Tests: test-skill-contracts 845/845, path-consistency 144/144, twins
byte-identical, ShellCheck clean, CT-DECONTAM-1 zero product-instance hits.

Honest scope: the deterministic trigger MOVES the recognition from the proven-weak
evaluator to the orchestrator (a variance reduction, not a hard mechanical gate --
the orchestrator is still instructed, not hooked); the depth's only load-bearing
part is the self-incrimination falsifiability (astral coverage is made visible, not
forced). Efficacy is UNPROVEN until a re-dogfood shows the delegating sibling now
sweeps (triggered=y ran=y astral=y) where dogfood46 stood it down.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…(light/dark)

Visualize the default /brief chain=on path below the README opening
paragraph, tuned for how the README actually renders on GitHub:
- inline: a short, large-text OVERVIEW (phases + the per-ticket loop and
  the in-/impl verify loop) that stays readable at GitHub's ~860px width
- collapsed under <details>: the FULL flow with every skill, agent, hook,
  inter-phase handoff/harness note, and a harness-mechanism summary
- both served via <picture> + prefers-color-scheme so they adapt to
  GitHub light/dark mode instead of glaring as a white block

Loops are named PER-TICKET LOOP / VERIFY LOOP (not OUTER/INNER) to avoid
colliding with loop engineering's scheduler 'outer' loop, which the
plugin delegates to Claude Code (/loop, /schedule).

Diagrams are Pillow-generated; the generators are committed beside the
PNGs for regeneration. Glyphs are restricted to ASCII + safe arrows and
on-line labels use opaque backgrounds, so no tofu boxes or overlaps.
Verified by rendering at 860px (light + dark); path-consistency 144/144.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…pus directive + worked shape + K-trigger binding

Brings the class-(b) STRUCTURAL-KEY-INJECTION (MR-KEYFAITH) lens to parity with the
class-(c) MR-ALPHABET directive, after the dogfood48 (b) run self-elicited the K-axis
sweep but generated a HAND-PICKED literal key list (the lens MR-KEYFAITH clause was
bare/advisory prose while MR-ALPHABET had a strong enumerate-by-property directive).
A /tmp prototype proved (b) is catchable by construction with a reflection-derived
generator that names no key.

- skills/impl/references/accept-set-conformance-harness.md: a worked REFLECTION-DERIVED
  MR-KEYFAITH (b) shape (mirrors the MR-ALPHABET example) -- an independent
  round-trip-faithfulness oracle + a generator that derives reserved/accessor keys by
  reflection over the structure's type/prototype (naming NO key literal) + generic
  hostiles (empty/duplicate/normalized-collision) + a black-box diff. ILLUSTRATIVE.
- agents/ac-evaluator{,-hi}.md (byte-identical): the MR-KEYFAITH clause gains a MUST
  DERIVE-the-corpus-BY-REFLECTION directive (names no key, enumerates via reflection,
  covers all reserved/accessor/colliding keys + generic hostiles; a single hand-picked
  list is not conformant) pointing at the worked shape. The gating qualifier stays
  ASSUMED/advisory (not upgraded this round).
- skills/impl/SKILL.md: the deterministic trigger now binds the K axis for a
  shared_input_boundary sibling that builds a keyed structure from untrusted input,
  even when no lexical strict/canonical/lossless/limit word is present.
- tests/test-skill-contracts.sh: CT-AASC-8 (the (b) shape) + CT-AASC-9 (the
  reflection-derived corpus directive in both twins), RED-first.

Tests: test-skill-contracts 847/847, path-consistency 144/144, twins byte-identical,
ShellCheck clean, CT-DECONTAM-1 zero product-instance hits (directive + shape name no
key; verified by forced-text grep).

Honest scope: EDIT A/B are PROSE directives mirroring the (c) directive that works WITH
run-to-run variance (the AASC trigger+sweep is LLM-mediated, not a hard gate). This
strengthens (b) elicitation from bare/advisory prose to a MUST + worked shape; efficacy
(does the K sweep now derive-by-reflection) is to be validated by a re-dogfood on the
COMMITTED tree -- the prior dogfood49 was invalid because the shape was uncommitted and
did not load. The MR-KEYFAITH gating stays advisory; determinism would require a runtime
hook (deferred).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…pgrade + reflection-corpus completeness + (b) design-oracle

Finishes class-(b) STRUCTURAL-KEY-INJECTION (MR-KEYFAITH) to full parity with the
class-(c) MR-ALPHABET mechanism, after dogfood50 validated the (b) sweep as
reflection-derived-effective (the K corpus self-elicited via dir(type) naming no
key; K bound reliably; product (b)-faithful; baseline (a)/(b)/(c) all validated,
with a run-to-run variance caveat).

- agents/ac-evaluator{,-hi}.md (byte-identical): the MR-KEYFAITH clause's temporary
  "ASSUMED, not proven / advisory unless a concrete drop" qualifier is removed and
  folded into the SAME standard two-tier oracle-authoritative FAIL gating as the
  other MRs (a concrete round-trip-faithfulness violation on a lossless/strict
  keyed boundary => FAIL; a legitimately-wide keyed boundary => advisory). The
  corpus directive now names private/internal slot names and the FULL reflected
  set (never truncated/sliced).
- skills/impl/references/accept-set-conformance-harness.md: the MR-KEYFAITH worked
  shape gets the same gating-upgrade (lockstep), an oracle-independence hardening
  (the round-trip expectation is computed from the INPUT PAIRS by last-write-wins,
  never re-invoking the builder -- closes the dogfood50 circularity residual), and
  private/internal-slot + FULL-reflected-set coverage (closes the dogfood49
  private-slot-shadow + dogfood50 sliced-corpus residuals).
- design-oracles/aasc-keyfaith/{probe.js,probe.py,README.md}: a committed (b)
  design-oracle (mirrors the committed (c) design-oracles/aasc-accept-set/) -- a
  reflection-derived key generator (names no key literal) paired with an
  independent round-trip-faithfulness oracle, proving the (b) class is caught by
  construction, language-agnostic, false-positive-free. Verified: node probe.js
  "buggy caught = true | correct clean = 0"; python3 probe.py "buggy caught = True
  | private-slot leak caught = True | correct clean = True". Proof artifact, not
  normative, not run by CI.
- tests/test-skill-contracts.sh: CT-AASC-10 (gating proven-upgrade, both twins,
  dual-lever: folded-gate phrase present + "ASSUMED, not proven" removed),
  CT-AASC-11 (oracle from input pairs), CT-AASC-12 (private/internal slots + FULL
  reflected set, doc + both twins), RED-first.

Tests: test-skill-contracts 850/850, path-consistency 144/144, twins byte-identical,
ShellCheck clean, CT-DECONTAM-1 zero product-instance hits (the gating upgrade +
corpus directive name no key literal; forced-text grep over both twins + the doc = 0).

Honest scope: the gating upgrade inherits the already-validated two-tier gate (no
new over-FAIL risk -- the wide-boundary => advisory arm is unchanged); the corpus
completeness + oracle-independence are robustness hardening. None of this eliminates
the AASC sweep's run-to-run variance (that needs the deferred runtime hook). A live
(b)-leaky-narrow + (b)-wide A/B dogfood is owed as follow-up confirmation of the
gating upgrade (validated-by-inheritance + constructive-proof; not a blocker).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…t-sweep conformance gate (metric-only) + 3-spawner kill switch

Closes the #1 AASC residual: run-to-run VARIANCE. The accept-set sweep and its
self-incrimination rule are ALREADY normative MUST in the ac-evaluator lens ("an
`## Accept-set sweep` line with `ran=n`, or with `ran=y astral=n`, is a
NON-CONFORMANT shallow sweep"), yet live dogfoods leaked them run-to-run because
the rule is honoured only by the model RECOGNISING it (dogfood49 stood the K-axis
sweep down on a subject dogfood48/50 had swept). A hook is the only lever
independent of model recognition.

Triaged adversarially (multi-agent): of 8 candidate items only ONE is a genuinely
additive lever -- a runtime hook that reads an already-emitted artifact and gates
deterministically. Prose-only items (stderr-twin, oracle-roundtrip tightening,
private-slot mandate) were rejected as recognition-gated theater per charter
section H; a spawn-prompt-rewriting "grep promotion" was rejected as infeasible
(no hookable event between trigger-compute and subagent-spawn -- the cron-create
wall); a cross-language negative-control proof was DEFERRED (no rustc/cargo/go on
this host -- faking it would violate the don't-claim-unrun rule).

- hooks/accept-set-verify.sh (new): PostToolUse(Write|Edit) gate over the
  persisted `## Accept-set sweep` section of an eval-round-{n}.md report. Reads
  the EMITTED 8-field line from disk and applies the lens's own rule with zero
  model recall: P1 stand-down (triggered=y ran=n, all axes), P2 shallow-astral
  (A/U axes), P3 sliced-corpus (A/U axes, < SW_AASC_CORPUS_FLOOR), P4
  gating-consistency (authoritative divergence not driven to FAIL, all axes).
  P2/P3 are scoped to the alphabet/unicode axes (a reflection-derived key corpus
  for the K/W axes is legitimately small/ASCII, so flooring them would
  false-trip); caveat=no-runnable-artifact exempts P1/P2/P3 (compiled-language
  fail-open). Ships SW_ACCEPT_SET_CONFORMANCE_MODE=metric-only (fail-OPEN, exit
  code ALWAYS 0; unknown collapses to metric-only); `on` emits a PostToolUse
  decision:block surfacing the violated predicate to the evaluator.
  Skeleton (IN_PROGRESS) / n/a / non-eval / jq-missing all silent exit 0.
- hooks/hooks.json: two top-level PostToolUse entries (Write + Edit) per the
  ordering rule.
- skills/brief/references/policy-template.md,
  skills/create-ticket/references/autopilot-policy-reference.md,
  skills/impl/references/ac-evaluator-orchestration.md: the per-brief
  `constraints.accept_set_conformance` kill switch documented symmetrically
  across all 3 spawner surfaces (the field was already consumed by /impl Step 15
  + honoured by the lens, but undocumented -- a half-wired L1/L2/L3 gap; mirrors
  constraints.refute_merge).
- CLAUDE.md: SW_ACCEPT_SET_CONFORMANCE_MODE + SW_AASC_CORPUS_FLOOR env knobs.
- tests/test-accept-set-verify.sh (new): 22 behaviour fixtures (every predicate,
  the no-runnable-artifact escape, K-axis no-false-trip, the dogfood50 clean
  shape no-false-positive, kill-switch tri-state, jq-absent fail-OPEN).
- tests/test-skill-contracts.sh: CT-AASC-13 (hook registered >=2) + CT-AASC-14
  (3-spawner policy-field parity), RED-first.

Verify-by-construction BEFORE wiring: a /tmp fixture matrix proved the predicate
gates correctly for ALL inputs (P1 reproduces the exact dogfood47/49 regression
-> flagged; the dogfood50 clean shape -> NO false trip; K small-corpus + the
no-runnable-artifact arm -> NOT over-blocked) -- and caught a real design bug (the
no-runnable-artifact escape must exempt P3, not only P2) before any wiring.

Tests: test-skill-contracts 852/852, test-path-consistency 144/144,
test-accept-set-verify 22/22, ShellCheck --severity=warning clean,
CT-DECONTAM-1 0 hits (14-file normative set; the hook + docs name no
product/key/script literal), ac-evaluator twins byte-identical (CT-EV-MODEL-1;
the GO set does not touch the twins).

Honest scope: the hook catches STRUCTURAL self-incrimination (a triggered
boundary not run / shallow / sliced), NOT field fabrication (a model could emit
`ran=y astral=y corpus-size=750` without executing -- the R1 bound). It ships
metric-only so the confirmation dogfood is its promotion gate and it cannot break
the harness.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ensitive header (dogfood51 confirmation findings)

The dogfood51 confirmation run (subject lossless-record, 3 tickets; ran the
committed fdbbf74 -- version confound ruled out: the generated autopilot-policy.yaml
carries the v8.5.0+ accept_set_conformance field) VALIDATED the AASC determinism
hook's core: the full chain fired end-to-end across all 3 tickets, the K/(b)
boundary self-elicited a reflection-derived corpus (dir(Record): 38/35/12 names
incl __proto__/constructor/_data) with NO dogfood49 stand-down regression, the
sweep EXECUTED for real (003: 440 inputs, 390 astral found, 0 divergences vs an
independent oracle -- the R1 fabrication bound intact), and the product did not
leak (95/95 + independent adversarial probes). But an offline re-run of the
committed hook against the 6 real persisted reports showed the P3 corpus floor
(256) would, in `on` mode, decision:block 2 of 4 sweep-bearing reports -- both
triggered=y ran=y astral=y divergences=0 CONFORMANT sweeps (002-r1 A=5, itself a
PASS report; 003-r2 A=105/U=105) -- a false trip on a wide-spec subject's
legitimately-thin sweep. Two format-drift cases also blunted the hook (a capital-S
`## Accept-set Sweep` header skipped a whole report; a descriptive corpus-size
dodged the numeric P3 guard).

Per charter section H (do not ship a heuristic blocker that false-trips), the fix
is in the HOOK (recognition-independent), not in lens prose:

- hooks/accept-set-verify.sh: DEMOTE P3 (corpus-size < floor) from BLOCKING to
  ADVISORY -- it now emits `[ACCEPT-SET-VERIFY] advisory: ...` (a note, never a
  block) in both modes. corpus-size is a weak depth proxy (a few astral probes
  can be deeper than hundreds of ASCII ones); astral (P2) is the real A/U depth
  gate. P1 (stand-down) / P2 (astral) / P4 (gating) remain the BLOCKING set.
  Plus: match the `## Accept-set sweep` header case-insensitively (a mis-cased
  header no longer skips the whole report -- it was blunting P1/P2/P4 too); and
  parse the leading integer of a descriptive corpus-size so an annotation cannot
  dodge the advisory.
- CLAUDE.md + autopilot-policy-reference.md: document P3 as advisory + the
  case-insensitive header + the leading-int parse.
- tests/test-accept-set-verify.sh: F4 now expects advisory (not block); plus Fcap
  (capital-S header + P1 -> block), Fthin (the 002-r1 thin-conformant PASS shape
  -> advisory, NO block), Fsuffix (descriptive corpus-size -> leading-int parsed
  -> advisory). 26/26.

Authoritative re-test: the updated hook against all 6 REAL dogfood51 reports in
`on` mode -> 0 blocks (3 advisory, 3 clean), exit 0 everywhere -- the promotion
gate (no false trip on a conformant report) is now CLEARED. A genuine P1/P2/P4
violation still blocks (Fcap: capital-S header + triggered=y ran=n -> block).

Tests: test-skill-contracts 852/852, test-path-consistency 144/144,
test-accept-set-verify 26/26, ShellCheck --severity=warning clean, CT-DECONTAM-1
0 hits, ac-evaluator twins byte-identical (CT-EV-MODEL-1; twins untouched).

Honest scope: this validates no-false-positive on real artifacts; the on-mode
BLOCK path is still proven only by construction + the offline re-run, never fired
live (every dogfood51 sweep self-reported divergences=0). Promote
SW_ACCEPT_SET_CONFORMANCE_MODE=on only after a deliberately-leaky subject
exercises the live BLOCK path. Generation-side depth variance (5 vs 750 keys on
the same boundary in one run) is SURFACED by the advisory, not fixed here -- the
hook is the backstop, not the primary lever.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… branch audit)

A holistic pre-dogfood audit of impl/eval-p0-batch (12 commits vs main, both axes
of the product/language/domain-agnostic x meet-or-beat philosophy, plus complete
resolution of every conversation/dogfood problem) returned fully-agnostic /
all-resolved / meets-or-beats / GO, and surfaced a small set of robustness +
doc-consistency residues in the determinism backstop. All are mechanism or
sibling-uniformity fixes (NOT recognition-gated prose); each closes a
silent-escape / contradiction class; none re-introduces the dogfood51 false-trip
class (every real dogfood51 report still 0 blocks in on-mode).

hooks/accept-set-verify.sh (header-drift + parse robustness; fail-OPEN intact):
- Gate 2b + the section awk now match the header at ANY hash depth (`#{1,6}`),
  not only `##` -- a mis-LEVELED header (`### Accept-set sweep`, live-observed in
  the dogfood51 003 eval-round-3) no longer lets a whole report silently skip the
  gate (same drift class as the dogfood51 capital-S header, on the depth axis).
- the section awk start-pattern is now fully case-insensitive via tolower(), so it
  accepts the SAME set as Gate 2b's `grep -i` (any case incl ALL-CAPS, not only a
  flexed first letter) -- the two header-matchers can no longer disagree (an
  all-caps header that passed Gate 2b would previously extract nothing -> silent
  blunt).
- field_of value class `[^ ]+` -> `[^[:space:]]+` so a TAB-separated sweep line
  still has its fields extracted (was silently un-parsed).
- line selector `boundary=*` -> `*boundary=*` so a reordered (boundary-not-first)
  but complete line is no longer skipped (field_of is order-independent).
- an off-grammar boundary label (not A/U/W/K; live `boundary=pair-shape`) now
  emits a stderr `[ACCEPT-SET-VERIFY] off-grammar boundary label=...` WARN -- a
  relabeled alphabet boundary would otherwise dodge the A/U astral gate silently.
  Deliberately a WARN, NOT a block (fail-toward-observability; never re-introduce
  the dogfood51 false-trip class). Exit code stays 0 (fail-OPEN invariant intact).

skills/impl/references/evidence-channels.md: the EC-taxonomy reference both
evaluators cite still carried the stale "MR-KEYFAITH is ASSUMED, not proven /
advisory-only" posture that 3999964 already upgraded in both twins + the harness
doc -- restated as the SAME two-tier oracle-authoritative FAIL gate, so a reader
there no longer downgrades a genuine narrow-keyed-boundary leak the twins FAIL.

tests/test-skill-contracts.sh: CT-AASC-10 now ALSO scans evidence-channels.md for
the absence of the stale posture -- the sibling-artifact uniformity rule (CLAUDE.md
## Modifications) is now MECHANIZED, closing the gap that let the contradiction ship.

tests/test-accept-set-verify.sh: + Fhash (mis-leveled `###` header + P1 -> block),
Ftab (tab-separated line + P1 -> block), Fcaps (all-caps header + P1 -> block),
RED-first regressions for the three closed header/parse escapes.

Audit verdict (HIGH confidence, 11-agent adversarial workflow): agnostic_verdict=
fully-agnostic (CT-DECONTAM-1=0; every trigger/rubric/MR keys off a property --
lexical strict/canonical/lossless/limit, shared_input_boundary,
keyed-structure-from-untrusted-input -- not a named product/lang/domain;
MR-ALPHABET selects by the Unicode decimal-digit property, MR-KEYFAITH derives the
key corpus by reflection, both name no script/key); problems_resolved=all-resolved
(cue-accretion, AASC generation gap, non-uniform execution, run-to-run variance,
(b) hand-picked corpus, dogfood51 P3/format-drift each cite a concrete artifact);
quality_verdict=meets-or-beats (the four baseline MR classes are property-driven +
EXECUTED + proven by the committed design-oracles; the fail-OPEN hook can never
REMOVE a catch). GO for the next dogfood.

Tests: test-skill-contracts 852/852, test-accept-set-verify 29/29
(+Fhash +Ftab +Fcaps), test-path-consistency 144/144, ShellCheck --severity=warning
clean, CT-DECONTAM-1 0 hits, ac-evaluator twins byte-identical (CT-EV-MODEL-1;
twins untouched), all 6 real dogfood51 ground-truth reports still 0 blocks /
0 nonzero-rc in on-mode (no false trip re-introduced).

Open residuals (honestly-bounded NON-BLOCKERS, unchanged): the on-mode BLOCK path
has never fired LIVE (ships metric-only + fail-OPEN); run-to-run variance is
mitigated not eliminated (the triggered-on= compute is still orchestrator-LLM-
mediated -- full determinism would need on-mode promotion + a pre-spawn trigger);
generation-side depth variance (uniform in KIND, not always exhaustive DEPTH); one
inherited pre-main domain-list label nit (out of branch scope).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…force by default)

Promote SW_ACCEPT_SET_CONFORMANCE_MODE default from metric-only to `on`, per the
repo promotion discipline (ship metric-only, promote after a dogfood confirms no
false trips) -- now satisfied with strong evidence:

- dogfood51 (6 reports) + dogfood52 (8 reports) = 14 real conformant eval-round
  reports, 0 false-trips under the committed hook in on-mode (re-verified here
  under the NEW unset default = 0 blocks over all 14).
- dogfood53 live de-risk: a fault-injected non-conformant report (triggered=y
  ran=n) Written under SW_ACCEPT_SET_CONFORMANCE_MODE=on produced a real live
  decision:block -- the AASC reason surfaced cleanly, the model handled it
  gracefully (no thrash/loop, Claude Code stayed alive) and was NOT pressured into
  fabricating a conformant line (it declined to flip ran=y/astral=y without
  actually running). decision:block is the same mechanism the other PostToolUse
  guards (pre-write-safety etc.) already use on subagent writes.

Change: the hook now ENFORCES by default -- a genuinely non-conformant persisted
`## Accept-set sweep` (P1 stand-down / P2 shallow-astral / P4 ungated authoritative
divergence) emits a PostToolUse decision:block surfacing the reason to the
evaluator to re-run the sweep. P3 thin-corpus stays ADVISORY (never blocks).
The default is `on`, so the env var is set ONLY to downgrade; metric-only / off
remain available, and a typo collapses to the safe observe (metric-only) mode
(never a surprise enforce, never a silent disable).

This is the INITIAL default of a NEW v8.5.0 feature (the AASC hook did not exist
in v8.4.2), shipped on-by-default with a kill switch -- additive, not a change to
any prior RELEASED behaviour.

- hooks/accept-set-verify.sh: default `:-metric-only` -> `:-on` (+ header doc).
- CLAUDE.md, skills/create-ticket/references/autopilot-policy-reference.md,
  skills/impl/references/ac-evaluator-orchestration.md: document on-by-default +
  the downgrade path.
- tests/test-accept-set-verify.sh: + 3 unset-default tests (no env -> P1 blocks,
  thin-corpus advises, clean passes); the unknown->metric-only test stays valid.

Tests: test-accept-set-verify 32/32, test-skill-contracts 852/852, ShellCheck
--severity=warning clean, ac-evaluator twins untouched; 14 real dogfood51+52
reports under the NEW unset default = 0 blocks (no false-trip in enforce).

Honest residual: the "real evaluator re-runs the sweep after a block" path is not
yet exercised in a live autopilot run (dogfood51/52 produced conformant sweeps ->
nothing to block; dogfood53 was a fault-injection where re-running was N/A). It is
bounded by the autopilot round-cap + the metric-only/off kill switch.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…fication + P0 safety hardening

See CHANGELOG.md [8.5.0]. plugin.json bumped 8.4.2 -> 8.5.0. Pre-flight: skill-contracts 852/852, path-consistency 144/144, accept-set-verify 32/32, full per-suite sweep green, ShellCheck clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@aimsise
aimsise merged commit 003d197 into main Jun 19, 2026
1 check passed
@aimsise
aimsise deleted the impl/eval-p0-batch branch June 19, 2026 16:41
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