Skip to content

1.16.1: triage #128 — fail-closed CI scaffold, deny list, live-sync check - #129

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

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

Conversation

@cportka

@cportka cportka commented Oct 15, 2026

Copy link
Copy Markdown
Owner

Summary

Triage of #128 (the report plus both follow-up comments) and a general fine-tune pass. PATCH 1.16.1: repo-bootstrap, app-website-evaluator and video-bug-analyzer move to 1.16.1; tab-chord-formatter is unchanged.

repo-bootstrap

  • Fail-closed CI scaffold. A missing tests/run-tests.sh now turns CI red instead of echoing "nothing to validate".
  • Least-privilege scaffold. permissions: contents: read, checkout@v7 with persist-credentials: false, setup-node@v7 (Node 24; I checked the tags) and workflow_dispatch.
  • Allow and deny rules that match the standard.
    • The allowlist adds the test runner, the GitHub MCP PR/CI/issue tools and WebSearch/WebFetch. Read-only shell is left out because Claude Code already runs it without a prompt, and gh api and interpreters stay out.
    • A new append-only permissions.deny blocks force-push, pushes to main, tag pushes, gh release create, gh pr merge --admin and gh workflow disable.
    • Per the permissions docs, :* matches at a word boundary, so --force-with-lease is still allowed (tested).
  • Bootstrap hints. A main ruleset hint; the caveat that settings load only from the session's primary repo; and a private-vulnerability-reporting hint when the security contact links to advisories/new.
  • SessionStart hook.
    • The stop-hook heal is now an absolute, copy-pasteable command, with "ask the user once".
    • A new read-only job names the gaps in a stale CI scaffold.
  • Managed block (stamp 1.16.1). Fail-closed and strict checks; holding a push is fine; Pages dot-path guidance (include-hidden-files, staged _site/, action majors, job-scoped perms) and network allowance for third-party hosts; --force-with-lease is the normal push when branches survive merges; settings edits go in their own commit.
  • hooks.json now quotes ${CLAUDE_PLUGIN_ROOT}. The current claude plugin validate --strict rejects the unquoted form. This also affects video-bug-analyzer, and that is its only change.

app-website-evaluator. In --dir mode, when the repo's Pages workflow uploads without include-hidden-files: true, the evaluator warns that /.well-known/ is not published instead of crediting security.txt.

Repo

  • version-bump-guard. A version now counts as released when any v* tag's tree carries it. Tags are repo releases, so repo-bootstrap 1.15.1 had shipped in v1.16.0 while reading as unreleased.
  • scripts/verify-live.sh (new step 6 in RELEASING §1) checks:
    • the raw files GitHub serves;
    • a clean claude plugin install of every plugin in a throwaway HOME: version, byte-identical files, scripts run;
    • whether the community catalog lists us (informational).
  • Own workflows: checkout v7, read-only token.
  • The buildwithclaude manifest moves from 1.0.0 to 1.16.1, the suite now enforces it, and its stale ffmpeg claim is gone.
  • HANDOFF and IMPROVEMENTS refreshed, including the deferred [feedback] repo-bootstrap: scaffolded CI fails open, publishes repo internals but not .well-known; settings allowlist outruns the standard #128 items: --pages spec, --refresh-ci, browser-test scaffold, network-host hint, tracker-blocked forms.

Closes #128 (deferred parts recorded in IMPROVEMENTS.md).

Release checklist

  • Bumped version in .claude-plugin/plugin.json for each plugin whose files changed: repo-bootstrap, app-website-evaluator and video-bug-analyzer → 1.16.1. Also VBA_VERSION and the submission manifest.
  • Added a ## [1.16.1] entry to CHANGELOG.md, plus the footer link.
  • Updated the README plugin-table rows and the header Version: line (1.16.1).
  • Ran bash tests/run-tests.sh locally: 324 passed, 0 failed, 1 skipped. shellcheck is clean, and claude plugin validate --strict passes for the marketplace and all four plugins.
  • Preserved existing script comments; annotated new/changed lines.

🤖 Generated with Claude Code

https://claude.ai/code/session_015M7QWFzt9NnWmSmNQXj1mM


Generated by Claude Code

cportka and others added 2 commits October 15, 2026 20:07
…mmit)

Separate commit, as the refreshed standard asks for settings edits: adds the
loop's MCP PR/CI tools, the test runner and web lookups to `allow`, and the new
`deny` list (force-push, push to main, tag pushes, gh release create, admin
merge, workflow disable). Written by bootstrap-repo.sh --portka-standard
--scope project; append-only, nothing removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015M7QWFzt9NnWmSmNQXj1mM
…heck

repo-bootstrap 1.16.1:
- Scaffolded validate.yml / portka-standard.yml fail CLOSED (plain
  `bash tests/run-tests.sh`), `permissions: contents: read`, checkout@v7 with
  persist-credentials: false, setup-node@v7, workflow_dispatch.
- --portka-standard allowlist matches the loop it pre-authorizes (test runner,
  GitHub MCP PR/CI/issue tools, WebSearch/WebFetch) and writes an append-only
  `permissions.deny` for what the standard forbids; `:*` word-boundary keeps
  --force-with-lease allowed. Prints a main-ruleset hint, the primary-repo
  settings caveat, and a private-vulnerability-reporting hint when relevant.
- SessionStart hook: absolute, copy-pasteable heal command + "ask once";
  new read-only job flags stale CI scaffolds' specific gaps.
- Managed block (stamp 1.16.1): fail-closed + strict checks, holding a push,
  Pages dot-path/include-hidden-files guidance, --force-with-lease as the normal
  push when branches survive merges, settings.json primary-directory note.
- hooks.json quotes ${CLAUDE_PLUGIN_ROOT} (strict validate rejects unquoted).

app-website-evaluator 1.16.1: --dir warns when the repo's Pages workflow
uploads without include-hidden-files (security.txt in tree != on site).

video-bug-analyzer 1.16.1: hooks.json quoting only.

Repo: version-bump-guard treats a plugin version as released when ANY v* tag
carries it (repo-bootstrap 1.15.1 shipped in v1.16.0 untagged by its own
number); scripts/verify-live.sh post-merge live-sync check (raw files, clean
install in a throwaway HOME, community catalog status) + RELEASING step;
own workflows on checkout v7 / read-only token; submission manifest synced
and suite-enforced; HANDOFF/IMPROVEMENTS refreshed; tests for all of it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015M7QWFzt9NnWmSmNQXj1mM
@cportka
cportka merged commit 8eb4559 into main Oct 15, 2026
2 checks passed
@cportka
cportka deleted the claude/code-repo-setup-practices-var7xm branch October 15, 2026 22:22
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.

[feedback] repo-bootstrap: scaffolded CI fails open, publishes repo internals but not .well-known; settings allowlist outruns the standard

1 participant