Skip to content

release/consolidation-2026-06-26: weft-seam conformance + project-root artifacts#69

Open
tachyon-beep wants to merge 99 commits into
mainfrom
release/consolidation-2026-06-26
Open

release/consolidation-2026-06-26: weft-seam conformance + project-root artifacts#69
tachyon-beep wants to merge 99 commits into
mainfrom
release/consolidation-2026-06-26

Conversation

@tachyon-beep

Copy link
Copy Markdown
Collaborator

Consolidation release of two bodies of work onto main.

1. Weft-seam conformance program (this cycle)

Brings every weft peer-to-peer interface to the SEI bar — a frozen contract + golden-vector oracle + fail-closed CI gate + two-layer drift alarm — enforced by a single lie-detector gate.

  • Enforceable seam registry + gate (tests/conformance/test_seam_registry.py, seam_registry.json): a fail-closed, unmarked-default-suite gate that parses the 3 real marker sources; at_bar requires a real oracle + byte-pin + applied marker. Verdicts: at_bar 12, peer_conformant 4, gap 20, deferred 1, one_sided_na 3.
  • Shared WeftHttp transport + federation-status envelope single-sourcing (dedup across MCP/CLI/scan-jobs), behaviour-preserving.
  • 12 at_bar seams incl. G1 (the wardline→legis signed scan-artifact wire) reaching the bar via a single byte-identical shared vector — wardline's real signer reproduces legis's byte-exact expected_signature, byte-pinned to legis's copy.
  • Legis fence lifted: the legis-involving seams were brought to the bar in their own repos (legis/loomweave/filigree) — SEI(loomweave→legis), git-rename, governed sign-off(→filigree), loomweave HMAC. Where wardline isn't a party, rows carry the new peer_conformant verdict (gated to require peer repo + commit + test evidence, never bare gap). Genuinely-incomplete seams (plainweave consumer unbuilt; two warpline obligations) stay gap with structured notes — no manufactured contracts.

2. Project-root-anchored artifacts + doctor hygiene (from …06-25)

Default scan artifacts anchor to the weft-project root; wardline doctor --repair gitignores the artifacts dir and sweeps stray managed artifacts (CLI + MCP doctor with destructiveHint); the wlfp2 move-stable fingerprint rekey (with fan-out). Already reviewed on the feat/project-root-anchored-artifacts line.

Merge integrity

The weft feature was merged clean (the 3 superseded artifacts-spec drafts dropped). All 5 conflicts were resolved by combining both sides (WeftHttp + URL redaction; federation_status imports ∪ redact; CHANGELOG [Unreleased] + [1.0.7]; 37 glossary line-anchors recomputed against merged source — verified no doc content lost). 3 frozen goldens re-frozen, each root-caused as a legitimate …06-25 feature and guard-verified to change only the expected fields.

Verification

Full suite 4419 passed, ruff clean, wardline scan --fail-on ERROR exit 0. Version: 1.0.7.

🤖 Generated with Claude Code

John Morrissey and others added 30 commits June 21, 2026 16:58
This ensures that the output of these potentially unsafe deserialization
functions correctly sheds validation provenance (becomes `UNKNOWN_RAW`)
in the taint propagation logic.

Co-authored-by: tachyon-beep <544926+tachyon-beep@users.noreply.github.com>
Bumps the actions-minor-patch group with 1 update: [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish).


