Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions .github/workflows/dyadt-verify.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# SPDX-License-Identifier: MPL-2.0
# dyadt-verify — DYADT dogfood. Verify this repo's CLAIMS.a2ml against primary
# evidence, and run the DYADT conformance vector suite. If a claim this change
# makes is false, the verifier REFUTES it and this job fails loudly.
name: DYADT Verify

on:
push:
branches: [ main, master ]
pull_request:
branches: [ main, master ]
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
verify-claims:
name: Verify CLAIMS.a2ml + conformance
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout repository
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0 # need origin/main as the DYADT diff base

- name: DYADT conformance vectors
run: |
bash did-you-actually-do-that/spec/conformance/run-conformance.sh

- name: Verify this change's own claims (dogfood)
env:
DYADT_BASE: origin/${{ github.base_ref || 'main' }}
run: |
if [ -f CLAIMS.a2ml ]; then
bash scripts/verify-claims.sh CLAIMS.a2ml
else
echo "No CLAIMS.a2ml at root — nothing to verify."
fi
11 changes: 10 additions & 1 deletion .machine_readable/REGISTRY.a2ml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
version = "1.0.0"
generator = "scripts/build-registry.sh"
hash_algorithm = "sha256(git ls-files -s <home>) # local; external: recorded pin"
entry_count = 31
entry_count = 32

[registry.streams]
foundation = "A2ML format family + K9 + contractiles (Stream 1)"
Expand Down Expand Up @@ -228,6 +228,15 @@ canonical_doc = "session-management-standards/README.adoc"
source_hash = "sha256:4b1a97d2ef91578b2c262f1af5b93577cb36d53d234c330947538f4eafc01a6c"
route = "continuity / verify / handover protocols"

[[spec]]
id = "did-you-actually-do-that"
name = "DYADT — Did-You-Actually-Do-That"
stream = "governance"
home = "did-you-actually-do-that/"
canonical_doc = "did-you-actually-do-that/README.adoc"
source_hash = "sha256:445359ddcc92b56dfc8e8a3bdc16062439f1236b5fd0f42099113e7afa86d2e0"
route = "post-action agent-claim verification (Tier 4 accountability)"

[[spec]]
id = "ensaid-config"
name = "ENSAID Config"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# SPDX-License-Identifier: CC-BY-SA-4.0
# did-you-actually-do-that.scorecard.a2ml
# Hand-authored source. Regenerate the dashboard with: just scorecards
# Schema: .machine_readable/scorecards/scorecard.schema.json

[scorecard]
spec_id = "did-you-actually-do-that"
version = "1.0.0"
assessed_date = "2026-07-03"
assessor = "estate-audit"

[[must]]
id = "M1"
text = "DYADT MUST define a typed, machine-checkable claim format."
system = "did-you-actually-do-that/spec/CLAIM-FORMAT.adoc (normative claim classes + required fields)"
status = "pass"
evidence = "spec/CLAIM-FORMAT.adoc present; 7 claim classes and required-field table defined; example CLAIMS.a2ml shipped."
effects = "Without a fixed claim format the parallel production verifier has no contract to build against."

[[must]]
id = "M2"
text = "DYADT MUST ship a verifier that re-derives outcomes from primary evidence and can REFUTE a false claim."
system = "scripts/verify-claims.sh, exercised by scripts/tests/wave4-dyadt-test.sh"
status = "pass"
evidence = "wave4-dyadt-test.sh (7/7) asserts a false command is REFUTED despite an honest-sounding statement; verifier never reads back the agent's evidence field."
effects = "A verifier that trusted the statement would be theatre — the whole point is mechanical refutation."

[[must]]
id = "M3"
text = "Verdicts MUST be exactly confirmed|refuted|unverifiable, and unverifiable MUST be loud (non-passing)."
system = "scripts/verify-claims.sh (exit 1 on any refuted or, by default, unverifiable)"
status = "pass"
evidence = "wave4-dyadt-test.sh asserts refuted -> non-zero exit; all-confirmed -> exit 0; VERIFICATION-PROTOCOL.adoc fixes the three-verdict contract."
effects = "Silent 'assumed pass' would reintroduce the false-green disease DYADT exists to cure."

[[must]]
id = "M4"
text = "A conformance vector suite MUST exist so any verifier can be validated against shared ground truth."
system = "did-you-actually-do-that/spec/conformance/run-conformance.sh (+ 6 vector pairs)"
status = "pass"
evidence = "run-conformance.sh passes 6/6 vectors covering confirmed/refuted/unverifiable/incompatible-verifier/manual-only."
effects = "Without shared vectors the reference and production verifiers could silently diverge."

[[must]]
id = "M5"
text = "The change introducing DYADT MUST dogfood it: a CLAIMS.a2ml verified in CI."
system = ".github/workflows/dyadt-verify.yml runs scripts/verify-claims.sh CLAIMS.a2ml"
status = "pass"
evidence = "Root CLAIMS.a2ml ships 7 claims about this change; dyadt-verify.yml runs the verifier + conformance suite on push/PR."
effects = "If a claim here were false, CI is refuted and fails loudly — the spec proves itself on itself."

