Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
179 commits
Select commit Hold shift + click to select a range
6760e07
docs(lab): define CL-10 public evidence contract
Wibias Aug 12, 2026
d1933ba
docs: add CL-10 public evidence design
Wibias Aug 12, 2026
bbb17bf
docs(lab): plan CL-10 implementation
Wibias Aug 12, 2026
e7b287a
chore: apply CL-10 review amendments
Wibias Aug 12, 2026
2e1c06e
fix: rerun CL-10 contract amendments
Wibias Aug 12, 2026
523391c
docs(lab): address CL-10 contract review
Wibias Aug 12, 2026
f60dd2e
test(lab): define CL-10 public evidence boundary
Wibias Aug 12, 2026
e28a7bf
feat(lab): add CL-10 public id domains
Wibias Aug 12, 2026
a9e6703
feat(lab): define closed CL-10 public DTOs
Wibias Aug 12, 2026
51d3d7c
feat(lab): add public route registry hash domain
Wibias Aug 12, 2026
0ff05c3
feat(lab): add reviewed public route registry authority
Wibias Aug 12, 2026
dcc1f8b
fix(lab): keep record shape aligned with frozen CL-10 schema
Wibias Aug 12, 2026
5658a35
feat(lab): add strict CL-10 public validators
Wibias Aug 12, 2026
0850b9f
feat(lab): add allowlist-only CL-10 public projector
Wibias Aug 12, 2026
fe661c8
feat(lab): expose CL-10 public evidence boundary
Wibias Aug 12, 2026
e1d54ea
feat(lab): export CL-10 public evidence APIs
Wibias Aug 12, 2026
0448187
test(lab): define CL-10 public bundle signature boundary
Wibias Aug 12, 2026
80ec386
feat(lab): separate public bundle digest domain
Wibias Aug 12, 2026
5ee43c6
feat(lab): build bounded deterministic public bundles
Wibias Aug 12, 2026
2aa9fd8
feat(lab): sign public bundles with local Ed25519 identity
Wibias Aug 12, 2026
4c6141e
feat(lab): add bounded local public bundle storage
Wibias Aug 12, 2026
c48fd14
feat(lab): expose CL-10 public bundle APIs
Wibias Aug 12, 2026
e61e63c
fix(lab): derive public publisher key from PEM
Wibias Aug 12, 2026
71dd401
test(lab): cover CL-10 community quarantine and revocation
Wibias Aug 12, 2026
1aa2d3b
test(lab): cover CL-10 publisher continuity
Wibias Aug 12, 2026
9792248
feat(lab): add CL-10 community and revocation types
Wibias Aug 12, 2026
264b61a
feat(lab): add public evidence community paths
Wibias Aug 12, 2026
0f6495b
feat(lab): validate community evidence authority
Wibias Aug 12, 2026
68ff657
feat(lab): add signed public evidence revocation
Wibias Aug 12, 2026
91a0440
feat(lab): add quarantined community evidence cache
Wibias Aug 12, 2026
affa7d0
refactor(lab): reserve public projection aggregate API
Wibias Aug 12, 2026
b73c0c6
feat(lab): add local public evidence operator surfaces
Wibias Aug 12, 2026
ae92e94
feat(lab): purge local public evidence copies
Wibias Aug 12, 2026
3ea397f
feat(lab): integrate CL-10 export purge semantics
Wibias Aug 12, 2026
f449db9
fix(lab): align public operator with current CL-10 types
Wibias Aug 12, 2026
63161a0
feat(lab): export CL-10 community modules
Wibias Aug 12, 2026
5de2aef
fix(lab): align community tests with canonical storage API
Wibias Aug 12, 2026
7e6c586
feat(lab): add CL-10 local public evidence CLI
Wibias Aug 12, 2026
3463ffc
fix(lab): align public verification summary with CLI
Wibias Aug 12, 2026
c81066c
test(lab): cover CL-10 local surfaces and community UI
Wibias Aug 12, 2026
bfa84c8
feat(lab): add CL-10 management and community matrix surfaces
Wibias Aug 12, 2026
e0494d2
fix(lab): align community authority with current registry and Fabric
Wibias Aug 12, 2026
45d293f
test(lab): fail closed on unauthorised public artifacts
Wibias Aug 12, 2026
030500a
fix(lab): require public_export authority before signing artifacts
Wibias Aug 12, 2026
c1f2a90
fix(lab): reject unauthorised artifact bytes in local export store
Wibias Aug 12, 2026
7abd61c
fix(lab): derive purge publisher public key from PEM
Wibias Aug 12, 2026
4a3adfa
test(lab): freeze CL-10 public wire contract
Wibias Aug 12, 2026
e1841d5
fix(lab): reject ambiguous community JSON
Wibias Aug 12, 2026
c70d2ec
docs(lab): freeze CL-10 canonical wire contract
Wibias Aug 12, 2026
9016645
docs(lab): specify CL-10 canonical signing bytes
Wibias Aug 12, 2026
1d1175f
test(lab): cover duplicate keys at public API boundary
Wibias Aug 12, 2026
4cdd7ed
feat(lab): add strict public JSON parser
Wibias Aug 12, 2026
d8b7f18
fix(lab): preserve strict JSON at management boundary
Wibias Aug 12, 2026
920809c
chore(lab): export strict public JSON parser
Wibias Aug 12, 2026
3dae175
chore(lab): keep management route diff minimal
Wibias Aug 12, 2026
3756420
refactor(lab): share strict public JSON parser
Wibias Aug 12, 2026
733202d
refactor(lab): preserve strict JSON error contracts
Wibias Aug 12, 2026
4872259
fix(lab): verify public files with strict JSON
Wibias Aug 12, 2026
c72eb06
fix(lab): read local public exports with strict JSON
Wibias Aug 12, 2026
83e8240
test(lab): reject non-canonical publisher keys
Wibias Aug 12, 2026
a0b46aa
fix(lab): require canonical publisher key Base64
Wibias Aug 12, 2026
a166432
test(settings): expose startup-health seam regression
Wibias Aug 12, 2026
451a667
fix(settings): add startup-health dependency seam
Wibias Aug 12, 2026
d83e00d
fix(settings): inject startup-health reads
Wibias Aug 12, 2026
7584983
test(settings): isolate startup-health probes
Wibias Aug 12, 2026
51a4c03
fix(settings): restore sidecar reasoning projection
Wibias Aug 12, 2026
2511a7e
test(settings): type startup-health seam fixture
Wibias Aug 12, 2026
b4279ec
fix(lab): clarify public evidence storage paths
Wibias Aug 12, 2026
ca63d77
fix(lab): enforce public record authority before signing
Wibias Aug 12, 2026
a590fbc
fix(lab): add fail-closed public evidence privacy scan
Wibias Aug 12, 2026
e8d43a1
fix(lab): export public privacy validator
Wibias Aug 12, 2026
584b13b
fix(lab): harden publisher key and pre-sign gates
Wibias Aug 12, 2026
9d39ba3
fix(lab): reuse hardened publisher signing for revocations
Wibias Aug 12, 2026
8de5ccd
fix(lab): bound strict public JSON recursion
Wibias Aug 12, 2026
2b40d06
fix(lab): bind public export checks to file descriptors
Wibias Aug 12, 2026
fafed85
fix(lab): paginate public selection and minimize time metadata
Wibias Aug 12, 2026
0c582d8
fix(lab): bound community parsing and avoid repeated verification
Wibias Aug 12, 2026
de7bad9
fix(lab): make public evidence purge deletion-first
Wibias Aug 12, 2026
e370a3e
fix(lab): continue sensitive purge after export cleanup errors
Wibias Aug 12, 2026
8992153
fix(cli): fail public verify on invalid evidence
Wibias Aug 12, 2026
7baa0de
fix(lab): classify public management API failures safely
Wibias Aug 12, 2026
5fd15ff
fix(gui): keep community evidence page-global
Wibias Aug 12, 2026
0e38cbc
fix(gui): render community evidence as global context
Wibias Aug 12, 2026
a7e4f1c
test(gui): pin community evidence quarantine contracts
Wibias Aug 12, 2026
c6fd987
test(lab): harden public wire parser regressions
Wibias Aug 12, 2026
1d75f83
test(lab): pin public authority privacy and time boundaries
Wibias Aug 12, 2026
deb1467
test(lab): align public evidence fixture with manifest authority
Wibias Aug 12, 2026
dd8d9ee
test(lab): refresh public wire vector for reviewed assertion
Wibias Aug 12, 2026
84a2416
test(lab): use reviewed assertion in publisher continuity fixture
Wibias Aug 12, 2026
69181b0
test(lab): keep community fixtures inside reviewed authority
Wibias Aug 12, 2026
52bebd9
test(lab): use explicit shared export directory
Wibias Aug 12, 2026
9f9d26c
test(codex): allow degraded catalog retry budget
Wibias Aug 13, 2026
21e5250
revert test-only formatting churn
Wibias Aug 13, 2026
f66db15
ci: give degraded catalog sync test retry headroom
Wibias Aug 13, 2026
2b6b186
docs: plan CL-10 deep review hardening
Wibias Aug 13, 2026
0c43db9
test: cover CL-10 deep review regressions
Wibias Aug 13, 2026
5d25097
fix(lab): reject invalid Unicode in JCS
Wibias Aug 13, 2026
97c8f8e
fix(lab): freeze canonical public bundle order
Wibias Aug 13, 2026
0f72d68
feat(lab): add crash-safe private file publisher
Wibias Aug 13, 2026
2f3e1e8
fix(lab): validate before key mutation and verify canonical order
Wibias Aug 13, 2026
20c44de
fix(lab): validate revocations before publisher key access
Wibias Aug 13, 2026
eacc30d
fix(lab): require exact public assertion authority
Wibias Aug 13, 2026
509f8ec
fix(lab): reject unbracketed IPv6 in public evidence
Wibias Aug 13, 2026
27f64d8
fix(lab): bound duplicate-key diagnostics
Wibias Aug 13, 2026
0f824e0
fix(lab): harden community evidence quarantine
Wibias Aug 13, 2026
8650c53
fix(lab): publish public exports atomically
Wibias Aug 13, 2026
b764c45
feat(lab): add public origin provenance path
Wibias Aug 13, 2026
874f6a7
refactor(lab): use immutable public origin markers
Wibias Aug 13, 2026
d4186b9
feat(lab): persist immutable public export provenance
Wibias Aug 13, 2026
45251f5
fix(lab): remove local paths and event ids from public DTOs
Wibias Aug 13, 2026
efa5acc
feat(lab): export public provenance and file helpers
Wibias Aug 13, 2026
7cf94ff
fix(lab): purge by durable public origin provenance
Wibias Aug 13, 2026
da79a79
fix(lab): reclaim stale private-file staging safely
Wibias Aug 13, 2026
1a494c1
fix(lab): keep public storage locator opaque
Wibias Aug 13, 2026
6107167
fix(ci): keep per-test timeout policy out of shard batches
Wibias Aug 13, 2026
3e105e8
fix(lab): recover stale private stages before reads
Wibias Aug 13, 2026
7eef2f3
fix(lab): recover stale publisher stages before reads
Wibias Aug 13, 2026
45600d8
fix(lab): recover stale export stages before reads
Wibias Aug 13, 2026
27cdde5
fix(lab): exclude private staging files from cache views
Wibias Aug 13, 2026
d94b802
test(lab): align CL-10 fixtures with reviewed assertions
Wibias Aug 13, 2026
4c8f6fe
fix(lab): ignore private staging files in origin quota
Wibias Aug 13, 2026
7bc6db8
fix(lab): recover community staging files safely
Wibias Aug 13, 2026
d13e8e5
test(lab): refresh CL-10 frozen wire vector
Wibias Aug 13, 2026
61ae0c4
test(lab): pin opaque CL-10 public surface DTOs
Wibias Aug 13, 2026
faab673
test(lab): align public evidence fixtures with scenario authority
Wibias Aug 13, 2026
f34d60e
test(lab): align publisher continuity fixture authority
Wibias Aug 13, 2026
f56f8bf
test(lab): align community fixtures with reviewed assertions
Wibias Aug 13, 2026
c95b2cd
test(lab): cover CL-10 lifecycle hardening
Wibias Aug 13, 2026
a3a3eb5
test(lab): accept fail-closed public identifier rejection
Wibias Aug 13, 2026
5678171
fix(lab): scan decoded public artifact bytes
Wibias Aug 13, 2026
b8b5fe5
fix(lab): enforce authority and privacy in direct projector
Wibias Aug 13, 2026
9293f87
fix(lab): enforce strict JSON width and string bounds pre-parse
Wibias Aug 13, 2026
635710b
fix(lab): harden projector and public file boundary
Wibias Aug 13, 2026
e9bfd18
test(lab): compare concrete revocation summaries
Wibias Aug 13, 2026
1994d9a
Merge dev into feat/cl-10-public-evidence-contract
Wibias Aug 13, 2026
903c383
test(lab): freeze reviewed public route authority
Wibias Aug 13, 2026
b61b923
fix(lab): narrow reviewed public route authority
Wibias Aug 13, 2026
9227212
test(lab): require durable private-file publication
Wibias Aug 13, 2026
43c1c50
perf(lab): cache immutable public authority data
Wibias Aug 13, 2026
adad56d
fix(lab): keep route authority source pin rebase-stable
Wibias Aug 13, 2026
bd6ff36
test(management): add typed startup-health fixture
Wibias Aug 13, 2026
60f5629
test(management): keep startup-health seam typed
Wibias Aug 13, 2026
eefb8bc
fix(lab): make private publication directory-durable on POSIX
Wibias Aug 13, 2026
03b3327
test(lab): pin reachable public route authority snapshot
Wibias Aug 13, 2026
5ecdf63
docs(lab): align hardening plan with durable publication
Wibias Aug 13, 2026
bba85bb
test(codex): give degraded catalog sync its own timeout
Wibias Aug 13, 2026
49924f3
test(management): type startup-health stream fixture
Wibias Aug 13, 2026
3727902
chore(cl10): sync latest dev
Wibias Aug 13, 2026
6c4e6a4
fix(lab): add descriptor-bound public file reader
Wibias Aug 13, 2026
545d159
fix(lab): share public UTC day validation
Wibias Aug 13, 2026
979e6fa
fix(lab): reuse safe public UTC day helper
Wibias Aug 13, 2026
262e84c
fix(lab): preserve bounded file error classes
Wibias Aug 13, 2026
e6cf672
fix(lab): centralize safe public file reads
Wibias Aug 13, 2026
3fed287
fix(lab): harden publisher key reads
Wibias Aug 13, 2026
51ec8fb
fix(lab): harden local public export reads
Wibias Aug 13, 2026
5e033be
fix(lab): add descriptor-bound private file inspection
Wibias Aug 13, 2026
8c88c72
fix(lab): bound object imports before canonicalization
Wibias Aug 13, 2026
fdd639b
fix(lab): make origin provenance quota self-healing
Wibias Aug 13, 2026
4795837
fix(lab): keep public cleanup failures from blocking export purge
Wibias Aug 13, 2026
41b6383
fix(lab): record only successful export purge actions
Wibias Aug 13, 2026
03d2803
test(lab): cover public file symlink rejection
Wibias Aug 13, 2026
2ae85dd
test(lab): cover CL-10 deep review recovery fixes
Wibias Aug 13, 2026
6bb82a8
fix(lab): tighten private-file recovery surface
Wibias Aug 13, 2026
37d50e9
fix(lab): keep private-file test hooks internal
Wibias Aug 13, 2026
2ac5f36
perf(lab): reuse canonical public bundle normalization
Wibias Aug 13, 2026
bc3ff09
perf(lab): verify public bundles with one normalization pass
Wibias Aug 13, 2026
490b03a
fix(lab): reclaim stale public origin provenance
Wibias Aug 13, 2026
9c6bd9a
fix(lab): preserve public projection invariant failures
Wibias Aug 13, 2026
dc3c9ac
fix(lab): distinguish validation errors from ENOENT
Wibias Aug 13, 2026
d744a5f
test(lab): cover CL-10 review follow-up fixes
Wibias Aug 13, 2026
6bc7829
docs(cl10): document origin retention and fix EOF newline
Wibias Aug 13, 2026
b44912c
fix(lab): preserve directory sync cause portably
Wibias Aug 13, 2026
e99a762
test(lab): make export-purge failure deterministic
Wibias Aug 13, 2026
279e893
test(lab): import private-file seams directly
Wibias Aug 13, 2026
2dc353a
Merge latest dev into CL-10
Wibias Aug 13, 2026
aa4ce4b
test(lab): add deterministic export purge fault seam
Wibias Aug 13, 2026
aae6408
test(lab): make export purge failure deterministic
Wibias Aug 13, 2026
b690657
test(lab): isolate purge fault state from public barrel
Wibias Aug 13, 2026
bbadeb3
test(lab): keep purge fault seam internal
Wibias Aug 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
# CL-10 Public Evidence Implementation Plan

> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.

**Goal:** Implement CL-10.1 through CL-10.4: deterministic privacy-safe public evidence projection, signed local bundles, explicit local export, and quarantined community import/read surfaces, while keeping remote publishing blocked.

**Architecture:** Add a dedicated `src/lab/public/` boundary with independently versioned public types and strict validators. Public bundles are derived from valid local Lab evidence only after an exact exportability gate, signed with a local Ed25519 publisher key, and stored separately from the canonical ledger. Imported bundles are bounded, signature-checked, and stored only in a non-authoritative community domain that never feeds local verdicts, routing, or CL-08.

**Tech Stack:** TypeScript, Bun tests, Node `crypto` Ed25519, existing Lab JSONL/SQLite/query/digest/path infrastructure, existing `ocx lab` CLI and authenticated management API, existing Compatibility Matrix UI/i18n.

## Global Constraints

- No automatic telemetry or background publishing.
- No remote publishing implementation in this plan; CL-10.5 remains blocked until an exact reviewed service contract exists.
- No local subject/event/artifact/request/decision/Fabric identifier may appear in a public bundle.
- Private/custom route dimensions make evidence `not_exportable`; they are never dropped to broaden a public claim.
- Public schemas are closed and independently versioned; unknown fields fail closed.
- Public route identity uses a repo-reviewed, versioned allowlist authority. Dynamic discovery/configuration cannot extend it.
- Public incident references are closed corpus IDs only; historical URLs/devlog paths are never exported.
- Community evidence is `community_untrusted_v1`, never canonical local evidence, freshness, routing, or CL-08 input.
- Sensitive purge removes affected generated exports and locally-originated community copies; network revocation is never a prerequisite for completing a local purge.
- Publisher signatures prove integrity/continuity only, not evidence truth.

---

### Task 1: Freeze review amendments and implementation authority

**Files:**
- Modify: `devlog/_plan/260807_compatibility_lab/010_cl10_public_evidence_export.md`
- Modify: `docs/superpowers/specs/2026-08-12-cl10-public-evidence-design.md`

**Interfaces:**
- Consumes: CL-00 purge/public-export contracts and merged CL-09 state.
- Produces: final CL-10.1–CL-10.4 runtime contract; CL-10.5 remains explicitly blocked.

- [ ] **Step 1:** Add explicit purge/export/community-copy semantics consistent with CL-00 `purgeActions: export`.
- [ ] **Step 2:** Define `PublicRouteRegistryManifestV1` as the versioned local trust anchor for public provider/model identity.
- [ ] **Step 3:** Define bounded revocation bootstrap: target publisher key must match the original bundle publisher; duplicates are idempotent; conflicting replay fails closed; no V1 key rotation.
- [ ] **Step 4:** Replace arbitrary `incidentRefs` with closed `IC-NNN` references and require `artifactRefs` to resolve only to public artifact IDs in the same bundle.
- [ ] **Step 5:** Replace the route-only record assumption with a closed `PublicEvidenceSubjectV1` union for protocol/route/task evidence and require dedicated runtime validators/types.
- [ ] **Step 6:** Record that independent review accepted the contract and the user authorized CL-10.1–CL-10.4 runtime implementation on this PR; preserve the CL-10.5 transport hard stop.

### Task 2: Public schema, registry authority, and privacy projector

**Files:**
- Create: `src/lab/public/types.ts`
- Create: `src/lab/public/registry.ts`
- Create: `src/lab/public/validate.ts`
- Create: `src/lab/public/project.ts`
- Create: `src/lab/public/index.ts`
- Modify: `src/lab/index.ts`
- Test: `tests/lab-public-evidence.test.ts`

**Interfaces:**
- Produces: `PublicEvidenceBundleUnsignedV1`, `PublicEvidenceRecordV1`, `PublicEvidenceSubjectV1`, `PublicRouteRegistryManifestV1`, `projectPublicEvidence()`, `validatePublicEvidenceBundle()`.

- [ ] **Step 1: Write RED tests** for closed-schema rejection, deterministic public IDs/day buckets, protocol/route/task subject discrimination, exact route allowlist, private-route `not_exportable`, IC-only incident refs, no local ID leakage, and secret/PII canaries.
- [ ] **Step 2: Run focused test and verify expected RED failures.**
Run: `bun test tests/lab-public-evidence.test.ts`
- [ ] **Step 3: Implement minimal closed public types/registry/validator/projector.**
Public identities use domain-separated SHA-256 over JCS public-safe bytes. The registry manifest is repo-owned, versioned, digested, and cannot be supplied by an imported bundle as trust authority.
- [ ] **Step 4: Run focused test and verify GREEN.**

