Federation hardening sweep + gate verdict trailer + concurrent-writer detection#88
Merged
Merged
Conversation
- PDR-0011: maturity is informational-only, preview gates like stable; closed the G2 false-green (6 ERROR rules incl. SQLi/XXE/SSTI were silently non-gating). - v1.2.0 merged (PR #83), tagged, PyPI-published, uv-installed — owner-directed; resolves the standing release gate. - metrics.md: G2 (false-green closed) + G1 (preview-gate FP watch) readings; no trigger crossed. - Tracker: closed wardline-4ada23bb09; filed wardline-5dc82dd22a (P3 maturity-display follow-up). - Now bet (seam probe) NOT advanced — 3rd reactive-P1 detour; flagged for the owner.
…ite examples The sibling-URL resolution ladder in weft.md/configuration.md/agents.md predated server-mode discovery: it listed only flag > env > ephemeral.port and claimed install/doctor "persist no URL". In reality resolve_filigree_url derives the project-scoped /api/p/<prefix>/weft/scan-results from ~/.config/filigree/server.json for a server-registered repo (flag optional), and wardline install bakes that scoped target into .mcp.json (install/mcp_json._desired_sibling_url). Also swaps the emitter example off the unscoped URL, which server-mode Filigree fail-closes (its N1 ProjectMiddleware), and notes the ?project= query alternative. Doc-only. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…dline-eef3d30c7d) A clean 'wardline scan --fail-on <SEV>' pass printed no gate verdict — the echo chain covered only NOT_EVALUATED / FAILED / unanalyzed-only-PASSED, so a hook-captured log of a passing armed scan was indistinguishable from a silent wardline failure. Root-caused from the elspeth pre-commit consumer report (2026-07-03): the intermittent first-commit failures were pre-commit 4.6.0's files-modified-during-hook check (run.py:203-235) attributing a concurrent session's tracked-file writes to the slowest whole-tree hook; wardline exited 0 in every observed occurrence (no '- exit code:' line; summary printed — unreachable on any exit-2 path). Reproduced in a sandbox both ways (fail + clean retry). The CLI now ends an armed pass with gate: PASSED (--fail-on <SEV>[, --fail-on-unanalyzed]) — <reason> gate: evaluated <population> on stderr — same knob-attribution grammar as the FAILED branch; decision layer unchanged (GateDecision already carried verdict=PASSED + reason + evaluated). RCA + audit evidence (no silent exit-2 paths; publishes cannot escalate; torn reads are gate-eligible per-file findings) in docs/handoffs/2026-07-03-elspeth-precommit-intermittent-rca.md. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… fail-closed signing, strict MCP args, honest partial-emit accounting The 2026-07-02 federation-surface hardening sweep, reviewed (15-agent panel + dedicated security pass, 2026-07-03) and completed: - WeftHttp refuses all HTTP redirects (pre-seeded stdlib redirect-loop guard + typed WeftRedirectError backstop); 3xx is a status-band outcome everywhere — verify_token inconclusive, emit failure, promote/judge loud. COMPLETION (wardline-f68c483d92): FiligreeIssueFiler and the judge OpenRouter transport — the last two raw-urlopen credential paths — now route through WeftHttp; live-reproduced 302 cross-origin bearer re-send + forged-success parse now pinned impossible by real-socket tests. - attest/legis tri-state git dirtiness fails closed (a failed git status no longer signs a falsely-clean bundle); verify_attestation never coerces unknown -> clean. - MCP: strict bool args (string "false" -> ToolError; fix.apply pre-fix APPLIED on "false"), handshake gate de-sniffed (no pytest bypass). - Filigree emit: mid-batch partial accounting (chunks_landed, partial failures, dropped-mid-emit warning); URL redaction at every diagnostic seam incl. scan-job status.json persistence. - scan_jobs: monotonic terminal statuses (parent/worker race). - gate: zero-files-scanned -> NOT_EVALUATED (no_files_scanned), never a vacuous PASSED. - loomweave: resolve halts on hinted 401/403 (ResolveResult.auth_status); zero-fact scans report the taint-store write skipped, not written. Review follow-ups tracked: wardline-7924d67d3b (CLI text for partial emits), wardline-6f9eece880 (auth_status consumers), wardline-2e6ad7772c (bool-arg test pins for write-path tools). Suite 4652 green; ruff/mypy clean. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…arpline session Preserves the shipped-result handover for weft-9a35aa00e7 / AMBER-2 (producer + consumer both released in v1.2.0); the two remaining acts are hub-side governance (bless weft.wardline.scan_manifest.v1, close the ticket). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…n as a non-gating FACT On a shared checkout under pre-commit, a second session writing files during the scan window gets the HOOK failed by pre-commit's diff-before/diff-after check with output indistinguishable from a healthy run (2026-07-03 elspeth RCA). The scan now stat-snapshots the discovered inventory at discovery (st_mtime_ns, st_size) and re-checks after analysis; any file written, truncated, or deleted in the window becomes a WLN-ENGINE-TREE-CHANGED-DURING-SCAN FACT (severity NONE, never gates, not an under-scan) naming the files and the pre-commit consequence, echoed by the CLI as a warning and carried in the MCP result and artifact via the NESTED-SCAN-ROOT FACT-carrier pattern. Detection sees only the discovered inventory — a concurrent write to a non-source tracked file is invisible here, hence the message's "may". 3 engine tests (mutation via the progress_callback seam, deletion, quiescent negative) + 1 CLI echo test; glossary line-anchors re-synced after the run.py insertions. Suite 4656 green; live-verified with a racing writer. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…lidation line Local main's two stranded commits (47debbe2 forward-port + bdd84eb2 hardening) were reconciled per bdd84eb2's own NOTE: the branch already carries the evolved repo_binding probe (no-follow reads, symlink honesty), but both soundness edges the hardening closed existed here identically: - NO FALSE GREEN: `version: true` (bool is an int subclass, True == 1) reported binding_ok=true with a non-integer schema_version. _is_servable_version now gates both the readable and mismatch branches. - HONEST UNREADABLE, NOT A CRASH: a >4300-digit version makes PyYAML raise ValueError (not YAMLError) and crashed the probe; catch broadened, message stays content-free. (The non-UTF-8 case was already handled by this branch's _read_store_text_no_follow decode guard — test carried anyway as a pin.) 3 regression tests ported. After this, local main's unique content is fully subsumed and main can be realigned to origin/main. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… + PR merge commits)
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.
What
Four workstreams, all suite-green (4659 passed; ruff/mypy clean):
689ce771, wardline-eef3d30c7d): an armed severity gate that passes now printsgate: PASSED (--fail-on X) — <reason>+gate: evaluated <population>, so pre-commit hook logs are self-diagnosing. Root-caused from the 2026-07-03 elspeth consumer report (RCA indocs/handoffs/): the "intermittent silent commit swallow" was pre-commit's files-modified check blaming the slowest hook for a concurrent session's writes — wardline exited 0 throughout.89563f13): never-follow-redirects on every credential-bearing transport (WeftHttp pre-seeded redirect guard + typed backstop; FiligreeIssueFiler + judge transports converted, closing wardline-f68c483d92 — the 302 cross-origin bearer re-send was live-reproduced pre-fix); fail-closed tri-state git dirtiness for attest/legis signing; strict MCP bool args; handshake de-sniffing; mid-batch partial-emit accounting; URL redaction at every diagnostic seam; monotonic scan-job terminal statuses; zero-files gate honesty. Reviewed by a 15-agent panel + dedicated security pass; follow-ups tracked (wardline-7924d67d3b, wardline-6f9eece880, wardline-2e6ad7772c).c8debbb9): the scan stat-snapshots the discovered inventory and re-checks after analysis; mid-scan mutation surfaces as a non-gatingWLN-ENGINE-TREE-CHANGED-DURING-SCANFACT + CLI warning naming the pre-commit consequence. Live-verified with a racing writer.64150a43): carried local main's stranded bdd84eb2 hardening (bool-version false green; ValueError probe crash) into the consolidation line per that commit's own reconciliation note.Verification
🤖 Generated with Claude Code