Skip to content

fix(source-control): state well-known rung git-tracked requirement on both surfaces - #1192

Merged
kyle-sexton merged 1 commit into
mainfrom
fix/well-known-tracked-both-surfaces
Jul 23, 2026
Merged

fix(source-control): state well-known rung git-tracked requirement on both surfaces#1192
kyle-sexton merged 1 commit into
mainfrom
fix/well-known-tracked-both-surfaces

Conversation

@kyle-sexton

Copy link
Copy Markdown
Contributor

Summary

#1185's P1 review hardening — the well-known convention-file rung activates only when the file is
git-tracked — landed only in the enforcement resolver bash. The drafting spec
(config-resolution.md) and the commit-convention seam README still said rung 2 fires "when that
file exists", and config-resolution.md claimed the surfaces were "identical" — false after the fix.

The drift it created: a repo with an untracked/gitignored well-known file + a different markdown-H2
subject_pattern → drafting resolves the untracked file, enforcement skips it → the plugin drafts
commits its own gate rejects. Exactly the two-surface divergence the design exists to prevent.

Adds the git-tracked requirement + how the drafting reader checks it (git ls-files --error-unmatch)
to config-resolution.md, the seam README, and the setup SKILL.md gotcha. Docs-only — the resolver
already enforced tracked; this makes the specs match and "identical on both surfaces" true again.

source-control 0.25.0 → 0.25.1.

Test plan

  • lychee --offline clean on the three edited docs.
  • scripts/check-changelog-parity.sh --check-bump origin/main — bump has an entry.
  • No code change (resolver + its 58 tests unchanged); the resolver already required tracked.

Related

🤖 Generated with Claude Code

… both surfaces

#1185's P1 review hardening — the well-known rung activates only for a git-tracked
file — landed only in the enforcement resolver bash. The two spec surfaces the
model reads still described rung 2 as firing "when that file exists", and
config-resolution.md claimed the drafting and enforcement surfaces were
"identical" — false after the fix. That left a real divergence: a repo with an
untracked/gitignored well-known file and a different markdown-H2 subject_pattern
would have drafting resolve the untracked file while enforcement skips it, so the
plugin drafts commits its own gate rejects.

Add the git-tracked requirement (and how the drafting reader checks it,
git ls-files --error-unmatch) to config-resolution.md, the commit-convention seam
README, and the setup SKILL.md gotcha. Docs-only — the resolver already enforced
tracked; this makes the specs match it and "identical on both surfaces" true again.

source-control 0.25.0 -> 0.25.1.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@claude

claude Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 1m 15s —— View job


PR Review

  • Gather context and read changed files
  • Review docs changes for correctness and consistency
  • Check version bump and changelog
  • Post final review

This is a clean docs-only patch that closes the spec/implementation gap introduced by #1185. The enforcement resolver already required git-tracked; this PR makes the three documentation surfaces say the same thing. Review below.

Correctness

The core claim — rung 2 fires only when the well-known file is git-tracked — is accurately reflected in all three edited surfaces now:

Surface Before After
commit-convention/README.md "when that file exists" "when that file is git-tracked"
reference/config-resolution.md "when that file exists" "when that file is git-tracked"
skills/setup/SKILL.md missing the constraint "when git-tracked"

All three now point to git ls-files --error-unmatch as the check, and all describe the same fallback: untracked → skip rung 2 → fall through to markdown H2. Cross-surface alignment is exact.

One formatting nit in config-resolution.md

config-resolution.md L74 — the edit accidentally joined two wrapped lines into one long line:

  applies; a key it omits still falls back per key to the markdown H2. Value grammar, pointer safety rules, and the fail-closed

The surrounding prose wraps at ~96 characters; this line is well over that. The original had this content split across two lines. Non-blocking, but worth rewrapping for readability consistency with the rest of the block. Fix this →

Version bump

0.25.0 → 0.25.1 is the right semver level for a docs-only patch that carries no behavioral change.

Changelog

The 0.25.1 entry is accurate, references the predecessor PR (#1185), and explains both what was wrong and that the resolver was already correct. No issues.

Security / other concerns

None. No code paths changed; no secrets, PII, or external egress introduced.


Overall: LGTM. The one formatting nit is cosmetic and doesn't block merge.

@claude

claude Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 1m 4s —— View job


Security Review — PR #1192

  • Read PR diff and changed files
  • Audit shell commands documented in diff
  • Check plugin.json for dangerous patterns
  • Review for secrets/credentials
  • Post findings

No security issues found.

This is a docs-only PR (5 markdown files + a semver bump in plugin.json). Here is what I checked:

Shell command introduced in docs

The only new shell invocation documented across the three changed markdown files is:

git ls-files --error-unmatch docs/conventions/source-control/commit-convention.yml

(config-resolution.md L71, same command cited in the seam README and setup SKILL.md)

This is a safe, read-only git plumbing call with a hardcoded repo-relative path — no user-controlled input, no shell expansion surface, no exec side-effects. It exits non-zero when the file is absent/untracked; the documentation correctly describes that exit code as the "skip rung 2" signal. There is no injection risk.

plugin.json

Change is a single field: "version": "0.25.0""0.25.1". No new permissions, no new userConfig keys, no remote endpoints, no dependency changes. (plugin.json L4)

Secrets / credentials

None present anywhere in the diff.

GitHub Actions / workflows

No workflow files touched.

Security posture assessment

The PR strengthens the existing posture: it closes the spec gap where documentation claimed drafting and enforcement were "identical" while the enforcement resolver already enforced the git-tracked requirement and the drafting spec did not. A repo with an untracked/gitignored file at the well-known path could have had the agent draft commits its own gate would then reject — a drafting/enforcement divergence. Aligning both specs to require git-tracking and documenting the verification command is a correctness fix that also tightens predictability of the security gate.

@kyle-sexton
kyle-sexton merged commit 1fe7c92 into main Jul 23, 2026
25 checks passed
@kyle-sexton
kyle-sexton deleted the fix/well-known-tracked-both-surfaces branch July 23, 2026 22:05
kyle-sexton added a commit that referenced this pull request Jul 23, 2026
…ion (#1193)

## Summary

Closes the #1187 provenance audit with a durable **decision record** in
MIGRATION-PLAYBOOK, rather than
a forgery-prone gate.

**Finding:** in this solo-autonomous setup the operator and every agent
act as the same `kyle-sexton`
identity, so no in-repo signal (author / reviewer / merger / commit
signature) distinguishes human
ratification from agent accretion — a **repo-wide property**, not a
per-seam defect. All 12
`docs/conventions/*` seams are PR-introduced and cite a ratifying
issue/PR; none was silently accreted.

**Decision:** decline `CODEOWNERS` / `human-ratified` label / signing
gates under the shared identity —
an agent satisfies the same gate, so they manufacture *false* assurance
(theater). The only real
distinguisher is a separate human-only identity/signing key agents don't
hold; flagged as an infra
option with a revisit trigger, **not imposed**. Interim posture:
ratification stays trust-based and
visible via cited issues/PRs + operator engagement, with the audit trail
as the durable account.

Docs-only (marketplace governance doc — no plugin shipped-content
change, no version bump).

## Test plan

- `lychee --offline docs/MIGRATION-PLAYBOOK.md` — clean.
- Decision record follows the doc's existing dated-decision-record
format.

## Related

- Closes #1187
- Concludes the #163434 work stream (#1185 well-known path, #1190
config-cascade rename, #1192 cross-surface fix)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.

source-control: well-known rung git-tracked requirement missing from drafting spec + seam README (cross-surface drift)

1 participant