Updates `pypa/gh-action-pypi-publish` from 1.13.0 to 1.14.0
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](pypa/gh-action-pypi-publish@ed0c539...cef2210)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-version: 1.14.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions-minor-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [actions/configure-pages](https://github.com/actions/configure-pages) from 5 to 6.
- [Release notes](https://github.com/actions/configure-pages/releases)
- [Commits](actions/configure-pages@v5...v6)

---
updated-dependencies:
- dependency-name: actions/configure-pages
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [actions/deploy-pages](https://github.com/actions/deploy-pages) from 4 to 5.
- [Release notes](https://github.com/actions/deploy-pages/releases)
- [Commits](actions/deploy-pages@v4...v5)

---
updated-dependencies:
- dependency-name: actions/deploy-pages
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Commits](actions/checkout@v4...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 7.6.0 to 8.2.0.
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](astral-sh/setup-uv@37802ad...fac544c)

---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
  dependency-version: 8.2.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
The waiver_add entity_symbol path resolves a qualname through Loomweave
(SeiResolver.detect + resolve_locator) before writing the waiver — an
outbound/loopback network side effect. But the tool declared only
READ|WRITE and _effective_tool_capabilities had no waiver_add branch, so
ToolPolicy never denied it under allow_network=false: any client allowed
the write tools could trigger signed Loomweave requests despite the
network being fenced off.

Add a waiver_add branch that declares NETWORK under the exact predicate
that fires the resolve — entity_symbol present, entity_id absent (entity_id
wins and is carried opaque), and a Loomweave URL configured — mirroring the
scan/explain_taint/dossier gates. Also align the handler so it only builds
the Loomweave client when entity_symbol and not entity_id, matching the
declared side effect. resolve_entity_binding_input is the sole network path
in _waiver_add (add_waiver is a local FS write); the gate is a precise,
fail-closed match.

Regression tests: entity_symbol under no-network policy is denied before the
handler runs; entity_id-only and entity_id-wins-over-symbol stay ungated.

Closes wardline-14359d070b.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The Level-2 branch-join merges deduplicated candidates with a nested
linear scan of the growing candidate list: `any(lam is seen for seen in
bucket)` in _merge_branch_bindings and `if fqn not in bucket` in
_merge_branch_types. That is O(bucket) per insert, O(bucket**2) per
merge. Across a chain of N one-armed branches rebinding the same name
(`if flagK: cb = lambda c: sinkK(c)`), the candidate set grows to N over
N merges -> O(N**3). An attacker-authored file with ~1100 such branches
drove a DEFAULT-gate scan to ~15s, exhausting CPU on every local and CI
run (wardline-c797baf28b).

Both merges now dedup via a per-name identity/equality set: O(1) per
insert, O(bucket) per merge, O(N**2) cumulative. The change is
behavior-identical -- same candidate set, same first-seen insertion
order, same dedup semantics -- so no false negative is introduced. A cap
was deliberately avoided: dropping candidates would be an FN, against
this module's no-FN discipline; this mirrors the d7ecb90 precedent of
eliminating the complexity soundly rather than capping.

The 1100-branch PoC drops 4.388s -> 0.080s (55x); the var_types sibling
1.015s -> 0.037s (27x). Full scanner suite (1363 tests) stays green.

Tests:
- test_lambda_candidate_merge_is_not_cubic_on_chained_rebinds (DoS guard)
- test_var_type_candidate_merge_is_not_cubic_on_chained_rebinds (sibling)
- test_chained_one_armed_rebinds_keep_every_lambda_candidate (no-FN lock)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Passed `_SAFE_GIT_CONFIG = ("-c", "core.fsmonitor=false")` to all untrusted Git subprocess executions in delta and legis.

Co-authored-by: tachyon-beep <544926+tachyon-beep@users.noreply.github.com>
Passed `_SAFE_GIT_CONFIG = ("-c", "core.fsmonitor=false")` to all untrusted Git subprocess executions in delta and legis.

Co-authored-by: tachyon-beep <544926+tachyon-beep@users.noreply.github.com>
John Morrissey and others added 28 commits June 25, 2026 20:52
…uides)

Also rebind scan.py glossary line-anchors shifted by Task 9's scan.py edits.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…e (final review)

Final whole-branch review found a cross-task bug: under a custom
[wardline.artifacts] dir, a subdir scan still writes to <proj>/.wardline/
(its config comes from the scan path, not the project root), but doctor
loaded the project-root custom dir and therefore neither gitignored nor
recognized <proj>/.wardline/ as standard — deleting the tool's own output.
Fix: doctor treats BOTH the configured dir AND the default .wardline as
standard-and-ignored (a standard_dirs set). Also: align the symlinked-
.gitignore exit code across CLI/JSON/MCP; document topdown=True as
load-bearing; CHANGELOG/weft.md doc nits.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…-2026-06-25

Project-root-anchored scan artifacts + wardline doctor hygiene.
Spec + plan adversarially reviewed; 11 TDD tasks + 2 fixes, each per-task
reviewed; opus whole-branch review (one cross-task bug found + fixed).
Full suite: 4348 passed, ruff+mypy clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Audit of all 40 weft seams across the 5 Loom repos found only 1 at the SEI
bar. This lands the program plan (9 phases, merge+publish) and the reusable
'weft seam conformance kit' (frozen contract + golden-vector oracle +
fail-closed CI + two-layer drift alarm) that generalizes the SEI program.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
seam_registry.json records all 40 seams with an honest bar_verdict
(gap/partial/at_bar/deferred/one_sided_na) copied from the audit; the
strict at_bar gate downgrades the lone audit-'gold' seam to partial, so the
true starting floor is zero at_bar.

test_seam_registry.py is a hermetic, unmarked (default-suite, fail-closed)
lie-detector: it parses the REAL three marker sources (pyproject markers +
addopts exclusion + _live_oracle.LIVE_ORACLE_MARKERS, no hardcoded mirror),
and an at_bar row must have a real oracle test, a seam-applied marker, and
(two-sided) either a byte-pinned drift test or a signed-vector pin. _e2e and
_drift markers are classified distinctly. A fabricated at_bar row REDs.

Known follow-on (documented in the test docstring): rust_e2e is absent from
LIVE_ORACLE_MARKERS (a 1-line src fix, deferred to its phase since P0 is
purely additive). Maps to wardline-79ba05f464 / the P8 CI sweep.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…99aaa2d)

The three federation clients (filigree_emit, dossier_client, loomweave
client) each hand-rolled the same urllib Request/urlopen/error-mapping
boilerplate. Extract a parameterized WeftHttp transport into core/http.py
(reusing the existing bounded read_response_text) and migrate all three onto
it — behavior-preserving:

- each client keeps its own scheme-rejection exception type + verbatim message
  (via a per-call scheme_error builder), its >=400 vs URLError handling, and
  its fail-soft/fail-hard policy (URLError/OSError propagate, never swallowed
  by the transport)
- dossier's HTTPError->status (not 'unreachable') and the transport= +
  call-time-urlopen test injection seams are preserved
- no redirect/host policy added (no client had one; adding it would change
  behavior) — allowed_schemes/scheme_error are the extension seam

Existing client tests unchanged and green; +WeftHttp unit tests + a loomweave
scheme-rejection test. Full suite 4221 passed, ruff+mypy clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ardline-80e457bc41)

