Skip to content

test+docs+feat: property rules, story consolidation, blog draft, and the ADR-0019 provenance layers - #112

Open
HenryCFnord wants to merge 23 commits into
mainfrom
claude/personas-user-stories-jynl8i
Open

test+docs+feat: property rules, story consolidation, blog draft, and the ADR-0019 provenance layers#112
HenryCFnord wants to merge 23 commits into
mainfrom
claude/personas-user-stories-jynl8i

Conversation

@HenryCFnord

@HenryCFnord HenryCFnord commented Jul 19, 2026

Copy link
Copy Markdown
Owner

The full property-testing initiative (all three rules, landed separately), the approved story consolidation, the goals-not-features rule, the blog draft evaluating the whole exercise — and, stacked on top, the ADR-0019 provenance layers implemented spec-first.

The three rules — all held

  1. Order does not matter (assemble→export seam): every generated in-repository link, once rebased for the assembled page, reaches exactly the file the original reached — anchors preserved, external targets verbatim. 256 cases/property on the pure rebasing helpers.
  2. There and back (formatter): the byte-lossless split composes back to the exact input (CRLF, trailing whitespace, unicode included), and fmt is idempotent over generated documents — the ADR-0004 contract checked against inputs nobody authored.
  3. Nothing vanishes (assembler): every unit line reaches the assembled page — prose verbatim, headings under some re-leveled depth, fenced lines strictly verbatim, frontmatter never leaking. Runs as an end-to-end property (fresh scratch corpus + real binary per case) because the include containment guards (ASM-004/006) correctly refused the in-process probe.

proptest is a dev-dependency only. Each rule is its own commit, so a future red names its broken assumption.

Story consolidation (approved mapping, one commit per cluster)

US-08-01-25..41 (seventeen feature-per-story entries) fold into seven thematic stories; ten retired, fourteen requirements renumbered with the survivor as owner and the origin story as second derivation; every marker and reference followed; 97 → 87 active stories. The AGENTS.md rule prevents recurrence: stories name goals, requirements name behaviours.

Blog draft

docs/en/blog/2026-07-three-rules-instead-of-examples.md (lifecycle: draft, listed in the index) — classifies the three rules, reports the real results, and evaluates: what holding buys epistemically, the pure-function vs. pipeline economics, one-rule-at-a-time, and the honest limits of generated input spaces.

ADR-0019 — provenance layers (spec-first)

The owner's hybrid decision: one provenance vocabulary, three carriers of increasing depth, derivable upward — the history-computed floor (git optional, informational, never gated), the validated inline dictionary on the marker, and the claim record (arqix:classes/claim) as the fullest form; several markers may share one record (record=, 1:1 as the special case of 1:n); supported-by stays the only edge.

Slice contents, in commit order:

  • docs: ADR-0019 + the claim ontology class + the chapter-9 row.
  • spec: REQ-08-01-40-06/-07/-08 attached to US-08-01-40 (goals-not-features rule applied — same story, new behaviours).
  • red: two tests, evidence below.
  • feat (green): CLM-003 (inline review-status against the effective vocabulary, [frontmatter].claim-review-status, shipped default unreviewed/confirmed/rejected), CLM-004 (record= must resolve to a claim-class document), report claims --provenance appending author,date,commit,agent per marker line via git log -L (agent = Co-Authored-By trailer; - placeholders when history cannot answer; plain output without .git; the gated claims.csv never carries the computed columns). Plus [kinds.claim] (dir, template, id-pattern, declared review vocabulary) and docs/en/templates/claim.tpl.md.
  • docs: rule-catalog rows CLM-003/004, program STATUS, roadmap (gap G4 closes).

Red evidence (at the red commit, verbatim):

test lint_frontmatter_validates_the_provenance_carriers ... FAILED
thread 'lint_frontmatter_validates_the_provenance_carriers' panicked at tests/common/mod.rs:92:5

test report_claims_projects_computed_provenance_on_demand ... FAILED
assertion `left == right` failed: expected success, stderr: error: unexpected argument '--provenance' found

