Repository navigation
feat: adopt the 2,000-PRs talk decisions across the marketplace - #7009
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add docs/conventions/enforcement-ladder/ (1.0.0): one strongest-first rung list with make-impossible and canonical-helper, the "Where boundary rules live" list, each reader's selection rule, reordering through project instructions, and the codebase-and-history-as-memory corollary. Generated copies in review, session-flow, harness-config and architecture; a registry row; audit-enforceability gains the invalid-state -> make-impossible crosswalk row and drops the Semgrep install recipe; architecture-guardian and audit-automation-gaps point at their copies. Pre-flight (git grep 'strongest first|enforcement hierarchy' over plugins and docs, CHANGELOGs excluded): - harness-config audit-automation-gaps SKILL.md:34 (rung order): now cites its copy. - harness-config audit-automation-gaps SKILL.md:141 (weakest-to-strongest walk): now names the ladder's end rungs. - harness-config audit-automation-gaps SKILL.md:2, :27, :213, :399 and README.md:10, :215: name the hierarchy without restating an order; left. - harness-config audit-automation-gaps templates/checklist.md:8: a short sample of levels, outside this slice's file list; left. - harness-memory audit reference/criteria.md:290: names the concept with no order, outside the fence; left. - docs/adr/0021:9: an accepted ADR, a historical record; left. - docs/upstream/claude-code-mods/.../research-repo-fit.md:287: a research record under docs/upstream, outside the fence; left. - improvement find SKILL.md:86 and overengineering scrutiny-method.md:108: "strongest first" orders evidence tiers, not enforcement rungs; left. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…keep-list audit-comment-residue gains the unjustified-workaround shape and --added-since; dissolve-comments gains an edit-free report token with constraint proposals and a lint-proposal findings file, lists removed workaround comments as open root-cause work, and keeps outside-constraint comments under aggressive; tidy's #14 example carries a removal condition. scripts/added-lines.sh prints the line ranges a branch adds, reading git's own diff (no external diff or textconv) and digit-checking every hunk header. The aggressive survivors are aligned across the eval, the comment_posture option text and triage. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… deleted specs Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The reduce hotspot lens now runs derivable-list.py over ranked files and flags a hand-kept list of at least 5 entries where at least 80% name a tracked file or folder. A confirmed second list is report-only and route-lane; the remediation catalog's new "Second lists" section compares keeping the list, build-time discovery and generating it with a drift check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… debug Debug gains an advisory premise step in "When to escalate", a re-runnable census for a symptom skewed across actors, stale persistent state as first hypotheses after a restart, the cheaper eliminating test, removal of code a refuted hypothesis added, a load-imbalance worked example, before-and-after loop output in the report and PR description, the unjustified-workaround class, a diagnosis-only stop and a ## Next section. Five eval cases cover the new behavior. No owned row was done-on-parent. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…horing and comment keeps trace-intent widens its document and tracker searches to postmortems and incident follow-ups for a defensive target (row 79). write-for-humans reports an unlisted metaphor noun as a candidate for ai-slop's metaphor-jargon rule when ai-slop is available (row 85). techniques.md section F gains a strategy-family index with each family's trace signal, and removing work is marked as found by reading code (rows 120, 121); performance:target cites section F. explore-directions offers an optional reference pass, screenshots each variant through playwright when available, and states tradeoffs and a recommendation while the user still picks (rows 123-125). skill-authoring ends with a closing report (row 147) and its guidance states the rule, giving a reason only where leaving it out would mislead (Q84). dissolve-comments re-checks a kept class-C claim against the code and reclassifies a refuted one as obsolete, through trace-intent when available (row 82). No row was done-on-parent. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…digest # Conflicts: # plugins/architecture/CHANGELOG.md # plugins/code-tidying/CHANGELOG.md # plugins/debugging/CHANGELOG.md # plugins/discipline/CHANGELOG.md # plugins/discovery/CHANGELOG.md # plugins/harness-config/CHANGELOG.md # plugins/harness-ops/CHANGELOG.md # plugins/multi-agent/CHANGELOG.md # plugins/performance/CHANGELOG.md # plugins/planning/CHANGELOG.md # plugins/review/CHANGELOG.md # plugins/session-flow/CHANGELOG.md # plugins/testing/CHANGELOG.md
Claude Code substitutes $1 and $3 with skill arguments; a single backslash keeps the awk field references literal. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…k 0052 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… suite builds fixtures Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add /debugging:analyze-profile. Load mode converts a Chrome trace, V8 .cpuprofile or .heapsnapshot into SQLite with a stdlib script that writes <out>.partial, renames on success, refuses to overwrite and redacts token-shaped strings, then narrows to a file:line cause with read-only queries and no fix. Capture mode picks the recording by symptom, asks before each launch or attach, routes elevated commands through a shown script file, and refuses when no one is present to answer. Debug hands it an artifact with no reproduction (Phase 1) and a profile an instrument step wrote (Phase 4); testing:diagnose names it in its Skip clause and its Next now leads with /verification:confirm fix; performance:target hands it a captured profile when the debugging plugin is enabled. bugs:scan gets no Skip clause: its description is 993 of the 1024 codepoints check-skill allows. Debugging gains prerequisites.json (python3 required, profilers and symbolizers optional) with its generated checker copies, and a plugin-level eval suite. Rows 153-160 were all absent on the parent. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… and a conflict column Re-pin the pstack record to cursor/plugins@23e4138daa (pstack 0.15.6) in the git pin form, re-decide the ten existing rows against per-path diffs of every file their verdicts rest on, and add rows for the verification pair, autopilot-full with swarm, automate-me, principle-explain-the-number, benchmark-checklist, the PR-workflow playbooks (differences recorded as options naming their settings) and a credit row per unit any planned absorb takes from. Add a conflict column (Pocock-derived skills, plus PR-pipeline notes), a Map of all 75 units at the pin, and cross-link mattpocock-skills.md. The record is links-only and carries no em dashes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…erged in mattpocock-skills.md now pins mattpocock/skills@84fdeff under skills/, uses the shared pinned-git recheck trigger, links every row at the pin and holds our decisions only, in our own words. The v12 map is merged in as a one-line-per-unit Map section with its cross-cutting and drift/fix findings, and mattpocock-skills-v12-map.md is deleted; the shipping-course cross-link points at the merged Map. The page cross-links cursor-pstack.md. Readers of the marker line: none for this page (git grep of Last audited upstream state outside docs/upstream finds only the harness-ops changelog set). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ml with a JSON Schema ADR 0054 adopts docs/conventions/<concern>.yaml validated by a JSON Schema as the team layer for structured configuration, superseding ADR 0044 for structured config and amending ADR 0018's criterion. The config-cascade contract moves to 1.6 to match. The shared reader lib/parse-concern-value.sh now reads dotted keys, lists (--list), stdin (-), a validated --ref passed after --end-of-options, and --strict. Every lookup goes through lib/yaml-subset.awk, promoted from multi-agent and extended to block and flow sequences, flow mappings and a uniform base indent. The parser and reader copies are synced into harness-memory, session-flow, docs-hygiene and multi-agent. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ompose slice rules in our own structure The needs-info comment leads with fact-seeking questions, each naming what its answer decides, then lists what the pass settled. Decompose checks each draft slice against four ordered tests, puts prefactor slices first, lays out expand, migrate and contract as an item table, and publishes slice bodies as Parent, Depends on, Outcome and Done when. No script, adapter or test read the old needs-info headings or the empty Blocked-by text; the ## Parent heading, which work and re-decompose read, is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d assessment rules in our own structure Organize the four workspace format files around the skill's coaching flow (interview, dialog, exercises, quizzes, session close, resume) instead of the upstream template order. Every rule, the Mission title, the Repo Sources heading and the supersession status line are kept. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
architecture:improve gains a boundaries lens. It reads the boundary rules a repository records, from the enforcement ladder's "Where boundary rules live" list, matches them against the project edges map-dependencies cites, and reports each crossing. A rule the user confirms goes to a review-findings file under <memory_dir>/improve/<branch-slug>/ for review:audit-enforceability's architecture-test rung. With no rule recorded it asks instead of inferring one from folder names. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
emit-stubs.sh takes an optional sixth TSV field, the error text, rendered
under "## Error text" ("none proposed" when absent), and maps each rung to
an earliest-stage frontmatter value through one fixed table. The TSV is
now split by hand on tabs so an empty middle field keeps its position; a
line with other than five or six fields, or whose first field is not a
rank in the findings table, exits 2 with the line number and writes
nothing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
quality-gate code mode and fanout run /code-metrics:audit-size when it is available. When the size.file_lines reference came from a consumer layer, files that crossed it between the base and the head go into the code-reviewer brief; the agent reports each with the reference and its layer and raises no other size finding. The bundled default flags nothing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A 5-word overlap scan of the files the two AI Hero records name, plus every file mentioning the course, against the public aihero.dev pages (AI Coding Dictionary, skill pages, crash-course landing page) and mattpocock/skills at 068b6e0 and 84fdeff found shared runs in both records, the glossary, the invocation-mode convention, and eight plugins. Each is rewritten in our own words with the rule unchanged; agent-brief.md and test-doubles.md get our own examples. The agent-brief template heading and field labels stay byte-identical. interview SKILL.md and context/loop.md are left as found: tests/interview-defenses.test.sh digests those sections and recomputing it is attended-only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
audit-duplication compares its clone-class count with the newest earlier kept report of the same project and scope mode, adding a trend object and a Clone trend line. improvement:find reads copy count and trend from it, ranks duplication by spread, and hands a growing class to the enforceability audit through a memory-tier review-findings file. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add /performance:climb. Before the first attempt it writes a keep rule (counter, direction, gain_floor) to the memory slice and never edits it, refuses a dirty checkout, and works in its own worktree on climb/<goal-slug> with a detached second worktree at the last kept commit as the baseline arm. Each attempt is one hypothesis naming a mechanism, one commit, the project's tests and both arms re-measured through ab.sh; climb_log.py decide applies the rule, a rise in failures or a change in work done reverts regardless, a revert runs git reset --keep to the last kept commit, and every attempt is appended to a nine-field TSV log. The run continues past a met target until min_attempts, drafts an unattended stop condition through /planning:draft-goal-condition and starts no /goal. goal takes an optional min_attempts when a loop is planned; snapshot freezes a loop harness only after discriminate.py exits 0 and the harness prints failure and work tallies, and its Next names climb; harness-integrity gains rule 8. prerequisites.json gains python3 and git for climb (the file and its checker copies already came with go-faster, so shared-copies.txt is unchanged). The plugin-level eval suite gains three climb cases. Rows 122 and 128-134 were all absent on the parent. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 3m 59s —— View job Security review complete
Scope. This head ( What changed in the delta:
No security issues found in the reviewed delta. GitHub Actions hardening (triggers, permissions, pinning) is zizmor's lane, not re-reported here; nothing in this delta needed trust-boundary reasoning beyond the above. |
|
Claude finished @kyle-sexton's task in 5m 2s —— View job Claude code review — delta since last passScope.
Findings: none at the code-review bar. Every file in the delta is one of:
No new correctness, maintainability or CLAUDE.md-alignment issues found in this delta. I did not re-flag the pre-existing |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…consequence visual-compare.mjs iterated only the baseline's images, so an extra image in the after capture passed unreported. ADR 0064's Consequences said schema validation does not block CI, contradicting Decision 7 and the aggregator wiring in pr-require-checks.yml. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 8s —— View job Claude code review — incremental pass (
|
|
Claude finished @kyle-sexton's task in 1m 10s —— View job Security review complete — no issues found
Scope. Per the lane header, this pass reviews only the delta since the last What changed in the delta (5 hunks across 6 files):
Skip gate applied. None of the five hunks touch injection surfaces, authorization/access-control logic, token/secret/credential handling, or GitHub Actions trigger/permission surface, and none deletes, narrows, or softens a standing instruction (the ADR edit tightens the stated consequence, it doesn't remove a guardrail). This delta has no security-relevant surface, so no deep hunt/verify fan-out was run. No security issues found in this delta. GitHub Actions hardening is zizmor's lane, not this one. |
…lugin source registry Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 3m 23s —— View job Claude is working on this
|
|
Claude finished @kyle-sexton's task in 51s —— View job Security review complete — no issues found
Scope. This pass covers only the delta since the last What changed: the registry gains two new glob patterns on the existing Why this has no security-relevant surface: confirmed by reading the consumer, Skip gate applied: change has no security-relevant surface — a pure data/manifest edit to a read-only audit registry, no injection surface, no authorization logic, no secret handling, no Actions trigger/permission change, and no removed or weakened instruction/guardrail. No security issues found. |
… check Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 43s —— View job Security review complete — no issues found
Scope. Per this lane's instructions, this pass covers only the delta since the last What changed. The diff adds three Why this has no security-relevant surface. Confirmed by reading the consumer, Skip gate applied: change has no security-relevant surface — a documentation/comment-only edit to a read-only audit registry, no injection surface, no authorization logic, no secret handling, no Actions trigger/permission change, and no removed or weakened guardrail (the annotations strengthen traceability, which is the opposite of weakening anything). No security issues found. |
|
Claude finished @kyle-sexton's task in 1m 34s —— View job Claude code review — incremental pass (
|
…sts or failing checks remain (#7056) <!-- claude-projects-attribution: {"github_login":"kyle-sexton"} --> _Requested by **Kyle** · [project thread](https://claude.ai/code/project/chan_01FAwvkDrP9dbkyZDmMQiMav?thread=cmsg_01FAwvkDrP9dbkyZDmMQiMav3VhqGrPAKf4CfZbLHxPHqU)_ Closes #6463 ## Summary Before: nothing checked a direct `gh pr merge`, REST or GraphQL merge, or MCP merge call. An agent could merge (or ask for `--admin`) without reading an unresolved review thread. After: a new guardrails guard, `block-unresolved-pr-merge`, blocks a merge while the PR has an unresolved review thread, a reviewer whose latest decisive review requests changes, or a failed check run or commit status on its head. The block message lists each thread (path:line, first line of the comment, link), each changes-requested reviewer and each failing check, and names the fix. `--admin` and `--auto` are held to the same rule. ## Fix - `plugins/guardrails/hooks/block-unresolved-pr-merge.sh`, on the existing Bash|PowerShell `run-guards` row plus a new MCP row (`^mcp__.+__(merge_pull_request|enable_pr_auto_merge)$`). Matches the scope update's table: `gh pr merge` (all flags), `PUT repos/{o}/{r}/pulls/{n}/merge` via `gh api` or `curl`, the `mergePullRequest` / `enablePullRequestAutoMerge` / `enqueuePullRequest` mutations via `gh api graphql` or `curl`, and the MCP merge tools. Matching runs on parsed argv at a command position, so a quoted mention (commit message, echo, heredoc) stays quiet. Commands that name neither `merge` nor `enqueue` leave after one string test. - **GraphQL is refused in Claude Code cloud sessions (HTTP 403)**, so PR state is read over REST: `pulls/{n}`, `pulls/{n}/reviews`, `commits/{sha}/check-runs`, `commits/{sha}/status`. Thread resolution has no plain REST route: GraphQL `reviewThreads` where served, else the cloud route `GET pulls/{n}/ccr/review_threads` named in that 403 body (a `CLAUDE_CODE_REMOTE` session tries the cloud route first). The same 403 body names `PUT pulls/{n}/ccr/auto_merge` as the cloud auto-merge path, so that route is matched too. - Fails open with a notice on both channels (systemMessage and additionalContext) saying the merge will run unchecked when `gh` is missing or unauthenticated, a read fails, the read budget runs out, or the PR cannot be identified. - **Fails closed for a GraphQL merge, auto-merge or merge-queue mutation whose PR cannot be resolved.** That covers an id from `$ID`, `"$PR_ID"`, `$(jq ...)` (the source-control merge reference 4.2.2 enqueue shape from #7075), a node that can't be read, or no gh. The block message says how to fix it: pass a literal `-f id=PR_...` or use `gh pr merge <n>`. - **One time budget**: all reads share 35 s, and each call is capped at the time left and at 15 s, so the shared Bash row stays under its 60 s timeout. A row timeout would drop every guard's block (run-guards.sh, AGGREGATION). The cap is enforced by `timeout` where it exists, and by a watcher process where it doesn't (stock macOS). No environment variable changes the budget: `settings.json` `env` reaches a hook's environment, so a knob could make every merge run unchecked. The budget tests run a copy of the hook with its one budget line rewritten. - **Command position**: the guard steps over leading assignments, reserved words the tokenizer leaves at a segment head (`then`, `do`, `{`, ...), and the `command`/`time [-p]`/`exec`/`nohup` prefixes. It reads `gh pr -R o/r merge`. `gh pr merge --help`/`-h` and `--disable-auto` are not merges. The guard header lists the remaining gaps: wrappers like `sudo`/`env`/`xargs`, child shells, `$(...)`, and `--input` mutation files. - Registered in `guard-requires.sh` (MCP inputs declared unprimed), `hooks.json`, `plugin.json` userConfig `block_unresolved_pr_merge_enabled` (default on), README guard/option tables, changelog fragment (minor). Defaults I picked where the issue left a detail open (please confirm): 1. **`gh pr ready` is not matched.** The 2026-10-06 scope update dropped the advisory and its table lists merge paths only; the issue title still says "and gh pr ready". Adding it is one line if wanted. 2. **Pending checks block an immediate merge but not an auto-merge or merge-queue request** (`--auto`, `enablePullRequestAutoMerge`, `enqueuePullRequest`, `enable_pr_auto_merge`, `ccr/auto_merge`), since those wait for checks by design. Failed checks, threads and change requests block all paths. 3. **Every unreadable state fails open** (not only missing/unauthenticated gh), with the org ruleset as the server-side backstop, as the issue's residual note says. The one exception is the unresolvable GraphQL mutation above, which fails closed. 4. Outdated unresolved threads count, matching the babysit merge gate. Open for Kyle (found by the overnight verifier, not changed here): 5. **The fail-closed GraphQL rule also covers gh missing or unauthenticated.** A mutation with a literal `PR_...` id whose node can't be read is blocked. That covers no gh, a 401, and the cloud GraphQL 403. The issue's acceptance says the guard fails open when gh is missing or unauthenticated. Option A: keep it, since the mutation can't be checked. Option B: fail closed only for a non-literal id and fail open, with the notice, for a literal one. 6. **Interaction with #7075.** Its source-control merge reference 4.2.2 passes the enqueue id through `$(jq ...)`. With this guard on, that step is always blocked, even on a clean PR (verified against branch `fix/6630-merge-confirm-queue-entry`). One side must change before both merge: #7075 passes a literal id or uses `gh pr merge`, or this guard relaxes the rule. ## Verification - `bash plugins/guardrails/hooks/block-unresolved-pr-merge.test.sh` -> 162 passed, 0 failed (at 96f4c12). Since the first push, the suite also covers: - the fail-closed GraphQL cases (substitution id, `$ID`, `"$PR_ID"`, `--input`, the full #7075 shape, an unreadable literal node) - `--help`/`-h` stay-quiet cases that assert no gh call - every command-position prefix, plus `gh pr -R o/r merge` - the budget with a hung fake gh, both with and without a `timeout` binary on PATH (returns in under 8 s), run on a copy with a 2 s budget - a case where an env var can't shorten the budget (`GUARDRAILS_BUPM_BUDGET_S=1` with a 0.7 s gh still blocks). It failed before the knob was removed. A fake `gh` on PATH serves fixtures and logs calls. Covers every merge path, both shells, MCP, GraphQL-refused fallback to the cloud route, current-branch lookup, the fail-open cases (gh missing, 401, no thread source, no node id), and MUST-stay-quiet cases that also assert no `gh` call (commit message, echo, `gh pr view`, `--disable-auto`, GET of the merge route, a GraphQL query, grep, `git merge`, heredoc, PowerShell quoted mention, an unrelated MCP tool). Also runs through `run-guards.sh`. - `scripts/affected-tests.sh --base origin/main --run`: - First push: 35 shell suites passed, including `run-guards.test.sh`'s declaration checks for the new guard. The 2 selected `.mjs` suites, run separately with `node --test`, also passed. - Fix push: on a loaded host the run hit the 30-minute background limit. Every suite that finished passed: all 26 guardrails hook suites, plus apply-plan, splice-assets, both routing suites and the lib suites. The four script suites it had not reached all passed when run directly: `check-killswitch-hoist` 28/28, `check-script-contract` 51/51, `node-notice-rows` 6/6, `check-guardrails-ps-differential` 21/21. - Knob-removal push (96f4c12): the run was stopped early at wrap-up. The suites that finished passed, apart from `block-hook-bypass`, which fails identically on `origin/main` when the checkout sits under `/tmp`. A full affected run on this head is still to do. `shellcheck -x`, `check-killswitch-hoist`, `check-changelog-fragments --check-required origin/main` and `check-changelog-parity --check` pass. - Live, read-only, in a Claude Code cloud session: the guard against open PRs #7036 (blocked: failing `ci-status`, `ci-lanes`), #6910 (blocked: pending checks), #7009 (allowed); 3.0 to 3.6 s per merge command (five sequential calls), recorded in the guard header and README. - `shellcheck -x` (repo `.shellcheckrc`) clean; `scripts/validate-plugins.sh`, `scripts/check-changelog-fragments.sh --check-required origin/main`, `scripts/check-changelog-parity.sh --check`, `scripts/check-killswitch-hoist.sh`, markdownlint on the README and fragment: all pass. This changes what agents may do unattended (it blocks merges), so it needs a human merge decision. ## Related - #5947 (opt-in ask guard for high-stakes gh calls; independent) - `/source-control:babysit-prs` merge gate counts threads the same way (outdated included) 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01L8KdG7fWg2YrErVYWtohmR --- _Generated by [Claude Code](https://claude.ai/code/session_01L8KdG7fWg2YrErVYWtohmR)_ --- _Generated by [Claude Code](https://claude.ai/code)_ --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: melodic-automation-lanes[bot] <337595936+melodic-automation-lanes[bot]@users.noreply.github.com>

Closes #6085
Summary
Adopts the 2,000-PRs talk decisions (Brief Q1-Q134) across the marketplace on one integration branch. Each slice landed through its own reviewed slice PR into this branch; this PR carries the merged result to
main. Merges in this repository stay human-only.Security-surface changes
What this PR adds, with the line that grounds each item:
.github/workflows/maintenance-file-upstream-drift-issues.yml:workflow_dispatch(:27-28) and files one issue per drifted upstream throughscripts/upstream-drift-issues.sh.permissions: {}(:30), with concurrency at the top level (:32-33).contents: readandissues: write(:40-42), and checkout setspersist-credentials: false(:47).gh issue create --body-file(scripts/upstream-drift-issues.sh:18-21,:205).scripts/upstream-drift-issues.sh:158-162,:231)..github/workflows/pr-require-checks.yml:convention_yaml_schemastep runsscripts/check-convention-yaml.sh --checkwithcontinue-on-error(:618-621).:1114, run at:1143), so a schema error fails CI.npm cileg (slice 58),.github/workflows/pr-require-checks.yml:pixelmatchandpngjsfrom their committed lockfile (:2432-2433, which runsnpm ciperplugins/testing/skills/check-visual-parity/scripts/visual-compare.sh:147).:2349), and a missing dependency fails instead of skipping (:2487).check-jsonschema==0.38.2is added to the hash-locked.github/requirements-ci.txt(:366)./plugins/testing/skills/check-visual-parity/scriptsin.github/dependabot.yml(:132-150).plugins/work-items/skills/triage/context/apply-outcome.md:46andplugins/work-items/skills/work-loop/SKILL.md:344.plugins/work-items/tools/work-item-tracker/lib/labels.sh:35andfrontier.sh:30.provenance: signalgetswork-class: untrusted-provenance, whoever filed it, and is never paired withagent-ready. It is human-gated for build, verify and merge, andlist-frontier --autonomousdrops it. This only tightens admission.docs/conventions/execution-target.yaml, with a team layer only and nouserConfigoverlay (docs/conventions/execution-target/README.md:38).ET_TRUSTED_STAGESis empty (plugins/harness-ops/skills/lanes/scripts/lane-launcher.sh:925), so the launcher refuses every stage a cloud-session, cloud-routine or cloud-project host (:1434,:1450,:1598-1610), and no cloud lane launches.plugins/harness-ops/skills/lanes/scripts/lane-launcher.sh:1881-1884,:1901-1903,:1928,:1946-1949).docs/conventions/source-control.yamlat the PR's base branch, never the head branch; every unattended run, and every--pushedrun, opens a draft (plugins/source-control/skills/pull-request/reference/create.md:424-433,:443-447,:545; provider spokeplugins/source-control/reference/providers/github/pull-request/create.md:16-24, "Read the open state at the base branch").label-provenance): a label counts only when an actor withwrite,maintainoradminapplied it; a body edited after the admitting label is refused, and the work-loop escalates it once (plugins/work-items/tools/work-item-tracker/adapters/github/label-provenance.sh:85-93,:98-126;plugins/work-items/skills/work-loop/SKILL.md:370-390).plugins/work-items/reference/agent-brief.md:71-76).plugins/work-items/skills/work-loop/reference/objection-window.md:16-20).plugins/work-items/skills/triage/SKILL.md:174,plugins/work-items/skills/triage/context/apply-outcome.md:147-151).dismissrow (plugins/source-control/skills/babysit-prs/reference/feedback.md:60-66).setup,up,infoanddownrun repository-defined commands. They run as model steps under permission rules, not from worktree hooks; the entry is read at origin's default-branch commit, never the checked-out branch; and no verb runs for an untrusted-input worktree (docs/conventions/workspace-environment/README.md:33-36,:77-97,:147-157).docs/conventions/code-metrics.yaml; the writer refuses symlinks, more than one hard link and paths resolving outside the repository root, and drops unknown keys carried from the old file (plugins/code-metrics/skills/setup/scripts/setup-apply.py:25-28,:69-105,:361-365).allowed-toolsgrants:plugins/code-metrics/skills/audit-suppressions/SKILL.md:6:scripts/audit-suppressions.shandpython3 scripts/suppression-scan.py.plugins/code-tidying/skills/dissolve-comments/SKILL.md:4:scripts/added-lines.sh.plugins/review/skills/audit-enforceability/SKILL.md:6,plugins/review/skills/fanout/SKILL.md:6andplugins/review/skills/quality-gate/SKILL.md:6:node skills/setup/scripts/setup-apply.mjs --check(quoted and unquoted).plugins/review/skills/ratchet/SKILL.md:6:python3 scripts/ratchet.py(quoted and unquoted).plugins/session-flow/skills/retro/SKILL.md:6:scripts/fetch-review-comments.sh.python -Iat the-csites (lib/fetch-docs.sh:347,:650and its plugin copies;plugins/code-metrics/skills/audit-suppressions/scripts/audit-suppressions.sh:108;plugins/session-flow/lib/python-probe.sh:27;plugins/session-flow/scripts/transcript_dirs.sh:119).scripts/upstream-drift-issues.sh:158-162).lib/setup-apply.mjs:181-229,lib/yaml-subset.awk:40-58, and their plugin copies).OWNER,MEMBERorCOLLABORATORauthors (plugins/session-flow/skills/retro/scripts/fetch-review-comments.sh:107-112).git rev-parse --verify, and passes it after--end-of-options(lib/parse-concern-value.sh:92,:96).status: confirmedandprovenance: signal, deployed through melodic-software/github-iac#681.plugins/source-control/skills/babysit-loop/SKILL.md:94), and this PR adds no merge-rung config.git diff origin/main...HEADis empty for the merge wrapperplugins/source-control/scripts/source-control-babysit-merge, forplugins/source-control/skills/babysit-prs/scripts/babysit_merge.py, fordocs/conventions/pr-pipeline.yamland fordocs/conventions/loop-lane/.plugins/autonomy/reference/routines/advisory-cve-triage.md:74).Fix
Every slice from the decomposition, with its status. "deferred (pipeline lanes, #6202)" waits on the pipeline's verify, merge and post-merge lanes. Follow-up issues: #7005, #7006, #7007, #7008, #7029, #7052, #7104, #7116, #7119, #7195, #7196, #7197, #7210, #7212, #7232, #7240, #6202, #6140, #5906.
pr-refineslot, in the pipeline-input issue #6202--bgauto-mode lane (the launcher's own launch line) merging through the wrapper on the scratch repo, with a control run; WS-MP: local--bglane merge probe; its scratch config declares a verify activity and carries nomerge.authorityuntil the schema has it (DA H5)Verification
validate-evalson every new skill: 8 of 8 pass (exit 0).claude plugin eval: the six plugins whose suites are gated behind Bash were not measured on this host. They are tracked in test: measure the Bash-gated plugin eval suites from #7009 on a host with a ready sandbox #7116 (6 plugins, 48 cases).c6813e327. Re-run on the final head after the base merge.6f0df17fefound 7 issues. All were fixed onslice/v14-fixes:Related
Refs: #5906
Refs: #6140
Refs: #7210
Refs: #6202
Refs: #7005
Refs: #7006
Refs: #7007
Refs: #7008
Refs: #7029
Refs: #7052
Refs: #7104
Refs: #7116
Refs: #7119
Refs: #7195
Refs: #7196
Refs: #7197
Refs: #7212
Refs: #7232
Refs: #7240
melodic-software/github-iac#681(merged and deployed: adds thestatus: confirmedandprovenance: signallabels)melodic-software/standards#765(merged: syncs the engineering standards intodocs/standards/)🤖 Generated with Claude Code