The {filigree_emit, loomweave_write} status block (and its MCP $defs) was
hand-duplicated across MCP, CLI scan, scan-job, scan-file, and agent-summary.
Extract one canonical module core/federation_status.py holding BOTH the
runtime builders and the JSON-schema source; migrate every site onto it.

Behavior-preserving (proven byte-identical per surface via before/after golden
snapshots): MCP keeps its wider transport-detail shape + key order; CLI/scan-job
keep theirs; not-configured semantics unchanged. test_mcp_structured_output.py
stays green and UNEDITED.

New tests/conformance/test_federation_status_envelope_parity.py (unmarked,
default-suite, fail-closed) pins every surface to the canonical builder AND the
MCP $defs to the schema source — and validates the configured runtime block
against the canonical schema, so a future producer key that would violate
additionalProperties:false now fails loudly (the {**block} passthrough is kept
deliberately so drift surfaces rather than being silently dropped).

Glossary line citations in finding-lifecycle-vocabulary.md re-synced (the dedup
shifted cited line numbers); discipline test updated in lockstep. Full suite
4240 passed, ruff+mypy clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…er byte-pin (P2-W1)

The SEI seam was partial: the vendored oracle fixture had no Layer-1 byte-pin
and its drift recheck skipped clean. Add, mirroring the loomweave_drift Rust
qualname precedent:
- Layer-1: UPSTREAM_BLOB_SHA git-blob pin of sei-conformance-oracle.json,
  asserted UNMARKED in the default suite (reds on any 1-byte fixture change,
  proven via a tampered /tmp copy)
- Layer-2: a sei_drift-marked recheck that BYTE-compares the vendored fixture
  against the loomweave source (WARDLINE_LOOMWEAVE_REPO), skip-clean when the
  sibling is absent; sei_drift registered in pyproject markers + addopts
  exclusion (NOT LIVE_ORACLE_MARKERS, per the _drift taxonomy)

seam_registry.json row flipped partial->at_bar; the P0 gate verifies the real
byte-pinned drift_test + applied marker, so the flip is honest (registry now
1 at_bar). Full suite 4240 passed, ruff+mypy clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…-axis byte-pins) (P3)

The qualname-parity seam was partial: it had the hermetic corpus + the Rust
loomweave_drift byte-pin, but lacked (a) a fail-closed LIVE-wire oracle and
(b) any byte-pin on the Python axis (vendored loomweave_qualname_parity.json).

