Skip to content

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

Open
tachyon-beep wants to merge 90 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 90 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 30 commits June 25, 2026 19:23
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…post-anchor

Also rebind the glossary line-anchors (run.py 486->485, 496->495, 551->550,
643->642) shifted by the one-line-shorter message.

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

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

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…t_for; fix scan hint+docstring

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

paths.artifacts_dir confines via resolve+relative_to but no longer rejected a
symlinked .wardline dir at the dir layer (Task 2 regression); re-add
safe_project_path(project_root, artifact_dir) so a symlinked default artifact
dir is refused with 'refusing to write through a symlink' as before.

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

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