Skip to content

1.14.0 — the contract release: self-updating standard + identity auto-apply, video --unique/--edge (#112/#113/#114) - #115

Merged
cportka merged 2 commits into
mainfrom
claude/code-repo-setup-practices-var7xm
Jul 30, 2026
Merged

cportka merged 2 commits into
mainfrom
claude/code-repo-setup-practices-var7xm

Conversation

@cportka

@cportka cportka commented Jul 30, 2026 •

Copy link
Copy Markdown
Owner

Summary

1.14.0 — the contract release. The recurring bootstrap/authorship pain traced to one gap: 1.13.0 fixed the mechanics (corrected stop-hook, prune step), but repos bootstrapped earlier keep running stale standard blocks and never enabled the plugin that ships fixes — so they never heal. This round makes the user↔Claude↔GitHub relationship explicit, machine-checkable, and self-updating, and triages the three open feedback issues. Closes #112, closes #113, closes #114.

repo-bootstrap → 1.14.0

  • The managed CLAUDE.md block now leads with "The contract.": describe a feature or next step, and it's understood Claude branches fresh from main → builds + tests fully → opens the PR → merges on CI green → hands back the short PR link; the user deleting the branch is the confirmation the next round picks up. Steps + situational notes (greenfield / branch-pinned / multi-repo) follow; every suite-asserted phrase from 1.7–1.13 is preserved.
  • The block carries a portka-standard-version stamp; the SessionStart hook (now hooks/portka-session-start.sh, replacing refresh-stop-hook.sh) flags a stale or stampless block with the exact refresh command.
  • Committed .claude/commit-identity ("Name <email>") is the identity source: --identity declares it (validated, exit 2 on garbage), else an existing file is kept, else it's seeded from the repo's git config (never noreply@*). The hook auto-applies it to git config each session when identity is unset or the hosted noreply@anthropic.com default — deliberate identities are left alone. Stop-hook healing (1.13.0) remains job 2. (This PR's own first commit landed as Chris Portka via exactly this mechanism.)
  • --portka-standard auto-enables the repo-bootstrap plugin in the settings it writes, so bootstrapped repos actually receive future fixes.
  • [feedback] repo-bootstrap: branch-pinned "fix" commands contradict the standard; CI/dry-run messaging nits from a greenfield bootstrap #114 fixes: the dangerous branch-rename recipe no longer fires when main exists (pinned-flow NOTE instead; --dry-run resolves the same outcome); --portka-standard --ci recognizes the validate.yml it just wrote; a greenfield README gains the > **Version:** 0.1.0 third sync point under its H1; the classifier warning is demoted to a calm note; SKILL.md documents the unattended-session default.
  • Dogfooded here: this repo's block regenerated (stamp 1.14.0), .claude/commit-identity committed, repo-bootstrap@portka-tools enabled in .claude/settings.json.

video-bug-analyzer → 1.14.0 (#112/#113)

  • --unique: deduped distinct poses (uniq_*.png) + frame,t CSV + cadence verdict ("region content changes every ~66 ms ≈ 15.2 fps; 12 unique frames over 3.1s") — the art-reference workhorse, one command instead of triangulating three.
  • --edge side:px: coord-free edge-band crop (--stack --edge right:60 = the edge-clipping question); resolves before --stack's crop check; validated.
  • 0-frame runs warn with the likely cause (per mode — dense window, --timestamps, --scene); contact sheets end with a tile→source mapping footer (whole-frame sheets only); portrait + --text → --cols 1 (explicit --cols wins); both palette modes state the chroma-subsampling caveat, and SKILL.md gains the art-reference steer + new table rows.

Adversarial review (6 dimensions; fixes = the second commit): 23 findings triaged, the real ones fixed: hook resolves the repo top (works from subdirs), truthful identity-apply message + nameless-declaration reject + rc-safe stamp compare + PORTKA_HOOK_DIRS test isolation (the suite had healed this sandbox's real stop-hook through the literal /root path); bootstrap --identity requires the standard (was silently ignored), any-remote main detection, orphan-branch-beside-main left alone, ls-remote guard in the rename recipe, vendored-copy stamp read can't abort, CRLF-preserving README insert + dry-run/real parity; --unique CSV reconciled to written files at the cap + hard ffmpeg failures surfaced; mapping footer gated off cropped/scene sheets; per-mode 0-frame warnings; #112/#113 attributions corrected.

Tests/docs: ~20 new suite assertions across all of the above — 294 passing, 0 failed. CHANGELOG 1.14.0 (incl. a Hardened section) + backfilled footer links (1.5.0–1.13.0 were missing), README header/rows, HANDOFF state stamp, IMPROVEMENTS updated (shipped #98 idea removed; #113 --grid/--exact deferred). evaluator + tab-chord unchanged at 1.13.0.

Release checklist

  • Bumped version in .claude-plugin/plugin.json for each plugin whose files changed
    (CI's version-bump-guard enforces this).
  • Added a ## [x.y.z] entry to CHANGELOG.md for the new version (CI checks every plugin
    version has a matching heading).
  • Updated the README plugin-table row(s) and the header Version: line to match.
  • Ran bash tests/run-tests.sh locally → 0 failures (or relied on CI).
  • Preserved existing script comments; annotated new/changed lines.

🤖 Generated with Claude Code

https://claude.ai/code/session_015M7QWFzt9NnWmSmNQXj1mM

cportka and others added 2 commits July 30, 2026 10:41
…-apply (#114), video --unique/--edge + UX warnings (#112/#113)

repo-bootstrap 1.14.0:
- Managed CLAUDE.md block rewritten to lead with "The contract." (branch fresh
  from main -> build+test -> PR -> merge on CI green -> hand back the link;
  branch deletion = confirmation), with a portka-standard-version stamp
  substituted from plugin.json at write time. All suite-asserted phrases kept.
- New SessionStart hook hooks/portka-session-start.sh (replaces
  refresh-stop-hook.sh): applies the committed .claude/commit-identity to git
  config when identity is unset/noreply (deliberate identities untouched),
  heals a stock stop-hook-git-check.sh (1.13.0 behavior), and flags a
  stale/stampless standard block with the exact refresh command.
- .claude/commit-identity declared via --identity (validated, exit 2 on
  garbage) > existing file kept > seeded from repo git config (never
  noreply@*) > NOTE. --portka-standard auto-enables repo-bootstrap in the
  settings it writes so bootstrapped repos receive future fixes.
- #114: the branch-rename recipe no longer fires when main exists (pinned-flow
  NOTE instead; dry-run resolves the same outcome); --portka-standard --ci
  recognizes its own validate.yml; greenfield README gains the
  "> **Version:** 0.1.0" third sync point under its H1; the classifier
  warning is a calm note; SKILL.md documents the unattended default.

video-bug-analyzer 1.14.0:
- --unique: deduped distinct poses (uniq_*.png) + frame,t CSV + cadence
  verdict; crop applies before dedup; 200-frame cap stated (#113).
- --edge side:px: coord-free edge-band crop resolved before --stack's
  needs-a-crop check so --stack --edge works; validated (#112).
- 0-frame extractions warn with the likely cause (scene mode gets its own
  message); contact sheets end with a tile->source mapping footer; portrait +
  --text drops to --cols 1 (explicit --cols wins); both palette modes state
  the chroma-subsampling caveat; SKILL.md art-reference steer + table rows.

Repo: suite +13 assertions (288 green), CHANGELOG 1.14.0 + backfilled footer
links, README header/rows, HANDOFF stamp, IMPROVEMENTS refreshed, marketplace
description parity, dogfooded here (block stamp 1.14.0, commit-identity file,
repo-bootstrap enabled in settings). evaluator/tab-chord unchanged at 1.13.0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015M7QWFzt9NnWmSmNQXj1mM
…ing, orphan/any-remote main, --unique reconciliation + error surfacing, footer gating

Fixes from the pre-merge adversarial review (6 dimensions, 23 findings triaged):

- portka-session-start.sh: resolve the work-tree TOP so identity/staleness fire from
  subdirectories; claim "applied" only when both git-config writes land (else print the
  set-by-hand fallback); reject a nameless "<email>" declaration; compare version stamps
  on the MAJOR.MINOR.PATCH base (-rc can't invert staleness); PORTKA_HOOK_DIRS override
  confines job 2 so the test suite can never rewrite a real environment's stop-hook.
- bootstrap-repo.sh: --identity without --portka-standard exits 2 (was silently ignored,
  unvalidated); validation moved to argparse; --print-only prints the commit-identity file;
  main-exists covers any remote's main; an unborn ORPHAN branch beside main is left alone
  (main-exists checked before the unborn rename); the greenfield recipe leads with a
  git ls-remote guard; the __PSV__ stamp read can't abort a vendored copy under set -e;
  README Version insert preserves CRLF and dry-run resolves the no-H1 case; the managed
  block tells agents to ask the owner when no .claude/commit-identity exists yet.
- extract-frames.sh: --unique reconciles CSV/verdict to the files actually written at the
  200 cap and surfaces a hard ffmpeg failure (oversized --edge) instead of "static region";
  the contact mapping footer only prints on whole-frame sheets (cropped -> region note,
  scene -> no fixed-fps time formula); 0-frame warnings name each mode's own knobs
  (--timestamps included); #112/#113 attributions corrected (cols-1 is #112, 0-frame is #113).
- tests/run-tests.sh: PORTKA_HOOK_DIRS on every hook invocation; subdir + nameless identity
  cases; orphan-branch case; live 'git branch -m' negative grep (old pattern was dead);
  gpgsign guard on the pinned-branch setup commit; --unique cap (noise fixture) + error-path
  cases; footer-gating + per-mode 0-frame asserts; CRLF/setext README cases. Suite: 294 green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015M7QWFzt9NnWmSmNQXj1mM
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment