rfc(0001): define fail-closed approval-tier compiler#4
Conversation
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>
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>
Rebased onto main v0.3.0 via merge commitMerged Conflict resolution (9 files):
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
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>
Fresh-context review — v0.4.0 change set @
|
| 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) | |
| 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)
- Val: ratify A-1 (§6.3 draft-versioning rule) explicitly in the merge description.
- Val: N-5 keep-or-drop call.
- Val: mark ready-for-review + merge; tag
v0.4.0at merge perrfcs/README.mdconvention.
There was a problem hiding this comment.
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 vianpm 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.
| - 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. |
|
|
||
| ```bash | ||
| node validate.js <path-to-familiar-directory> | ||
| node validators/validate.js <path-to-familiar-directory> |
| - 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. |
| - [`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 | |||
| ```bash | ||
| bash tests/conformance/run-conformance.sh | ||
| npm install | ||
| npm test |
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:
main.Contract
Channelremains an independent load/enforcement axis.fail Ward loading closed.
replay and Gate 4 before any write.
Implementation
@iarna/tomland Ajv for standards-compliant TOML parsing and JSON Schemavalidation.
ward.schema.jsonand preserves semantic validation for exact gates,block registration, cross-tier uniqueness, option types, and invariants.
full runtime conformance.
Verification
npm test: 6/6 positive fixtures pass; 36/36 negative fixtures fail correctly.npm audit --omit=dev: 0 vulnerabilities.Tracks
OpenCoven/coven-threadsbeadthreads-uqx.12.This PR must remain draft. Agents, authorship, and commit trailers cannot satisfy
Nova or Val review gates.