### Task 3: Bundle digest/signature and local storage

**Files:**
- Create: `src/lab/public/signature.ts`
- Create: `src/lab/public/storage.ts`
- Modify: `src/lab/paths.ts`
- Test: `tests/lab-public-evidence.test.ts`

**Interfaces:**
- Produces: `getOrCreatePublicPublisher()`, `signPublicEvidenceBundle()`, `verifyPublicEvidenceBundle()`, `writePublicEvidenceBundle()`, `readPublicEvidenceBundle()`.

- [ ] **Step 1: Write RED tests** for Ed25519 signing/verification, key-file permissions where enforceable, tamper rejection, deterministic bundle digest, bounded storage paths, and no private-key serialization.
- [ ] **Step 2: Verify RED.**
- [ ] **Step 3: Implement minimal key lifecycle, signing, verification, and safe local bundle storage.**
- [ ] **Step 4: Verify GREEN.**

### Task 4: Revocation and community quarantine

**Files:**
- Create: `src/lab/public/revocation.ts`
- Create: `src/lab/public/community.ts`
- Test: `tests/lab-public-evidence.test.ts`

**Interfaces:**
- Produces: `PublicEvidenceRevocationV1`, `verifyPublicEvidenceRevocation()`, `importCommunityBundle()`, `listCommunityBundles()`.

