diff --git a/STATUS.md b/STATUS.md index 526881022..3aeb0412f 100644 --- a/STATUS.md +++ b/STATUS.md @@ -1,6 +1,6 @@ # Scientific status snapshot -**Snapshot date:** 2026-09-26 +**Snapshot date:** 2026-09-29 **Purpose:** one human-readable status page for the public front door. **Rule:** this page summarizes source-bound review outcomes; it is not an independent promotion register. @@ -8,6 +8,7 @@ | Object | Accepted scope | Source and review | Explicit limits | |---|---|---|---| +| **D1 — parent lifetime theorem (Theorems A, B, C)** | Theorem A `0 <= 1-p_r <= C r^3`, uniform over compact births, compact positive gaps and all frames; Theorem B compact-mark candidate/elder densities `~ c_{B,K} ell^(-1/3)` with difference `O(ell^(2/3))`, for `B` and `K` of positive length; Theorem C unrestricted leading term `c_{d,L} ell^(-1/3)`. Fixed `d>=2` and `L`, existential constants, read with the congruence erratum, the Section 9 replacement v1.1, wording W1 and `r < L/(4 sqrt 2)` | [Proof](https://github.com/d6g8k5htny-coder/Math-/blob/82247833b5dd58e04291d55353b52938d73ec614/imports/lifetime_parent_20260925/UNIFORM_MATRIX_CAP_AND_LIFETIME.md) · [reconciliation](https://github.com/d6g8k5htny-coder/Math-/blob/82247833b5dd58e04291d55353b52938d73ec614/reviews/d1_chain_reconciliation_20260928/RECONCILIATION.md) · [Math-#126](https://github.com/d6g8k5htny-coder/Math-/pull/126) | No numerical `C`, `r_*`, `z_*` or coefficient; no unrestricted difference rate; this row is confined to the Math- `8224783` reconciliation, whose lower composition is planar (`d=2`); the separately reviewed every-fixed-`d` lower bound `1-p_r >= c r^3` was integrated afterwards by [Math-#129](https://github.com/d6g8k5htny-coder/Math-/pull/129) at `e7f8aca41c308f8ad8614b587f75916943c86f27` and is not part of this row's reconciliation scope; no RN/24-jet certificate | | **D2 — unrestricted lifetime remainder** | Theorem R at its stated existential `O(1)` remainder scope: candidate and elder densities have leading `c ell^(-1/3)` term with bounded remainder for sufficiently small lifetime | [Proof](https://github.com/d6g8k5htny-coder/Math-/blob/main/frontiers/three_fronts_20260924/LIFETIME_REMAINDER.md) · [review reconciliation](https://github.com/d6g8k5htny-coder/main/issues/67#issuecomment-5841782206) | No numerical remainder constant or numerical lifetime cutoff; no RN/JETMOD closure | | **D3 — SIDE24 coefficient calculation** | The coefficient expression for SIDE24 in dimensions 2 and 3, including cone moments, all-direction periodization comparison, covariance/Schur transfer, and outward special-function arithmetic | [Proof/package](https://github.com/d6g8k5htny-coder/Math-/tree/main/coefficients/side24_v1) · [review](https://github.com/d6g8k5htny-coder/main/issues/65#issuecomment-5841269490) · [reconciliation](https://github.com/d6g8k5htny-coder/main/issues/65#issuecomment-5841779222) | Coefficient arithmetic acceptance is separate from any imported parent theorem and from a finite-radius error band | | **D4 — fixed-remote RN count theorem** | Fixed positive spatial separation `rho`, fixed witness separation `eta`, between-pin height window; conditioned covariance, three determinant factors, endpoint normalizer, contact kernel, and fixed-separation factorial moments | [Proof](https://github.com/d6g8k5htny-coder/Math-/blob/main/frontiers/remote_window_20260924/PROOF.md) · [review](https://github.com/d6g8k5htny-coder/main/issues/76#issuecomment-5841783172) · [reconciliation](https://github.com/d6g8k5htny-coder/main/issues/76#issuecomment-5841861362) | Does not cover shrinking `rho` or `eta`, pin neighborhoods, intermediate scales, all remote heights, or global RN/24-jet closure | @@ -17,7 +18,6 @@ | Object | Current reason | Source | |---|---|---| -| **D1 — parent quantitative Theorem-A selection chain** | Later review accepted the load-bearing §8–§15 interfaces, but the quantitative §§2–§7 selection chain was reopened for independent review. A displayed congruence defect in §5 has an additive erratum and the remaining A1–A7 chain is not reconciled. | [Review issue #63](https://github.com/d6g8k5htny-coder/main/issues/63) · [fail-closed reopening](https://github.com/d6g8k5htny-coder/main/issues/63#issuecomment-5841830743) · [source-first erratum](https://github.com/d6g8k5htny-coder/main/issues/63#issuecomment-5841947606) | | **D5 — pin neighborhoods / microdisk** | The public reconnaissance has an AMEND review; the inner microdisk bound and collar to the reviewed annulus are not complete, and the claimed summed pin-neighborhood bound remains AMEND. | [Math proof index](https://github.com/d6g8k5htny-coder/Math-/blob/main/PROOF_INDEX.md) · [Math issue #58](https://github.com/d6g8k5htny-coder/Math-/issues/58) | | **SARD-G A1/A6** | A1 remains AMEND as written; A6's slicing argument is conditionally valid but its source application remains AMEND until the required open-chart premise is repaired. | [Successor review](reviews/sard_g_successor_a1_a6_20260926/REVIEW.md) · [current PR](https://github.com/d6g8k5htny-coder/main/pull/122) | @@ -33,7 +33,7 @@ These are useful infrastructure, but they carry **no theorem-acceptance meaning* ## Where to read — public source custody -The two human maps are this file and the [Math- proof index at the pinned public Math commit](https://github.com/d6g8k5htny-coder/Math-/blob/58f7936d1138b24dd6cc988081d74d07683611d6/PROOF_INDEX.md). Neither file replaces the underlying proof or review. +The two human maps are this file and the [Math- proof index at the pinned public Math commit](https://github.com/d6g8k5htny-coder/Math-/blob/82247833b5dd58e04291d55353b52938d73ec614/PROOF_INDEX.md). Neither file replaces the underlying proof or review. For exact source identity, use [`docs/public-math/sources.json`](docs/public-math/sources.json). It indexes **2,138 intended public text artifacts** and points to 14 JSON shards. Each artifact row carries: @@ -45,7 +45,7 @@ The machine catalog at [`meta-framework/registry.json`](https://github.com/d6g8k ### Default-branch boundary -- Pinned Math reading checkout: `58f7936d1138b24dd6cc988081d74d07683611d6`. +- Pinned Math reading checkout: `82247833b5dd58e04291d55353b52938d73ec614`. - Pinned query checkout: `89456c5033173c69a304c5fffa781888185675cc`. - [Math- PR #70](https://github.com/d6g8k5htny-coder/Math-/pull/70) landed nine byte-custody copies at `9d7b6802424fb4715b31999066aafca8ee2f3cca`; [PR #75](https://github.com/d6g8k5htny-coder/Math-/pull/75) added their proof-index pointer. These are public default-branch imports, **not newly accepted mathematics**. Source self-labels were not adopted. - The `main#59` issue-body file in PR #70 is explicitly a transcription, not original source bytes, so it is not counted as byte custody. diff --git a/docs/site/README.md b/docs/site/README.md index f2b3879e7..75e32e8b2 100644 --- a/docs/site/README.md +++ b/docs/site/README.md @@ -43,7 +43,7 @@ See the [deployment and review settings record](../PUBLIC_SHOP_SETUP.md). Pages, ## Claim cards and exhibits -Open [the verification museum](museum.html). Its small `museum.json` display projection is reproduced by `tools/museum_data.py`; it is not a replacement for the 2,138-row public inventory. The generator preserves all eleven bullets in Math-'s “Reviewed scoped results” and the three STATUS AMEND rows verbatim. An EXACT_COUNTEREXAMPLE retains that label; publication of a source does not make its claim accepted. Where a review is a GitHub comment, the displayed digest identifies the pinned index pointer, not mutable comment bytes. +Open [the verification museum](museum.html). Its small `museum.json` display projection is reproduced by `tools/museum_data.py`; it is not a replacement for the 2,138-row public inventory. The generator preserves all eleven bullets in Math-'s “Reviewed scoped results”, the reconciled D1 row of STATUS's ACCEPT table, and the two remaining STATUS AMEND rows verbatim. An EXACT_COUNTEREXAMPLE retains that label; publication of a source does not make its claim accepted. Where a review is a GitHub comment, the displayed digest identifies the pinned index pointer, not mutable comment bytes. The museum binds Math sources to `d6628da09384728992dcbe6e921cc28ba85aebb0` and main source/packet membership to `71400b94f6cb354a8cf7aba73ffede2138a64efa`. The existing board/inventory pin `a26f744be7597e3f0c0543c34ead23049bbac657` and SIDE24 import pin `9d7b6802424fb4715b31999066aafca8ee2f3cca` remain explicit historical identities. Neither changes the README's Math checkout or query checkout. No source fetch selects an AMEND branch. diff --git a/docs/site/config.json b/docs/site/config.json index 0973bdcd8..c1c4be56d 100644 --- a/docs/site/config.json +++ b/docs/site/config.json @@ -36,148 +36,148 @@ "inventory": { "blob": "edf9a7088a574134fa982946c9e779476b617e3d", "bytes": 1863, - "commit": "a26f744be7597e3f0c0543c34ead23049bbac657", + "commit": "f2e432ea5c86742e480c66624775bc9103343314", "meaning": "Existing public-text inventory; loaded in place, never copied into a second catalog.", "pages": [ { "blob": "550519fe77b73927169e2a1efdc0276bb0f6141f", "bytes": 58276, - "commit": "a26f744be7597e3f0c0543c34ead23049bbac657", + "commit": "f2e432ea5c86742e480c66624775bc9103343314", "count": 160, "path": "docs/public-math/sources-01.json", "repository": "d6g8k5htny-coder/main", "sha256": "f675167fe655fb07015b0178e818cc0f92e23f683bdf490a45b2401c4ff45557", - "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/a26f744be7597e3f0c0543c34ead23049bbac657/docs/public-math/sources-01.json" + "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/f2e432ea5c86742e480c66624775bc9103343314/docs/public-math/sources-01.json" }, { "blob": "0037f84f28f3e9dada4d921c903ee0271723d544", "bytes": 86078, - "commit": "a26f744be7597e3f0c0543c34ead23049bbac657", + "commit": "f2e432ea5c86742e480c66624775bc9103343314", "count": 160, "path": "docs/public-math/sources-02.json", "repository": "d6g8k5htny-coder/main", "sha256": "6f50efb1ffae3e39c39335ee889e4e9e184e82e54a5b5d690750b23425c60960", - "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/a26f744be7597e3f0c0543c34ead23049bbac657/docs/public-math/sources-02.json" + "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/f2e432ea5c86742e480c66624775bc9103343314/docs/public-math/sources-02.json" }, { "blob": "9b1eb04eb09fc3227d394110e1913e85306392ce", "bytes": 96034, - "commit": "a26f744be7597e3f0c0543c34ead23049bbac657", + "commit": "f2e432ea5c86742e480c66624775bc9103343314", "count": 160, "path": "docs/public-math/sources-03.json", "repository": "d6g8k5htny-coder/main", "sha256": "38a261921ce336b47ed1660997bcea084e2fc98e32166f9a179c8e0e428970fe", - "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/a26f744be7597e3f0c0543c34ead23049bbac657/docs/public-math/sources-03.json" + "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/f2e432ea5c86742e480c66624775bc9103343314/docs/public-math/sources-03.json" }, { "blob": "b4c66773898213e7b58483b018fd15063911af93", "bytes": 87348, - "commit": "a26f744be7597e3f0c0543c34ead23049bbac657", + "commit": "f2e432ea5c86742e480c66624775bc9103343314", "count": 160, "path": "docs/public-math/sources-04.json", "repository": "d6g8k5htny-coder/main", "sha256": "1da5d266246196626bfd98a82d135c0e67dd916318b165f11d466a84e6157c7a", - "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/a26f744be7597e3f0c0543c34ead23049bbac657/docs/public-math/sources-04.json" + "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/f2e432ea5c86742e480c66624775bc9103343314/docs/public-math/sources-04.json" }, { "blob": "5247d6927cee10e49d9b9d8f378797ebae29c926", "bytes": 68164, - "commit": "a26f744be7597e3f0c0543c34ead23049bbac657", + "commit": "f2e432ea5c86742e480c66624775bc9103343314", "count": 160, "path": "docs/public-math/sources-05.json", "repository": "d6g8k5htny-coder/main", "sha256": "66dd57a32c41d995ada8ee8e9f6eee8d9b3e3fba9907899ef71b53f8377dd345", - "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/a26f744be7597e3f0c0543c34ead23049bbac657/docs/public-math/sources-05.json" + "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/f2e432ea5c86742e480c66624775bc9103343314/docs/public-math/sources-05.json" }, { "blob": "eda5411fe6e3035e9e981a3f614aac46882828b9", "bytes": 81840, - "commit": "a26f744be7597e3f0c0543c34ead23049bbac657", + "commit": "f2e432ea5c86742e480c66624775bc9103343314", "count": 160, "path": "docs/public-math/sources-06.json", "repository": "d6g8k5htny-coder/main", "sha256": "63c0c063f7e559d5f27cc3896f0c6f8f041dd44746bc35ce382be01bba4b4712", - "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/a26f744be7597e3f0c0543c34ead23049bbac657/docs/public-math/sources-06.json" + "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/f2e432ea5c86742e480c66624775bc9103343314/docs/public-math/sources-06.json" }, { "blob": "0cd78768bb71eef7a84ea9fe35867a5b6d103ea3", "bytes": 95161, - "commit": "a26f744be7597e3f0c0543c34ead23049bbac657", + "commit": "f2e432ea5c86742e480c66624775bc9103343314", "count": 160, "path": "docs/public-math/sources-07.json", "repository": "d6g8k5htny-coder/main", "sha256": "8e957b2732181731d72bece75b82a2d0fbed6f4a205a4faa37486350732f090a", - "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/a26f744be7597e3f0c0543c34ead23049bbac657/docs/public-math/sources-07.json" + "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/f2e432ea5c86742e480c66624775bc9103343314/docs/public-math/sources-07.json" }, { "blob": "882219d447d249c3221a526ea0f59dd2d69a108f", "bytes": 87801, - "commit": "a26f744be7597e3f0c0543c34ead23049bbac657", + "commit": "f2e432ea5c86742e480c66624775bc9103343314", "count": 160, "path": "docs/public-math/sources-08.json", "repository": "d6g8k5htny-coder/main", "sha256": "96c801dc214d054f9aa2a5a63a553e5d26a2ebccda99d9eca666c5db98a0e63b", - "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/a26f744be7597e3f0c0543c34ead23049bbac657/docs/public-math/sources-08.json" + "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/f2e432ea5c86742e480c66624775bc9103343314/docs/public-math/sources-08.json" }, { "blob": "a59e56e0351a77b624058be9efad3f30d495d1e1", "bytes": 76228, - "commit": "a26f744be7597e3f0c0543c34ead23049bbac657", + "commit": "f2e432ea5c86742e480c66624775bc9103343314", "count": 160, "path": "docs/public-math/sources-09.json", "repository": "d6g8k5htny-coder/main", "sha256": "35598ba1479bb0a7ca858a5c3a38b217a78ab725e9d89613765ee7f0b6b3220f", - "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/a26f744be7597e3f0c0543c34ead23049bbac657/docs/public-math/sources-09.json" + "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/f2e432ea5c86742e480c66624775bc9103343314/docs/public-math/sources-09.json" }, { "blob": "addd0228282e1ec31228dca1476f2d770f206181", "bytes": 76144, - "commit": "a26f744be7597e3f0c0543c34ead23049bbac657", + "commit": "f2e432ea5c86742e480c66624775bc9103343314", "count": 160, "path": "docs/public-math/sources-10.json", "repository": "d6g8k5htny-coder/main", "sha256": "ff67d89bef01008348903bd8cd8e2c2fb97cbd2a4a83bb99b5d6585a20e60313", - "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/a26f744be7597e3f0c0543c34ead23049bbac657/docs/public-math/sources-10.json" + "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/f2e432ea5c86742e480c66624775bc9103343314/docs/public-math/sources-10.json" }, { "blob": "b50b28a293503b35fa0851be9f8854f5fe4aed55", "bytes": 86339, - "commit": "a26f744be7597e3f0c0543c34ead23049bbac657", + "commit": "f2e432ea5c86742e480c66624775bc9103343314", "count": 160, "path": "docs/public-math/sources-11.json", "repository": "d6g8k5htny-coder/main", "sha256": "83a3d41737f1695413c78f82b186549617564e7368ea86d5dc3941bd84d04fea", - "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/a26f744be7597e3f0c0543c34ead23049bbac657/docs/public-math/sources-11.json" + "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/f2e432ea5c86742e480c66624775bc9103343314/docs/public-math/sources-11.json" }, { "blob": "950783d361a676c61e96f9299a845d9e2b9a2c66", "bytes": 63991, - "commit": "a26f744be7597e3f0c0543c34ead23049bbac657", + "commit": "f2e432ea5c86742e480c66624775bc9103343314", "count": 160, "path": "docs/public-math/sources-12.json", "repository": "d6g8k5htny-coder/main", "sha256": "3185e198547e8e1a56759442784f63b2587fd5001cc8bc773435b6750cf22419", - "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/a26f744be7597e3f0c0543c34ead23049bbac657/docs/public-math/sources-12.json" + "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/f2e432ea5c86742e480c66624775bc9103343314/docs/public-math/sources-12.json" }, { "blob": "9d4ab75e0423e456294ee90399a3c22648153fa5", "bytes": 69414, - "commit": "a26f744be7597e3f0c0543c34ead23049bbac657", + "commit": "f2e432ea5c86742e480c66624775bc9103343314", "count": 160, "path": "docs/public-math/sources-13.json", "repository": "d6g8k5htny-coder/main", "sha256": "f2e7dd2c6187bd83e0039a44ee919184638a839632412d103b32ddb19ab105cc", - "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/a26f744be7597e3f0c0543c34ead23049bbac657/docs/public-math/sources-13.json" + "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/f2e432ea5c86742e480c66624775bc9103343314/docs/public-math/sources-13.json" }, { "blob": "f9df9ee169376c01f7f3a7b1f794e79ded81915b", "bytes": 20295, - "commit": "a26f744be7597e3f0c0543c34ead23049bbac657", + "commit": "f2e432ea5c86742e480c66624775bc9103343314", "count": 58, "path": "docs/public-math/sources-14.json", "repository": "d6g8k5htny-coder/main", "sha256": "f1df0d99ab802659cc5fb99dea665d8516aaca8da1cb9b3842890a8b14d9b3ce", - "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/a26f744be7597e3f0c0543c34ead23049bbac657/docs/public-math/sources-14.json" + "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/f2e432ea5c86742e480c66624775bc9103343314/docs/public-math/sources-14.json" } ], "path": "docs/public-math/sources.json", @@ -185,11 +185,11 @@ "repository": "d6g8k5htny-coder/main", "sha256": "78ac59ed59579a1ee7cd0912f52ad702249b6978e836e5bccd90577a02591a52", "source_count": 2138, - "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/a26f744be7597e3f0c0543c34ead23049bbac657/docs/public-math/sources.json" + "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/f2e432ea5c86742e480c66624775bc9103343314/docs/public-math/sources.json" }, "museum_json": { - "bytes": 58698, - "sha256": "272f5384022e6df2ace6428b4a93cc87e21053dd654c9fc4f1f14e9ef3eb3664", + "bytes": 59535, + "sha256": "aaba3d80454bf590c0d2a8825897c5588b23f61e949457e0c75be2cb49c9dd4d", "url": "museum.json" }, "observations": { @@ -219,17 +219,17 @@ "schema_version": 1, "scientific_status_authority": false, "status": { - "blob": "52688102260e916dec1a38143186198b089a0261", - "bytes": 6881, - "commit": "a26f744be7597e3f0c0543c34ead23049bbac657", + "blob": "3aeb0412f7a9d4357b91977179bf2d608826412c", + "bytes": 7655, + "commit": "f2e432ea5c86742e480c66624775bc9103343314", "path": "STATUS.md", "repository": "d6g8k5htny-coder/main", - "sha256": "9c3e21144423591a3dbff926858048c0363b9a32d6fe258a1de5088d38096141", - "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/a26f744be7597e3f0c0543c34ead23049bbac657/STATUS.md" + "sha256": "039d4fea921a5e9602340ab8580404ef709588ca72f45c52f865f4644da51da3", + "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/f2e432ea5c86742e480c66624775bc9103343314/STATUS.md" }, "status_json": { - "bytes": 7056, - "sha256": "570de5a0ffcd14269dedd6018fa05d37f4354e8177fa0eec78ea9b1da6125cc6", + "bytes": 7841, + "sha256": "0d5f32d8dfde169882e09bb11615c004309f59573ca4568a84541c5e784a7b84", "url": "status.json" } } diff --git a/docs/site/museum.json b/docs/site/museum.json index 22947e64d..bd0f20973 100644 --- a/docs/site/museum.json +++ b/docs/site/museum.json @@ -459,8 +459,8 @@ "title": "D6 P15 full price theorem" }, { - "class": "AMEND/open", - "id": "d1-parent-selection-open", + "class": "ACCEPT-scoped", + "id": "d1-parent-lifetime", "proof": { "blob": "dfed3b8d318a3ab1950957f393307733a4bef3f2", "bytes": 40261, @@ -473,26 +473,23 @@ }, "replay": { "command": null, - "notice": "OPEN / NOT LANDED. No replay is presented as acceptance.", + "notice": "No replay command is recorded in the pinned proof/review.", "url": null }, "review": { - "blob": "52688102260e916dec1a38143186198b089a0261", - "bytes": 6881, - "commit": "71400b94f6cb354a8cf7aba73ffede2138a64efa", - "html_url": "https://github.com/d6g8k5htny-coder/main/blob/71400b94f6cb354a8cf7aba73ffede2138a64efa/STATUS.md", - "path": "STATUS.md", - "pointer_only": true, - "repository": "d6g8k5htny-coder/main", - "review_notice": "The pinned source binds this review pointer; the linked review is not byte-frozen by this descriptor.", - "review_url": "https://github.com/d6g8k5htny-coder/main/issues/63#issuecomment-5841830743", - "sha256": "9c3e21144423591a3dbff926858048c0363b9a32d6fe258a1de5088d38096141", - "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/71400b94f6cb354a8cf7aba73ffede2138a64efa/STATUS.md" + "blob": "75da2597971510f843f8d90c743950cb8c177342", + "bytes": 23312, + "commit": "82247833b5dd58e04291d55353b52938d73ec614", + "html_url": "https://github.com/d6g8k5htny-coder/Math-/blob/82247833b5dd58e04291d55353b52938d73ec614/reviews/d1_chain_reconciliation_20260928/RECONCILIATION.md", + "path": "reviews/d1_chain_reconciliation_20260928/RECONCILIATION.md", + "repository": "d6g8k5htny-coder/Math-", + "sha256": "451b9d7ffee072a73fc904cab891b6693e3f233808b89df10cce1b57036b65da", + "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/Math-/82247833b5dd58e04291d55353b52938d73ec614/reviews/d1_chain_reconciliation_20260928/RECONCILIATION.md" }, - "scope_quote": "| **D1 — parent quantitative Theorem-A selection chain** | Later review accepted the load-bearing §8–§15 interfaces, but the quantitative §§2–§7 selection chain was reopened for independent review. A displayed congruence defect in §5 has an additive erratum and the remaining A1–A7 chain is not reconciled. | [Review issue #63](https://github.com/d6g8k5htny-coder/main/issues/63) · [fail-closed reopening](https://github.com/d6g8k5htny-coder/main/issues/63#issuecomment-5841830743) · [source-first erratum](https://github.com/d6g8k5htny-coder/main/issues/63#issuecomment-5841947606) |", - "source_label": "AMEND / open", - "status_quote": "Later review accepted the load-bearing §8–§15 interfaces, but the quantitative §§2–§7 selection chain was reopened for independent review. A displayed congruence defect in §5 has an additive erratum and the remaining A1–A7 chain is not reconciled.", - "title": "D1 — parent quantitative Theorem-A selection chain" + "scope_quote": "| **D1 — parent lifetime theorem (Theorems A, B, C)** | Theorem A `0 <= 1-p_r <= C r^3`, uniform over compact births, compact positive gaps and all frames; Theorem B compact-mark candidate/elder densities `~ c_{B,K} ell^(-1/3)` with difference `O(ell^(2/3))`, for `B` and `K` of positive length; Theorem C unrestricted leading term `c_{d,L} ell^(-1/3)`. Fixed `d>=2` and `L`, existential constants, read with the congruence erratum, the Section 9 replacement v1.1, wording W1 and `r < L/(4 sqrt 2)` | [Proof](https://github.com/d6g8k5htny-coder/Math-/blob/82247833b5dd58e04291d55353b52938d73ec614/imports/lifetime_parent_20260925/UNIFORM_MATRIX_CAP_AND_LIFETIME.md) · [reconciliation](https://github.com/d6g8k5htny-coder/Math-/blob/82247833b5dd58e04291d55353b52938d73ec614/reviews/d1_chain_reconciliation_20260928/RECONCILIATION.md) · [Math-#126](https://github.com/d6g8k5htny-coder/Math-/pull/126) | No numerical `C`, `r_*`, `z_*` or coefficient; no unrestricted difference rate; this row is confined to the Math- `8224783` reconciliation, whose lower composition is planar (`d=2`); the separately reviewed every-fixed-`d` lower bound `1-p_r >= c r^3` was integrated afterwards by [Math-#129](https://github.com/d6g8k5htny-coder/Math-/pull/129) at `e7f8aca41c308f8ad8614b587f75916943c86f27` and is not part of this row's reconciliation scope; no RN/24-jet certificate |", + "source_label": "ACCEPT", + "status_quote": "Theorem A `0 <= 1-p_r <= C r^3`, uniform over compact births, compact positive gaps and all frames; Theorem B compact-mark candidate/elder densities `~ c_{B,K} ell^(-1/3)` with difference `O(ell^(2/3))`, for `B` and `K` of positive length; Theorem C unrestricted leading term `c_{d,L} ell^(-1/3)`. Fixed `d>=2` and `L`, existential constants, read with the congruence erratum, the Section 9 replacement v1.1, wording W1 and `r < L/(4 sqrt 2)`", + "title": "D1 — parent lifetime theorem (Theorems A, B, C)" }, { "class": "AMEND/open", @@ -536,15 +533,15 @@ "id": "sard-g-a1-a6-open", "proof": { "availability": "OPEN / NOT LANDED", - "blob": "52688102260e916dec1a38143186198b089a0261", - "bytes": 6881, - "commit": "71400b94f6cb354a8cf7aba73ffede2138a64efa", - "html_url": "https://github.com/d6g8k5htny-coder/main/blob/71400b94f6cb354a8cf7aba73ffede2138a64efa/STATUS.md", + "blob": "3aeb0412f7a9d4357b91977179bf2d608826412c", + "bytes": 7655, + "commit": "f2e432ea5c86742e480c66624775bc9103343314", + "html_url": "https://github.com/d6g8k5htny-coder/main/blob/f2e432ea5c86742e480c66624775bc9103343314/STATUS.md", "path": "STATUS.md", "proof_url": "https://github.com/d6g8k5htny-coder/main/pull/122", "repository": "d6g8k5htny-coder/main", - "sha256": "9c3e21144423591a3dbff926858048c0363b9a32d6fe258a1de5088d38096141", - "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/71400b94f6cb354a8cf7aba73ffede2138a64efa/STATUS.md" + "sha256": "039d4fea921a5e9602340ab8580404ef709588ca72f45c52f865f4644da51da3", + "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/f2e432ea5c86742e480c66624775bc9103343314/STATUS.md" }, "replay": { "command": null, @@ -733,13 +730,13 @@ "schema_version": 1, "scientific_status_authority": false, "status_source": { - "blob": "52688102260e916dec1a38143186198b089a0261", - "bytes": 6881, - "commit": "71400b94f6cb354a8cf7aba73ffede2138a64efa", - "html_url": "https://github.com/d6g8k5htny-coder/main/blob/71400b94f6cb354a8cf7aba73ffede2138a64efa/STATUS.md", + "blob": "3aeb0412f7a9d4357b91977179bf2d608826412c", + "bytes": 7655, + "commit": "f2e432ea5c86742e480c66624775bc9103343314", + "html_url": "https://github.com/d6g8k5htny-coder/main/blob/f2e432ea5c86742e480c66624775bc9103343314/STATUS.md", "path": "STATUS.md", "repository": "d6g8k5htny-coder/main", - "sha256": "9c3e21144423591a3dbff926858048c0363b9a32d6fe258a1de5088d38096141", - "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/71400b94f6cb354a8cf7aba73ffede2138a64efa/STATUS.md" + "sha256": "039d4fea921a5e9602340ab8580404ef709588ca72f45c52f865f4644da51da3", + "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/f2e432ea5c86742e480c66624775bc9103343314/STATUS.md" } } diff --git a/docs/site/museum.mjs b/docs/site/museum.mjs index b2d404d73..b16ec59c9 100644 --- a/docs/site/museum.mjs +++ b/docs/site/museum.mjs @@ -2,7 +2,8 @@ import {verifiedBytes, hex40, hex64} from './core.mjs'; export const DISCLAIMER='This canvas explains the pinned source. It is not a proof and does not change status.'; const REVIEWED_IDS=['d2-lifetime-remainder','d3-side24-coefficient','d4-fixed-remote-rn','d5-all-height-annulus','d5-height-window-annulus','d5-two-scale','d5-inner-belt-density','d5-fixed-transverse','cumulative-transfer-correction','p15-demand-one-counterexample','d6-p15-full-price']; -const OPEN_IDS=['d1-parent-selection-open','d5-pin-neighborhoods-open','sard-g-a1-a6-open']; +const D1_ID='d1-parent-lifetime'; +const OPEN_IDS=['d5-pin-neighborhoods-open','sard-g-a1-a6-open']; const EXHIBITS={ec014:['EC-014 pair frame','EC-014'],remote:['Fixed-remote region','D4 fixed-remote RN'],annulus:['Fixed annulus','D5 all-height fixed annulus'],p15:['P15 discrete palette','D6 P15 full price']}; const VIEW_LINKS={'d3-side24-coefficient':'index.html#coefficient','d4-fixed-remote-rn':'museum.html?view=remote#active-exhibit','d5-all-height-annulus':'museum.html?view=annulus#active-exhibit','d5-height-window-annulus':'museum.html?view=annulus#active-exhibit','d6-p15-full-price':'museum.html?view=p15#active-exhibit'}; const D5_OPEN_REVIEW='https://github.com/d6g8k5htny-coder/Math-/blob/4e188e25b1e1ef560f3eeb75c0d354d2ccf0ea22/reviews/d5_pin_neighborhood_20260926/REVIEW.md'; @@ -62,35 +63,40 @@ export function validateBoundManifest(manifest,indexText,statusText){ if(!Array.isArray(manifest.claims)||manifest.claims.length!==14)throw Error('Claim projection count mismatch'); const reviewed=section(indexText,'Reviewed scoped results').split('\n').filter(line=>line.startsWith('- ')); const open=section(statusText,'AMEND / open').split('\n').filter(line=>line.startsWith('|')).slice(2); - if(reviewed.length!==11||open.length!==3)throw Error('Pinned source projection count mismatch'); + if(reviewed.length!==11||open.length!==2)throw Error('Pinned source projection count mismatch'); const acceptedRows=section(statusText,'ACCEPT — scoped').split('\n').filter(line=>line.startsWith('|')).slice(2); - const expectedIds=[...REVIEWED_IDS,...OPEN_IDS]; + const d1Rows=acceptedRows.filter(row=>plainTitle(statusCells(row)[0]).startsWith('D1 —')); + if(d1Rows.length!==1)throw Error('Pinned STATUS must have exactly one accepted D1 row'); + const expectedIds=[...REVIEWED_IDS,D1_ID,...OPEN_IDS]; manifest.claims.forEach((claim,i)=>{ if(claim.id!==expectedIds[i])throw Error('Claim projection order or object identity mismatch'); - const isOpen=i>=11,quote=isOpen?open[i-11]:reviewed[i]; + const isD1=i===11,isOpen=i>=12,quote=isOpen?open[i-12]:isD1?d1Rows[0]:reviewed[i]; if(claim.scope_quote!==quote)throw Error('Claim quote differs from exact source projection'); - const title=isOpen?plainTitle(statusCells(quote)[0]):quote.slice(2).split(':')[0]; + const title=isOpen||isD1?plainTitle(statusCells(quote)[0]):quote.slice(2).split(':')[0]; if(claim.title!==title)throw Error('Claim title differs from source projection'); const expectedClass=isOpen?'AMEND/open':i===9?'engineering-only':'ACCEPT-scoped'; const expectedLabel=isOpen?'AMEND / open':i===9?'EXACT_COUNTEREXAMPLE':'ACCEPT'; if(claim.class!==expectedClass||claim.source_label!==expectedLabel)throw Error('Claim class promotion or source label mismatch'); validateDescriptor(claim.proof); - if(!isOpen){ - if(!firstSourceMatches(quote,claim.proof)||claim.proof.repository!==manifest.index_source.repository||claim.proof.commit!==manifest.index_source.commit)throw Error('Claim proof is not bound by its own pinned source quote'); - }else if(claim.id==='d1-parent-selection-open'){ + if(isD1){ + // The accepted D1 row links the immutable parent; its descriptor is the index-pinned mirror of the same bytes. const parent=section(indexText,'Open or conditional results with complete proof text in GitHub').split('\n').find(line=>line.startsWith('- D1 parent lifetime theorem:'))||''; - if(!firstSourceMatches(parent,claim.proof)||claim.proof.repository!==manifest.index_source.repository||claim.proof.commit!==manifest.index_source.commit)throw Error('Open D1 proof differs from its exact index pointer'); + if(!firstSourceMatches(parent,claim.proof)||!sourceContainsPath(quote,claim.proof)||claim.proof.repository!==manifest.index_source.repository||claim.proof.commit!==manifest.index_source.commit)throw Error('D1 proof differs from its exact index pointer and STATUS row'); + if(!claim.review||claim.review.pointer_only)throw Error('D1 review pointer must be a byte-bound record'); + }else if(!isOpen){ + if(!firstSourceMatches(quote,claim.proof)||claim.proof.repository!==manifest.index_source.repository||claim.proof.commit!==manifest.index_source.commit)throw Error('Claim proof is not bound by its own pinned source quote'); }else if(!sameIdentity(claim.proof,claim.id==='d5-pin-neighborhoods-open'?manifest.index_source:manifest.status_source))throw Error('Open claim source pointer identity differs'); if(claim.review!==null){ validateDescriptor(claim.review); if(claim.review.pointer_only){ - const pointerSource=claim.id==='d1-parent-selection-open'?manifest.status_source:manifest.index_source; + const pointerSource=manifest.index_source; const pointerText=claim.id==='d5-pin-neighborhoods-open'?section(indexText,'Open obligations without a complete proof yet').split('\n').find(line=>line.startsWith('- D5 pin neighborhoods:'))||'':quote; if(!pointerText.includes(claim.review.review_url)||claim.review.sha256!==pointerSource.sha256||claim.review.url!==pointerSource.url||(claim.id==='d5-pin-neighborhoods-open'&&claim.review.review_url!==D5_OPEN_REVIEW))throw Error('Review pointer is not bound by its pinned source quote'); }else if(!sourceContainsPath(quote,claim.review))throw Error('Review file differs from the source quote'); } if(isOpen&&claim.status_quote!==statusCells(quote)[1])throw Error('AMEND reason differs from source quote'); - if(!isOpen){ + if(isD1&&claim.status_quote!==statusCells(quote)[1])throw Error('STATUS scope quote does not match this claim'); + if(!isOpen&&!isD1){ const statusID={0:'D2',1:'D3',2:'D4',10:'D6'}[i]; const matching=statusID?acceptedRows.filter(row=>plainTitle(statusCells(row)[0]).startsWith(`${statusID} —`)):[]; const expected=statusID&&matching.length===1?statusCells(matching[0])[1]:null; @@ -109,7 +115,7 @@ export function validateBoundManifest(manifest,indexText,statusText){ if(packet.id!==expected.id||packet.issue!==expected.issue||packet.scientific_effect!=='NONE'||packet.review_status!=='REVIEW_REQUIRED')throw Error('Packet has unexpected identity or scientific effect'); for(const key of ['result','identity','output'])validateDescriptor(packet[key]); if(packet.result.repository!=='d6g8k5htny-coder/main'||packet.result.path!==`incoming/${packet.id}/RESULT.md`)throw Error('Packet result path differs from its identity'); - if(packet.result.commit!==expected.commit||(index===0&&packet.result.commit!==manifest.status_source.commit) + if(packet.result.commit!==expected.commit ||!['identity','output'].every(key=>packet[key].repository==='d6g8k5htny-coder/main'&&packet[key].commit===expected.commit&&packet[key].path===`incoming/${packet.id}/${key==='identity'?'IDENTITY.json':'output.json'}`))throw Error('Packet commit differs from its pinned main snapshot'); } return manifest; diff --git a/docs/site/status.json b/docs/site/status.json index 830b61100..b19a9066d 100644 --- a/docs/site/status.json +++ b/docs/site/status.json @@ -1,7 +1,7 @@ { "counts": { - "accept": 4, - "amend": 3, + "accept": 5, + "amend": 2, "engineering": 3 }, "meaning": "Counts of selected rows in the pinned STATUS snapshot, not totals of all theorems or an independent acceptance register.", @@ -9,7 +9,7 @@ "scientific_status_authority": false, "sections": [ { - "count": 4, + "count": 5, "headers": [ "Object", "Accepted scope", @@ -18,6 +18,12 @@ ], "key": "accept", "rows": [ + [ + "**D1 — parent lifetime theorem (Theorems A, B, C)**", + "Theorem A `0 <= 1-p_r <= C r^3`, uniform over compact births, compact positive gaps and all frames; Theorem B compact-mark candidate/elder densities `~ c_{B,K} ell^(-1/3)` with difference `O(ell^(2/3))`, for `B` and `K` of positive length; Theorem C unrestricted leading term `c_{d,L} ell^(-1/3)`. Fixed `d>=2` and `L`, existential constants, read with the congruence erratum, the Section 9 replacement v1.1, wording W1 and `r < L/(4 sqrt 2)`", + "[Proof](https://github.com/d6g8k5htny-coder/Math-/blob/82247833b5dd58e04291d55353b52938d73ec614/imports/lifetime_parent_20260925/UNIFORM_MATRIX_CAP_AND_LIFETIME.md) · [reconciliation](https://github.com/d6g8k5htny-coder/Math-/blob/82247833b5dd58e04291d55353b52938d73ec614/reviews/d1_chain_reconciliation_20260928/RECONCILIATION.md) · [Math-#126](https://github.com/d6g8k5htny-coder/Math-/pull/126)", + "No numerical `C`, `r_*`, `z_*` or coefficient; no unrestricted difference rate; this row is confined to the Math- `8224783` reconciliation, whose lower composition is planar (`d=2`); the separately reviewed every-fixed-`d` lower bound `1-p_r >= c r^3` was integrated afterwards by [Math-#129](https://github.com/d6g8k5htny-coder/Math-/pull/129) at `e7f8aca41c308f8ad8614b587f75916943c86f27` and is not part of this row's reconciliation scope; no RN/24-jet certificate" + ], [ "**D2 — unrestricted lifetime remainder**", "Theorem R at its stated existential `O(1)` remainder scope: candidate and elder densities have leading `c ell^(-1/3)` term with bounded remainder for sufficiently small lifetime", @@ -46,7 +52,7 @@ "title": "ACCEPT — scoped" }, { - "count": 3, + "count": 2, "headers": [ "Object", "Current reason", @@ -54,11 +60,6 @@ ], "key": "amend", "rows": [ - [ - "**D1 — parent quantitative Theorem-A selection chain**", - "Later review accepted the load-bearing §8–§15 interfaces, but the quantitative §§2–§7 selection chain was reopened for independent review. A displayed congruence defect in §5 has an additive erratum and the remaining A1–A7 chain is not reconciled.", - "[Review issue #63](https://github.com/d6g8k5htny-coder/main/issues/63) · [fail-closed reopening](https://github.com/d6g8k5htny-coder/main/issues/63#issuecomment-5841830743) · [source-first erratum](https://github.com/d6g8k5htny-coder/main/issues/63#issuecomment-5841947606)" - ], [ "**D5 — pin neighborhoods / microdisk**", "The public reconnaissance has an AMEND review; the inner microdisk bound and collar to the reviewed annulus are not complete, and the claimed summed pin-neighborhood bound remains AMEND.", @@ -97,17 +98,17 @@ } ], "snapshot_context": { - "default_branch_boundary": "- Pinned Math reading checkout: `58f7936d1138b24dd6cc988081d74d07683611d6`.\n- Pinned query checkout: `89456c5033173c69a304c5fffa781888185675cc`.\n- [Math- PR #70](https://github.com/d6g8k5htny-coder/Math-/pull/70) landed nine byte-custody copies at `9d7b6802424fb4715b31999066aafca8ee2f3cca`; [PR #75](https://github.com/d6g8k5htny-coder/Math-/pull/75) added their proof-index pointer. These are public default-branch imports, **not newly accepted mathematics**. Source self-labels were not adopted.\n- The `main#59` issue-body file in PR #70 is explicitly a transcription, not original source bytes, so it is not counted as byte custody.\n- Open draft AMEND/review PRs remain visible but are not represented here as landed mathematics.", + "default_branch_boundary": "- Pinned Math reading checkout: `82247833b5dd58e04291d55353b52938d73ec614`.\n- Pinned query checkout: `89456c5033173c69a304c5fffa781888185675cc`.\n- [Math- PR #70](https://github.com/d6g8k5htny-coder/Math-/pull/70) landed nine byte-custody copies at `9d7b6802424fb4715b31999066aafca8ee2f3cca`; [PR #75](https://github.com/d6g8k5htny-coder/Math-/pull/75) added their proof-index pointer. These are public default-branch imports, **not newly accepted mathematics**. Source self-labels were not adopted.\n- The `main#59` issue-body file in PR #70 is explicitly a transcription, not original source bytes, so it is not counted as byte custody.\n- Open draft AMEND/review PRs remain visible but are not represented here as landed mathematics.", "notice": "This historical snapshot's custody/query boundary may be stale. Current observations are separate; scientific rows are not inferred from merges." }, - "snapshot_date": "2026-09-26", + "snapshot_date": "2026-09-29", "source": { - "blob": "52688102260e916dec1a38143186198b089a0261", - "bytes": 6881, - "commit": "a26f744be7597e3f0c0543c34ead23049bbac657", + "blob": "3aeb0412f7a9d4357b91977179bf2d608826412c", + "bytes": 7655, + "commit": "f2e432ea5c86742e480c66624775bc9103343314", "path": "STATUS.md", "repository": "d6g8k5htny-coder/main", - "sha256": "9c3e21144423591a3dbff926858048c0363b9a32d6fe258a1de5088d38096141", - "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/a26f744be7597e3f0c0543c34ead23049bbac657/STATUS.md" + "sha256": "039d4fea921a5e9602340ab8580404ef709588ca72f45c52f865f4644da51da3", + "url": "https://raw.githubusercontent.com/d6g8k5htny-coder/main/f2e432ea5c86742e480c66624775bc9103343314/STATUS.md" } } diff --git a/formal/GLOSSARY.md b/formal/GLOSSARY.md index 9eb4dc0f0..c5736cd83 100644 --- a/formal/GLOSSARY.md +++ b/formal/GLOSSARY.md @@ -47,7 +47,7 @@ needed to state it. | **Cone moment** `D_m` | `E[det(A)² · 1{A ≺ 0}]` for a specified Gaussian symmetric `m×m` matrix `A`; a moment of the squared determinant over the negative-definite cone. `D_1 = 4/3`, `D_2 = 29/6 − √6` | Arithmetic parts: core (`cone_moment_m1_thirds`, `cone_moment_m2_algebra`); the integrals: Mathlib | | **Image ledger**, **omitted periodic image** | Deterministic bound on the difference between derivatives of the periodised and unperiodised kernels at `0`, i.e. on the Poisson-summation image terms `n ≠ 0` | Arithmetic parts: core (`image_constant_value`, `covariance_relative_bound`, `exp_taylor_partial_sum_gt_ten`) | | **Outward arithmetic** | Rational interval arithmetic with outward rounding to a fixed grid (`10^-80`), containment unconditional | — (would be Mathlib `Set.Icc` over `ℚ`) | -| **Matrix cap**, **marked cylinder**, **elder selection** (D1) | Read the parent source (`imports/lifetime_parent_20260925/`); the D1 selection chain is itself AMEND at Layer 0 and has no agreed standard mapping yet | — | +| **Matrix cap**, **marked cylinder**, **elder selection** (D1) | Read the parent source (`imports/lifetime_parent_20260925/`) with its reading rule; the D1 chain is ACCEPT — scoped at Layer 0 (reconciled in Math- #126, see `STATUS.md`) and has no agreed standard mapping yet | — | | **RN / JETMOD / 24-jet obligations** | Historical downstream proof obligations tracked in `frontiers/downstream_gate_20260925/GRAPH.json`; not a single mathematical object | — | ## RN counting (D4, D5) diff --git a/formal/manifest.json b/formal/manifest.json index 96f9a2b68..8d4318869 100644 --- a/formal/manifest.json +++ b/formal/manifest.json @@ -38,7 +38,7 @@ "formal/sources/side24_v1/PROOF.md": "c06daccc4ba4b9168522b9888b76a7d599934fc3b91bd753ee5d492262917769", "formal/sources/side24_v1/ENCLOSURE.json": "72b6cd92d31394cdaf5da8919a5d548e902228af1f095cc184158a71d8287811", "formal/SCOPE.md": "fd06700628b1fbc81c5cfe3786aaa455032375bcb879914f068a66b726802a17", - "formal/GLOSSARY.md": "8f15985d9bc278e115095802e7c0d046112ce97f31a04a3ff9b9e491149539f3", + "formal/GLOSSARY.md": "342d4efb374fea31c39e51f8f6bcdbc50d7fb5fea1fd393eda21afff92c62fb8", "formal/README.md": "1398c3c6d15476afe9d4ef01fc98fb199976907123b438ae1743f4e87e31e007", "formal/REVIEW_LANE.md": "6a0dcdd93f1aec16ede829820b913116a5c60c2bbbd78630690599dbc5d8be41", "formal/reviews/TEMPLATE_alignment_review.json": "e722e928ca43c16981e063d8eb1c91e9bf8c683241d9dcf156400a419e72feb3", diff --git a/tests/fixtures/museum_fixture.mjs b/tests/fixtures/museum_fixture.mjs index 02dda3776..da4fd8c2f 100644 --- a/tests/fixtures/museum_fixture.mjs +++ b/tests/fixtures/museum_fixture.mjs @@ -11,12 +11,16 @@ export function fixture({commit='a'.repeat(40),proofs={}}={}) { const proof = pin('proof.md','Pinned proof.',commit); const claims = ids.map((id,i) => {const p=proofs[id]??proof;return {id,title:`Object ${i}`,scope_quote:`- Object ${i}: [proof](${p.path}). Scope ${i}.`,source_label:i===9?'EXACT_COUNTEREXAMPLE':'ACCEPT',class:i===9?'engineering-only':'ACCEPT-scoped',proof:p,review:null,replay:{command:null,url:null,notice:'No executable replay fixture is supplied.'},status_quote:null};}); for(const i of [0,1,2,10])claims[i].status_quote=`Accepted scope ${i}.`; - const open = ['d1-parent-selection-open','d5-pin-neighborhoods-open','sard-g-a1-a6-open'].map((id,i)=>({id,title:`Open ${i}`,scope_quote:`| **Open ${i}** | Still open ${i}. | [Proof](proof.md) |`,source_label:'AMEND / open',class:'AMEND/open',proof,review:null,replay:{command:null,url:null,notice:'No executable replay fixture is supplied.'},status_quote:`Still open ${i}.`})); + // The reconciled D1 row is accepted in STATUS; its proof is the index-pinned parent and its review a byte-bound record. + const review=pin('review.md','Pinned reconciliation.',commit); + const d1Row='| **D1 — parent scope** | Accepted D1 scope. | [Proof](proof.md) · [Reconciliation](review.md) | Limits |'; + const d1={id:'d1-parent-lifetime',title:'D1 — parent scope',scope_quote:d1Row,source_label:'ACCEPT',class:'ACCEPT-scoped',proof,review,replay:{command:null,url:null,notice:'No executable replay fixture is supplied.'},status_quote:'Accepted D1 scope.'}; + const open = ['d5-pin-neighborhoods-open','sard-g-a1-a6-open'].map((id,i)=>({id,title:`Open ${i}`,scope_quote:`| **Open ${i}** | Still open ${i}. | [Proof](proof.md) |`,source_label:'AMEND / open',class:'AMEND/open',proof,review:null,replay:{command:null,url:null,notice:'No executable replay fixture is supplied.'},status_quote:`Still open ${i}.`})); const index = `# Index\n\n## Reviewed scoped results\n\n${claims.map(c=>c.scope_quote).join('\n')}\n\n## Open or conditional results with complete proof text in GitHub\n- D1 parent lifetime theorem: full proof [proof](proof.md).\n`; - const acceptedRows=[[0,'D2'],[1,'D3'],[2,'D4'],[10,'D6']].map(([i,id])=>`| **${id} — scope** | Accepted scope ${i}. | Review | Limits |`).join('\n'); + const acceptedRows=[d1Row,...[[0,'D2'],[1,'D3'],[2,'D4'],[10,'D6']].map(([i,id])=>`| **${id} — scope** | Accepted scope ${i}. | Review | Limits |`)].join('\n'); const status = `# Status\n\n## ACCEPT — scoped\n\n| Object | Accepted scope | Source and review | Explicit limits |\n|---|---|---|---|\n${acceptedRows}\n\n## AMEND / open\n\n| Object | Current reason | Source |\n|---|---|---|\n${open.map(c=>c.scope_quote).join('\n')}\n\n## Engineering only\n`; - const indexSource=pin('PROOF_INDEX.md',index,commit),statusSource=pin('STATUS.md',status,commit);open[1].proof=indexSource;open[2].proof=statusSource; - return {index,status,manifest:{schema_version:1,scientific_status_authority:false,index_source:indexSource,status_source:statusSource,claims:[...claims,...open],exhibits:{ec014:proof,remote:proof,annulus:proof,p15:proof,lifetime:proof},packets:[]}}; + const indexSource=pin('PROOF_INDEX.md',index,commit),statusSource=pin('STATUS.md',status,commit);open[0].proof=indexSource;open[1].proof=statusSource; + return {index,status,manifest:{schema_version:1,scientific_status_authority:false,index_source:indexSource,status_source:statusSource,claims:[...claims,d1,...open],exhibits:{ec014:proof,remote:proof,annulus:proof,p15:proof,lifetime:proof},packets:[]}}; } export class Element { diff --git a/tests/test_museum_data.py b/tests/test_museum_data.py index 1a214976a..7af79b186 100644 --- a/tests/test_museum_data.py +++ b/tests/test_museum_data.py @@ -23,8 +23,8 @@ def setUp(self): def test_exact_fourteen_projections_and_distinct_d5_scopes(self): claims = museum.project(INDEX_BYTES, self.status) self.assertEqual(len(claims), 14) - self.assertEqual([c["class"] for c in claims].count("ACCEPT-scoped"), 10) - self.assertEqual([c["class"] for c in claims].count("AMEND/open"), 3) + self.assertEqual([c["class"] for c in claims].count("ACCEPT-scoped"), 11) + self.assertEqual([c["class"] for c in claims].count("AMEND/open"), 2) self.assertEqual(claims[3]["title"], "D5 all-height fixed annulus") self.assertEqual(claims[3]["class"], "ACCEPT-scoped") self.assertIsNone(claims[3]["status_quote"]) @@ -36,6 +36,28 @@ def test_exact_fourteen_projections_and_distinct_d5_scopes(self): self.assertEqual([c["scope_quote"] for c in claims[:11]], [line for line in exact.splitlines() if line.startswith("- ")]) + def test_reconciled_d1_row_is_projected_from_status(self): + claims = museum.project(INDEX_BYTES, self.status) + d1 = claims[11] + self.assertEqual((d1["id"], d1["class"], d1["source_label"]), ("d1-parent-lifetime", "ACCEPT-scoped", "ACCEPT")) + self.assertTrue(d1["scope_quote"].startswith("| **D1 — parent lifetime theorem")) + self.assertIn("positive length", d1["status_quote"]) + self.assertEqual(d1["proof"]["path"], museum.D1_PARENT) + self.assertEqual(d1["proof"]["commit"], museum.MATH_COMMIT) + self.assertEqual(d1["review"]["path"], museum.D1_RECONCILIATION) + self.assertEqual(d1["review"]["commit"], "82247833b5dd58e04291d55353b52938d73ec614") + self.assertNotIn("pointer_only", d1["review"]) + self.assertEqual([c["id"] for c in claims[12:]], ["d5-pin-neighborhoods-open", "sard-g-a1-a6-open"]) + + def test_d1_row_without_its_review_record_refused(self): + changed = self.status.replace(b"/reviews/d1_chain_reconciliation_20260928/RECONCILIATION.md)", b"/elsewhere.md)", 1) + self.assertNotEqual(changed, self.status) + blob = __import__("hashlib").sha1(b"blob " + str(len(changed)).encode() + b"\0" + changed).hexdigest() + identity = dict(museum.STATUS, blob=blob, bytes=len(changed), + sha256=__import__("hashlib").sha256(changed).hexdigest()) + with patch.object(museum, "STATUS", identity), self.assertRaisesRegex(ValueError, "D1 row"): + museum.project(INDEX_BYTES, changed) + def test_changed_quote_refused_before_projection(self): for raw in (INDEX_BYTES.replace(b"only.", b"globally.", 1), INDEX_BYTES + b" "): with self.subTest(raw=raw[-10:]), self.assertRaisesRegex(ValueError, "identity mismatch"): @@ -91,7 +113,7 @@ def test_packet_selection_excludes_unknown_fork_packet(self): self.assertEqual(packets[0]["result"]["commit"], "71400b94f6cb354a8cf7aba73ffede2138a64efa") self.assertEqual(packets[1]["issue"], 141) self.assertEqual(packets[1]["result"]["commit"], "a12c178c0f857a130cf434e9efd44233a038195b") - self.assertEqual(museum.STATUS["commit"], "71400b94f6cb354a8cf7aba73ffede2138a64efa") + self.assertEqual(museum.STATUS["commit"], "f2e432ea5c86742e480c66624775bc9103343314") self.assertTrue(all(p["scientific_effect"] == "NONE" and p["review_status"] == "REVIEW_REQUIRED" for p in packets)) # Only the frozen landed packet is selected; filesystem discovery must not add a fork. self.assertNotIn("showcase", json.dumps(packets).lower()) diff --git a/tests/test_museum_frontend.mjs b/tests/test_museum_frontend.mjs index a19ba29ca..d6217f366 100644 --- a/tests/test_museum_frontend.mjs +++ b/tests/test_museum_frontend.mjs @@ -10,7 +10,7 @@ test('museum exposes source-bound rendering rather than silently omitting the pa }); const museum = fs.existsSync(moduleURL) ? await import(moduleURL) : null; const available = {skip: !museum}; -test('full reviewed bullets and all three AMEND rows retain their classes and source wording',available,()=>{ +test('full reviewed bullets, the reconciled D1 row and both AMEND rows retain their classes and source wording',available,()=>{ const {manifest,index,status}=fixture(); assert.equal(museum.validateBoundManifest(manifest,index,status).claims.length,14); const changed=structuredClone(manifest);changed.claims[0].scope_quote+=' Broader conclusion.'; @@ -19,7 +19,8 @@ test('full reviewed bullets and all three AMEND rows retain their classes and so assert.throws(()=>museum.validateBoundManifest(omitted,index,status),/projection|count|order/i); }); test('source display cannot promote a counterexample or an AMEND row',available,()=>{ - for(const index of [9,11]) {const f=fixture();f.manifest.claims[index].class='ACCEPT-scoped';assert.throws(()=>museum.validateBoundManifest(f.manifest,f.index,f.status),/class|promotion/i);} + for(const index of [9,12,13]) {const f=fixture();f.manifest.claims[index].class='ACCEPT-scoped';assert.throws(()=>museum.validateBoundManifest(f.manifest,f.index,f.status),/class|promotion/i);} + {const f=fixture();f.manifest.claims[11].class='AMEND/open';assert.throws(()=>museum.validateBoundManifest(f.manifest,f.index,f.status),/class|promotion/i);} const f=fixture();f.manifest.scientific_status_authority=true;assert.throws(()=>museum.validateBoundManifest(f.manifest,f.index,f.status),/authority/i); }); test('a genuine source elsewhere in the index cannot replace this claim proof or scope',available,()=>{ @@ -67,14 +68,18 @@ test('review comment pointers cannot masquerade as byte-frozen comment content', const f=fixture();f.manifest.claims[0].review={...f.manifest.index_source,pointer_only:true,review_url:'https://github.com/d6g8k5htny-coder/main/issues/67#issuecomment-123',review_notice:'Pointer only.'}; assert.throws(()=>museum.validateBoundManifest(f.manifest,f.index,f.status),/review pointer/i); }); -test('AMEND pointers bind their declared STATUS row or the specific open-obligation index entry',available,()=>{ - const f=fixture(),claim=f.manifest.claims[11],url='https://github.com/d6g8k5htny-coder/main/issues/63#issuecomment-123'; - const row=claim.scope_quote.replace('[Proof](proof.md)',`[Review](${url})`); - f.status=f.status.replace(claim.scope_quote,row);claim.scope_quote=row;f.manifest.status_source=pin('STATUS.md',f.status);f.manifest.claims[13].proof=f.manifest.status_source; - claim.review={...f.manifest.status_source,pointer_only:true,review_url:url,review_notice:'Pointer only; linked comment is not byte-frozen.'}; - assert.equal(museum.validateBoundManifest(f.manifest,f.index,f.status).claims[11].class,'AMEND/open'); - const wrong=structuredClone(f.manifest);wrong.claims[11].review={...wrong.index_source,pointer_only:true,review_url:url,review_notice:'Pointer only.'}; - assert.throws(()=>museum.validateBoundManifest(wrong,f.index,f.status),/review pointer/i); +test('the accepted D1 row binds its STATUS quote, index-pinned proof and byte-bound review',available,()=>{ + const f=fixture(); + const d1=museum.validateBoundManifest(f.manifest,f.index,f.status).claims[11]; + assert.equal(d1.id,'d1-parent-lifetime');assert.equal(d1.class,'ACCEPT-scoped'); + const pointer=fixture();pointer.manifest.claims[11].review={...pointer.manifest.status_source,pointer_only:true,review_url:'https://github.com/d6g8k5htny-coder/main/issues/63#issuecomment-123',review_notice:'Pointer only.'}; + assert.throws(()=>museum.validateBoundManifest(pointer.manifest,pointer.index,pointer.status),/byte-bound|review pointer/i); + const other=fixture();other.manifest.claims[11].review=pin('other.md','Different record.'); + assert.throws(()=>museum.validateBoundManifest(other.manifest,other.index,other.status),/review file/i); + const scope=fixture();scope.manifest.claims[11].status_quote='Broader D1 scope.'; + assert.throws(()=>museum.validateBoundManifest(scope.manifest,scope.index,scope.status),/STATUS.*scope/i); + const proof=fixture();proof.manifest.claims[11].proof=pin('other.md','A genuine different proof.'); + assert.throws(()=>museum.validateBoundManifest(proof.manifest,proof.index,proof.status),/D1 proof/i); }); test('packet index refuses a foreign packet, changed scientific effect and mismatched result path',available,()=>{ const f=fixture(),result={...pin('incoming/side24-identity-replay-20260926/RESULT.md','scientific_effect: NONE\nreview_status: REVIEW_REQUIRED'),repository:'d6g8k5htny-coder/main'}; diff --git a/tests/test_public_shop_data.py b/tests/test_public_shop_data.py index e21c40ee8..d9e48edc6 100644 --- a/tests/test_public_shop_data.py +++ b/tests/test_public_shop_data.py @@ -18,8 +18,9 @@ def setUp(self): def test_pinned_status_counts_and_verbatim_scope(self): result = shop.parse_status(self.status) - self.assertEqual(result['counts'], {'accept': 4, 'amend': 3, 'engineering': 3}) - self.assertIn('No numerical remainder constant or numerical lifetime cutoff', result['sections'][0]['rows'][0][3]) + self.assertEqual(result['counts'], {'accept': 5, 'amend': 2, 'engineering': 3}) + self.assertIn('No numerical `C`, `r_*`, `z_*` or coefficient', result['sections'][0]['rows'][0][3]) + self.assertIn('No numerical remainder constant or numerical lifetime cutoff', result['sections'][0]['rows'][1][3]) self.assertEqual(result['source']['sha256'], shop.STATUS['sha256']) self.assertFalse(result['scientific_status_authority']) diff --git a/tests/test_public_shop_frontend.mjs b/tests/test_public_shop_frontend.mjs index 7545bc0f2..e54b7d5de 100644 --- a/tests/test_public_shop_frontend.mjs +++ b/tests/test_public_shop_frontend.mjs @@ -12,9 +12,9 @@ test('byte count mismatch refuses data',async()=>assert.rejects(()=>verifiedByte test('mutable branch URL refused before request',async()=>assert.rejects(()=>verifiedBytes({...pin,url:'https://raw.githubusercontent.com/d6g8k5htny-coder/main/main/STATUS.md'},()=>{throw Error('must not fetch');}),/pinned public/)); test('HTTP failure gives no data',async()=>assert.rejects(()=>verifiedBytes(pin,async()=>new Response('',{status:404})),/unavailable/)); const status=JSON.parse(fs.readFileSync(new URL('../docs/site/status.json',import.meta.url))); -test('status snapshot counts are selected rows',()=>assert.deepEqual(validateStatus(status).counts,{accept:4,amend:3,engineering:3})); +test('status snapshot counts are selected rows',()=>assert.deepEqual(validateStatus(status).counts,{accept:5,amend:2,engineering:3})); test('unknown category refused',()=>{const s=structuredClone(status);s.sections[0].key='proved';assert.throws(()=>validateStatus(s),/Unrecognized/);}); -test('changed count refused',()=>{const s=structuredClone(status);s.counts.accept=5;assert.throws(()=>validateStatus(s),/count/);}); +test('changed count refused',()=>{const s=structuredClone(status);s.counts.accept=6;assert.throws(()=>validateStatus(s),/count/);}); test('promotion authority refused',()=>assert.throws(()=>validateStatus({...status,scientific_status_authority:true}),/Invalid/)); const coefficient={object:'SIDE24-COEFFICIENT-D23-20260924-v1',scientific_acceptance:false,dimensions:{'2':{lower:'0.07340691930603427103',upper:'0.07340691930603427104'},'3':{lower:'0.04177593184059834334',upper:'0.04177593184059834335'}}}; test('coefficient endpoints remain distinct exactly',()=>{const d=validateCoefficient(coefficient).dimensions['2'];assert.notEqual(d.lower,d.upper);assert.equal(Number(d.lower),Number(d.upper));}); diff --git a/tools/museum_data.py b/tools/museum_data.py index d49db84d0..9fad2bbf9 100644 --- a/tools/museum_data.py +++ b/tools/museum_data.py @@ -202,11 +202,11 @@ }, "STATUS.md": { "repository": "d6g8k5htny-coder/main", - "commit": "71400b94f6cb354a8cf7aba73ffede2138a64efa", + "commit": "f2e432ea5c86742e480c66624775bc9103343314", "path": "STATUS.md", - "blob": "52688102260e916dec1a38143186198b089a0261", - "bytes": 6881, - "sha256": "9c3e21144423591a3dbff926858048c0363b9a32d6fe258a1de5088d38096141" + "blob": "3aeb0412f7a9d4357b91977179bf2d608826412c", + "bytes": 7655, + "sha256": "039d4fea921a5e9602340ab8580404ef709588ca72f45c52f865f4644da51da3" }, "reviews/sard_g_successor_a1_a6_20260926/REVIEW.md": { "repository": "d6g8k5htny-coder/main", @@ -274,6 +274,12 @@ blob="bfc8372e866a6a3321615323c7badc62fdb0aa4c", bytes=1724, sha256="478fb7620ea5947855006ab7af448010fdd5cc31581407b1f86d4b87ce5de2eb"), }) +# The D1 row of the pinned STATUS links this reconciliation record (Math- #126 merge commit). +SOURCES["reviews/d1_chain_reconciliation_20260928/RECONCILIATION.md"] = dict( + repository="d6g8k5htny-coder/Math-", commit="82247833b5dd58e04291d55353b52938d73ec614", + path="reviews/d1_chain_reconciliation_20260928/RECONCILIATION.md", + blob="75da2597971510f843f8d90c743950cb8c177342", bytes=23312, + sha256="451b9d7ffee072a73fc904cab891b6693e3f233808b89df10cce1b57036b65da") SOURCES["README.md"] = {"repository":"d6g8k5htny-coder/Math-","commit":"d6628da09384728992dcbe6e921cc28ba85aebb0","path":"README.md","blob":"abe16871da7740fa28ae4dbb28fb31853a5868bd","bytes":6023,"sha256":"89d4c618ad4560373f8fba3c787522cea8f0191fd8e176f3e0741c6230390730"} INDEX = SOURCES["PROOF_INDEX.md"] STATUS = SOURCES["STATUS.md"] @@ -404,8 +410,12 @@ def status_rows(text, heading): for line in rows[2:]] +D1_PARENT = "imports/lifetime_parent_20260925/UNIFORM_MATRIX_CAP_AND_LIFETIME.md" +D1_RECONCILIATION = "reviews/d1_chain_reconciliation_20260928/RECONCILIATION.md" + + def project(index_raw, status_raw): - """Return the exact eleven reviewed bullets and three open table rows.""" + """Return the exact eleven reviewed bullets, the reconciled D1 STATUS row and two open table rows.""" index = verify_bytes(index_raw, INDEX).decode("utf-8") status = verify_bytes(status_raw, STATUS).decode("utf-8") bullets = [line for line in section(index, "Reviewed scoped results").splitlines() @@ -442,12 +452,25 @@ def project(index_raw, status_raw): source_label="EXACT_COUNTEREXAMPLE" if counterexample else "ACCEPT", **{"class": "engineering-only" if counterexample else "ACCEPT-scoped"}, proof=descriptor(proof_path), review=review, replay=replay, status_quote=status_quote)) + # D1 is accepted in STATUS, not in the pinned index's reviewed bullets. Its row must link the immutable + # parent (same bytes as the index-pinned mirror) and the byte-bound reconciliation record. + d1_rows = [(line, cells) for line, cells in accepted_rows if cells[0].startswith("**D1 —")] + if len(d1_rows) != 1: + raise ValueError("STATUS must have exactly one accepted D1 row") + d1_row, d1_cells = d1_rows[0] + for path in (D1_PARENT, D1_RECONCILIATION): + if "/" + path + ")" not in d1_row: + raise ValueError("D1 row does not link its pinned proof and review: " + path) + claims.append(dict(id="d1-parent-lifetime", title=d1_cells[0].replace("**", ""), scope_quote=d1_row, + source_label="ACCEPT", **{"class": "ACCEPT-scoped"}, + proof=descriptor(D1_PARENT), review=descriptor(D1_RECONCILIATION), + replay={"command": None, "url": None, + "notice": "No replay command is recorded in the pinned proof/review."}, + status_quote=d1_cells[1])) open_rows = status_rows(status, "AMEND / open") - if len(open_rows) != 3: - raise ValueError("open projection must have three rows") + if len(open_rows) != 2: + raise ValueError("open projection must have two rows") open_specs = [ - ("d1-parent-selection-open", "imports/lifetime_parent_20260925/UNIFORM_MATRIX_CAP_AND_LIFETIME.md", - "https://github.com/d6g8k5htny-coder/main/issues/63#issuecomment-5841830743"), ("d5-pin-neighborhoods-open", "PROOF_INDEX.md", "https://github.com/d6g8k5htny-coder/Math-/blob/4e188e25b1e1ef560f3eeb75c0d354d2ccf0ea22/reviews/d5_pin_neighborhood_20260926/REVIEW.md"), ("sard-g-a1-a6-open", "STATUS.md", "reviews/sard_g_successor_a1_a6_20260926/REVIEW.md") @@ -459,7 +482,7 @@ def project(index_raw, status_raw): elif claim_id == "sard-g-a1-a6-open": proof.update(availability="OPEN / NOT LANDED", proof_url="https://github.com/d6g8k5htny-coder/main/pull/122") - review = (pointer("STATUS.md" if claim_id.startswith("d1-") else "PROOF_INDEX.md", review_target) + review = (pointer("PROOF_INDEX.md", review_target) if review_target.startswith("https://") else descriptor(review_target)) claims.append(dict(id=claim_id, title=cells[0].replace("**", ""), scope_quote=row, source_label="AMEND / open", **{"class": "AMEND/open"}, @@ -588,7 +611,7 @@ def main(argv=None): else: destination.parent.mkdir(parents=True, exist_ok=True) destination.write_bytes(dump(data)) - print("Museum projection verified: 11 reviewed bullets, 3 AMEND rows, 2 landed packets; scientific effect NONE.") + print("Museum projection verified: 11 reviewed bullets, 1 reconciled D1 row, 2 AMEND rows, 2 landed packets; scientific effect NONE.") return 0 diff --git a/tools/public_shop_data.py b/tools/public_shop_data.py index 49f045691..c114ada43 100644 --- a/tools/public_shop_data.py +++ b/tools/public_shop_data.py @@ -17,7 +17,7 @@ from urllib.parse import quote from urllib.request import urlopen -MAIN_COMMIT = "a26f744be7597e3f0c0543c34ead23049bbac657" +MAIN_COMMIT = "f2e432ea5c86742e480c66624775bc9103343314" MATH_COMMIT = "9d7b6802424fb4715b31999066aafca8ee2f3cca" OWNER = "d6g8k5htny-coder" @@ -27,9 +27,9 @@ def source(repo, commit, path, size, blob, digest): bytes=size, blob=blob, sha256=digest) -STATUS = source("main", MAIN_COMMIT, "STATUS.md", 6881, - "52688102260e916dec1a38143186198b089a0261", - "9c3e21144423591a3dbff926858048c0363b9a32d6fe258a1de5088d38096141") +STATUS = source("main", MAIN_COMMIT, "STATUS.md", 7655, + "3aeb0412f7a9d4357b91977179bf2d608826412c", + "039d4fea921a5e9602340ab8580404ef709588ca72f45c52f865f4644da51da3") COEFFICIENT = source("Math-", MATH_COMMIT, "coefficients/side24_v1/ENCLOSURE.json", 1090, "57af39a05e14ed0ba8ebc00a9b4aca4dffb067c7", "72b6cd92d31394cdaf5da8919a5d548e902228af1f095cc184158a71d8287811") @@ -150,7 +150,7 @@ def source(repo, commit, path, size, blob, digest): "Engineering only": ("engineering", ["Surface", "What it provides"]), } OTHER_HEADINGS = {"Where to read — public source custody", "Reading rule"} -EXPECTED_COUNTS = {"accept": 4, "amend": 3, "engineering": 3} +EXPECTED_COUNTS = {"accept": 5, "amend": 2, "engineering": 3} IMPORT_IDS = ["EC-014", "EC-015", "EC-021", "P02-LM-001", "P02-LM-002", "P02-LM-005", "P02-LM-007", "P02-LM-008", "P15-B"]