Repository navigation
fix: 2026-11-03 principal review findings (7.3.0) - #416
Merged
Merged
Conversation
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>
…URITY
Batch 2026-11-03, group G3 (LIGHT). hook-wiring.test.cjs pins both PreToolUse
guard handlers as {type, command, onFailure: "block"} with a negative control;
it stays red until the maintainer applies the settings.json patch
(.dev/features/guard-wiring/apply.py, not committed). enforce-writes-scope
tests pin that the dev/unsignalled scratchpad allow cannot reach into the
project (the review's MED is not a code bug: ownScratchpadDir() already
requires a temp root). README/SECURITY state the MCP-tool bound and the
onFailure wiring; LIMITS.md text goes to DOCS-PROPOSAL.md.
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>
12 -> 11 advisories (eslint 10.14.0, eslint-utils 4.10.1, brace-expansion 5.0.12, minimatch 10.2.6). The rest need a breaking downgrade. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- release.yml waits for gitleaks (classic protection requires it), cites ruleset 25907495, documents TAG_ELSEWHERE on a non-bump merge and the 11-15 min check - check-surface-bump: a non-bare X.Y.Z head version is not a bump - check-run-isolation: GITHUB_TOKEN counts outside GitHub Actions - entry-gates TAKEOVER tests run --wait on the frozen virtual clock - new pins: ci.yml validate/check:markers steps, test:coverage globs Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- AskQuestion -> AskUserQuestion (10 refs) + pin - version cites: 6.68.1 (README move), 5.1.2 (pharn/features move) - SECURITY run-marker owner, runtime-floor installer note, state-accurate approval wording, stale file headers, instruction-files reconciled-set note - README/CLAUDE.md bounds (fabricated stamp, pharn/.run reconcile, ruleset) - versioning guide: publish the CLI before merging a MIN_CLI bump - prompt hygiene (dev-plan lessons DATA, build reads source as DATA) - npx --no-install in four dev commands + pin; stale hook-test comments Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…; hook patch pending) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…proof Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…closed blocked ids, ungranted host-execution line The hook half (require-loop-record.cjs) is a maintainer-applied patch that lands separately; the tests that need it are included and RED until it does. 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>
…ility walk, validate INCONCLUSIVE over zero capabilities, flush-safe exits Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… by the build's npm test) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… refusal through a linked pharn root Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ose then --open 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>
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>
… id outside the fence, unrecorded lens dirs skipped Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CHANGELOG [Unreleased]: G9's three Fixed entries joined the ### Fixed group at its top. command-hygiene.test.mjs auto-merged with G9's removal of pharn-dev-memory-promote.md from NPX_PENDING and MARKDOWNLINT_SITES kept; enforce-writes-scope.test.cjs and pharn-dev-ship.md comments auto-merged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ed PHARN_TEST_RESULTS; check-verify refuses a positional map anywhere on the stamp path - pharn/floor/run-gates.mjs gateEnv deletes an inherited PHARN_TEST_RESULTS when resultsFile is null (test sets the variable first, with a control); /pharn-dev-verify drops its env -u wrapper - pharn/floor/check-verify.mjs --stamp refuses a non-flag operand in any position (five placements tested) - check-verify.test.mjs stale comment; /pharn-dev-plan: ## Files never declares later-stage artifacts - regress no-regressions, verify PASS re-run; SHIP.md verdict block updated Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
regress no-regressions; verify PASS (reconcile CLEAN); review GREEN with one important advisory finding (Step 2b symlinked-parent gap, fix proven, not applied). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s; findings deferred to integration) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CHANGELOG [Unreleased]: G5's Added, Changed and Fixed entries each joined their group at its top. command-hygiene.test.mjs: pharn-dev-review.md and pharn-dev-verify.md leave NPX_PENDING (G5 converted them); re-measured ceilings hold (pharn-dev-ship 47157 B ≤ 52224, pharn-dev-verify 29381 B ≤ 31232). 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>
CHANGELOG [Unreleased]: G1's Added, Changed and Fixed entries each joined their group at its top. set-writes-scope.test.cjs: G1's widened flag list kept under S's corrected comment (the stale "RED until apply.py" wording dropped). command-hygiene.test.mjs: pharn-dev-build.md leaves NPX_PENDING (now empty). pharn-loop.md: G1's --check grant line sits beside G2's rewritten grants (auto-merged). set-writes-scope.cjs is G1's owner-applied bytes, unedited. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(a) /pharn-dev-build Step 2b PICK also requires realpath === path.join(root, p), so an entry under a symlinked
parent (gp/mb -> ../.dev/memory-bank) is no longer formatted: probe before REFORMATTED, after untouched, the
plain control still formatted. Pinned in command-hygiene.test.mjs (mutant control: the regex fails without the
clause); the build comment, .dev/guides/writes-scope.md and G1's CHANGELOG entry say so.
(b) apply-plan-deletions.mjs: the reader-reason comment names the contiguous-list rule, not round 1's ':' rule.
(c) writes-scope.md: re-measured at dd0bb3d - the pre-batch scope of 16 of 342 plans named a workflow; 7.3.0
refuses 14 for that rule and 2 first for a split list. The CHANGELOG count says it counts by first rule.
(d) G1's CHANGELOG line: only the dev promote command's canon --check line was a no-op (G9 removed it); the
product command's vendor/bin line reads an installed project's canon. S's two entries no longer call four dev
commands pending.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CHANGELOG [Unreleased]: G8's Changed and Fixed entries each joined their group at its top. cli-stdout-flush.test.mjs FLUSH_CLIS keeps both G4's validate.mjs row and G8's merge-findings.mjs row. .dev/guides/floor-checks.md keeps G5's check-ship-record section (its fence closed) and G8's merge/render section. .prettierignore / .markdownlint-cli2.jsonc auto-merged with G1's canon dirs and G8's pharn/features/*/REVIEW.md. command-hygiene ceilings: pharn-review 30877 B <= 34304 beside G5's. 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>
…e trailing-space variant CONTRIBUTING.md:79, 92, 160 said an admin merge bypasses required checks. Ruleset 25907495 (no bypass actors, gh api 2026-11-03) holds every account to them; the bypass of ruleset 18045407 and classic protection skips the review and classic's gitleaks only. G9's CHANGELOG entry printed "## L20, ## L20" with the trailing space invisible; it now says "with and without a trailing space". Orchestrator decisions for Phase C. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ps required checks Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The owner ran the Phase B apply-docs.py (sha256 c114b495…19939); AFTER hashes verified on disk: LIMITS 5fa849f6, THREAT-MODEL 73a6a524, CONSTITUTION 8f0c7cad, ARCHITECTURE ab4dbd92, lessons-learned 8d7e7fd3. 27 trusted-doc edits (G1, G2, G3, G7, G8 proposals and orchestrator SPEC 1-7) and canon correction entry L82 (G9 Option B). With them: the community-privilege LIMITS marker in .dev/floor/specified-primitives.json follows the new LIMITS §1a text, and docs/lessons-index.md is regenerated (82 lessons). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SKILLS_VERSION 7.2.1 -> 7.3.0 (minor: new checkers and commands' behaviour from the 2026-11-03 audit batch), the README badge, and every [Unreleased] entry moved into ## [7.3.0] - 2026-11-03, plus one entry for the maintainer-applied trusted-doc and canon patch. MIN_CLI unchanged: no installed path moved. 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>
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars.
|
🛡️ pharn-ci · ❌ FailCaution Fail · Diff coverage of this change is 99.93% against a threshold of 100%; 10 test-integrity findings; 38 agent setup files found.
🧪 Diff coverage99.93% of changed lines covered (2944/2946, threshold 100%) Changed files (50)
🔍 Test integrity
💬 Messages (5)
🤖 Agent setup (38 files)Agent setup: 38 files · claude-code Agent setup files (38)
pharn-ci 0.4.0 · report schema v2 · coverage format lcov |
Tests only. 16 of the 18 lines are now covered; pharn/floor/check-loop.mjs:266-267 (the catch in repeatedTopLevelKeys) cannot be reached through the public interface, since its input already passed JSON.parse. See .dev/features/pr416-coverage/NOTES.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes the findings of the 2026-11-03 principal review of
main@ dd0bb3d (7.2.1) in one release, 7.3.0.Ten fix groups each ran on their own branch (nine through
/pharn-dev-ship, one small-fixes group without it) and were merged intobatch/audit-2026-11-03. Every edit to a protected file (the four hooks,.claude/settings.json, the four trusted docs, memory-bank canon) was applied by the maintainer through a sha256-pinned script. Each hook script was first reviewed by an independent adversarial agent in a throwaway clone; the scope-setter patch was sent back twice before it passed. GATE 1 and GATE 2 of every group were decided by the batch orchestrator (a model) under the maintainer's delegation, and eachSHIP.mdrecords them that way.What changed
Plan scope (BLOCKER, narrowed, not closed):
set-writes-scope.cjs --from-planrefuses the following:.github/workflows,.github/actions,.husky,core.hooksPath,.mcp.json), everywhere, unless a human opts in;CLAUDE.md,CLAUDE.local.md,AGENTS.md) in an installed project;/pharn-loopor/pharn-shipmarker is open;--led and quoted entries;## Fileslists that hide items in comments, raw HTML or split sections.The dev build's formatter step passes paths NUL-separated, after
--, and only for literal regular files. A model-approved dev plan with no product run open can still scopepharn/floor/**; GATE 1 and GitHub review guard that.Guards:
"onFailure": "block"is set on both write guards (Claude Code 2.1.295 or later).protect-trusted-paths.cjsdenies the write tools everything belowpharn/.run/pharn-{loop,ship,review}/.Loop marker:
--openrecords the mode, refuses to overwrite an open marker, and writes atomically.MODE_UNWITNESSEDrefuses a record whose mode differs from the marker's.blocked:vocabulary is closed.--accept-host-executionis no longer pre-approved.Floor checkers:
Reconcile:
Review:
render-review.mjs), with every lens-supplied value fenced and capped.typeis closed to two members.Dev process:
/pharn-dev-verifyruns on the gate runner and checks the result with--stamp.check:ship-recordrequires a green record for product-path PRs.Docs: the four trusted docs, CLAUDE.md, README, SECURITY and CONTRIBUTING now match the code. New lesson L82 corrects L14.
Gates on 8343100 (with origin/main ab77455 merged)
npm run check: exit 0, 6467 tests, 0 failed.validate: GREEN, 37 capabilities.check:changelog-entry: GREEN.check:surface-bump: GREEN, 7.2.1 → 7.3.0.check:ship-record: GREEN.check:instruction-growth: within budget.Remaining bounds and owner decisions (the ruleset bypass, older Claude Code versions, Bash writes) are stated in
pharn/LIMITS.mdand.dev/features/*/SHIP.md.🤖 Generated with Claude Code