[[should]]
id = "S1"
text = "DYADT SHOULD specify an append-only, dual-signed consequence ledger and a per-actor confirmation rate."
system = "did-you-actually-do-that/spec/CONSEQUENCE-LEDGER.adoc + .machine_readable/ledger/ format"
status = "pass"
evidence = "CONSEQUENCE-LEDGER.adoc defines the entry format, the confirmation-rate formula, and how Tier 3 MAY gate on it."
effects = "Verification without memory cannot escalate on a repeatedly-over-claiming actor."

[[should]]
id = "S2"
text = "The PLASMA naming collision SHOULD be resolved and recorded in canon."
system = "did-you-actually-do-that/docs/NAMING-RESOLUTION.adoc + CANONICAL-NAMES.adoc entry"
status = "pass"
evidence = "NAMING-RESOLUTION.adoc splits DYADT (claim verification) from PLASMA (licence/exactness); a DYADT/PLASMA entry is added to CANONICAL-NAMES.adoc."
effects = "Ambiguous 'grounded by PLASMA' references would keep entangling licence exactness with claim verification."

[[should]]
id = "S3"
text = "The verifier SHOULD implement the network verifiers (ci-run, issue-state, pr-state) against real forge/CI APIs."
system = "none — the reference verifier returns 'unverifiable: needs-network-verifier' for network classes"
status = "fail"
effects = "ci-green / issue-closed / pr-merged claims cannot be confirmed by the reference impl; the production verifier in hyperpolymath/did-you-actually-do-that must implement them (chartered)."

[[could]]
id = "C1"
text = "Tier-3 contractiles COULD block pre_merge on an actor's DYADT confirmation rate."
system = "none (ledger-gate.sh is illustrative in CONSEQUENCE-LEDGER.adoc, not implemented)"
status = "aspirational"
effects = "A live consequence gate is the end state; it depends on the production ledger writer existing first."

[[could]]
id = "C2"
text = "The ledger COULD be a central estate-wide store rather than per-repo."
system = "none"
status = "aspirational"
effects = "Cross-repo actor reputation needs a central ledger; a reach target, not a current gap."
17 changes: 17 additions & 0 deletions CANONICAL-NAMES.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,23 @@ DEPRECATED NAMES — DO NOT REINTRODUCE (estate mandate 2026-06-30):
mismatch of broken parts adding to the pain of the agentic experience. It is
not an institution.

| **PLASMA**
| Palimpsest licence / exactness tooling (only)
| "the claim-grounder", "the DYADT engine", "agent-claim verifier"
| PLASMA (`palimpsest-plasma`) is licence & exactness tooling *only* — the
authority for licence identity, invariants, and equivalence. It is NOT an
agent-claim verifier. Post-action verification of an agent's asserted
outcomes is *DYADT* (see below), which subsumes the former "claim-grounder"
concept and drops the PLASMA name. See
`did-you-actually-do-that/docs/NAMING-RESOLUTION.adoc`.

| **DYADT**
| Did-You-Actually-Do-That
| "PLASMA", "the grounder"
| Post-action agent-claim verification (Tier 4 of the accountability pipeline):
takes an agent's asserted outcomes and mechanically confirms/refutes each
against primary evidence. Home: `did-you-actually-do-that/`.

|===

== Deprecated names — do not reintroduce (MANDATE, 2026-06-30)
Expand Down
68 changes: 68 additions & 0 deletions CLAIMS.a2ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# SPDX-License-Identifier: CC-BY-SA-4.0
# CLAIMS.a2ml — DYADT dogfood: what this change claims to have done.
# Verified in CI by scripts/verify-claims.sh (did-you-actually-do-that/).
# Every claim below is re-derived from primary evidence, not from this text.
# Claims use content markers (not "created") so they stay true after the change
# merges into the base branch — a claim must describe a durable fact.

[claims]
schema = "dyadt/claim@1"
session = "session_0114ps6mY5jAH4Sz"
actor = "claude-opus-4-8"
emitted_commit = "HEAD"

[[claim]]
id = "C1"
claim_class = "file-changed"
statement = "the DYADT front door defines the Tier-4 accountability pipeline"
target = "did-you-actually-do-that/README.adoc"
expect = "contains:Post-Action Claim Verification"
verifier = "git-diff"

[[claim]]
id = "C2"
claim_class = "file-changed"
statement = "the claim format spec defines typed claim classes"
target = "did-you-actually-do-that/spec/CLAIM-FORMAT.adoc"
expect = "contains:claim_class"
verifier = "git-diff"

[[claim]]
id = "C3"
claim_class = "file-changed"
statement = "the verification protocol fixes the three-verdict contract"
target = "did-you-actually-do-that/spec/VERIFICATION-PROTOCOL.adoc"
expect = "contains:unverifiable"
verifier = "git-diff"

[[claim]]
id = "C4"
claim_class = "file-changed"
statement = "the consequence ledger defines a per-actor confirmation rate"
target = "did-you-actually-do-that/spec/CONSEQUENCE-LEDGER.adoc"
expect = "contains:confirmation rate"
verifier = "git-diff"

