Repository navigation
fix(governance): clear symlinked report-back entries before the artifact download - #297
Conversation
…fore the download Codex on #296: the clear step used find -type f, so a committed *.json symlink under .gitbot-fleet/report-backs/ survived it; with the artifact download tolerated as absent, the renderer's *.json loop followed the symlink and accepted its target as evidence for an enrolled member. Every directory entry named *.json is now removed, whatever its type. Contract updated; new mutation fleet-symlinked-evidence puts the -type f filter back and must be rejected. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J4QvDjqj5DHRRCrDiGeTmq
The sed pattern's unescaped '*' consumed the quote and never matched, so the fixture went unmutated and the suite reported the mutation as accepted. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J4QvDjqj5DHRRCrDiGeTmq
|
Caution Review failedThe pull request is closed. 📝 Summary
Merge Risk:
|
|
Fork governance
🟣 critical · commit
Hypatia scan: 77 finding(s)
panic-attack assail: 9 finding(s)
accessibilitybot (WCAG on the React UI): 295 finding(s)
echidnabot (formal verification: proofs/): not_run — no ECHIDNA engine endpoint is configured for this repository (ECHIDNA_URL unset); echidnabot verifies proofs by dispatching to an engine and has no local mode
finishingbot (release readiness): 112 finding(s)
glambot (presentation quality): 45 finding(s)
panicbot (panic recovery, error handling): 8 finding(s)
rhodibot (RSR compliance): 18 finding(s)
seambot (integration health: API routes): 1 finding(s)
cipherbot: not_applicable — no cryptography is implemented in this repository
sustainabot: not_applicable — fleet adapter slot reserved; no adapter exists yet (gitbot-fleet README)
Scope: static findings reported by each row's tool at the named commit. Purple, red, yellow and blue grade the worst finding present; orange is evidence missing, malformed or a scanner that did not run; grey is an explicit scope exclusion with its reason. No row is a security certification. report.json, badge.json and the raw findings are in the verdict-grid artifact on the linked run. 🟢 conformant · commit
Scope: K9 components L0–L2 against contract v1.0.0 at the named standards commit. L3 signature verification and routed coordination-dialect files are not certified. Green is limited to this scope. Orange is missing evidence; yellow is grandfathered debt or warnings; grey is an explicit scope exclusion. report.json, badge.json and the validator logs are in the k9-grid artifact on the linked run. |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9736d56da4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| find .gitbot-fleet/report-backs -maxdepth 1 -name '*.json' -type f -print -delete | ||
| # Every entry named *.json goes, symlinks and directories included: a committed | ||
| # symlink survives a -type f filter and the renderer follows it to its target. | ||
| find .gitbot-fleet/report-backs -mindepth 1 -maxdepth 1 -name '*.json' -print -exec rm -rf -- {} + |
There was a problem hiding this comment.
Reject a symlinked report-backs directory
A PR can replace .gitbot-fleet/report-backs itself with a symlink to another committed directory containing forged *.json envelopes. In that case mkdir -p accepts the symlink, while this find clears nothing because GNU find defaults to -P (“Never follow symbolic links”) and therefore does not descend through the command-line symlink; if the tolerated artifact download is then absent, the renderer follows the directory symlink and consumes the committed evidence. Remove and recreate the report-backs path as a real directory, or explicitly reject a symlink, before clearing its contents.
Useful? React with 👍 / 👎.



Change and reason
Follow-up to hyperpolymath/metamanifold-webui#296, from Codex's P2 finding on it after merge. The "Clear any checked-out fleet report-backs" step in the fork-local
hypatia-scan-reusable.ymlusedfind … -type f -delete, which skips symlinks. A committed*.jsonsymlink under.gitbot-fleet/report-backs/therefore survived the clear, and because the artifact download is tolerated as absent, the pinned renderer's*.jsonloop would follow the symlink and accept its target as evidence for an enrolled member.hypatia-scan-reusable.yml: every directory entry named*.jsonis removed whatever its type (-mindepth 1 -maxdepth 1 -name '*.json' -exec rm -rf -- {} +), with a comment saying why.scripts/check-governance-contract.sh: the contract asserts the new command.scripts/tests/test-governance-contract.sh: new mutationfleet-symlinked-evidenceputs the-type ffilter back and must be rejected. The first cut of that mutation had an unescaped*in its sed pattern and never mutated the fixture; the second commit fixes that, and the suite now reports it rejected.The same change is prepared for upstream standards'
hypatia-scan-reusable.yml(fork delta 4's source) and will land there with the rest of the report-backs change.Validation
Scope
Contribution checks
Generated by Claude Code