Both green afterwards (cli_lint_frontmatter: 12 passed; cli_report: 21 passed).

Every commit gated on the full just ci (unpiped log, exit 0); no snapshots touched (main's auto-refresh owns them).

🤖 Generated with Claude Code

https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q

claude added 9 commits July 19, 2026 18:07
The first rule test (order does not matter): for every generated
in-repository link and every unit-to-page move, the rebased target
resolves to exactly the file the original reached, with the anchor
preserved; external, absolute, and anchor-only targets survive
verbatim. proptest generates the inputs instead of the author —
256 cases per property against the assembler's pure rebasing helpers,
and the rule held on the first run. proptest enters as a
dev-dependency only (test-side, no runtime supply chain).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
A new feature attaches its requirements to the existing story whose
goal it serves; a new story exists only for a genuinely new goal —
the one-story-per-feature pattern is named as the anti-pattern this
rule prevents.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
US-08-01-25 becomes "Declare the Kind Contract" and absorbs
US-08-01-26 (declared templates) and US-08-01-33 (id/dir templates),
both retired with their requirement links intact. The four moved
requirements renumber into the surviving domain (25-02..05), keep the
survivor as owner and their origin story as second derivation, and
every verifies/implements marker and corpus reference follows.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
US-08-01-27 becomes "Create Documents From the Contract" and absorbs
US-08-01-32 (--set substitution) and US-08-01-39 (TPL-004), both
retired; the two moved requirements renumber to 27-02/-03 with the
survivor as owner and their origin as second derivation, markers and
references follow.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
US-08-01-29 becomes "Configure the Checker Vocabularies" and absorbs
US-08-01-35 (declared property vocabularies), retired; REQ-08-01-35-01
renumbers to 29-03, markers and references follow.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
US-08-01-28 becomes "Capture and Account for Sources" and absorbs
US-08-01-34 (digest verification) and US-08-01-37 (source catalog),
both retired; the two requirements renumber to 28-04/-05, markers and
references follow.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
US-08-01-30 becomes "Validate the Graph Against Its Contracts" and
absorbs US-08-01-36 (domain/range, cycles) and US-08-01-38 (placement
contract), both retired; the three requirements renumber to
30-02..04, markers and references follow.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
US-08-01-40 becomes "Anchor Derive and Account for Evidence" and
absorbs US-08-01-41 (claims export, coverage unit), retired; the two
requirements renumber to 40-04/-05, markers and references follow.
US-08-01-31 (process modules) stays its own goal and keeps growing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
@HenryCFnord HenryCFnord changed the title test: property-based rule 1 — rebased links reach the same file test+docs: property rule 1, the story consolidation, and the goals-not-features rule Jul 19, 2026
claude added 3 commits July 19, 2026 18:41
Two faces of "there and back": the byte-lossless split contract
(opening fence, raw lines, verbatim rest compose back to the exact
input, CRLF and trailing whitespace included) and fmt idempotence
(whatever one pass normalizes is at rest on the second) — each over
generated documents with random keys, nesting, unicode, and line
endings. Both held on the first run; the rewriter's ADR-0004 claim is
now checked against inputs nobody authored.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
For generated corpora of one page including one to three units with
random prose, headings, and code fences: every unit line reaches the
assembled page — prose verbatim, headings under some re-leveled
depth, fenced lines strictly verbatim (the shift never reaches inside
a fence) — and unit frontmatter never leaks. The property runs as an
integration test with a fresh scratch corpus per case because the
include containment guards (ASM-004/006) correctly refuse targets
outside the working corpus — the first probe from inside the test
binary was rejected by exactly the guards it now respects. The rule
held on the first honest run.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
Classifies and evaluates the three rule tests with the real results:
what each rule means at its arqix seam, that all three held and what
holding buys epistemically, the counterfactual find from the same
week, the pure-function versus pipeline economics, the one-rule-at-a-
time discipline, and the honest limits of generated input spaces.
Listed in the blog index as a draft.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
@HenryCFnord HenryCFnord changed the title test+docs: property rule 1, the story consolidation, and the goals-not-features rule test+docs: the three property rules, the story consolidation, and the blog draft Jul 19, 2026
claude added 5 commits July 19, 2026 19:26
One provenance vocabulary, three carriers of increasing depth:
computed from history (informational, never gated), inline on the
marker (validated dictionary), and the claim record as the fullest
form with the analysis block and a declared review verdict; records
derivable from the lower carriers, several markers per record,
supported-by stays the only edge. The ontology gains
arqix:classes/claim; the chapter-9 table follows.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
REQ-08-01-40-06/-07/-08 attach to US-08-01-40 per the goals-not-
features rule: the inline provenance dictionary with the declared
review vocabulary (CLM-003), record references resolving to claim
documents (CLM-004, one record for any number of markers), and the
on-demand computed projection that never enters a gated snapshot.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
The inline provenance keys are rejected as unknown (CLM-001 instead
of acceptance), record= is not a key at all, and --provenance is a
clap usage error — the frontmatter test fails at the first
assert_success and the report test at the flag (cargo test: red in
both suites).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
Green for REQ-08-01-40-06/-07/-08 (ADR-0019): the claim marker accepts
the shared provenance keys with CLM-003 guarding the review verdict
against the effective vocabulary and CLM-004 resolving record= to a
claim document; report claims --provenance appends the history-computed
columns (author, date, commit, agent) on demand while the gated export
stays plain; the [kinds.claim] creation surface lands with its template
and declared review vocabulary.

Full just ci green before this commit (unpiped log, exit 0).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
CLM-003 and CLM-004 join the rule catalog; the program status records
the B2 slice and the roadmap's evidence line closes gap G4 (the
W3C-PROV mapping stays a projection candidate).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
claude added 3 commits July 29, 2026 12:19
US-08-01-42 with REQ-08-01-42-01/-02/-03: fmt normalises body prose
to one sentence per line where the corpus opts in — the --reflow flag
for a single run, the [policies.fmt] reflow key as canonical form
gated by fmt --check (FMT-007). The default stays byte-identical, and
the split rule is conservative: only unambiguous boundaries, doubt
resolves to no change.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
fmt --reflow is a clap usage error, [policies.fmt] reflow is not
read (check mode exits 0 on body drift), so the flag, policy, and
conservative-scope tests fail; the REQ-08-01-42-02 default-untouched
pin passes and guards the existing behaviour (cargo test --test
cli_fmt: 9 passed, 3 failed).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
A line whose end already reads like a sentence — terminal punctuation,
allowing closing emphasis, quotes, brackets, or code ticks — keeps its
break: without this rule an emphasis- or parenthesis-final sentence
would merge with its successor and the token guard could never split
it back.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
claude added 3 commits July 29, 2026 12:20
Green for REQ-08-01-42-01/-02/-03: fmt --reflow (or [policies.fmt]
reflow = true) normalises body prose to one sentence per line — joins
only lines that provably wrap mid-sentence, splits only at provable
boundaries (uppercase start after terminal punctuation, outside inline
code, links, and parentheses, guarded against abbreviations, initials,
and digit-bearing tokens), and leaves fences, tables, headings, lists,
quotes, comments, and every doubtful line byte-identical. Check mode
reports body drift as FMT-007, so the policy key makes the verify
format step gate the convention; without the opt-in the body stays
byte-identical.

just verify green before this commit (cargo test, arqix verify,
markdownlint all ok).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
FMT-007 joins the rule catalog, [policies.fmt] joins the configuration
schema (with the policies key row brought up to date on which
sub-tables are read), and the intake program log and roadmap record
FR-E3 as landed (US-08-01-42).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
The open graph-explorer PR (#113) already claims US-08-01-42 and the
entities PR (#116) claims US-08-01-43; the reflow story moves to the
next free id so the stack merges without an id collision. Files,
iris, markers, and references follow.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
@HenryCFnord
HenryCFnord force-pushed the claude/personas-user-stories-jynl8i branch from 3585b7c to 900e4c0 Compare July 29, 2026 12:23

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

The context in the beginning is not that clear. Which process is meant to be tested here?

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