test+docs+feat: property rules, story consolidation, blog draft, and the ADR-0019 provenance layers - #112
Open
HenryCFnord wants to merge 23 commits into
Open
test+docs+feat: property rules, story consolidation, blog draft, and the ADR-0019 provenance layers#112HenryCFnord wants to merge 23 commits into
HenryCFnord wants to merge 23 commits into
Conversation
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
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gie4jfrHKCxQktD2UsvH4Q
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
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
This was referenced Jul 19, 2026
HenryCFnord
force-pushed
the
claude/personas-user-stories-jynl8i
branch
from
July 28, 2026 17:42
d0a6792 to
3585b7c
Compare
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
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
force-pushed
the
claude/personas-user-stories-jynl8i
branch
from
July 29, 2026 12:23
3585b7c to
900e4c0
Compare
HenryCFnord
commented
Aug 29, 2026
Owner
Author
There was a problem hiding this comment.
The context in the beginning is not that clear. Which process is meant to be tested here?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
fmtis idempotent over generated documents — the ADR-0004 contract checked against inputs nobody authored.proptestis 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-bystays the only edge.Slice contents, in commit order:
claimontology class + the chapter-9 row.review-statusagainst the effective vocabulary,[frontmatter].claim-review-status, shipped defaultunreviewed/confirmed/rejected), CLM-004 (record=must resolve to a claim-class document),report claims --provenanceappendingauthor,date,commit,agentper marker line viagit log -L(agent = Co-Authored-By trailer;-placeholders when history cannot answer; plain output without.git; the gatedclaims.csvnever carries the computed columns). Plus[kinds.claim](dir, template, id-pattern, declared review vocabulary) anddocs/en/templates/claim.tpl.md.Red evidence (at the red commit, verbatim):
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