diff --git a/.codegraph/.gitignore b/.codegraph/.gitignore deleted file mode 100644 index d20c0fe4..00000000 --- a/.codegraph/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# CodeGraph data files — local to each machine, not for committing. -# Ignore everything in .codegraph/ except this file itself, so transient -# files (the database, daemon.pid, sockets, logs) never show up in git. -* -!.gitignore diff --git a/.gitignore b/.gitignore index 2dac7290..0c0bcc76 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ coverage-branches.json __pycache__/ *.py[cod] .pytest_cache/ +/.codegraph/ diff --git a/docs/adr/0019-project-history-wire-size-symmetry.md b/docs/adr/0019-project-history-wire-size-symmetry.md index dd01aaea..380e5eb0 100644 --- a/docs/adr/0019-project-history-wire-size-symmetry.md +++ b/docs/adr/0019-project-history-wire-size-symmetry.md @@ -1,8 +1,8 @@ # ADR 0019 — Symmetric LineageWeave wire-size enforcement -**Decision status:** Accepted -**Implementation maturity:** active-PR -**Date:** 2026-08-21 +**Decision status:** Accepted +**Implementation maturity:** active-PR +**Date:** 2026-08-21 **Supersedes:** None; narrows ADR 0008 for the project-history and temporal-context DTO boundaries. ## Context diff --git a/docs/adr/0020-lineageweave-project-history-boundary.md b/docs/adr/0020-lineageweave-project-history-boundary.md index 6128b5eb..d81c43b6 100644 --- a/docs/adr/0020-lineageweave-project-history-boundary.md +++ b/docs/adr/0020-lineageweave-project-history-boundary.md @@ -1,8 +1,8 @@ # ADR 0020 — LineageWeave project-history service boundary -**Decision status:** Accepted -**Implementation maturity:** active-PR -**Date:** 2026-08-21 +**Decision status:** Accepted +**Implementation maturity:** active-PR +**Date:** 2026-08-21 **Supersedes:** None; narrows ADR 0011 for the project-history projection. ## Context diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index c7112e04..c8c72f26 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -2,10 +2,10 @@ **Status:** Live delivery baseline **Product:** Temporal Event Psychometrics Platform (TEPP) -**Snapshot:** 2026-08-24T05:41:54Z -**Protected-main evidence:** `c45be17a9dbce95ef81cee230e9d128abc7160ac` +**Snapshot:** 2026-08-24T10:55:23Z +**Protected-main evidence:** `e65cd663fc0802d6b70ff88d895a8077a1e572ae` (full SHA fetched live before every mutation) **Workspace version on protected main:** `0.1.0` -**Canonical gap-baseline authority:** [PR #164](https://github.com/ContextualWisdomLab/TEPP/pull/164). Duplicate [PR #179](https://github.com/ContextualWisdomLab/TEPP/pull/179) was closed at 2026-08-23T12:39:22Z and is not a second protected-main register. +**Canonical gap-baseline authority:** [PR #164](https://github.com/ContextualWisdomLab/TEPP/pull/164). [PR #164](https://github.com/ContextualWisdomLab/TEPP/pull/164) merged; this file is now maintained by follow-up refresh PRs against protected main. Duplicate [PR #179] stays closed. ## Purpose @@ -24,12 +24,12 @@ GitHub state before any customer, release, certification, or valuation claim. | Signal | Snapshot evidence | Delivery implication | |---|---:|---| -| Protected-main SHA | `c45be17a9dbce95ef81cee230e9d128abc7160ac` | All as-built claims are bounded to this commit. | -| Workspace members | 10 Rust crates | The foundation is modular, but the approved target contains additional semantic, estimator, compute, psychometric, event-intelligence, network, interpretation, artifact, and visual boundaries. | -| Open pull requests | **118** | The queue is itself a release blocker and requires consolidation. | +| Protected-main SHA | `e65cd663fc08…` (2026-08-24T10:11Z) | All as-built claims are bounded to this commit. | +| Workspace members | 48 unique Rust crates | The repository is modular, but the approved target still lacks complete semantic, estimator, compute, psychometric, event-intelligence, network, interpretation, artifact, and visual product boundaries. | +| Open pull requests | **71** | The queue is itself a release blocker and requires consolidation. | | Draft pull requests | **48** | Most queued work is not independently review-ready. | -| Non-draft pull requests | **70** | A non-draft state is not a qualifying review or required-check result. | -| Open product issues | **12** | Issue #156 plus the product-completion program #166–#176. | +| Non-draft pull requests | **23** | A non-draft state is not a qualifying review or required-check result. | +| Open product issues | **11** | Issue #156 plus open product-completion issues #166–#169 and #171–#176. | | Duplicate gap-baseline PRs | **#164** (authority); **#179** closed as superseded | Only one live register remains; queued Checks on #164 are not protected-main evidence. | | Current package version | `0.1.0` | No supported product release is established by the repository version alone. | @@ -37,21 +37,46 @@ The pull-request counts come from the live GitHub search at this snapshot. The full exact-head classification is owned by [issue #175](https://github.com/ContextualWisdomLab/TEPP/issues/175); this file keeps the operator-level summary while the exact-head register below records the -current 118-row volatile queue. Passing or queued Checks on an open PR never +volatile queue (live counts above). Passing or queued Checks on an open PR never promote that PR to implemented-main. -## Current open pull-request evidence +### Queue-consolidation progress (GAP-012) -The following exact-head register was fetched from the live GitHub pull-request -API at the snapshot above. `draft=false` is not approval, mergeability, or a +The hourly scheduler plus one batch integration vehicle are draining the +main-conflicting green queue: + +- [PR #215](https://github.com/ContextualWisdomLab/TEPP/pull/215) folds 31 fully + green but main-conflicting slices into one exact-head landing vehicle with + per-slice merge-commit provenance and local `cargo test`/quality-suite + verification at its head. +- The scheduler independently landed #110, #114, #115, #118–#128, #130, + #133–#135, #137–#138, and #164 while #215 was in Checks; #215 was refreshed + onto that main and re-verified. +- Transient Strix provider failures (`provider/backend unavailable`) on + #48/#49/#63/#65/#137/#149/#157 were re-run rather than treated as + code defects. + +Remaining after consolidation lands: strix-rerun set (#48 #49 #63 #65 #149 #157), +pending-check slices (#58 #59 #62 #66), conflicted #131, toolchain bump #214, and +the 48 draft PRs retained per the stacking plan, including the psychometric +recovery stack and non-psychometric drafts. + +## Snapshot open pull-request evidence + +The following exact-head register was fetched live from GitHub at +2026-08-24T10:55:23Z. Review decisions, required Checks, and mergeability remain +volatile; the live GitHub API supersedes this snapshot. `draft=false` is not approval, mergeability, or a passing-check claim. Re-read the full SHA, current review decision, required Checks, and branch rules immediately before every mutation. | PR | Exact current head | Draft | Base | Title | |---:|---|:---:|---|---| -| #213 | `ad25389642aff6300c17cd852e39cc5c9a9c8c09` | true | agent/psychometric-standardised-asymptotic-diffusion | feat(psychometric): recover Driver p.16 discreteCINTstd after positive p | -| #212 | `267cd1828f279a0c2514b45ff2c815b06619849b` | true | agent/psychometric-standardised-time-independent-predictor-variance | feat(psychometric): recover Driver p.16 asymDIFFUSIONstd after positive asymDIFFUSION | -| #211 | `cc281b57af46b0f6af497a33b837e20954d44428` | true | agent/psychometric-standardised-manifest-variance | feat(psychometric): recover Driver p.16 TIPREDVARstd after positive TIPREDVAR | +| #217 | `79df32c73b260838fd3d0bfed3e84ff3e58e4b28` | false | main | docs(gap): refresh baseline snapshot, consolidation progress; untrack codegraph artifacts | +| #216 | `91903db726f1da6b398e0a32c5a401126598154f` | true | agent/psychometric-standardised-discrete-intercept | feat(psychometric): recover Driver p.16 asymCINTstd after positive p | +| #215 | `f813ce51e3749a91958c1e075dc8d0824f811af0` | false | main | chore(delivery): consolidate 31 queued green slices into one landing vehicle (#175) | +| #214 | `5c5621c27bdf18d52f6f98b7ac373eb90768fbc5` | false | main | build(deps): bump rust-toolchain from 1.97.1 to 1.98.0 | +| #213 | `d32c069c5653434302dc2507e272ff916cb7b16a` | true | agent/psychometric-standardised-asymptotic-diffusion | feat(psychometric): recover Driver p.16 discreteCINTstd after positive p | +| #211 | `643b9beb76ea6bc6b3a468bdb0f08e1a820cae9f` | true | agent/psychometric-standardised-manifest-variance | feat(psychometric): recover Driver p.16 TIPREDVARstd after positive TIPREDVAR | | #210 | `22202c57c0818d3efb28438e95bdde5d0e7143b0` | true | agent/psychometric-standardised-manifest-trait-variance | feat(psychometric): recover Driver p.16 MANIFESTVARstd after positive Θ | | #209 | `5e3ef38256f42ce09a934eb0f3893e02a40ad6b7` | true | agent/psychometric-added-initial-tdpred-var | feat(psychometric): recover Eq. 5 of analog addedT0TIPREDVAR extra observed TD variance | | #208 | `adcd68a582725130c046239753290d6cb5f3b8b7` | true | agent/psychometric-standardised-trait-variance | feat(psychometric): recover Driver p.16 MANIFESTTRAITVARstd after positive Ψ_τ | @@ -61,7 +86,6 @@ Checks, and branch rules immediately before every mutation. | #204 | `ac757e5e4f3651cad98fa88d5a44db570eb1c3cf` | true | agent/psychometric-standardised-continuous-tdpred-effect | feat(psychometric): recover Driver Table 3 T0TDPREDEFFECTstd after positive T0VAR | | #203 | `e5a63d0c7ffac91e9945f6c483152a0bdf267525` | true | agent/psychometric-asymptotic-tipred-observed-variance | feat(psychometric): recover Driver 2017-era addedTIPREDVARstd after addedTIPREDVAR | | #202 | `2d2d3efe5fd2f742a335e071f22fc1738c51ab27` | true | agent/psychometric-asymptotic-tipred-observed-variance | feat(psychometric): recover Driver p.16 TDPREDEFFECTstd after positive variances | -| #201 | `57be20fc361aa0a812b0ed4e0eaffc70680d7123` | false | main | feat(semantic): bind exact spans as units; refuse language as identity | | #200 | `8f429471e2b249e76c9b722eaf2443518b666c98` | true | agent/psychometric-initial-tipred-observed-variance | feat(psychometric): recover Driver Eq. 5 of addedTIPREDVAR extra observed TI variance | | #199 | `7a476ed3c39e4ba14c9c51f5cbbafc33310979d2` | true | agent/psychometric-added-t0-tipred-var | feat(psychometric): recover Driver Eq. 5 of addedT0TIPREDVAR extra observed TI variance | | #198 | `52a9b4ceb26bdd89e6e49c56fb473d96c68ca352` | true | agent/psychometric-standardised-initial-tipred-effect | feat(psychometric): recover Driver 2017-era addedT0TIPREDVAR after T0TIPREDEFFECT | @@ -78,62 +102,20 @@ Checks, and branch rules immediately before every mutation. | #185 | `69ffec6425863b2842094ff1b1d6c07d8eee6b5b` | true | agent/psychometric-predetermined-later-lagged-t0var | feat(psychometric): recover Driver later-start later-occasion variance of predetermined T0VAR | | #184 | `6b93147e668ff414240f3ea94997f2937c0817f1` | true | agent/psychometric-predetermined-initial-t0var | feat(psychometric): recover Driver later-start lagged covariance of predetermined T0VAR | | #183 | `c10097be0f6f4ff8dd8e6db21dce8818630fe17f` | true | agent/psychometric-predetermined-lagged-t0var | feat(psychometric): recover Driver first-occasion variance of predetermined T0VAR | -| #182 | `7e203976fe4b768fdb4ee6c11126ac7e9ab1c4b8` | true | agent/psychometric-predetermined-later-t0var | feat(psychometric): recover Driver lagged covariance of predetermined T0VAR | +| #182 | `ee999e1ed23327a75d9cf4eb09a4652561f07cab` | true | agent/psychometric-predetermined-later-t0var | feat(psychometric): recover Driver lagged covariance of predetermined T0VAR | | #181 | `96e8d1c21924124d144f6273893eda8ac6b41b2d` | true | agent/psychometric-posterior-esem-input | feat(psychometric): recover Driver later-occasion variance of predetermined T0VAR | -| #180 | `60e936b43740c238d9a4083b529a3d0a12265c12` | false | main | fix(transport): hide raw provider exception details | -| #177 | `580d45206536bf2f7deba327ffafb96a69ba7260` | false | main | fix(workflow): pin scheduler budget hardening | -| #165 | `34083c3f5d6637cf1665a29dac45fbf67a74d5dd` | false | main | feat: route hourly product agents through contextual orchestrator | -| #164 | `d9d55513f5ddcc1d89139d4ba940fb8261d33b4b` | false | main | docs: define TEPP product completion and technical gap baseline | | #157 | `340087494b0a9653aede4eeb4bd27049e051222d` | false | main | feat(api): publish completed analysis-run result contract | -| #155 | `2071a9c0090a24cd6583147f69c89020cda006ed` | false | main | feat(api): admit LineageWeave as a modular analysis-run consumer | -| #154 | `a7a1bdf96a6759f11aed9284b73319ed94b82fd2` | false | main | ci(rust): refresh branch coverage compiler baseline | -| #153 | `e7c871bc2f5e6023002ceeea30217130561842e1` | false | main | feat(membership): refuse location as entity identity or language | -| #152 | `70a6c6608e39df757417b2674f0acf27aa09b612` | false | main | feat(method): refuse prompt boilerplate as unique content | -| #151 | `f87c812415280681c4243117fbd1302b204e4f68` | false | main | feat(method): refuse corpus-background wording as unique content | -| #150 | `f9110e0eec68d823778a433c4ccab3a1beca46f5` | false | main | feat(method): refuse non-lexical modality as unique content | -| #149 | `6077b9ce7f0961a3e287c4e8afe0faa5a0638b2e` | false | main | feat(method): refuse copied-text residue as unique content | -| #148 | `4c0612fe717a40cebfb9ba1e31daaa7317607c9f` | false | main | feat(method): refuse house-voice style as unique content | | #147 | `08c427f76098adcd5226d1e141d208896bfe58f8` | true | main | feat(method): refuse section boilerplate as unique content | | #146 | `5419b0f76a737faf65d6b0c848c83f2f1336e326` | false | main | feat(membership): refuse episode membership outside the episode | -| #145 | `696d56c5816815e22181a03c57a822f974d41706` | false | main | feat(method): refuse default stopword deletion of report language | -| #143 | `7d533c6198492f748303869f0795fac5c8764b50` | false | main | feat(relation): refuse a template copy as the source identity | | #142 | `7ca6035c5d8b7c9a7761a0c5f26d1de4215c334b` | true | main | feat(evidence): refuse untrusted payloads as estimator authority | -| #141 | `d558a4b4b3518f4ae09fde6ac828602bb007cdec` | false | main | feat(privacy): refuse untrusted intake without a grant | -| #140 | `4feb427f6f895ebb53a151ae7c8483f69a3890f0` | false | main | feat(estimator): refuse a checkpoint as the CPU f64 estimator | -| #139 | `43ebbda0d35f9bf227c5764d53d429fff0f08c8c` | false | main | feat(relation): refuse a summary as the source identity | -| #138 | `f06879da364e3149aa2caf51158de60926d9846f` | false | main | feat(relation): refuse reverse input-process-outcome event time | -| #137 | `c8b3d494df100e57aab7fdbcdc58a798c874e6c0` | false | main | feat(relation): refuse retrospective reporting as a transition | | #136 | `7825c778f39bb8d1ab9f6fe18c227559f8e78fee` | true | main | feat(relation): refuse translation edges as state transitions | -| #135 | `1576e7fe5f03eb1a678060091115dfc927518d49` | false | main | feat(evidence): refuse untrusted payloads without identity and bounds | | #134 | `7f4a5df9fd18be203c995f59f1e734f69eba56f9` | true | main | feat(psychometric): refuse unidentified association as causal language | -| #133 | `dbe1c1f6f1e27403ee6301f3de220fff1f2d8b40` | false | main | feat(relation): refuse inferred status as observed evidence | | #132 | `fe73209ea3407f0c8cd62fbf10ecea844ac15e50` | true | main | feat(relation): refuse unobserved pairs as no-relationship | -| #131 | `02c04db787ed6fc443102875740d97b7d2e2cbcc` | false | main | feat(membership): refuse collapsing targets into entity or project | -| #130 | `6f963c8527986c8290aff94ae898991adf03e4d6` | false | main | feat(relation): refuse support edges as state transitions | +| #131 | `0651aeec72cd54c1119effa77e97e992bf265b3d` | false | main | feat(membership): refuse collapsing targets into entity or project | | #129 | `8981696f58892a1ace9baeb6224ac55b436b8110` | true | main | feat(membership): refuse customer-competitor overlap | -| #128 | `30ff215365a18ccef7b22e03912c293532b8f7bc` | false | main | feat(temporal): refuse other clocks as system time | -| #127 | `bd34a2dda405fab264147f68daa2059dd61c30ca` | false | main | feat(temporal): refuse other clocks as event time | -| #126 | `28f7ed69785da71c38439c4241a132ab391a5c6f` | false | main | feat(temporal): refuse other clocks as assertion time | -| #125 | `c225f353f27647268d44a9e8156412a1b9de9fc2` | false | main | feat(temporal): refuse event, system, and available time as cutoff | -| #124 | `e89b90ce8d2792cb3f1fd61ad7dbd12556855df2` | false | main | feat(temporal): refuse event and system time as availability | -| #123 | `78e41907ff95067a8755e3ceb41de5f32299ba6e` | false | main | feat(temporal): refuse document rows that omit assertion or document time | -| #122 | `38542fd41196394587e024c7e824c840dcafb32c` | false | main | feat(temporal): refuse later revisions with earlier system time | -| #121 | `93f6aa5e28761e69f14093d2e341799219f867c6` | false | main | feat(privacy): seal identity mappings with purpose-bound HMAC | -| #120 | `34c4c119608b2aa46c84e9bef2b47711740ff9de` | false | main | feat(relation): refuse citation edges as state transitions | -| #119 | `47ab763d49b14ab1ba31f4828ad6e3fda274c007` | false | main | feat(psychometric): recover ESEM loadings and refuse reverse DSEM lags | -| #118 | `b8f4582f65852b0ac5ba9149de9d5d7783b1c282` | false | main | feat(event): refuse subevents that escape the parent interval | -| #117 | `8a5a3fa6d38703e6b83b03ad64959dd01c8f263d` | false | main | feat(membership): recover nested ICC and refuse cross-classified collapse | -| #116 | `08d557c2f772e92543e71d27ac41a108fe64a8bb` | false | main | docs(adr): wire verified method papers into temporal and psychometric ADRs | -| #115 | `2dbc0fd1d7200100a72990c01008e50ad5f9e641` | false | main | fix(quality): refuse inverted coverage-authority PR sentences | -| #114 | `df734d71293bf5bbdd10d28430c15626cdb1220e` | false | main | feat(privacy): record provider field codes without source text | | #113 | `bd800fc62a7cb59339177e34baf3237d6897fce7` | false | main | feat(persistence): fail-closed entity and project target SQL | -| #110 | `4517b3f00d56d08a5a9bf47e6b7a681537765127` | false | main | feat(api): export corpus-split leakage-audit manifests | -| #106 | `60aef093e4f89638b896864342aa28d3a2d3ece7` | false | main | fix(privacy): inspect audit_event inserts through try_record | -| #100 | `b2a885b9b5418c79d5e828d64291c878f5ae5477` | false | main | test(tls): recover bind decisions from the live policy | -| #99 | `c4ed064c9e931f1772992526969fb4ae5fcd4537` | false | main | feat(persistence): persist exact text_segment byte spans without 0007 | | #95 | `3c42b3b09e9a0501d7c7a1a42a322e58cba39165` | true | main | feat(privacy): refuse blanket-masked scientific field grants | | #92 | `192e1eab459ea1c7e155d9fafe60d1b5912025f2` | true | main | feat(orchestrator): serve interpretation POSTs on a loopback HTTP listener | -| #91 | `808ae6690b35bb58f2152d74c7978e90de6b86a0` | false | main | feat(privacy): inherit source sensitivity onto derived artifacts | | #86 | `47f6216aec217f15a6274d889bc507e59821096f` | true | main | feat(privacy): replay privileged-access decisions without source identity | | #85 | `1ebb40644bb479ed8703f6df1b351f3e19d5fe13` | false | main | feat(event): score CHRONOS occurrence forecasts with a Brier rule | | #84 | `e0ef1f869c46aa20969ce083f9ca31d622c31bb4` | true | main | feat(invariance): replay shared-meaning gate on current main | @@ -142,33 +124,28 @@ Checks, and branch rules immediately before every mutation. | #81 | `a7769d37ad1f950547f00e05ce2c03e5a2843b43` | true | main | feat(privacy): bind tenant roles to system-time lifetimes | | #80 | `9539417f223bc6067f21e701986a49b7d3a37aba` | true | main | feat(temporal): space longitudinal lags on event time | | #79 | `166e37c2cb540a575c690c813a21123a13d86376` | true | main | feat(privacy): bind authorization grants to one processing purpose | -| #78 | `b64c6799708ac1f6ac7c84e07fe3ae50750434e1` | false | main | feat(longitudinal): keep unit means out of within-unit change | | #76 | `ccffcab50ff2f1d8c0e6ee80269d0f7ee0075368` | true | main | feat(event): score TDT topic detections without promoting clusters | | #75 | `90cc8b6d4848e4c7718dd4bea74c1aaaab6f3685` | true | main | feat(method): model template sources without inferential weights | | #74 | `0ce7e6a923282d3533cf3b8c0592d5df244049f8` | true | main | feat(temporal): keep predicted Allen assertions hypothetical | -| #73 | `11cc811a10b80a49e8a8ed6bc60fba3d5c753d28` | false | main | feat(topic): keep one identity across dormancy and reactivation | | #72 | `899656968cc9f68a3d8fc55dddc4fd257fb27050` | false | main | feat(event): score TDT story segments with WindowDiff and Pk | -| #71 | `2588f38281b97fa03f552634d307e8b4c908899d` | false | main | feat(network): refuse raw simplex Euclidean cluster geometry | | #70 | `7a1f33aa68c1c9be9e9da7ac7f7dadb1092ff9e4` | false | main | feat(event): score CHRONOS schema slots with precision and recall | -| #69 | `8e4a3ca9cc80f0f4e3bccf712fe6a725bfb1365e` | false | main | feat(interpretation): keep LLM claims hypothetical and evidence-cited | | #68 | `6a98c812ef8e621e1bc1c46a615296b39f0bae33` | false | main | feat(event): score TDT tracks with pair precision and switch rate | -| #67 | `45b272d2498ecff128d75621c88c1e7d6eb1400b` | false | main | feat(model): statistical Pareto K gates refuse LLM numerical authority | -| #66 | `380be3f33f798cc8648a9dc9f24b85011f9e0468` | false | main | feat(event): score TDT mention links with precision and recall | +| #66 | `0fd2e207c731909581469a1ea2c0c1b55bd99d9a` | false | main | feat(event): score TDT mention links with precision and recall | | #65 | `74351f398d67df590019049ab85a7f649495b860` | false | main | feat(event): score first-story detections with FAR and miss rates | -| #64 | `c11adce997d4f3e462f50711211af9f051e747b0` | false | main | feat(event): score mention confidence with a known-truth Brier rule | | #63 | `0735ca67abcf5c6c2fd591a52d29067e5f16215a` | false | main | feat(corpus): refuse TF-IDF and BM25 as inferential weights | -| #62 | `0446878c69fdd63809826d61bb90e2be1b105227` | false | main | feat(simulation): exclude delayed documents before they are available | +| #62 | `7ba0f09df56ad2fc5601a93e581f6b3fa1af76c9` | false | main | feat(simulation): exclude delayed documents before they are available | | #61 | `c7f094cf17b5d0be0aa9270b2d397da4d2db851d` | false | main | feat(temporal): refuse uncertain availability past knowledge cutoff | | #60 | `40ede67614599ba21495fea024d4493d3af9fbb3` | false | main | feat(relation): refuse association and precedence as causation | -| #59 | `b47efdc3cfdcec61f69c4219c49519a160bd5549` | false | main | feat(corpus): treat NFC/NFD bodies as split leakage | -| #58 | `431561a6c422660c618f82a241e5a4b320653378` | false | main | feat(evidence): keep embedded image URIs as positional non-lexical units | +| #59 | `83731ec705bd4c29f8466e7990f1febb4f073120` | false | main | feat(corpus): treat NFC/NFD bodies as split leakage | +| #58 | `6a01fefca73fb19a25d082314dcdbc10d52ee383` | false | main | feat(evidence): keep embedded image URIs as positional non-lexical units | | #57 | `b76e38393e932873ec2aed682ab539ee61828537` | false | main | feat(validation): exact-head claim promotion gates | | #51 | `1801501c4d7c5be720d24aba954280fbc9068612` | false | main | feat(compute): VRAM budget types with CPU f64 fallback | -| #50 | `d4cd08341e8dca8475542cf9f3b46a1f5bae5ea3` | false | main | feat(event): refuse TDT/CHRONOS outputs as state transitions | -| #49 | `dd6cf43e5edfe1d9a7e344cac5352bfb55480e8a` | false | main | feat(psychometric): posterior ESEM input gates with true-parameter RMSE | +| #49 | `9516ef1384f5239096d6d13c52155f8f7dde7795` | false | main | feat(psychometric): posterior ESEM input gates with true-parameter RMSE | | #48 | `6110d3660607ba46b312b4d76f048f1bcc4f3bc5` | false | main | feat(topic): logistic-normal ALR coordinates with true-parameter RMSE | -The exact-head register, counts, and protected-main SHA were fetched from the live GitHub REST API at `2026-08-24T05:41:54Z`. Review decisions, required Checks, and mergeability remain volatile; re-read them immediately before every mutation. This snapshot is not merge authorization and does not treat queued or passing Checks as shipped protected-main behavior. +Review decisions, required Checks, and mergeability remain volatile; re-read +them immediately before every mutation. This snapshot is not merge authorization +and does not treat queued or passing Checks as shipped protected-main behavior. ## Authority and derivation @@ -186,7 +163,11 @@ The exact-head register, counts, and protected-main SHA were fetched from the li ## Protected-main as-built baseline -Protected `main` contains the following workspace boundaries: +Protected `main` contains 48 unique Rust crate boundaries in the current +workspace manifest. The `members` and `default-members` arrays enumerate the +same crate set for distinct Cargo commands; the unique-crate count is the +authoritative modularity measure. +The core boundaries include: ```text evidence_core @@ -219,25 +200,25 @@ visual workspace, or a supported multi-tenant release. | ID | Operator-visible gap | Maturity | Delivery status | Protected-main authority | Current delivery authority | Current head SHA | Closure evidence | |---|---|---|---|---|---|---|---| -| GAP-001 | Submission can produce a durable accepted receipt, but protected `main` lacks the separate deterministic terminal-result lifecycle. | `active-PR` | landing vehicle | `c45be17` (accepted receipt only) | [#156](https://github.com/ContextualWisdomLab/TEPP/issues/156) / [PR #157](https://github.com/ContextualWisdomLab/TEPP/pull/157) | `340087494b0a` | Exact request/result/snapshot/cutoff/model/profile binding, typed terminal failures, deterministic retrieval, current-head checks, and qualifying review. Cutoff-safe execution from closed stacked PR #178 is on this head only and is not implemented-main. | -| GAP-002 | LineageWeave and other modular consumers cannot yet rely on the complete protected-main HTTP evidence/result boundary. | `active-PR` | landing vehicle | `c45be17` (loopback naruon listener from merged PR #107; versioned API contracts) | [#155](https://github.com/ContextualWisdomLab/TEPP/pull/155) | `2071a9c0090a` | Merge the live consumer contract after exact-head review/Checks. Closed stacked PRs #158 and #159 were folded into this head; they are not protected-main evidence. | -| GAP-003A | Immutable evidence cannot yet be submitted to a durable validation run that produces operator-usable scientific acceptance evidence. | `accepted-target` | product-completion | `c45be17` (validation metrics are library-level only) | [#166](https://github.com/ContextualWisdomLab/TEPP/issues/166) | `—` (issue program; no current implementation PR) | Compose/CLI/API execution must bind immutable evidence, cutoffs, model configuration, validation metrics, and reproducibility manifests to one idempotent run. | -| GAP-003B | Scientific result artifacts cannot yet be persisted, restarted, and recovered as one supported operator workflow. | `accepted-target` | product-completion | `c45be17` (persistence contracts lack E2E recovery) | [#166](https://github.com/ContextualWisdomLab/TEPP/issues/166) | `—` (issue program; no current implementation PR) | Durable storage, migration/rollback, restart/recovery, artifact digest verification, and terminal retrieval must pass against a real Compose deployment. | -| GAP-003C | The persistence slice classifies concurrent-write SQLSTATEs, but has no measured hot-partition detection, routing, or mitigation for tenant/result workloads. | `accepted-target` | product-completion | `c45be17` (conflict classification only; no measured partition control) | [#166](https://github.com/ContextualWisdomLab/TEPP/issues/166) | `—` (issue program; no current implementation PR) | A real Compose/PostgreSQL workload identifies hot keys and partition skew, applies bounded tenant/time or result routing without weakening 3NF or temporal authority, and proves conflict rate, latency, recovery, and migration/rollback behavior under load. | -| GAP-004 | The central shared-latent temporal/relational topic estimator is absent. | `accepted-target` | product vertical | `c45be17` (no production estimator) | [#167](https://github.com/ContextualWisdomLab/TEPP/issues/167) / [PR #48](https://github.com/ContextualWisdomLab/TEPP/pull/48) | `6110d3660607` | Rust CPU `f64` fitting, sparse bounded parallelism, posterior artifacts, convergence, true-parameter RMSE/bias/coverage, and real candidate-K fitting. | -| GAP-005 | Real multilingual documents are not yet transformed into validated exact-span semantic units and versioned shared concepts. | `accepted-target` | product vertical | `c45be17` (evidence spans exist without full semantic pipeline) | [#168](https://github.com/ContextualWisdomLab/TEPP/issues/168) / [PR #201](https://github.com/ContextualWisdomLab/TEPP/pull/201) | `57be20fc361a` | Span-grounded units on #201 are a first slice only (not concept alignment, not invariance, not implemented-main). Closure still requires Unicode/layout/language-tailored processing, unknown-concept review, multilingual calibration/invariance, image-position evidence, and prompt-injection tests. | -| GAP-006 | Posterior topic measurements cannot yet be fitted through a complete cross-classified longitudinal ESEM/DSEM engine. | `accepted-target` | product vertical | `c45be17` (temporal and membership primitives only) | [#169](https://github.com/ContextualWisdomLab/TEPP/issues/169) / [PR #119](https://github.com/ContextualWisdomLab/TEPP/pull/119) | `47ab763d49b1` | Plausible-value/joint uncertainty, invariance, irregular event time, within/between separation, multiple membership, true-parameter recovery, and causal-claim refusal. | -| GAP-007 | TDT detection/tracking and CHRONOS schema/forecast/temporal reasoning remain isolated bounded gates rather than one calibrated product workflow. | `accepted-target` | product vertical | `c45be17` (event/time primitives only) | [#170](https://github.com/ContextualWisdomLab/TEPP/issues/170) / [PR #70](https://github.com/ContextualWisdomLab/TEPP/pull/70) | `7a1f33aa68c1` | Span-grounded mentions, calibrated TDT metrics, schema/forecast hypothesis states, interval consistency, known-truth recovery, persistence, and exports. | -| GAP-008 | GPU support is policy-only; no production estimator kernel has real hardware parity or declared VRAM evidence. | `accepted-target` | product vertical | `c45be17` (VRAM policy only) | [#171](https://github.com/ContextualWisdomLab/TEPP/issues/171) / [PR #51](https://github.com/ContextualWisdomLab/TEPP/pull/51) | `1801501c4d7c` | Real CUDA/portable backend execution, CPU parity, streamed memory, bounded OOM/fallback, hardware profiles, telemetry, and no skipped-support claim. | -| GAP-009 | Topic association and cluster outputs lack posterior-valid estimation, uncertainty, edge stability, and consensus communities. | `accepted-target` | product vertical | `c45be17` (network primitives only) | [#172](https://github.com/ContextualWisdomLab/TEPP/issues/172) / [PR #71](https://github.com/ContextualWisdomLab/TEPP/pull/71) | `2588f38281b9` | Valid log-ratio coordinates, interval/stability-bearing edges, repeated Leiden consensus, known-truth network/cluster recovery, and reproducible exports. | -| GAP-010 | Operators lack coordinated accessible visual analytics and exact-value export workflows. | `accepted-target` | product vertical | `c45be17` (no visual workspace) | [#173](https://github.com/ContextualWisdomLab/TEPP/issues/173) | `—` (Figma work not started) | Real Figma File ID in ADR, Storybook/design tokens, ten PRD views, exact-value tables, accessible interaction/print/PDF states, provenance, and source-consistent exports. | -| GAP-011 | TEPP is not yet an operable multi-tenant service or supported release. | `accepted-target` | product vertical | `c45be17` (library contracts only) | [#174](https://github.com/ContextualWisdomLab/TEPP/issues/174) | `—` (issue program; no current implementation PR) | Durable queue/storage, OIDC/RLS/purpose controls, OpenTelemetry/SLOs, load/recovery, migrations, signed release/SBOM/provenance, assurance evidence, and support policy. | -| GAP-012 | The 118-PR queue obscures authority, repeatedly stales exact-head evidence, and fragments product boundaries. | `partial` | release blocker | `c45be17` (protected-main truth) | [#175](https://github.com/ContextualWisdomLab/TEPP/issues/175) | `—` (live queue program) | Every PR classified; unique landing vehicles; compatible slices folded; superseded work closed with provenance; scheduler prioritizes consolidation; queue reaches zero before GA. | -| GAP-013 | Evidence-grounded LLM interpretation is routed but not executed and validated as a production interpreter/verifier port. | `partial` | active integration | `c45be17` (routing and refusal contracts only) | [#176](https://github.com/ContextualWisdomLab/TEPP/issues/176), [PR #69](https://github.com/ContextualWisdomLab/TEPP/pull/69), [PR #165](https://github.com/ContextualWisdomLab/TEPP/pull/165) | `8e4a3ca9cc80` / `34083c3f5d66` | Contextual-orchestrator execution, evidence citations, verifier refusals, comparable-budget ablations, provider eligibility/fallback, abstention, live/offline contract tests, and no numerical-authority escalation. | -| GAP-014 | README/TRD and some PR descriptions lag protected-main and live queue reality. | `partial` | documentation drift | `c45be17` (documentation is not fully synchronized) | [#175](https://github.com/ContextualWisdomLab/TEPP/issues/175) | `—` (queue-consolidation work) | Reconcile README, TRD, traceability, ADR maturity, CHANGELOG, preferred-merge declarations, and exact protected-main evidence. | -| GAP-015 | There was no canonical live product/operator-gap register tied to documentation validation. | `active-PR` | landing vehicle | `c45be17` (no live gap register) | [PR #164](https://github.com/ContextualWisdomLab/TEPP/pull/164) (authority); closed [PR #179](https://github.com/ContextualWisdomLab/TEPP/pull/179) is not a second register | `d9d55513f5dd` | Merge this document and its validator/map/quality-test integration after exact-head checks and independent review. Passing Checks on #164 are not implemented-main. | -| GAP-016 | Hourly PR maintenance used an older central scheduler revision whose per-repository sweep budgets could amplify the queued review workload. | `active-PR` | operability hardening | `c45be17` (caller pin before central budget hardening) | [PR #177](https://github.com/ContextualWisdomLab/TEPP/pull/177) | `580d45206536` | The change pins a verified central revision immutably; closure still requires exact-head hosted Checks, resolved threads, and independent review. | -| GAP-017 | Accepted analysis runs have a terminal DTO, and cutoff-safe execution exists only on the #157 head after stacked PR #178 merged into that branch. | `active-PR` | product vertical | `c45be17` (accepted receipt only) | [#166](https://github.com/ContextualWisdomLab/TEPP/issues/166) / [PR #157](https://github.com/ContextualWisdomLab/TEPP/pull/157) | `340087494b0a` | Exact availability cutoff, snapshot binding, multiple-membership preservation, digest integrity, redacted no-eligible failure, and realistic end-to-end tests on protected main. Closed stacked PR #178 is not implemented-main. | +| GAP-001 | Submission can produce a durable accepted receipt, but protected `main` lacks the separate deterministic terminal-result lifecycle. | `active-PR` | landing vehicle | `e65cd66` (accepted receipt only) | [#156](https://github.com/ContextualWisdomLab/TEPP/issues/156) / [PR #157](https://github.com/ContextualWisdomLab/TEPP/pull/157) | `340087494b0a` | Exact request/result/snapshot/cutoff/model/profile binding, typed terminal failures, deterministic retrieval, current-head checks, and qualifying review. Cutoff-safe execution from closed stacked PR #178 is on this head only and is not implemented-main. | +| GAP-002 | LineageWeave and other modular consumers cannot yet rely on the complete protected-main HTTP evidence/result boundary. | `partial` | landing vehicle | `e65cd66` (LineageWeave consumer ingress and versioned API contract are implemented-main; durable terminal-result completion remains separate) | [PR #155](https://github.com/ContextualWisdomLab/TEPP/pull/155) (merged) | `—` | Complete the durable result lifecycle under #156/#157 and preserve versioned consumer contracts; closed stacked PRs #158 and #159 are provenance, not additional implementation authority. | +| GAP-003A | Immutable evidence cannot yet be submitted to a durable validation run that produces operator-usable scientific acceptance evidence. | `accepted-target` | product-completion | `e65cd66` (validation metrics are library-level only) | [#166](https://github.com/ContextualWisdomLab/TEPP/issues/166) | `—` (issue program; no current implementation PR) | Compose/CLI/API execution must bind immutable evidence, cutoffs, model configuration, validation metrics, and reproducibility manifests to one idempotent run. | +| GAP-003B | Scientific result artifacts cannot yet be persisted, restarted, and recovered as one supported operator workflow. | `accepted-target` | product-completion | `e65cd66` (persistence contracts lack E2E recovery) | [#166](https://github.com/ContextualWisdomLab/TEPP/issues/166) | `—` (issue program; no current implementation PR) | Durable storage, migration/rollback, restart/recovery, artifact digest verification, and terminal retrieval must pass against a real Compose deployment. | +| GAP-003C | The persistence slice classifies concurrent-write SQLSTATEs, but has no measured hot-partition detection, routing, or mitigation for tenant/result workloads. | `accepted-target` | product-completion | `e65cd66` (conflict classification only; no measured partition control) | [#166](https://github.com/ContextualWisdomLab/TEPP/issues/166) | `—` (issue program; no current implementation PR) | A real Compose/PostgreSQL workload identifies hot keys and partition skew, applies bounded tenant/time or result routing without weakening 3NF or temporal authority, and proves conflict rate, latency, recovery, and migration/rollback behavior under load. | +| GAP-004 | The central shared-latent temporal/relational topic estimator is absent. | `accepted-target` | product vertical | `e65cd66` (no production estimator) | [#167](https://github.com/ContextualWisdomLab/TEPP/issues/167) / [PR #48](https://github.com/ContextualWisdomLab/TEPP/pull/48) | `6110d3660607` | Rust CPU `f64` fitting, sparse bounded parallelism, posterior artifacts, convergence, true-parameter RMSE/bias/coverage, and real candidate-K fitting. | +| GAP-005 | Real multilingual documents are not yet transformed into validated exact-span semantic units and versioned shared concepts. | `partial` | product vertical | `e65cd66` (semantic_core exact-span units and language-profile validation are implemented-main as the first slice) | [#168](https://github.com/ContextualWisdomLab/TEPP/issues/168) / [PR #201](https://github.com/ContextualWisdomLab/TEPP/pull/201) (merged) | `—` | Closure still requires concept alignment, Unicode/layout/language-tailored processing, unknown-concept review, multilingual calibration/invariance, image-position evidence, and prompt-injection tests. | +| GAP-006 | Posterior topic measurements cannot yet be fitted through a complete cross-classified longitudinal ESEM/DSEM engine. | `accepted-target` | product vertical | `e65cd66` (temporal and membership primitives only) | [#169](https://github.com/ContextualWisdomLab/TEPP/issues/169) / [PR #119](https://github.com/ContextualWisdomLab/TEPP/pull/119) | `47ab763d49b1` | Plausible-value/joint uncertainty, invariance, irregular event time, within/between separation, multiple membership, true-parameter recovery, and causal-claim refusal. | +| GAP-007 | TDT detection/tracking and CHRONOS schema/forecast/temporal reasoning remain isolated bounded gates rather than one calibrated product workflow. | `accepted-target` | product vertical | `e65cd66` (event/time primitives only) | [#170](https://github.com/ContextualWisdomLab/TEPP/issues/170) / [PR #70](https://github.com/ContextualWisdomLab/TEPP/pull/70) | `7a1f33aa68c1` | Span-grounded mentions, calibrated TDT metrics, schema/forecast hypothesis states, interval consistency, known-truth recovery, persistence, and exports. | +| GAP-008 | GPU support is policy-only; no production estimator kernel has real hardware parity or declared VRAM evidence. | `accepted-target` | product vertical | `e65cd66` (VRAM policy only) | [#171](https://github.com/ContextualWisdomLab/TEPP/issues/171) / [PR #51](https://github.com/ContextualWisdomLab/TEPP/pull/51) | `1801501c4d7c` | Real CUDA/portable backend execution, CPU parity, streamed memory, bounded OOM/fallback, hardware profiles, telemetry, and no skipped-support claim. | +| GAP-009 | Topic association and cluster outputs lack posterior-valid estimation, uncertainty, edge stability, and consensus communities. | `accepted-target` | product vertical | `e65cd66` (network primitives only) | [#172](https://github.com/ContextualWisdomLab/TEPP/issues/172) / [PR #71](https://github.com/ContextualWisdomLab/TEPP/pull/71) | `2588f38281b9` | Valid log-ratio coordinates, interval/stability-bearing edges, repeated Leiden consensus, known-truth network/cluster recovery, and reproducible exports. | +| GAP-010 | Operators lack coordinated accessible visual analytics and exact-value export workflows. | `accepted-target` | product vertical | `e65cd66` (no visual workspace) | [#173](https://github.com/ContextualWisdomLab/TEPP/issues/173) | `—` (Figma work not started) | Real Figma File ID in ADR, Storybook/design tokens, ten PRD views, exact-value tables, accessible interaction/print/PDF states, provenance, and source-consistent exports. | +| GAP-011 | TEPP is not yet an operable multi-tenant service or supported release. | `accepted-target` | product vertical | `e65cd66` (library contracts only) | [#174](https://github.com/ContextualWisdomLab/TEPP/issues/174) | `—` (issue program; no current implementation PR) | Durable queue/storage, OIDC/RLS/purpose controls, OpenTelemetry/SLOs, load/recovery, migrations, signed release/SBOM/provenance, assurance evidence, and support policy. | +| GAP-012 | The 71-PR queue obscures authority, repeatedly stales exact-head evidence, and fragments product boundaries. | `partial` | release blocker | `e65cd66` (protected-main truth) | [#175](https://github.com/ContextualWisdomLab/TEPP/issues/175) | `—` (live queue program) | Every PR classified; unique landing vehicles; compatible slices folded; superseded work closed with provenance; scheduler prioritizes consolidation; queue reaches zero before GA. | +| GAP-013 | Evidence-grounded LLM interpretation is routed but not executed and validated as a production interpreter/verifier port. | `partial` | active integration | `e65cd66` (routing and refusal contracts only) | [#176](https://github.com/ContextualWisdomLab/TEPP/issues/176), [PR #69](https://github.com/ContextualWisdomLab/TEPP/pull/69), [PR #165](https://github.com/ContextualWisdomLab/TEPP/pull/165) | `8e4a3ca9cc80` / `34083c3f5d66` | Contextual-orchestrator execution, evidence citations, verifier refusals, comparable-budget ablations, provider eligibility/fallback, abstention, live/offline contract tests, and no numerical-authority escalation. | +| GAP-014 | README/TRD and some PR descriptions lag protected-main and live queue reality. | `partial` | documentation drift | `e65cd66` (documentation is not fully synchronized) | [#175](https://github.com/ContextualWisdomLab/TEPP/issues/175) | `—` (queue-consolidation work) | Reconcile README, TRD, traceability, ADR maturity, CHANGELOG, preferred-merge declarations, and exact protected-main evidence. | +| GAP-015 | There was no canonical live product/operator-gap register tied to documentation validation. | `active-PR` | landing vehicle | `e65cd66` (the register and validator are implemented-main; this refresh keeps the volatile queue current) | [PR #217](https://github.com/ContextualWisdomLab/TEPP/pull/217); [PR #164](https://github.com/ContextualWisdomLab/TEPP/pull/164) is the merged authority; closed [PR #179](https://github.com/ContextualWisdomLab/TEPP/pull/179) is not a second register | `79df32c73b260838fd3d0bfed3e84ff3e58e4b28` | Land this refresh after exact-head checks and independent review, then regenerate it whenever protected-main or the live queue changes. | +| GAP-016 | Hourly PR maintenance used an older central scheduler revision whose per-repository sweep budgets could amplify the queued review workload. | `active-PR` | operability hardening | `e65cd66` (caller pin before central budget hardening) | [PR #177](https://github.com/ContextualWisdomLab/TEPP/pull/177) | `580d45206536` | The change pins a verified central revision immutably; closure still requires exact-head hosted Checks, resolved threads, and independent review. | +| GAP-017 | Accepted analysis runs have a terminal DTO, and cutoff-safe execution exists only on the #157 head after stacked PR #178 merged into that branch. | `active-PR` | product vertical | `e65cd66` (accepted receipt only) | [#166](https://github.com/ContextualWisdomLab/TEPP/issues/166) / [PR #157](https://github.com/ContextualWisdomLab/TEPP/pull/157) | `340087494b0a` | Exact availability cutoff, snapshot binding, multiple-membership preservation, digest integrity, redacted no-eligible failure, and realistic end-to-end tests on protected main. Closed stacked PR #178 is not implemented-main. | ## Product-completion issue register @@ -264,14 +245,11 @@ because its head can change after this file is committed. | PR | Current delivery role | Required next action | |---:|---|---| -| [#164](https://github.com/ContextualWisdomLab/TEPP/pull/164) | Canonical product/technical gap baseline | Re-run exact-head documentation/repository checks and obtain independent review. | | [#179](https://github.com/ContextualWisdomLab/TEPP/pull/179) | Duplicate gap-baseline snapshot | Closed as superseded at 2026-08-23T12:39:22Z; do not reopen as a second register. | | [#177](https://github.com/ContextualWisdomLab/TEPP/pull/177) | Central scheduler budget-hardening pin | Re-run exact-head Checks and obtain independent review before relying on the hourly caller. | | [#165](https://github.com/ContextualWisdomLab/TEPP/pull/165) | Hourly agent routing through contextual-orchestrator | Ensure queue-consolidation policy from #175 prevents unrelated micro-PR growth. | | [#157](https://github.com/ContextualWisdomLab/TEPP/pull/157) | Terminal result contract for #156, including folded cutoff-safe execution from closed #178 | Complete exact-head review/check gates; keep #156 open until protected-main verification. | -| [#155](https://github.com/ContextualWisdomLab/TEPP/pull/155) | Modular LineageWeave consumer parent, including folded #158/#159 | Obtain independent review; passing Checks are not implemented-main. | | [#180](https://github.com/ContextualWisdomLab/TEPP/pull/180) | Hide raw provider exception details | Review/check gates; do not weaken fail-closed provider handling. | -| [#201](https://github.com/ContextualWisdomLab/TEPP/pull/201) | First ADR 0020 / #168 span-grounded semantic-unit slice | Complete exact-head Checks and independent review; not concept alignment and not implemented-main. | | [#153](https://github.com/ContextualWisdomLab/TEPP/pull/153) | Refuse location as entity identity or language | Independent review after exact-head membership tests. | | [#48](https://github.com/ContextualWisdomLab/TEPP/pull/48) | Logistic-normal/ILR coordinate slice, including folded stacked #191 TRSL lineage artifacts | Fold into the estimator landing plan; coordinates and lineage artifacts are not candidate-K fitting. | | [#51](https://github.com/ContextualWisdomLab/TEPP/pull/51) | VRAM budget/fallback policy types | Resolve requested changes; connect only to a real production kernel under #171. | @@ -286,8 +264,8 @@ because its head can change after this file is committed. The dependency-aware product order is: 1. **Consolidate delivery authority:** #175 and PR #164. -2. **Finish live result/consumer contracts:** #156/#157 and #155 (loopback PR #107 is already implemented-main; closed stacked #158/#159/#178 are not). -3. **Build validated multilingual evidence:** #168. +2. **Finish live result contracts:** #156/#157; the LineageWeave consumer parent #155 is implemented-main (loopback PR #107 and closed stacked #158/#159/#178 remain provenance). +3. **Build validated multilingual evidence:** #168, extending the first implemented-main span slice from #201. 4. **Build the CPU topic estimator:** #167. 5. **Build event intelligence and posterior networks:** #170 and #172. 6. **Build the posterior-aware longitudinal psychometric engine:** #169. diff --git a/tests/quality/test_check_docstrings.py b/tests/quality/test_check_docstrings.py index 1a304ece..fd597b5c 100644 --- a/tests/quality/test_check_docstrings.py +++ b/tests/quality/test_check_docstrings.py @@ -30,20 +30,17 @@ def test_live_repository_is_documented(self) -> None: sorted(path.parent.parent.name for path in crate_roots), sorted(EXPECTED_CRATES), ) + self.assertEqual( len(set(contract.EXPECTED_CRATES)), len(contract.EXPECTED_CRATES), "workspace crate inventory must not contain duplicate entries", ) - self.assertEqual(len(crate_roots), 11) - self.assertEqual(len(crate_roots), len(contract.EXPECTED_CRATES)) - self.assertEqual(len(crate_roots), 11) self.assertEqual(len(crate_roots), len(contract.EXPECTED_CRATES)) expected_crate_roots = { REPOSITORY_ROOT / path / "src" / "lib.rs" for path in contract.expected_member_paths() } self.assertEqual(set(crate_roots), expected_crate_roots) - self.assertEqual(len(crate_roots), len(contract.EXPECTED_CRATES)) self.assertTrue(set(crate_roots).issubset(sources)) self.assertGreaterEqual(len(sources), len(crate_roots)) self.assertEqual(docstrings.validate_repository(REPOSITORY_ROOT), [])