Skip to content

ci: a numbered idea pile and the Idea-Id trailer gate (E3-piles, E3-trailers) - #1

Merged
rudi193-cmd merged 2 commits into
masterfrom
claude/forge-workshop-evidence
Sep 12, 2026
Merged

rudi193-cmd merged 2 commits into
masterfrom
claude/forge-workshop-evidence

Conversation

@rudi193-cmd

Copy link
Copy Markdown
Contributor

Bites: E3-piles-forge-workshop (docs: commit) and E3-trailers-forge-workshop (ci: commit). Fleet plan Wave 3; orchestrator session session_01Qa81BaErcUeJgGfBGRmNqm.

What

  • docs/ideas.md — the numbered pile, in willow-reconciler's form. Three items: the first bundle cut (carried from the README's "After the first bite"), adopting Idea-Id trailers, and the Nestor pin raise for Wave 6. Nothing is hand-tagged: git history showed none of them landed when the doc was written.
  • .github/workflows/trailers.yml — runs reconciler verify on push and PR. Branch list mirrors tests.yml (master, main) since this is a template and an instantiated workshop may default to either. permissions: contents: read added, matching tests.yml.
  • CONTRIBUTING.md — created in the tree (the org's copy never reaches a clone, per CLAUDE.md). Names the test command and carries the "The Idea-Id commit-trailer convention" section.
  • tests/test_release_wiring.py — stdlib-only structural check: trailers.yml exists wherever docs/ideas.md exists, plus the plant asserting the pile is present so the check is never vacuous.
  • README.md — four rows added to the "What is here" table for the files above; the tests/ row no longer says one test ships.

Validate summary

Of 3 item(s) parsed from docs/ideas.md (./): 0 carry the doc's own explicit legend tag (0 landed, 0 partial — read back verbatim, not classified). Of the remaining 3 untagged item(s), 1 resolved to a real inferred signal (1 landed, 0 partial) and 2 show no reliable automatic landing signal.
- items parsed: 3 of 3 (0 dropped, unparseable)
- hold-out score: 0/0 recovered (recovery_rate=None)

reconciler verify --repo ./ --doc docs/ideas.md:

1 Idea-Id trailer(s) in ./'s history: 1 resolve to an item in docs/ideas.md (covering 1 distinct item(s)), 0 name an id the doc does not contain.
- ok `willow-ideas-002` (landed) in 9643e66473: ci: the Idea-Id trailer gate (E3-trailers)

Trailer lines the commits carry

  • f890bba docs: — first commit, no Idea-Id (the pile did not exist before it).
  • 9643e66 ci: — Idea-Id: willow-ideas-002, generated by reconciler id --repo ./ --doc docs/ideas.md --grep "Idea-Id".

Verified

  • python -m pytest tests/ -q → 4 passed (the two existing tests plus the two new ones).
  • python -m unittest tests.test_release_wiring → OK (stdlib runner, no pytest).
  • reconciler run --repo ./ --doc docs/ideas.md --validate → exit 0, 0 dropped.
  • reconciler verify --repo ./ --doc docs/ideas.md → exit 0, 1 resolved, 0 unresolved.
  • trailers.yml parses as YAML. No .db file is tracked.

--repo ./, not --repo .

willow-reconciler 0.6.0 treats --repo as a path only when it carries a slash or is absolute; a bare . is resolved as a repo name beside the checkout and errors out (repo '.' not found). Every command written in this PR therefore says --repo ./, with a comment saying why in the workflow and in CONTRIBUTING. The fix belongs upstream (treat . and .. as path-like in cli._is_path_like), or the fleet text should say ./. Outside this bite; flagged for the orchestrator.

Seen, not touched

  • No release-please here. This repo has no release-please.yml, no release-please-config.json, and no auto-merge, so no pr-title guard is required today. If Wave 4 adds release-please to this repo, the guard must land with it.
  • CLAUDE.md still says the org keeps CONTRIBUTING.md in forge-play/.github. True, but a copy now also lives here. Left alone: one sentence of context, not a rule.
  • pyproject.toml pins nestor-meaning>=0.19.0,<1.0.0. Wave 6 raises it; item 3 of the pile records that.
  • No tests/test_fleet_conventions.py exists in this repo; the reconciler's conventions verb describes one. Not part of this bite.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Qa81BaErcUeJgGfBGRmNqm


Generated by Claude Code

Every open item the tree carries today, under the form willow-reconciler
reads: a header naming the command, the legend, the rule that numbers are
permanent join keys, and `## A.`-style sections with top-level `N. ` items.
One item comes from the README's "after the first bite" section (the first
bundle cut); two record fleet conventions this repo is adopting (Idea-Id
trailers) or will pick up later (the Nestor pin raise, Wave 6). Nothing is
hand-tagged: git history shows none of them landed yet.

The command is spelled `--repo ./`, not `--repo .`: willow-reconciler 0.6.0
reads a bare `.` as a repo *name* to resolve beside the checkout and fails,
while anything carrying a slash is a path.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qa81BaErcUeJgGfBGRmNqm
`.github/workflows/trailers.yml` runs `reconciler verify` on every push and
PR against the default branch, failing on an Idea-Id trailer that names an
item docs/ideas.md does not contain. CONTRIBUTING.md is created in the tree
(the org's copy never reaches a clone) with the test command and the
convention: never type an id by hand, generate it with `reconciler id`.
tests/test_release_wiring.py asserts, with the standard library only, that
the workflow exists wherever the pile does, and plants the pile so the check
is never vacuous.

The branch list mirrors tests.yml, and the repo is passed as `./` for the
reason the docs commit gives.

Idea-Id: willow-ideas-002

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qa81BaErcUeJgGfBGRmNqm
@rudi193-cmd
rudi193-cmd merged commit a091799 into master Sep 12, 2026
6 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.

2 participants