- [ ] **Step 1: Write RED tests** proving revocation accepts only the original bundle publisher key, duplicate identical revocations are idempotent, conflicting replay rejects, malformed/oversized bundles reject before persistence, and community import leaves canonical JSONL/SQLite verdict state unchanged.
- [ ] **Step 2: Verify RED.**
- [ ] **Step 3: Implement bounded revocation verification and separate community storage.**
- [ ] **Step 4: Verify GREEN.**

### Task 5: Sensitive purge integration

**Files:**
- Modify: `src/lab/ledger/purge.ts`
- Modify: `src/lab/paths.ts`
- Test: `tests/lab-public-evidence.test.ts`
- Test: `tests/lab-evidence-ledger.test.ts`

**Interfaces:**
- Consumes: existing `purgeSensitiveEvidence()` and `purgeActions: export`.
- Produces: fail-closed removal of generated exports and locally-originated community copies affected by local sensitive evidence.

- [ ] **Step 1: Write RED purge regression** showing an `export` purge removes CL-10 exports and local-origin community copies without requiring network access.
- [ ] **Step 2: Verify RED.**
- [ ] **Step 3: Extend purge-owned local directories/metadata minimally.**
- [ ] **Step 4: Run CL-10 and existing ledger purge tests.**

### Task 6: Explicit CLI and management surfaces