- Add a loomweave_e2e live oracle (tests/e2e/test_loomweave_live.py) asserting
  wardline's qualname dialect against a live loomweave for a known entity;
  skip-clean locally, fail-closed under WARDLINE_LIVE_ORACLE_REQUIRED=1.
- Add the Python-axis Layer-1 byte-pin (VENDORED_BLOB_SHA, default-suite,
  reds on a 1-byte change) + a loomweave_drift Layer-2 recheck that compares
  substantive content against the upstream sibling, ignoring the vendored
  _wardline_provenance/ wrapper (fails closed on new upstream sections).
- Correct the live-test docstring overclaim (only the module-dialect half is
  computed live; the symbol suffix is literal).

seam_registry.json row flipped partial->at_bar, honest on BOTH axes (verified:
each axis's pin reds on tamper). Registry now 2 at_bar. Full suite 4241 passed.

Known follow-on: the gate inspects a single drift_test field, so a multi-axis
row's secondary pin is real-but-not-gate-enforced — a keystone hardening item
(low blast radius: this is the only multi-axis row).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…e gate

Advance three wardline-CONSUMER seams to at_bar via the proven vendor+byte-pin
pattern (Layer-1 default-suite pin + Layer-2 _drift recheck vs the peer source,
skip-clean when absent), gate-adjudicated honest:
- Weft canonical reason-vocabulary (consumer of the weft-hub contract) — reason_vocab_drift
- WEFT_FEDERATION_TOKEN bearer-token auth (consumer of filigree's contract) — filigree_token_drift
- Warpline reverify-worklist (consumer of warpline's v1 schema) — worklist_drift

Gate (test_seam_registry.py) STRENGTHENED to enforce what these rows claim:
- multi-axis rows: every additional_drift_tests axis must carry its own Layer-1
  byte-pin (closes the multi-axis blind spot the qualname row exposed)
- self_authored_restatement rows: the drift_test must carry a SUBSTANTIVE
  authority-side recheck (a registered-but-no-op _drift can't earn at_bar)
SEI drift-source resolution aligned to the same exclusive-env-precedence
contract as the qualname recheck (consistent _drift semantics).

3 new _drift markers registered (pyproject markers + addopts exclusion, NOT
LIVE_ORACLE_MARKERS). Registry now 5 at_bar. Full suite 4254 passed, ruff+mypy
clean; each new byte-pin proven to red on tamper.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ma freeze

MCP B1/B2 was partial: its oracle validated output against the SAME in-process
schema (circular). Freeze the 18-tool outputSchema surface to a committed golden
(mcp_output_schemas.golden.json) + a VENDORED_BLOB_SHA Layer-1 byte-pin and an
independent EXPECTED_TOOLS surface pin — any schema change must land as a
reviewable golden re-vendor. This breaks the circularity (assert live == golden,
not live == live).

Gate extension (tight, no fail-open): a one-sided (two_sided=false)
byte_golden_corpus at_bar seam is exempt from the live-oracle MARKER rule (it
has no peer wire) BUT must pass a new _assert_at_bar_one_sided_golden_fail_closed
— its oracle_test must carry a real Layer-1 byte-pin and run in the default suite
(not excluded by any addopts marker). Verified the negative case: a one-sided
golden row WITHOUT a byte-pin is REJECTED by the gate.

Registry now 6 at_bar. Full suite 4254 passed; MCP golden reds on tamper.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…uthority producer freeze)

Completes the wardline producer side of the suppression-state filter seam
(filigree's consumer side landed in its own repo: byte-pin + non-circular
grammar oracle + drift recheck).

Wardline is the AUTHORITY (owns the SuppressionState vocabulary). A byte-pin of
its own contract is circular, so the gate gains a tight self_authored_producer
case: such an at_bar row's drift_test must carry a PRODUCER-SOURCE recheck — an
in-process import of a wardline runtime symbol + an assertion tying it to the
vendored contract (here: SuppressionState enum values == contract states). The
byte-pin alone (wardline-pins-wardline) does NOT satisfy it.

Gate extension (test_seam_registry.py), tight by construction:
- _has_producer_source_recheck requires an imported wardline symbol referenced
  in the == / in assertion (the byte-pin's own sha assert can't satisfy it)
- marker-exempt ONLY when paired with the recheck (never a free pass)
- schema enforces self_authored_producer => two_sided, and mutual-exclusion
  with self_authored_restatement
Negative cases verified (mine + the build's): byte-pin-only, sha-assert-decoy,
one-sided, and both-flags rows are all REJECTED.

Registry now 7 at_bar. Full suite 4255 passed; byte-pin reds on tamper.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…-repo) + close gate fail-open

Wardline producer side of the scan-results wire seam: freeze a representative
POST /api/weft/scan-results body (authored from build_scan_results_body) to a
committed golden + Layer-1 byte-pin + a producer-source recheck that re-invokes
build_scan_results_body and asserts == golden (non-circular). Row -> at_bar
(self_authored_producer). Filigree's consumer side (its own repo) drives the
REAL intake (_parse_scan_results_body -> db.process_scan_results -> read-back).

Gate hardening (closes a latent fail-open the review found): the two-sided
byte_golden_corpus/self_authored_producer branch now carries the same
excluded-marker guard as the one-sided and shared_signed_vector branches — so a
future pytestmark edit can't silently DESELECT a seam's byte-pin + recheck while
the registry still certifies at_bar. Verified: marking the protective test
filigree_e2e now REDS the gate.

Registry now 8 at_bar. Full suite 4257 passed; byte-pin reds on tamper.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Wardline producer side of the fingerprint/qualname/spans identity seam: freeze
identity vectors GENERATED FROM the live producers (compute_finding_fingerprint,
format_fingerprint/FINGERPRINT_SCHEME wlfp2, _to_wire_qualname, to_jsonl) to a
golden + Layer-1 byte-pin + a producer-source recheck that re-invokes those real
producers and asserts == golden (non-circular). Vectors cover the join-key
soundness property (same rule/path/qualname, differing taint_path -> DISTINCT
fingerprints), :setter qualname normalization, and Rust :: / null-column spans.
Row -> at_bar (self_authored_producer). Registry now 9 at_bar.

Filigree's consumer side (own repo) drives the REAL fingerprint join
(process_scan_results -> find_finding_by_fingerprint); proven non-circular by a
forced collision collapsing the real dedup 5->4.

Full suite 4262 passed; byte-pin reds on tamper.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…Rust consumer)

Wardline producer side of the wardline->loomweave wardline-taint-1 seam: freeze
a taint-fact blob GENERATED FROM the real build_taint_facts (loomweave/facts.py)
to a golden + Layer-1 byte-pin + a producer-source recheck re-invoking
build_taint_facts (non-circular). Honestly scoped: pins the deterministic
content-only blob (blake3 content_hash, formula fingerprint), NOT the HMAC
signature's timestamp/nonce (its deterministic core is already pinned in
test_hmac.py against loomweave's auth.rs). Row -> at_bar (self_authored_producer).

loomweave's Rust consumer side (own repo) drives the real storage ingest/read.
Registry now 10 at_bar; only the ringfenced legis G1 seam remains partial.
Full suite 4265 passed; byte-pin reds on tamper.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…epo)

Wardline producer side of the trust-vocab descriptor seam: freeze the descriptor
GENERATED FROM the live producer (core.descriptor.descriptor_to_yaml /
build_vocabulary_descriptor over REGISTRY) to a golden + Layer-1 byte-pin + a
producer-source recheck (re-invokes the live serializer == golden, non-circular).
Row -> at_bar (self_authored_producer). loomweave GENUINELY consumes this wire:
its python plugin load_wardline_descriptor version-gates on wardline-generic-2
(== wardline's REGISTRY_VERSION) and threads the entries into entity_tags — a
real cross-tool coupling, not aspirational.

Also: the Filigree ephemeral-port seam was assessed and HONESTLY KEPT gap — it's
a bare int in a file (str(port)/int(text)) with a fail-soft reader and no
freezable contract; any oracle would be tautological. Reasoning recorded on the
row's wire field. Registry now 11 at_bar.

Full suite 4268 passed; byte-pin reds on tamper; gate enforces the non-circular
recheck (gutting it reds the gate).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ar (shared vector)

The wardline->legis signed scan-artifact seam was partial: wardline and legis each
pinned their OWN golden (wardline_scan_wire.golden.json under GOLDEN_KEY; legis's
wardline_scan_artifact.v1.json under test-shared-secret-key) — two independent
mirrors that agreed only by hand. A canonical-JSON/HMAC drift on either side
re-signed cleanly and broke the other invisibly (the 2026-06-10 G1 incident class).

Make the vector genuinely shared: vendor legis's authored vector byte-identical
into wardline (Layer-1 VENDORED_BLOB_SHA byte-pin fd4b21b… to legis's blob) and
prove wardline's REAL sign_artifact reproduces the byte-exact expected_signature +
its REAL project_finding emits the vector finding wire. Both repos now load the
SAME bytes; legis drives its real ingest over its copy. Layer-2 legis_scan_artifact_drift
recheck re-compares the vendored copy to legis's live source at the release gate.

Gate: G1 flips partial->at_bar (byte_golden_corpus, two-sided, non-self-authored).
Negative-probed: tampering the vendored vector reds the byte-pin. 314 conformance
tests pass; wardline scan --fail-on ERROR exit 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… seams

With the legis fence lifted, the legis-involving seams where wardline is NOT a
party were brought to the bar in their own repos (legis/loomweave/filigree). The
wardline-rooted gate cannot run those oracles, so leaving the rows as bare 'gap'
lied about done work. Add a 'peer_conformant' verdict: a documented disposition
for a pure peer-to-peer seam, gated to require (a) wardline genuinely not a party,
(b) a non-empty peer_conformance evidence string (peer repo + commit + test path),
(c) no wardline oracle_test. Negative-probed all three legs fail closed.

Dispositions:
- peer_conformant (5): SEI(loomweave->legis), loomweave HMAC auth, loomweave SEI
  wire transport, git-rename(legis->loomweave), sign-off(legis->filigree) — each
  two-sided conformant in legis@6a750cc / loomweave@9c30ce0 / filigree@59a75a9.
- gap + structured note (3): plainweave->legis preflight-facts (legis consumer
  genuinely absent — honest no-contract); legis->warpline preflight (legis side
  frozen @6f50a33, warpline ships no flat HTTP producer — obligation noted);
  legis per-SEI attestation->warpline (legis producer frozen @6f50a33, warpline
  consumer unwired — obligation noted).

Also corrected a stale consumer field (HMAC-auth row said wardline; its seam scopes
it to legis) and a ruff line-length nit in the G1 oracle. Counts: at_bar 12,
peer_conformant 5, gap 19, deferred 1, one_sided_na 3. Gate green; suite 4271 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… (honest)

The SEI oracle drives an in-process FakeLoomweave that BYPASSES the HTTP wire, so
it pins SEI semantics, not the identity-route response shapes. No default-suite test
freezes a golden of loomweave's real response bodies driving legis's _decode_json_response
(only the live-gated HMAC oracle hits the real routes, for auth admission). Claiming
the wire is 'pinned by the SEI oracle' was the same false-claim class this program
exists to kill (cf. the legis_scan_wire docstring fix). Re-grade to gap with an honest
split note + the close-out recipe. peer_conformant 5->4; gap 19->20.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Consolidate the weft-seam conformance feature (16 commits: the enforceable seam
registry + fail-closed gate, shared WeftHttp transport, federation-status envelope
dedup, and 12 at_bar + 4 peer_conformant seams incl. G1 and the legis fence-lift)
onto the 2026-06-25 consolidation line, which already carries the project-root-
anchored-artifacts feature. The 3 superseded artifacts-spec draft commits
(fec0fe7e/67e6bc3a/e92652a7) were dropped — that work is already consolidated here
via feat/project-root-anchored-artifacts.

Conflict resolutions (both sides combined, never one-sided):
- core/filigree_emit.py: keep the WeftHttp refactor AND 06-25's redact_url_for_diagnostics
  (wired into the scheme_error builders) AND the InvalidURL redaction path.
- mcp/server.py: union the federation_status imports (weft) with redact_url_for_diagnostics
  (06-25); drop filigree_disabled_reason (0 uses after the federation_status extraction).
- CHANGELOG.md: keep 06-25's [Unreleased] (artifacts/doctor/DoS fix) AND add [1.0.7].
- glossary doc + test: recompute all 37 line-anchors against the merged source (server.py
  shifted ~115 lines from the federation_status extraction); two-way doc/test lock holds.

Golden re-freezes (each root-caused as a legitimate 06-25 feature, guard-verified to
change ONLY the expected fields):
- loomweave-taint wire: wlfp2 move-stable fingerprint rekey (fingerprint value only).
- federation-status parity: URL-query redaction (diagnostic/destination url only).
- mcp output-schema golden: 06-25's doctor description + rekey fan-out (new_fps); the
  other 16 tool schemas byte-identical; VENDORED_BLOB_SHA re-pinned.

Verified on the merge result: full suite 4419 passed, ruff clean, wardline scan
--fail-on ERROR exit 0.
…→Plainweave refs

Adds/normalizes the 'not-for-X' Banner naming this member's specific misuse (deconfliction-first, not security/compliance); fixes hardcoded Charter→Plainweave prose. Re-vendored kit; build green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… to envelope, reverify ruled out

Steward ruling on the legis→warpline consumption seam (dispatch from the
warpline maintainer / weft hub). Ratifies the interface-lock reading
(SEAM 4 §4A + GV-LG-3): warpline.preflight_impact.v1 is frozen at warpline's
MCP/CLI envelope (data.affected[], meta.local_only), NOT the flat
{affected,count} HTTP body legis's client GETs. Ruling: legis conforms DOWN
to the envelope; warpline ships nothing (a flat HTTP producer was the
explicitly-rejected branch). No lock amendment needed.

Reverify_worklist ruled out (option b): §4A sanctions only impact_radius for
legis; the named reverify consumers are filigree §2A + wardline §3, so legis
drops the call and relies on preflight_impact alone — no new seam minted.

Corrects the prior note's backwards obligation ("warpline must ship the flat
producer"). Row stays gap: legis's consumer oracle (byte-pin 44bb515d) is a
false-freeze pinned to a shape warpline never serves (G1-class). Sibling
sweep clean — wardline (delta_scope.py) and filigree (warpline_consumer.py)
both read the envelope; plainweave has no warpline consumer; legis is the
sole offender, so the "copied from filigree" theory is disproven.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… delta scope block

Phase A of warpline integration (item 4a). The --affected delta-scan honesty
block now declares which producer shape it parsed (scope_source) and echoes the
worklist's UNVERIFIED data.generated_at (producer_generated_at) as a staleness
proxy — namespaced, never feeding mode/gate_authority/any verdict. Threaded
through AffectedScope -> run_scan -> DeltaScopeReport.to_dict() (auto-propagates
to CLI/SARIF); MCP _SCAN_OUTPUT_SCHEMA mirrored + a key-parity drift test guards
the hand-maintained schema (80e457bc41 class). Glossary line-anchor lock and the
MCP output-schema golden re-anchored for the shifted lines.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…h binding

Phase B of warpline integration (item 4b). The literal 'resolved-finding read'
is reframed to the property warpline needs — 'wardline cleared entity E at
commit X' — served by attest (full-scan, commit-pinned, dirty-refused, SEI-keyed,
fail-closed 3-valued verdict), NOT by adding lifecycle to Finding. Each boundary
now carries content_hash (whole-file blake3 from the EntityBinding _enrich_seis
already resolves and previously discarded), giving warpline a binding key for
mechanical (commit, content_hash) equality. Clean schema bump wardline-attest-1 ->
wardline-attest-2 (no external consumer yet). Published the consumer contract
(docs/contracts/wardline-attest-2.md: commit-as-temporal-pin, enrichment_reasons
triple, boundary rule) + a freeze test. MCP _ATTEST_OUTPUT_SCHEMA + golden
re-frozen; seam_registry attest seam flipped planned -> producer-IMPLEMENTED
(bar_verdict stays gap: warpline consumer not yet wired).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… consumer drift check

Phase C of warpline integration. Publishes the versioned, drift-checked
wardline.delta_scope.v1 producer artifact (the DeltaScopeReport.to_dict() shape,
13 fields incl. scope_source + producer_generated_at) with a drift test, and
extends the warpline.reverify_worklist.v1 consumer conformance test to assert
generated_at capture plus a WARPLINE_REPO-gated published-artifact drift marker
(skips clean until warpline publishes its half). Closes the contract-integrity
portion of wardline-c0563eee74.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…t whole-file

Final-review Critical: the attest-2 boundary content_hash is EntityBinding.content_hash
= Loomweave identity-resolve content_hash, which per the Accepted ADR
2026-06-02-wardline-hash-granularity-two-model is the ENTITY-BODY span hash (same
granularity as Filigree content_hash_at_attach), NOT whole-file. The published
artifacts had it inverted (whole-file / 'not entity-span' / 'do not key as
entity-precise') — a fail-open instruction that contradicted a live conformance
test and would make warpline cross-compare granularities (permanent false-STALE)
or transfer a clean verdict across sibling entities. The data was always correct
(entity-body is the right key for a SEI-scoped boundary); only the labels were
wrong. Relabelled across contract doc, attest.py comment, MCP _ATTEST_OUTPUT_SCHEMA
(+ golden re-frozen, VENDORED_BLOB_SHA cd08480), attestation.md, CHANGELOG,
seam_registry. Also (Minor): noted verdict=='defect' as a proven-bad signal
distinct from the non-exhaustive enrichment_reasons triple; marked the
WARPLINE_REPO-gated test as an existence-only placeholder.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ness (D1)

Replaces the phantom producer_generated_at (which read data.generated_at — a key
warpline never emits) with producer_completeness: a VERBATIM, unverified echo of
warpline's now-shipped data.impact_completeness object (self-assessed completeness
+ staleness of the change-impact analysis, in one object). Captured defensively
(dict-or-None), namespaced, and never fed into mode/gate_authority/any verdict —
wardline stays the trust authority. Threaded AffectedScope -> run_scan ->
DeltaScopeReport.to_dict() (auto-propagates CLI/SARIF); MCP scope schema mirrors it
as a loose object (wardline echoes verbatim, does not pin warpline's inner shape);
key-parity test + wardline.delta_scope.v1 fields updated; golden re-frozen.

Realigned the vendored warpline_delta fixtures to warpline's REAL published envelope
(full reverify_worklist.v1 shape: completeness/impact_completeness/staleness/items/
resolved/unresolved) and made the WARPLINE_REPO-gated drift test REAL — it now
validates every fixture against warpline's published
contracts/reverify_worklist.v1.schema.json via jsonschema (was existence-only).
Verified live: WARPLINE_REPO=/home/john/warpline -> 10/10 pass. Closes D1; the
warpline<->wardline reverify seam is now two-sided drift-checked (wardline-c0563eee74).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ung-2)

Agent-facing operational counterpart to the wardline-attest-2 contract: the prompt
warpline's risk-as-verification step uses to turn a bundle into proven_good /
proven_bad / risk=unavailable, with wardline as the sole trust authority. Aligned
to the shipped contract: content_hash is ENTITY-BODY span (entity-precise; compare
same-granularity only, never whole-file), defect is a distinct proven_bad signal,
and the enrichment_reasons triple is non-exhaustive (+ content_drift). Cross-linked
from wardline-attest-2.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@tachyon-beep

Copy link
Copy Markdown
Collaborator Author

Added: warpline integration (item 4, P1) — 9f5924bf..b1a97d5e

Six commits implementing the wardline↔warpline P1 integration (evaluated + planned earlier this cycle):

  • (a) delta-scope provenancescope_source + warpline's UNVERIFIED producer_generated_at in the --affected scope block (9f5924bf); published+drift-checked wardline.delta_scope.v1 (ab0754fe).
  • (b) attest-2 — bumped attest bundle to wardline-attest-2 with per-boundary content_hash binding (dffa092d); final-review Critical fix: content_hash is entity-body span (= Loomweave EntityBinding/Filigree content_hash_at_attach granularity per ADR 2026-06-02-hash-granularity-two-model), not whole-file — relabelled across all published artifacts (7b4afcda).
  • (D1) warpline-published completeness mirrored as producer_completeness (33d5d5f2).
  • Consumer prompt — agent-facing docs/contracts/wardline-attest-2-consumer-prompt.md for warpline's Rung-2 risk-as-verification, aligned to the corrected contract (b1a97d5e).

Boundary preserved: wardline never calls warpline (consumes pushed/untrusted scope); warpline never declares clean (relays wardline's fail-closed 3-valued verdict; unknown/drift → risk=unavailable).

Gate (local, full tree): pytest 4436 passed / 1 skipped · ruff check clean · mypy clean (530 files).

⚠️ Pre-existing (NOT warpline-p1): ruff format --check flags ~12 files (tests/unit/rust/*, etc.) already present at df0a79f8 — outside this work's scope; flagging for the release owner to address before merge if CI gates on format.

Pure formatting (no logic change) across 12 files flagged by `ruff format --check`
on the release branch — whitespace/line-wrapping in tests + install/doctor.py. Brings
the branch's Lint+Format CI check green so PR #69 is merge-ready. No warpline-p1
source files affected.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.

1 participant