Skip to content

docs(decisions): D0019 — Merge Attribution v1: attribution wins#270

Closed
git-repo-auth[bot] wants to merge 1 commit into
mainfrom
docs/d0019-merge-attribution-v1
Closed

docs(decisions): D0019 — Merge Attribution v1: attribution wins#270
git-repo-auth[bot] wants to merge 1 commit into
mainfrom
docs/d0019-merge-attribution-v1

Conversation

@git-repo-auth

@git-repo-auth git-repo-auth Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

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 to git-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 to main, 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.md indexes 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.

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.
@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown

Canon Quality — Frontmatter Schema ✅

All 49 file(s) in writings/ conform to klappy://canon/meta/frontmatter-schema.

Validator: scripts/validate-frontmatter.py · Canon: klappy://canon/constraints/frontmatter-validation-before-merge · Run: #321

@git-repo-auth git-repo-auth Bot closed this in d87c104 Jul 9, 2026
@git-repo-auth

git-repo-auth Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

Landed via the Merge Attribution v1 — attribution wins convention this PR records (D0019).

Squash-merged locally and pushed to main as commit klappy authored (not the merge-API bot), then closing here rather than using the squash-merge API.

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.

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown

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: scripts/surfacing-report.py · Canon: klappy://canon/constraints/frontmatter-validation-before-merge

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown

Canon Quality — oddkit_audit ⚠️

8 finding(s) in writings/ (50 files scanned). Mode: soft.

writings/agentic-software-development.md — 1 finding(s)
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

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown

Canon Quality — P0010 Retrieval-Readiness ⚠️

Soft report for klappy://canon/constraints/retrieval-disclosure-contract. 686 files scanned. Never blocks — informational until the corpus is ready to enforce.

  • Blocking-class findings: 15 (structural fields the contract would filter on)
  • Warnings: 0 (kind resolves to unknown)
  • Informational: 13 (exempt templates/archive/drafts)

Kind distribution: {'essays': 51, 'canon': 232, 'apocrypha': 38, 'docs': 300, 'journals': 59, 'unknown': 6}
Kind source: {'path': 554, 'frontmatter': 126, 'none': 6} (frontmatter-primary, path-secondary)
Default-include visibility: 583 visible, 103 hidden (journals/apocrypha/unknown)

By rule: {'audience-invalid': 2, 'exposure-missing': 5, 'tier-missing': 5, 'tier-invalid': 7, 'fm-missing': 3, 'kind-unresolvable': 6}

These are not schema violations (see the Frontmatter Schema job for those on writings/). They are corpus-readiness signals for the retrieval contract: invalid/missing audience, exposure, tier, and docs whose kind cannot be resolved. Fix in a corpus-cleanup PR before the contract flips to enforcing. See the retrieval-readiness-findings artifact for the full list.

Validator: scripts/audit-retrieval-readiness.py · Constraint: klappy://canon/constraints/retrieval-disclosure-contract · Run: #321

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