**Files:**
- Modify: `src/cli/lab.ts`
- Modify: `src/server/management/lab-routes.ts`
- Test: `tests/lab-public-evidence.test.ts`
- Test: relevant Lab CLI/management tests discovered in repository.

**Interfaces:**
- CLI: local preview/export, bundle verify, community import/list. No publish command.
- API: authenticated preview/export/verify/community endpoints only. No remote transport.

- [ ] **Step 1: Write RED CLI/API tests** for network-free preview, explicit export, verification, bounded community import, and absence of any publish endpoint/command.
- [ ] **Step 2: Verify RED.**
- [ ] **Step 3: Implement minimal surfaces using the public module APIs.**
- [ ] **Step 4: Verify focused CLI/API tests GREEN.**

### Task 7: Compatibility Matrix community context

**Files:**
- Modify: `gui/src/pages/compatibility-matrix-api.ts`
- Modify: `gui/src/pages/CompatibilityMatrix.tsx`
- Modify: locale catalog files under `gui/src/i18n/` as required by existing i18n rules.
- Test: existing Compatibility Lab GUI/i18n tests plus focused CL-10 additions.

**Interfaces:**
- Produces: clearly labelled, read-only community context separate from canonical local verdict UI.

- [ ] **Step 1: Write RED parser/render/i18n tests** proving community state is labelled non-authoritative and cannot replace the local verdict.
- [ ] **Step 2: Verify RED.**
- [ ] **Step 3: Implement the compact existing-detail-pane integration with no new product area.**
- [ ] **Step 4: Run GUI tests/lint/build GREEN.**

### Task 8: Closure validation

**Files:**
- Modify docs only if validation findings require factual updates.

- [ ] **Step 1:** Run `bun test tests/lab-public-evidence.test.ts tests/lab-evidence-ledger.test.ts`.
- [ ] **Step 2:** Run `bun x tsc --noEmit`.
- [ ] **Step 3:** Run `bun run privacy:scan`.
- [ ] **Step 4:** Run relevant Lab query/ledger/CLI/GUI tests.
- [ ] **Step 5:** Run GUI lint/build and React Doctor.
- [ ] **Step 6:** Run full Cross-platform CI on the exact final PR head.
- [ ] **Step 7:** Confirm no remote publishing code, arbitrary URL transport, routing feedback, local-verdict feedback, or CL-08 feedback was introduced.
Loading
Loading