Skip to content

chore(release): promote dev to main - #115

Merged
kcramakrishna merged 54 commits into
mainfrom
dev
Nov 10, 2026
Merged

kcramakrishna merged 54 commits into
mainfrom
dev

Conversation

@kcramakrishna

@kcramakrishna kcramakrishna commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

Promotes dev to main: the v0.3.3 back-merge (#107), CI test shards (#108), v0.3.5.1 open ends (#109), the ADR policy and its checks (#110 to #112), v0.3.6 (#113) and the template licence (#114). release-please opens the release pull request after the merge.

🤖 Generated with Claude Code

kcramakrishna and others added 30 commits November 10, 2026 00:12
chore(release): merge v0.3.3 back into dev
The whole dev/tests suite ran inside 3.14 part 2 beside two other shards and
set the length of every merge-queue run: 76-97 s, against 60 s or less for
every other job (10 merge_group runs, 2026-11-09/10). Inside that job the dev
suite took 57-87 s; the engine and audit-tools shards ended by 59 s.

dev/test_shard.py now knows the dev suite, and test-part shards it
(TEST_SHARDED_SUITES). Shard 1 is test_implement_eval alone (38 s locally);
shard 2 holds the other 20 modules (14 s), so the small whole targets
(test-implement-tools, verify-rules) move to part 2. The 3.11 test-dev job,
coverage-part and coverage-combine are unchanged; coverage.py never measured
dev/.

Locally, on 4 CPUs with Python 3.14, the slower part drops from 53 s to 38 s,
with the same test counts per suite.

Roadmap-Step: CS6

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ci: shard the dev checks in the Python 3.14 test parts
The notes in 80 of the files named the old engine path
brownfield-recipes/deterministic-audit/, and every file named the generator
as tools/eval/. The generator and its test now name dev/eval/ and the real
output folder, and all files are regenerated.

Roadmap-Step: 1.1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
make eval-expected-check runs generate_fixture_expected.py --check, which
compares the committed eval-expected files with a fresh engine run (a few
seconds). It joins make check and the CI static job, so a stale file can no
longer reach dev unseen. The docs that list the parts of check say so.

Roadmap-Step: 1.1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
REQ-SH-030 said the security verb MUST run the dependency scan, while
TOOL-04 passes a scan under any verb. The owner chose the check's reading:
a verb MUST run the scan and it SHOULD be security. Spec decision 0003
records why; no verdict moves.

Roadmap-Step: 3.1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The audit bundle rewrote only the link to the shared prompt. It now uses the
same rewrite as the implement bundle. A link to a carried file points at its
place in the bundle. Any other link becomes plain text naming the framework
path. The bundle also carries the Tools CLI sections for its five tools, so
the SKILL.md tool links resolve. Both copies of the schema docs are rewritten
for their own folder. A new test holds every link in the bundle resolvable.

Roadmap-Step: 1.3
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A hook that read the branch and only printed a warning passed TOOL-07,
though the commit went ahead. A guard that reads the branch must now also
exit non-zero (exit 1 to 255, process.exit(1), sys.exit(1) or a bare false)
in its lefthook command block or hook script; comments are skipped.
no-commit-to-branch always stops the commit. No wired guard that exits is
PARTIAL, and branch coverage is read only on the guards that exit.

Ruleset 2026-11-10.3; no catalogue bump. One-defect fixture
tool-07-guard-no-exit (a lefthook guard that only warns, PARTIAL) with its
eval file, six in-process tests, rubric and changelog. Self-audit: TOOL-07
still PASS (the lefthook guard exits 1).

Roadmap-Step: 4.4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…aseline

The eval file of the new TOOL-07 fixture holds the fixture's fixed repo_sha,
which detect-secrets reads as a high-entropy string. The gates of the 4.4
commit ran before the new file was staged, so make security did not scan it.
The baseline now lists it, like the other eval files.

Roadmap-Step: 4.4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One pinned nested module passed EXEC-01 even when a sibling module had no
pin. The check now reads every module manifest (package.json,
pyproject.toml, go.mod) of a pinned ecosystem. A module is reached by a pin
in its own manifest, or by a pin file or (node, python) a pinning manifest
in its folder or a parent folder; a parent go.mod does not reach a nested
Go module. A module no pin reaches is PARTIAL and is named in the evidence.

Two tests that asserted PASS for exactly this gap now assert PARTIAL; their
single-module cases are kept. Ruleset 2026-11-10.4; no catalogue bump.
One-defect fixture exec-01-sibling-module-unpinned with its eval file and
baseline entry, ten in-process tests, rubric, audit master list and
changelog. Self-audit: EXEC-01 still PASS.

Roadmap-Step: 4.5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s docs

Step 8 of add-repo-hygiene told the agent to confirm a guessed Renovate
form. Renovate's docs give a preset for it: security:only-security-updates
turns off other updates with matchPackageNames ["*"] and turns on
vulnerabilityAlerts and osvVulnerabilityAlerts. The step now writes that
preset with minimumReleaseAge "7 days", says vulnerabilityAlerts works on
GitHub only, and names the osv.dev limits on other platforms.

Roadmap-Step: 2.2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The playbook called the GitLab variable names assumed. GitLab's predefined
variables list CI_PIPELINE_SOURCE, CI_MERGE_REQUEST_SOURCE_BRANCH_NAME and
CI_MERGE_REQUEST_TARGET_BRANCH_NAME with the meaning the job uses. The step
now cites the page, says the branch names exist only in merge request
pipelines, and warns that a pipeline with only .pre jobs does not run.

Roadmap-Step: 2.3
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
GitHub's list of supported ecosystems has pre-commit: Dependabot updates the
rev: lines of .pre-commit-config.yaml, with version updates only and no
security updates. Step 8 of add-repo-hygiene now adds a pre-commit entry
when the file exists and the policy is not security-only. The coverage
bullet is rewrapped, and its 45-word sentence is split.

Roadmap-Step: 2.4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs/ADR_POLICY.md holds the ADR rules in one place: git is the archive,
an ADR states only the current decision, a changed decision is
overwritten in place, and a superseded one is deleted and never
referenced again. The template drops the status, date and decider
fields and the lifecycle footer.

Both pages join the docs-lint ratchet. The Markdown baseline falls from
680 to 674 because the old template's issues are gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The root, audit, implement and engine AGENTS.md files, the docs router,
CONTRIBUTING.md, spec/README.md and root ADR 0001 now link to
docs/ADR_POLICY.md. The style guide and the engine AGENTS.md drop their
restated ADR rules and link to the policy instead, so the rules live in
one place.

The Markdown baseline falls from 674 to 673.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Root ADRs 0001-0008 drop the status, date, review and decider fields,
the horizontal rules and the lifecycle footer. Their bodies now state
only the current decision: dated notes, release and plan IDs, and
"before this ADR" history are removed or rewritten in the present tense.
Old choices stay as rows in Alternatives Considered. ADR 0001 gains that
section.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
progress.py wrote the framework commits and the source reports' git_sha
as 12 digits, but copied --commit and --merged-sha as given, so a full
40-digit id could land in the state, where secret scanners read it as a
token. Both are now cut to 12 digits; a shorter id (7 to 11) is kept. The
schema still accepts 7 to 40, so its version does not change. state.md,
the Tools CLI reference and two new tests say so.

Roadmap-Step: 1.2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Spec decisions 0001 and 0002 drop the header fields, the rules and the
lifecycle footer, and state their context in the present tense. The old
constraints.draft.yaml output becomes a row in Alternatives Considered.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Audit ADR 0001 drops the header fields, the lifecycle footer and its
dated paths note. Its text now uses the current paths (audit/tools/,
audit/engine/) and no plan step IDs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Implement ADRs 0002 and 0003 drop the header fields, the rules and the
lifecycle footer. ADR 0003 states its context as a present-tense problem
instead of a past disagreement between pages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Engine ADRs 0001-0009 drop the header fields, the rules and the
lifecycle footer. Their context sections describe the problem in the
present tense instead of the engine's past behaviour, and roadmap,
release and plan references are gone. ADR 0008 names the current
template path, greenfield/templates/.

The Markdown baseline falls from 673 to 658.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Git holds status and dates, so both ADR indexes now list number, title
and a one-line summary. The implement group note states the retired
number, and the engine index points at the ADR policy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A confirmed finding triggers each step. The owner can also ask for it by
name in Stage 1 (extra.agt-12, extra.doc-05); that change has no finding
for the re-audit to confirm, so the pull request says so.

Roadmap-Step: I1

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The docs-contract playbook no longer marks target ADRs `proposed`. A
record has no status or date; the owner accepts it by merging the
branch. The playbook now writes an ADR policy page, named to fit the
target, and the index lists number, title and summary. The implement
skill bundle carries the policy and the template so its links resolve.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The dev ruleset no longer requires an up-to-date head (ADR 0002). The
alternative stays rejected because fixing a conflict would need a push
to main, which the main ruleset refuses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…gents-md

Closes AGT-12. A new step adds the section from the greenfield AGENTS.md
section 8.1 template: the reader persona the owner confirmed, bottom line
first, plain language, the report layouts and the decision layout. The
Inputs ask for the persona and the docs language and offer a long-form
rules file. A reader persona is a communication rule, so the AGT-11 moves
and the Do-not-do list leave it alone.

Roadmap-Step: I2

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
New repositories get docs/ADR_POLICY.md and the lean ADR template. The
style guide, AGENTS.md, CONTRIBUTING.md and the pull request template
link to the policy instead of restating it. ADR 0001 drops its header
fields and lifecycle footer, and the index lists a summary. The AGENTS.md
pointer avoids "before you ... read", which AGT-10 reads as deferral.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Closes DOC-05 as far as rules go. The greenfield style guide gains section 8
(plain language: rules 1 to 6 with the DOC-05 limits) and section 9
(diagrams). establish-docs-contract step 3 adds the two sections from that
template, keeps an existing guide's text, and holds the pages the theme
writes to the rules. Prose debt on other pages is recorded, not rewritten.

Roadmap-Step: I3

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kcramakrishna and others added 24 commits November 10, 2026 10:22
AGT-10 reads "before you ... read <file>" on one line as deferral to an
unconfigured file. The line passed only because it wrapped before the
file name. It now states the rule directly.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Resolves the ADR index conflict and converts the new spec decision 0003
to the lean template, with its row in the index.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs: an agent-tuned ADR policy, a lean template and every ADR converted
Agents load ADRs as instructions and apply a superseded record as a
current rule. ADR 0009 records that reasoning, the rejected lifecycle
conventions and the trade-offs. The policy page links to it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
implement/playbooks/templates/docs_prose_check.py carries the three rules
of dev/prose_check.py and adds --max-issues (exit 1 above a count, for a
ratchet) and --diagram-dir. establish-docs-contract flags it and offers two
answers: skip (the default; the DOC-05 counts become debt), or copy it under
a licence the owner names. A copy never carries this repository's licence.

A parity test holds the template equal to dev/prose_check.py and the
engine's DOC-05 port. The implement skill bundle carries the template beside
the playbooks. The stack profiles say how each stack runs it.

Roadmap-Step: I4

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An ADR marked superseded, deprecated, rejected or obsolete is loaded by
an agent as a current rule (root ADR 0009). DOC-04 now reads each
numbered ADR for a status line or field, a `## Status` section, or a
line that opens with "superseded by", "replaced by" or "deprecated by /
in favour of". Any such tombstone is PARTIAL, with its file and line,
even when the index lists every entry. A plain `Status: Accepted` is
not flagged, and the word inside a sentence or table does not count.

Ruleset 2026-11-10.5; no catalogue bump. One-defect fixture
doc-04-adr-tombstone with its eval file, in-process tests, rubric,
REQ-SH-019 line, changelog and audit master. Self-audit: DOC-04 PASS.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ication

Conflicts resolved by keeping both sides:
- establish-docs-contract: dev's ADR policy page and lean ADRs, plus the
  DOC-05 rows, Inputs 6 (prose check) and the step 3 plain-language rules.
  NAV-03 findings became Inputs 7.
- build_skills.py docstring: the ADR policy and template, plus the
  playbook templates.
- implement-master.md regenerated.

The markdownlint count fell to 646; the baseline follows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ad0e4b5 left "## 8. ADR life## 8. ADR lifecycle" and cut the heading of
section 9 to "s not go in docs/", so its table had no heading.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ADR 0004 reversed a ratchet that counted every long sentence: a sentence of
26 to 40 words is often the clearest one. The target's copy now runs with
--min-severity warning on both ratchet runs, and a third run shows the
notices as advice.

Roadmap-Step: I4

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
dev/adr_lint.py fails when an ADR in any of the five ADR folders has a
lifecycle field (Status, Date, Last reviewed, Deciders), a Lifecycle
section, a retired-ADR marker (the audit's DOC-04 rule, loaded at run
time so strict mypy stays on dev/), a missing or reordered template
section, a title without its number, or no row in the root index. An
index row to a missing ADR fails too. CI runs it in the static job.
The policy page, ADR 0009 and the gate listings name it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
establish-docs-contract records one debt entry per DOC-05 measure, with the
worst pages in the note. No page is rewritten, even with
format.mass_reformat=yes: a rewrite needs the owner to name the pages
(extra.prose-rewrite), one commit per page. A page the theme edits joins
the clean list only once it passes. adapt-agents-md rewords nothing in
AGENTS.md beyond the new section and records no prose debt for it.

Roadmap-Step: I5

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The AGT-12 and prose-check questions become numbered questions with
lettered options and a default, as the decision-request layout asks. Each
"say so in the pull request" line now names its done-report heading: What
changed, How it was checked or What was not done.

Roadmap-Step: I6

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
feat: record the ADR policy in ADR 0009 and check it (DOC-04, adr-lint)
A comm report variant audits stockroom with a small overlay: an AGENTS.md
with no rules for writing to people, and docs pages with prose debt.
build-reports --variant comm builds it alone, so the base and planted
reports stay as they are.

Two scenarios, comm-docs-contract (T6) and comm-agents-md (T7), and four
assertions: A9 the AGENTS.md section names the confirmed reader and AGT-12
passes on re-audit; A10 the style guide has both sections and DOC-05 cites
no page the theme wrote; A11 the prose check copy carries the owner's
licence and its ratchet holds; A12 no earlier docs page was rewritten.
Each runs on hand-made good and bad outcomes in make check. No headless
run yet.

Roadmap-Step: I7

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The engine's architecture page indexes the engine ADRs. adr-lint now
fails when an engine ADR has no row there, or when the page links an ADR
that does not exist. An index is required only when its folders hold an
ADR.

adr-lint also reads every Markdown page, except CHANGELOG.md, scratch,
fixtures, build output and the greenfield templates. A page that names
an ADR path or an "ADR NNNN" number no folder holds fails, so a deleted
ADR cannot stay referenced in prose. The number check cannot tell
folders apart; the module docstring says so.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
feat(dev): adr-lint checks the engine index and mentions of missing ADRs
… target

The implement how-to and the recipes overview now say what the AGENTS.md
and docs themes add for AGT-12 and DOC-05, that existing pages are counted
as debt, and that the prose check is copied only under a licence the owner
names. The greenfield templates already carry both sections (I3, v0.3.4 T1).

Roadmap-Step: I8

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-communication

The one conflict, .secrets.baseline, is regenerated: dev's entries plus
the comm report's two commit-hash lines.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A copy of the prose check template carries MIT, Apache-2.0 or
BSD-3-Clause, as the owner picks, and keeps the template's copyright line.
Any other licence falls back to skip, so no owner labels the file as their
own proprietary code. Where the target keeps a third-party notices file,
the copy is listed there. A11 now fails when the copyright line is replaced.

implement/AGENTS.md: code in playbooks/templates/ is relicensed on copy, so
only its copyright holder changes it, or a contributor who agrees in writing.

Roadmap-Step: I4

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-communication

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
feat(implement): bring the writing rules to target repositories (v0.3.6)
Text the implement recipe copies into a target (the style guide sections,
the AGENTS.md section, the ADR policy and template) carried no stated
licence, so it fell under the root GFDL 1.3, a copyleft that enterprise
reviews flag. greenfield/templates/ is now MIT-0 (LICENSE-TEMPLATES): a copy
needs no notice, and the repository owns it.

establish-docs-contract now copies and adapts from the greenfield templates
only, never from docs/, and the implement skill bundle carries the greenfield
ADR policy and template. The DOC-05 row names the three permissive licences
of the prose check copy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs: license the greenfield templates under MIT-0
@kcramakrishna
kcramakrishna merged commit c588b26 into main Nov 10, 2026
54 checks passed
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.

1 participant