Skip to content

rfc(0001): define fail-closed approval-tier compiler#4

Merged
BunsDev merged 31 commits into
mainfrom
rfc/0001-approval-tier-compiler
Jul 22, 2026
Merged

rfc(0001): define fail-closed approval-tier compiler#4
BunsDev merged 31 commits into
mainfrom
rfc/0001-approval-tier-compiler

Conversation

@BunsDev

@BunsDev BunsDev commented Jul 20, 2026

Copy link
Copy Markdown
Member

Summary

Defines the fail-closed RFC-0001 approval-tier compiler contract required by
OpenCoven/coven-threads Phase 5.

This is a separate stacked PR on #3. Merge order:

  1. Merge rfc(0001): v0.3.0 closure rationale + memory provenance (closes #3, #4 refs coven-threads) #3.
  2. Retarget this PR to main.
  3. Obtain independently attributable Nova and Val approval.

Contract

  • Ward TOML tier declarations compile deterministically to typed approval paths.
  • Channel remains an independent load/enforcement axis.
  • Region labels require registered deterministic extractors.
  • Unknown, duplicate, ambiguous, mistyped, or unbound authority declarations
    fail Ward loading closed.
  • Veto windows are optional and delayed-apply only; expiry triggers evidence
    replay and Gate 4 before any write.
  • Protected-target proposals reject at Gates 1, 2, and 4.
  • Principal-authorized protected updates use a separate audited authority path.

Implementation

  • Uses @iarna/toml and Ajv for standards-compliant TOML parsing and JSON Schema
    validation.
  • Tightens ward.schema.json and preserves semantic validation for exact gates,
    block registration, cross-tier uniqueness, option types, and invariants.
  • Advances the Draft RFC to v0.4.0 with migration and security rationale.
  • Preserves immutable RFC v0.2.0 and v0.3.0 snapshots.
  • Distinguishes claimant-directory validation, fixture-suite verification, and
    full runtime conformance.

Verification

  • npm test: 6/6 positive fixtures pass; 36/36 negative fixtures fail correctly.
  • Minimal and Sage examples pass claimant-directory validation.
  • All JSON Schemas parse.
  • npm audit --omit=dev: 0 vulnerabilities.
  • Fresh whole-branch authority review: no significant findings.

Tracks OpenCoven/coven-threads bead threads-uqx.12.

This PR must remain draft. Agents, authorship, and commit trailers cannot satisfy
Nova or Val review gates.

Sage and others added 29 commits July 19, 2026 17:13
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…dments' into rfc/0001-approval-tier-compiler
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@BunsDev
BunsDev changed the base branch from rfc/0001-closure-provenance-amendments to main July 22, 2026 01:55
Resolves 9 conflicted files. Resolution strategy:
- RFC-0001: main's side for the landed v0.3.0 fix-set normative text
  (§1.1 terms, §3.4 provenance/authorization, §4.1 genesis closure,
  §5.6 anchor-evidence MUSTs, §9 runtime-closure gap, §11 v0.3.0
  changelog); branch side for v0.4.0 identity, §6.1 two-command
  conformance claim, and §6.3 draft-versioning rule; §1.1 keeps both
  term sets.
- validators/validate.js: branch (v0.4.0 TOML+Ajv rewrite supersedes
  main's string bumps).
- CHANGELOG.md, RFC §11: union — v0.4.0 entries atop enriched v0.3.0
  entries; added disclosure of the branch's own §1.1/§6.1/§6.3
  redefinitions (NEW-2 pattern from PR #3 review).
- rfcs/RFC-0001-v0.3.md snapshot refreshed to the merged v0.3.0 text.
- Fixture 10-protected-missing-ward: main's comment wording.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@BunsDev

BunsDev commented Jul 22, 2026

Copy link
Copy Markdown
Member Author

Rebased onto main v0.3.0 via merge commit

Merged main (710036e, the squash-landed PR #3 + tag v0.3.0) into this branch as d657250. Merge chosen over rebase: PR #3 was squash-merged, so replaying 28 stacked commits would have rewritten history against a moving base; one merge commit resolves the divergence with no force-push.

Conflict resolution (9 files):

  • rfcs/RFC-0001-familiar-contract.md (15 hunks): main side for the landed v0.3.0 fix-set normative text (§1.1 new terms, §3.4 provenance≠authorization + loop-origin gating, §4.1 genesis closure note, §5.6 anchor-evidence MUSTs, §9 runtime-closure gap, §11 enriched v0.3.0 entries); branch side for v0.4.0 identity, §5.3.1, the §6.1 two-command conformance claim, and the §6.3 draft-versioning rule. §1.1 keeps both term sets.
  • validators/validate.js: branch side (TOML+Ajv rewrite supersedes main's version-string bumps).
  • CHANGELOG.md / RFC §11: union — v0.4.0 entries atop the enriched v0.3.0 entries.
  • rfcs/RFC-0001-v0.3.md: snapshot refreshed to the merged v0.3.0 text (was cut from the pre-fix draft).
  • Remaining files (README, SPEC, faq, ward-deep-dive, rfcs/README, fixture 10): version-pointer and wording unions.

Proactive disclosure fix (NEW-2 pattern from PR #3 review): the v0.4.0 changelog sections (RFC §11 + root CHANGELOG) did not disclose this branch's own §1.1/§6.1/§6.3 redefinitions; added those entries.

Coherence check: §5.3.1 routes protected-target updates to the separate audited Ward-update path (consistent with merged §4.1/§5.4), and veto-window expiry re-runs Gate 4, which now re-verifies manifest closure. No contradictions found.

Verification at d657250:

  • npm test: positive 6/6, negative 36/36, unexpected 0 — READY
  • bash tests/conformance/run-conformance.sh: same — READY
  • node validators/validate.js examples/minimal and examples/sage: PASS
  • No conflict markers; git diff --check clean

Next: fresh-context review of the merged head, then Val's call on ready-for-review + merge.

Fresh-context review of d657250: sign-off recommended, zero blocking.
- A-2: define SurfaceRegionId and deterministic extractor in §1.1;
  cross-reference from §5.3.1.
- A-3: add §9 open-gap bullet for runtime-only approval-path MUSTs
  (extractor binding, veto delayed-apply + Gate-4 re-run, fail-closed
  loading).
- A-4: route principal-authorized protected updates to 'the separate
  audited principal-authorized paths (§4.1, §5.6)' — not the Ward-update
  path alone, which would mislabel principal_authorized_write events.
- N-1: drop dangling 'conformant familiar' term use in §3 lead.
- N-2: ward.schema.json description now states v0.4 subset and the
  deliberate open-root/meta vs closed-tier-tables split.
- N-3: veto-window permission rephrased with explicit MUST NOT; §5.3.1
  paragraphs unwrapped to house single-line style; undefined 'channel'
  phrasing replaced.
- N-4: CHANGELOG discloses example/fixture ward.toml migrations.
- N-6: deep-dive pinned-to-v0.3.0 note at top; faq link labels the pin.
- Changelogs updated to disclose the new §1.1 terms and §9 bullet.

A-1 (§6.3 self-ratification) is deliberately NOT self-resolved: it is
flagged for explicit human ratification in the merge description.
N-5 (shipping planning docs) and N-7 (coverage display) left for Val.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@BunsDev

BunsDev commented Jul 22, 2026

Copy link
Copy Markdown
Member Author

Fresh-context review — v0.4.0 change set @ d657250, fixes verified @ 244a82d

Fresh-context reviewer agent (reviewer ≠ fix author) informing Nova's lane — this informs, does not simulate, sign-off. Full first review of the stacked v0.4.0 set post-rebase.

VERDICT: SIGN-OFF RECOMMENDED — zero blocking findings

Merge-resolution integrity (byte-level vs main@710036e): CONFIRMED INTACT. Every v0.3.0 fix-set normative sentence survives — §3.4 and §4.1 byte-identical; Gate-1/Gate-4 lines md5-identical; §5.6 anchor-evidence + referent-resolution paragraphs md5-identical; §9 bullets verbatim; §11 v0.3.0 entries complete; rfcs/RFC-0001-v0.3.md snapshot = main's RFC exactly (0-line diff). Only v0.3.0 text removed: §6.1–§6.3 (superseded by disclosed v0.4.0 rewrite) and the dangling "Conformant familiar" term.

§5.3.1 coherence vs v0.3.0 MUSTs: CLEAN. Typed paths contradict nothing; veto delayed-apply re-runs Gate 4 against the current committed Ward; "provisional apply + rollback DOES NOT conform" kills the rollback loophole; protected-target routing preserves principal-lane semantics. Downstream coven-threads Phase-5 doctrine (predicate-authoritative, staged-write-only agent lane) confirmed consistent.

Validator enforcement: verified. All 26 new negative fixtures (11–36) reason-checked individually — each fails in its claimed class. Adversarial probes: __proto__ TOML key rejected without pollution; duplicate keys/tables rejected at parse; Ajv instance strictness verified. Fail-closed posture holds.

Independent runs at both heads: npm testrun-conformance.sh → positive 6/6, negative 36/36, unexpected 0, READY; examples/minimal + examples/sage PASS.

Findings and disposition

ID Finding Disposition
A-1 §6.3 versioning rule redefined in the same PR that relies on it — a bootstrap no validator can bless. Fully disclosed + self-compliant (Migration + Security-rationale present) ⚠️ Held for Val: explicitly ratify the §6.3 change in the merge description (A-7 pattern recurring; consider freezing §6.3 before v0.5.0)
A-2 SurfaceRegionId / deterministic extractor undefined in §1.1 ✅ Fixed in 244a82d, re-verified
A-3 §9 missing gap bullet for §5.3.1's runtime-only MUSTs ✅ Fixed in 244a82d, re-verified
A-4 "Ward-update path" misnamed the principal lane (would mislabel principal_authorized_write events) ✅ Fixed in 244a82d, re-verified
N-1..N-4, N-6 Dangling term; stale schema description; keyword/wrap/phrasing hygiene; undisclosed fixture migrations; deep-dive pinning ✅ Fixed in 244a82d, re-verified
N-5 docs/superpowers/plans+specs/…design.md ships internal planning docs Left for Val: confirm intended (transparency-consistent) or drop
N-7 Validator coverage display can print all-✓ on a schema-layer FAIL (exit code correct; cosmetic) Left as fast-follow candidate

Delta re-verification @ 244a82d: all A-2..A-4 + nit fixes resolved as claimed; no v0.3.0 fix-set text touched (pure insertions); no normative drift in rephrased sentences; changelog claims match the diff exactly; A-1 correctly untouched.

Human gates (not simulated)

  1. Val: ratify A-1 (§6.3 draft-versioning rule) explicitly in the merge description.
  2. Val: N-5 keep-or-drop call.
  3. Val: mark ready-for-review + merge; tag v0.4.0 at merge per rfcs/README.md convention.

@BunsDev
BunsDev marked this pull request as ready for review July 22, 2026 04:05
Copilot AI review requested due to automatic review settings July 22, 2026 04:05
@BunsDev
BunsDev merged commit f70c796 into main Jul 22, 2026
1 check passed
@BunsDev
BunsDev deleted the rfc/0001-approval-tier-compiler branch July 22, 2026 04:05

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Defines RFC-0001 v0.4.0’s fail-closed approval-tier compilation expectations by expanding the reference conformance fixtures (positive + extensive negative coverage) and updating validator-facing documentation/tooling to reflect the v0.4.0 structural-conformance workflow.

Changes:

  • Introduces an npm-managed workflow (package.json, deps) for running the bundled conformance suite via npm test.
  • Updates docs to v0.4.0 terminology (“claimant directory”), requirements, and conformance-claim procedure.
  • Expands conformance fixtures to cover approval-tier parsing/validation/semantics (malformed TOML, schema-invalid fields, unknown/duplicate/ambiguous tier declarations, invalid veto declarations, etc.) and updates example/positive wards to match new registry/tier binding requirements.

Reviewed changes

Copilot reviewed 163 out of 165 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
validators/README.md Updates validator docs for v0.4.0 claimant-directory + schema-first TOML validation workflow
tests/conformance/README.md Updates conformance-suite instructions to npm-based invocation
tests/conformance/positive/06-commented-tier-syntax/ward.toml Adds positive fixture: commented/whitespace/quoted-key tier syntax
tests/conformance/positive/06-commented-tier-syntax/SOUL.md Adds positive fixture supporting file
tests/conformance/positive/06-commented-tier-syntax/MEMORY.md Adds positive fixture supporting file
tests/conformance/positive/06-commented-tier-syntax/IDENTITY.md Adds positive fixture supporting file
tests/conformance/positive/06-commented-tier-syntax/CASE.md Adds positive fixture rationale
tests/conformance/positive/05-tier-rich-ward/ward.toml Updates positive ward registry blocks to match new tier bindings
tests/conformance/positive/04-with-user-md/ward.toml Updates positive ward registry blocks to match new tier bindings
tests/conformance/positive/03-multi-role/ward.toml Updates positive ward registry blocks to match new tier bindings
tests/conformance/positive/02-full-compliant/ward.toml Updates positive ward registry blocks to match new tier bindings
tests/conformance/positive/01-minimal-compliant/ward.toml Updates minimal positive ward registry blocks/tier bindings
tests/conformance/negative/36-schema-invalid-meta/ward.toml Adds negative fixture 36: schema-invalid meta.version type
tests/conformance/negative/36-schema-invalid-meta/SOUL.md Negative fixture 36 supporting file
tests/conformance/negative/36-schema-invalid-meta/MEMORY.md Negative fixture 36 supporting file
tests/conformance/negative/36-schema-invalid-meta/IDENTITY.md Negative fixture 36 supporting file
tests/conformance/negative/36-schema-invalid-meta/CASE.md Negative fixture 36 rationale
tests/conformance/negative/35-malformed-ward-toml/ward.toml Adds negative fixture 35: malformed TOML syntax
tests/conformance/negative/35-malformed-ward-toml/SOUL.md Negative fixture 35 supporting file
tests/conformance/negative/35-malformed-ward-toml/MEMORY.md Negative fixture 35 supporting file
tests/conformance/negative/35-malformed-ward-toml/IDENTITY.md Negative fixture 35 supporting file
tests/conformance/negative/35-malformed-ward-toml/CASE.md Negative fixture 35 rationale
tests/conformance/negative/34-non-string-invariant/ward.toml Adds negative fixture 34: non-string invariant entry
tests/conformance/negative/34-non-string-invariant/SOUL.md Negative fixture 34 supporting file
tests/conformance/negative/34-non-string-invariant/MEMORY.md Negative fixture 34 supporting file
tests/conformance/negative/34-non-string-invariant/IDENTITY.md Negative fixture 34 supporting file
tests/conformance/negative/34-non-string-invariant/CASE.md Negative fixture 34 rationale
tests/conformance/negative/33-cross-tier-block/ward.toml Adds negative fixture 33: block assigned across tiers (ambiguous)
tests/conformance/negative/33-cross-tier-block/SOUL.md Negative fixture 33 supporting file
tests/conformance/negative/33-cross-tier-block/MEMORY.md Negative fixture 33 supporting file
tests/conformance/negative/33-cross-tier-block/IDENTITY.md Negative fixture 33 supporting file
tests/conformance/negative/33-cross-tier-block/CASE.md Negative fixture 33 rationale
tests/conformance/negative/32-nested-tier-table/ward.toml Adds negative fixture 32: nested tier table disallowed
tests/conformance/negative/32-nested-tier-table/SOUL.md Negative fixture 32 supporting file
tests/conformance/negative/32-nested-tier-table/MEMORY.md Negative fixture 32 supporting file
tests/conformance/negative/32-nested-tier-table/IDENTITY.md Negative fixture 32 supporting file
tests/conformance/negative/32-nested-tier-table/CASE.md Negative fixture 32 rationale
tests/conformance/negative/31-dotted-tier-field/ward.toml Adds negative fixture 31: dotted assignment under tier
tests/conformance/negative/31-dotted-tier-field/SOUL.md Negative fixture 31 supporting file
tests/conformance/negative/31-dotted-tier-field/MEMORY.md Negative fixture 31 supporting file
tests/conformance/negative/31-dotted-tier-field/IDENTITY.md Negative fixture 31 supporting file
tests/conformance/negative/31-dotted-tier-field/CASE.md Negative fixture 31 rationale
tests/conformance/negative/30-date-tier-block/ward.toml Adds negative fixture 30: non-string (date) SurfaceRegionId values
tests/conformance/negative/30-date-tier-block/SOUL.md Negative fixture 30 supporting file
tests/conformance/negative/30-date-tier-block/MEMORY.md Negative fixture 30 supporting file
tests/conformance/negative/30-date-tier-block/IDENTITY.md Negative fixture 30 supporting file
tests/conformance/negative/30-date-tier-block/CASE.md Negative fixture 30 rationale
tests/conformance/negative/29-float-tier-block/ward.toml Adds negative fixture 29: non-string (float) SurfaceRegionId values
tests/conformance/negative/29-float-tier-block/SOUL.md Negative fixture 29 supporting file
tests/conformance/negative/29-float-tier-block/MEMORY.md Negative fixture 29 supporting file
tests/conformance/negative/29-float-tier-block/IDENTITY.md Negative fixture 29 supporting file
tests/conformance/negative/29-float-tier-block/CASE.md Negative fixture 29 rationale
tests/conformance/negative/28-duplicate-harness-block/ward.toml Adds negative fixture 28: duplicate harness block registration
tests/conformance/negative/28-duplicate-harness-block/SOUL.md Negative fixture 28 supporting file
tests/conformance/negative/28-duplicate-harness-block/MEMORY.md Negative fixture 28 supporting file
tests/conformance/negative/28-duplicate-harness-block/IDENTITY.md Negative fixture 28 supporting file
tests/conformance/negative/28-duplicate-harness-block/CASE.md Negative fixture 28 rationale
tests/conformance/negative/27-nonboolean-audit-log/ward.toml Adds negative fixture 27: non-boolean audit_log
tests/conformance/negative/27-nonboolean-audit-log/SOUL.md Negative fixture 27 supporting file
tests/conformance/negative/27-nonboolean-audit-log/MEMORY.md Negative fixture 27 supporting file
tests/conformance/negative/27-nonboolean-audit-log/IDENTITY.md Negative fixture 27 supporting file
tests/conformance/negative/27-nonboolean-audit-log/CASE.md Negative fixture 27 rationale
tests/conformance/negative/26-nonboolean-cave-card/ward.toml Adds negative fixture 26: non-boolean cave_board_card
tests/conformance/negative/26-nonboolean-cave-card/SOUL.md Negative fixture 26 supporting file
tests/conformance/negative/26-nonboolean-cave-card/MEMORY.md Negative fixture 26 supporting file
tests/conformance/negative/26-nonboolean-cave-card/IDENTITY.md Negative fixture 26 supporting file
tests/conformance/negative/26-nonboolean-cave-card/CASE.md Negative fixture 26 rationale
tests/conformance/negative/25-empty-tier-block/ward.toml Adds negative fixture 25: empty-string block identifiers
tests/conformance/negative/25-empty-tier-block/SOUL.md Negative fixture 25 supporting file
tests/conformance/negative/25-empty-tier-block/MEMORY.md Negative fixture 25 supporting file
tests/conformance/negative/25-empty-tier-block/IDENTITY.md Negative fixture 25 supporting file
tests/conformance/negative/25-empty-tier-block/CASE.md Negative fixture 25 rationale
tests/conformance/negative/24-empty-tier-field/ward.toml Adds negative fixture 24: empty field name under tier
tests/conformance/negative/24-empty-tier-field/SOUL.md Negative fixture 24 supporting file
tests/conformance/negative/24-empty-tier-field/MEMORY.md Negative fixture 24 supporting file
tests/conformance/negative/24-empty-tier-field/IDENTITY.md Negative fixture 24 supporting file
tests/conformance/negative/24-empty-tier-field/CASE.md Negative fixture 24 rationale
tests/conformance/negative/23-empty-tier-key/ward.toml Adds negative fixture 23: empty tier key/table name
tests/conformance/negative/23-empty-tier-key/SOUL.md Negative fixture 23 supporting file
tests/conformance/negative/23-empty-tier-key/MEMORY.md Negative fixture 23 supporting file
tests/conformance/negative/23-empty-tier-key/IDENTITY.md Negative fixture 23 supporting file
tests/conformance/negative/23-empty-tier-key/CASE.md Negative fixture 23 rationale
tests/conformance/negative/22-non-string-tier-block/ward.toml Adds negative fixture 22: non-string block identifier (boolean)
tests/conformance/negative/22-non-string-tier-block/SOUL.md Negative fixture 22 supporting file
tests/conformance/negative/22-non-string-tier-block/MEMORY.md Negative fixture 22 supporting file
tests/conformance/negative/22-non-string-tier-block/IDENTITY.md Negative fixture 22 supporting file
tests/conformance/negative/22-non-string-tier-block/CASE.md Negative fixture 22 rationale
tests/conformance/negative/21-prototype-tier/ward.toml Adds negative fixture 21: proto tier key hardening
tests/conformance/negative/21-prototype-tier/SOUL.md Negative fixture 21 supporting file
tests/conformance/negative/21-prototype-tier/MEMORY.md Negative fixture 21 supporting file
tests/conformance/negative/21-prototype-tier/IDENTITY.md Negative fixture 21 supporting file
tests/conformance/negative/21-prototype-tier/CASE.md Negative fixture 21 rationale
tests/conformance/negative/20-quoted-veto-field/ward.toml Adds negative fixture 20: quoted veto field on disallowed tier
tests/conformance/negative/20-quoted-veto-field/SOUL.md Negative fixture 20 supporting file
tests/conformance/negative/20-quoted-veto-field/MEMORY.md Negative fixture 20 supporting file
tests/conformance/negative/20-quoted-veto-field/IDENTITY.md Negative fixture 20 supporting file
tests/conformance/negative/20-quoted-veto-field/CASE.md Negative fixture 20 rationale
tests/conformance/negative/19-duplicate-tier-table/ward.toml Adds negative fixture 19: duplicate tier table (spaced/quoted equivalent)
tests/conformance/negative/19-duplicate-tier-table/SOUL.md Negative fixture 19 supporting file
tests/conformance/negative/19-duplicate-tier-table/MEMORY.md Negative fixture 19 supporting file
tests/conformance/negative/19-duplicate-tier-table/IDENTITY.md Negative fixture 19 supporting file
tests/conformance/negative/19-duplicate-tier-table/CASE.md Negative fixture 19 rationale
tests/conformance/negative/18-duplicate-tier-field/ward.toml Adds negative fixture 18: duplicate tier field (quoted + bare)
tests/conformance/negative/18-duplicate-tier-field/SOUL.md Negative fixture 18 supporting file
tests/conformance/negative/18-duplicate-tier-field/MEMORY.md Negative fixture 18 supporting file
tests/conformance/negative/18-duplicate-tier-field/IDENTITY.md Negative fixture 18 supporting file
tests/conformance/negative/18-duplicate-tier-field/CASE.md Negative fixture 18 rationale
tests/conformance/negative/17-quoted-veto-duration/ward.toml Adds negative fixture 17: veto duration wrong type (string)
tests/conformance/negative/17-quoted-veto-duration/SOUL.md Negative fixture 17 supporting file
tests/conformance/negative/17-quoted-veto-duration/MEMORY.md Negative fixture 17 supporting file
tests/conformance/negative/17-quoted-veto-duration/IDENTITY.md Negative fixture 17 supporting file
tests/conformance/negative/17-quoted-veto-duration/CASE.md Negative fixture 17 rationale
tests/conformance/negative/16-invalid-veto-duration/ward.toml Adds negative fixture 16: veto duration invalid value (0)
tests/conformance/negative/16-invalid-veto-duration/SOUL.md Negative fixture 16 supporting file
tests/conformance/negative/16-invalid-veto-duration/MEMORY.md Negative fixture 16 supporting file
tests/conformance/negative/16-invalid-veto-duration/IDENTITY.md Negative fixture 16 supporting file
tests/conformance/negative/16-invalid-veto-duration/CASE.md Negative fixture 16 rationale
tests/conformance/negative/15-duplicate-tier-block/ward.toml Adds negative fixture 15: duplicate block entry (quoted blocks key)
tests/conformance/negative/15-duplicate-tier-block/SOUL.md Negative fixture 15 supporting file
tests/conformance/negative/15-duplicate-tier-block/MEMORY.md Negative fixture 15 supporting file
tests/conformance/negative/15-duplicate-tier-block/IDENTITY.md Negative fixture 15 supporting file
tests/conformance/negative/15-duplicate-tier-block/CASE.md Negative fixture 15 rationale
tests/conformance/negative/14-unknown-tier-block/ward.toml Adds negative fixture 14: unknown block referenced
tests/conformance/negative/14-unknown-tier-block/SOUL.md Negative fixture 14 supporting file
tests/conformance/negative/14-unknown-tier-block/MEMORY.md Negative fixture 14 supporting file
tests/conformance/negative/14-unknown-tier-block/IDENTITY.md Negative fixture 14 supporting file
tests/conformance/negative/14-unknown-tier-block/CASE.md Negative fixture 14 rationale
tests/conformance/negative/13-veto-on-human-tier/ward.toml Adds negative fixture 13: veto window on disallowed (human) tier
tests/conformance/negative/13-veto-on-human-tier/SOUL.md Negative fixture 13 supporting file
tests/conformance/negative/13-veto-on-human-tier/MEMORY.md Negative fixture 13 supporting file
tests/conformance/negative/13-veto-on-human-tier/IDENTITY.md Negative fixture 13 supporting file
tests/conformance/negative/13-veto-on-human-tier/CASE.md Negative fixture 13 rationale
tests/conformance/negative/12-tier-gate-mismatch/ward.toml Adds negative fixture 12: gate mismatch for tier
tests/conformance/negative/12-tier-gate-mismatch/SOUL.md Negative fixture 12 supporting file
tests/conformance/negative/12-tier-gate-mismatch/MEMORY.md Negative fixture 12 supporting file
tests/conformance/negative/12-tier-gate-mismatch/IDENTITY.md Negative fixture 12 supporting file
tests/conformance/negative/12-tier-gate-mismatch/CASE.md Negative fixture 12 rationale
tests/conformance/negative/11-unknown-tier-field/ward.toml Adds negative fixture 11: unknown field under tier
tests/conformance/negative/11-unknown-tier-field/SOUL.md Negative fixture 11 supporting file
tests/conformance/negative/11-unknown-tier-field/MEMORY.md Negative fixture 11 supporting file
tests/conformance/negative/11-unknown-tier-field/IDENTITY.md Negative fixture 11 supporting file
tests/conformance/negative/11-unknown-tier-field/CASE.md Negative fixture 11 rationale
SPEC.md Updates historical spec pointer to current RFC version (v0.4.0)
rfcs/README.md Updates RFC index + adds immutable snapshot references + draft versioning guidance
PRIMER.md Updates onboarding primer for v0.4.0 and new conformance-claim workflow
package.json Adds npm scripts + dependencies (@iarna/toml, ajv) for validator/conformance
examples/sage/ward.toml Updates example Ward registry blocks to match v0.4.0 tier binding
examples/minimal/ward.toml Updates minimal example Ward registry blocks to match v0.4.0 tier binding
docs/ward-primer.md Updates Ward primer to reflect delayed-apply veto semantics and fail-closed tier compilation
docs/comparison.md Updates comparison doc to include required MEMORY.md in examples
CHANGELOG.md Adds v0.4.0 changelog entry summarizing compiler + fixtures + migration notes
AGENTS.md Updates agent workflow snippet to reflect npm install/test validation steps
.gitignore Ignores node_modules for npm-managed dependencies

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread validators/README.md
- Whether the familiar's behavior matches its declared purpose (behavioral compliance requires runtime evaluation)

This validator checks **structural compliance** — the presence and format of required declarations. Full compliance requires both structural compliance and behavioral compliance.
This validator checks whether one claimant directory satisfies the required file-level declarations for v0.4.0. That claimant-directory run is necessary, but not sufficient, for a structural-conformance claim: you must also run `bash tests/conformance/run-conformance.sh` so the bundled reference validator is shown to accept the positive fixtures and reject the negative fixtures for the same contract version. Full conformance additionally requires runtime Ward enforcement beyond this file-level check, and missing `MEMORY.md` is a violation, not a warning.
Comment thread validators/README.md

```bash
node validate.js <path-to-familiar-directory>
node validators/validate.js <path-to-familiar-directory>
Comment thread PRIMER.md
- An enforcement mechanism for the Ward (your own or based on the Ward spec)

The validator in this repo checks schema compliance against the three required files. It does not require any specific runtime.
The validator in this repo checks one claimant directory against the four required files. For a structural-conformance claim, pair that claimant-directory run with `bash tests/conformance/run-conformance.sh` from the same repository version. The validator checks your directory; the bundled conformance suite verifies that the reference validator accepts the positive fixtures and rejects the negative fixtures.
Comment thread PRIMER.md
- [`examples/minimal/`](examples/minimal/) — the minimal structurally conformant familiar directory (Lumen)
- [`examples/sage/`](examples/sage/) — a richer structurally conformant familiar directory (Sage)
- `node validators/validate.js ./your-directory` — validate your claimant directory
- `bash tests/conformance/run-conformance.sh` — verify the bundled reference validator + fixtures for the same contract version
@@ -0,0 +1,3 @@
# 34 Non String Invariant
Comment on lines 7 to +9
```bash
bash tests/conformance/run-conformance.sh
npm install
npm test
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.

2 participants