docs(decisions): D0019 — Merge Attribution v1: attribution wins#270
docs(decisions): D0019 — Merge Attribution v1: attribution wins#270git-repo-auth[bot] wants to merge 1 commit into
Conversation
Record the standing convention (captain ruled 2026-07-09): when landing a squash-merge, prefer the captain's authored commit identity over the GitHub merge-API's clean 'Merged' badge. Squash-merge locally and push (commit authored by klappy), then close the PR with a comment pointing at the commit. Cost accepted: PR shows 'Closed', not 'Merged'. v1 — iterate later. Placed with existing branch/merge discipline in docs/decisions and indexed under Branch & Deploy Model.
Canon Quality — Frontmatter Schema ✅All 49 file(s) in Validator: |
|
Landed via the Merge Attribution v1 — attribution wins convention this PR records (D0019). Squash-merged locally and pushed to Landed commit: d87c104 Per the v1 rule, this PR shows Closed, not the purple Merged badge — that is the accepted cost of keeping the captain's authorship on the commit. Captain ruled 2026-07-09. |
Canon Quality — Homepage Surfacing ✅49 essay(s) scanned. Soft report — never blocks; the hard field gate is the Frontmatter Schema job. All published essays resolve to the homepage feed. Report: |
Canon Quality —
|
| Line | Rule | Occurrence | Message |
|---|---|---|---|
| 242 | dead-reference |
klappy://writings/nothing-new-even-ai |
URI does not resolve |
writings/choosing-faith-not-fear.md — 1 finding(s)
| Line | Rule | Occurrence | Message |
|---|---|---|---|
| 203 | dead-reference |
klappy://writings/four-questions-that-change-everything |
URI does not resolve |
writings/getting-started-with-odd-and-oddkit.md — 4 finding(s)
| Line | Rule | Occurrence | Message |
|---|---|---|---|
| 69 | legacy-link-pattern |
/page/writings/the-journey-from-ai-tasks-to-ai-augmented-workflows |
Use a klappy:// URI instead of /page/ path |
| 202 | legacy-link-pattern |
/page/docs/oddkit/proactive/proactive-bootstrap |
Use a klappy:// URI instead of /page/ path |
| 204 | legacy-link-pattern |
/page/docs/examples/project-instructions-template |
Use a klappy:// URI instead of /page/ path |
| 260 | legacy-link-pattern |
/page/writings/the-journey-from-ai-tasks-to-ai-augmented-workflows |
Use a klappy:// URI instead of /page/ path |
writings/the-broken-wall-and-the-buried-talent.md — 1 finding(s)
| Line | Rule | Occurrence | Message |
|---|---|---|---|
| 332 | dead-reference |
klappy://draft-zeros/appendix-a-the-biblical-roots |
URI does not resolve |
writings/the-voice-came-first.md — 1 finding(s)
| Line | Rule | Occurrence | Message |
|---|---|---|---|
| 244 | dead-reference |
klappy://writings/four-questions-that-change-everything |
URI does not resolve |
Soft-block mode — this status is informational; the job will not fail. Hard-block ships in PR-3.2 after the observation cycle.
What to do for each finding:
- Fix the slug if the target now lives at a different
klappy://URI.- Remove the link if it is no longer needed.
- Allowlist with a reason if the rot is intentional (e.g. forward-ref to an upcoming article): place
<!-- audit-allow: dead-reference reason="..." -->on the line above the offending link. The directive is line-level and scopes to the next markdown link.
Spec: klappy://docs/oddkit/specs/oddkit-audit · Workflow: .github/workflows/canon-quality.yml · Run: #321
Canon Quality — P0010 Retrieval-Readiness
|
Records a small standing convention in the merge/stewardship policy — placed with the existing branch & deploy discipline in
docs/decisions/and indexed under Branch & Deploy Model.Merge attribution (v1): attribution wins. When landing a squash-merge, prefer the captain's authored commit identity (
118073+klappy@users.noreply.github.com) over the GitHub merge-API's clean 'Merged' badge. Because the GitHub squash-merge API re-attributes the squash commit togit-repo-auth[bot], crew squash-merge locally and push (commit authored by klappy), then close the PR with a comment pointing at the commit. Cost accepted: the PR shows 'Closed', not the purple 'Merged' badge.v1 rule — attribution is fine for now; iterate and improve later. Captain ruled 2026-07-09. Revisit if/when a cleaner path (e.g. a GitHub App token that preserves author) is available.
Reversible policy text. This PR is itself landed under the very convention it records.
Note
Low Risk
Documentation-only policy text with no runtime, auth, or deploy behavior changes.
Overview
Adds D0019 to the implementation decision log: when landing squash-merges, crew should not use GitHub’s merge API (which re-authors commits as
git-repo-auth[bot]). Instead they squash locally with the captain’s identity, push tomain, and close the PR with a comment linking the landed SHA—accepting a “Closed” PR instead of the purple “Merged” badge.The new ADR covers rationale, consequences, a three-step landing procedure, and a revisit trigger (e.g. a merge path that preserves author + badge).
docs/decisions/README.mdindexes D0019 under Branch & Deploy Model alongside D0001/D0005/D0007.Reviewed by Cursor Bugbot for commit d69f524. Bugbot is set up for automated code reviews on this repo. Configure here.