[[claim]]
id = "C5"
claim_class = "file-changed"
statement = "the reference verifier can emit an unverifiable verdict"
target = "scripts/verify-claims.sh"
expect = "contains:unverifiable"
verifier = "git-diff"

[[claim]]
id = "C6"
claim_class = "command-ran"
statement = "the DYADT conformance vector suite passes"
target = "bash did-you-actually-do-that/spec/conformance/run-conformance.sh"
expect = "exit==0"
verifier = "command-transcript"

[[claim]]
id = "C7"
claim_class = "test-passed"
statement = "the verifier refutes a false claim and confirms a true one (self-check)"
target = "bash scripts/tests/wave4-dyadt-test.sh"
expect = "exit==0"
verifier = "command-transcript"
9 changes: 5 additions & 4 deletions COMPLIANCE-DASHBOARD.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
| `toolchain-readiness-grades` | ❌ gap | 1/5 | 2/4 | 0/3 | 83% | 2026-07-03 |
| `rhodium-standard-repositories` | ❌ gap | 2/3 | 1/2 | 0/1 | 50% | 2026-07-03 |
| `session-management-standards` | ❌ gap | 1/5 | 1/4 | 0/3 | 41% | 2026-07-03 |
| `did-you-actually-do-that` | ✅ met | 5/5 | 2/3 | 0/2 | 90% | 2026-07-03 |
| `ensaid-config` | ❌ gap | 0/5 | 0/3 | 0/3 | 90% | 2026-07-03 |
| `accessibility` | ❌ gap | 2/5 | 0/5 | 0/3 | 100% | 2026-07-03 |
| `publication-pre-flight` | ❌ gap | 0/5 | 0/4 | 0/2 | 36% | 2026-07-03 |
Expand All @@ -51,10 +52,10 @@

## Estate rollup

- **Specs registered (local):** 28
- **Specs with a scorecard:** 28 / 28
- **MUST requirements:** 41 passing / 138 total (74 failing)
- **Estate systems coverage:** 66% of 328 graded requirements have a mechanical check
- **Specs registered (local):** 29
- **Specs with a scorecard:** 29 / 29
- **MUST requirements:** 46 passing / 143 total (74 failing)
- **Estate systems coverage:** 67% of 338 graded requirements have a mechanical check

## How this dashboard stays honest

Expand Down
12 changes: 12 additions & 0 deletions Justfile
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,18 @@ scorecards-check:
scorecards-check-strict:
@bash scripts/build-scorecards.sh --check --strict

# DYADT: verify a CLAIMS.a2ml against primary evidence (default: root CLAIMS.a2ml)
verify-claims path="CLAIMS.a2ml":
@bash scripts/verify-claims.sh "{{path}}"

# DYADT: run the conformance vector suite
dyadt-conformance:
@bash did-you-actually-do-that/spec/conformance/run-conformance.sh

# DYADT regression test (confirm/refute/unverifiable + guards)
dyadt-test:
@bash scripts/tests/wave4-dyadt-test.sh

# Aggregate compliance gate: registry drift is the HARD gate (registry-check,
# a hard dep). The RSR self-audit is INFORMATIONAL — a monorepo is not expected
# to score Gold — but a *broken* audit (exit 4 / unexpected) must fail loudly
Expand Down
3 changes: 2 additions & 1 deletion TOPOLOGY.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
> It cannot freeze: every regeneration re-reads ground truth. Do not edit by hand.

- **Phase:** active &nbsp;|&nbsp; **Maturity:** experimental &nbsp;|&nbsp; **STATE last-updated:** 2026-06-03T00:00:00Z
- **Registry entries:** 31 specs across 6 streams
- **Registry entries:** 32 specs across 6 streams
- **Front door:** human → [README.adoc](README.adoc); machine → [0-AI-MANIFEST.a2ml](0-AI-MANIFEST.a2ml)
- **Registry:** [.machine_readable/REGISTRY.a2ml](.machine_readable/REGISTRY.a2ml) (index + source hashes) · prose: [REGISTRY.adoc](REGISTRY.adoc)

Expand Down Expand Up @@ -55,6 +55,7 @@
|---|---|---|
| RSR — Rhodium Standard Repositories | [`rhodium-standard-repositories/`](rhodium-standard-repositories/) | the repository-compliance standard every repo is graded against |
| Session Management Standards | [`session-management-standards/`](session-management-standards/) | continuity / verify / handover protocols |
| DYADT — Did-You-Actually-Do-That | [`did-you-actually-do-that/`](did-you-actually-do-that/) | post-action agent-claim verification (Tier 4 accountability) |
| ENSAID Config | [`ensaid-config/`](ensaid-config/) | the ensaid configuration standard |
| Accessibility Standard | [`accessibility/`](accessibility/) | estate accessibility requirements |
| Publication Pre-Flight | [`publication-pre-flight/`](publication-pre-flight/) | submission gate (HOL + Zenodo checklists) |
Expand Down
Loading
Loading