1. Claim a bounded task
Replay a pinned calculation, chart public data, document an import, or leave a source-bound review comment. Comment /claim; wait for assignment and keep one active claim.
diff --git a/.github/workflows/public-shop.yml b/.github/workflows/public-shop.yml index 3f2680a2f..d506a0aba 100644 --- a/.github/workflows/public-shop.yml +++ b/.github/workflows/public-shop.yml @@ -20,5 +20,10 @@ jobs: run: python3 -B -m unittest discover -s tests -p test_public_shop_data.py - name: Browser data-validation controls run: node --test tests/test_public_shop_frontend.mjs + - name: Museum source projection and refusal controls + run: | + python3 -B -m unittest discover -s tests -p test_museum_data.py + python3 -B tools/museum_check.py + node --test tests/test_museum_geometry.mjs - name: Pinned public source readback and interaction harness run: python3 -B tools/public_shop_check.py diff --git a/README.md b/README.md index 967b149e8..1ffec061b 100644 --- a/README.md +++ b/README.md @@ -90,3 +90,7 @@ Start with [CONTRIBUTING.md](CONTRIBUTING.md) and [AGENTS.md](AGENTS.md). New wo ## License and citation Released under the [MIT License](LICENSE). Citation metadata is in [CITATION.cff](CITATION.cff). + +## Verification museum + +Open the [claim cards and source-bound exhibits](https://d6g8k5htny-coder.github.io/main/site/museum.html) for quoted scopes, proof/review identities, and replay links. The [packet list](https://d6g8k5htny-coder.github.io/main/site/museum.html#packets) shows submissions present in its pinned default-branch snapshot; packets are not STATUS. The museum uses the Math checkout and query checkout pinned above. [Display documentation](docs/site/README.md) explains its snapshots and limits. diff --git a/docs/PUBLIC_SHOP_SETUP.md b/docs/PUBLIC_SHOP_SETUP.md index fb94b242a..c6fc3e408 100644 --- a/docs/PUBLIC_SHOP_SETUP.md +++ b/docs/PUBLIC_SHOP_SETUP.md @@ -1,6 +1,6 @@ # Public shop deployment and contribution board -Scientific effect: **NONE**. This page records verified public deployment and the remaining review-settings configuration. A live site or installed setting does not promote mathematical status. +Scientific effect: **NONE**. This page records verified public deployment and review-settings installation. A live site or installed setting does not promote mathematical status. ## Pages @@ -26,7 +26,7 @@ The first five bounded tasks are [#141](https://github.com/d6g8k5htny-coder/main **Math- verified active:** [Proof vault: reviewed changes](https://github.com/d6g8k5htny-coder/Math-/rules/24045351) protects its default `main` branch. It requires a pull request, at least one approving review, approval of the most recent reviewable push, dismissal of stale approvals, resolved conversations, and an up-to-date **math-downstream-gates** check from GitHub Actions. Force pushes and deletion are blocked; the bypass list is empty. -**Main intended configuration; the tightened settings still require a separate installation receipt.** In [main branch settings](https://github.com/d6g8k5htny-coder/main/settings/branches), require a pull request, at least one approving review, approval of the most recent reviewable push, and passing **verify**, **public-shop**, and **public-intake** checks. The external results guard is **public-intake**; its tests are a different check. A green replay is not mathematical acceptance. Do not grant outsiders direct write access. +**Main verified active:** [Verified pull requests](https://github.com/d6g8k5htny-coder/main/rules/23798639) requires a pull request, at least one approving review, approval of the most recent reviewable push, dismissal of stale approvals, resolved conversations, and up-to-date **verify**, **public-shop**, and **public-intake** checks from GitHub Actions. Force pushes and deletion are blocked. The existing repository-admin bypass is restricted to pull requests; it was not expanded. See the [installation receipt](https://github.com/d6g8k5htny-coder/main/pull/149#issuecomment-5848091891), recorded separately from the deployment PR. The external results guard is **public-intake**; its tests are a different check. A green replay is not mathematical acceptance. Do not grant outsiders direct write access. A check name alone does not authenticate the workflow. Before merging an intake PR, inspect the **trusted public-intake workflow**, its `pull_request_target` event, the precise reviewed PR head, and the pass result. Administrative override must not be treated as a scientific review. diff --git a/docs/site/IMPLEMENTATION.md b/docs/site/IMPLEMENTATION.md new file mode 100644 index 000000000..461c77211 --- /dev/null +++ b/docs/site/IMPLEMENTATION.md @@ -0,0 +1,45 @@ +# Verification museum implementation plan + +> For agentic workers: use the subagent-driven-development workflow for the independent projection, display, and geometry tasks; root owns integration and release. + +**Goal:** Expose pinned public mathematics, its exact scoped reviews and open limits, and landed intake packets without changing scientific status. + +**Architecture:** Extend the existing static Pages shop with a separate museum page and a small reproducible display projection. Reuse the existing public-math inventory and trusted incoming guard. Geometry explains source language; it is never replay evidence or an acceptance register. + +**Tech stack:** Python standard library exporter and checks, vanilla ES modules/SVG, an isolated optional Three.js scene with a 2D fallback. + +**Spec:** Owner's PUBLIC VERIFICATION DISPLAY + INTAKE ENGINEERING contract, 2026-09-26; W1–W12 are mapped below. + +## Global constraints + +- Scientific effect NONE. STATUS, proof bodies, review dispositions, and vault claims stay byte-identical. +- Math snapshot: `d6628da09384728992dcbe6e921cc28ba85aebb0`; main snapshot: `71400b94f6cb354a8cf7aba73ffede2138a64efa`. +- Existing STATUS/inventory snapshot and SIDE24 enclosure pins remain historical and explicit; query checkout stays `c88768bb11efd1f7d6bda188f13064bedec54a06`. +- Every exhibit names its object, class, repository/path, full commit and SHA-256, and states: “This canvas explains the pinned source. It is not a proof and does not change status.” +- No new repository or source inventory. No live field sampling. No outsider write or automatic packet promotion. +- One main PR, draft until its hosted checks pass. Do not touch files owned by open PRs; specifically leave `docs/NAVIGATION.json` to #125 and the draft packet in #150 to its author. + +## Tasks and verification + +- [x] **W1–W2: exact claim projection.** `tools/museum_data.py` regenerates `docs/site/museum.json`: all 11 reviewed-result bullets and three AMEND rows, each with immutable proof/review identities. Preserve EXACT_COUNTEREXAMPLE and review-pointer limitations. Tests reject changed source bytes, quotes and invented acceptance. `museum.html`, `museum.mjs`, and `museum.css` show claim/source/replay columns and an engineering strip. +- [x] **W3/W8: existing-shop integration.** Complete the SIDE24 visible identity contract, link the museum, and filter the original catalog by repository/path. Keep exact decimal endpoints. Replace the mutable browser ref fetch with the pinned query identity and local check instructions. Exercise real HTML IDs and filter behavior. +- [x] **W4–W7: scoped exhibits.** Show a fixture-absent D2 card; EC-014 frame with camera orbit and 2D fallback; fixed-remote and fixed-annulus diagrams with OPEN complements; source-stated P15 finite example. Test displayed domains and controls; do not invent bounds or certifying samples. +- [x] **W9: landed packets.** Project only the single packet present at the main snapshot, with RESULT identity, issue not stated, and “packet — not STATUS.” Reject draft-PR inclusion and unknown source identity. +- [x] **W10–W11: retain intake/replay.** Existing trusted `public-intake.yml`, guard, task form, manual claim protocol and SIDE24 notebook already implement these lanes. The audit found no missing write-isolation feature. +- [x] **W12/release.** Keep README and Math/query pins consistent. Run existing navigation, intake and public-shop checks plus new projection/view checks. Review the entire diff, then attach every touched file's commit and SHA-256 to the single PR. Hosted CI must pass before readiness; deploy only through the repository's permitted merge path. + +## Review focus + +- D5 fixed-annulus ACCEPT must never relabel the open pin-neighborhood/microdisk scope. +- Imported EC-014 self-labels are custody bytes, not adopted dispositions. +- Mutable review comments receive a pinned pointer identity, never an invented comment digest. +- Missing WebGL or unavailable source bytes leaves readable fallback/absence states, not a success badge. +- A packet is listed only from the pinned default snapshot; no result is promoted onto claim cards. + +## Audit baseline + +Current defaults and the live Pages site were inspected. Main's 17 open PR file lists were checked before edits. The baseline passed 85 Python tests and 16 frontend controls. Math and query need no PR. No committed lifetime sample was found, so the implementation uses the expressly allowed fixture-absent card. + +## Pre-publication validation + +The implementation passed 97 Python tests in normal and optimized modes; 16 existing frontend controls, four shop interaction controls, 15 museum frontend/integration controls, and eight geometry controls. Public source readback, navigation and landing checks passed. Independent source/scope and engineering reviews found no remaining critical or important findings after the source-association and bounded-fetch fixes. No scientific source/status file changed. Hosted PR checks and publication are release gates; these local checks do not assert deployment or successful GPU rendering. diff --git a/docs/site/README.md b/docs/site/README.md index d14db17e1..236be979f 100644 --- a/docs/site/README.md +++ b/docs/site/README.md @@ -4,7 +4,7 @@ This static viewer makes the existing public work easier to read. It does not ow **Live:** [Open the public research shop](https://d6g8k5htny-coder.github.io/main/site/). Coordinate a bounded contribution on the [Public contributions board](https://github.com/users/d6g8k5htny-coder/projects/1/views/1). -- **Board:** a mechanically exported, byte-bound `STATUS.md` snapshot. Counts refer to the selected rows, with full scope and limits. API observations are dated separately. +- **Board:** a mechanically exported, byte-bound `STATUS.md` snapshot. Counts refer to the selected rows, with full scope and limits. Historical observations are dated separately; Pages does not fetch a mutable ref. - **SIDE24 explorer:** exact decimal endpoints from pinned public JSON; approximate bar lengths are NON-CERTIFYING. No lifetime curve, random field simulation, or new bound is generated. - **Inventory browser:** reads the existing `docs/public-math/sources.json` and its fourteen hash-verified shards. No second inventory is created. - **Contributions:** GitHub issues and incoming-only result PRs. The viewer has no upload endpoint, credentials, write token, or backend. @@ -27,7 +27,7 @@ node --test tests/test_public_shop_frontend.mjs python3 -B tools/public_shop_check.py ``` -The interaction harness tests loading, searching, exact decimal selection and commit currency; it is not a visual browser test. Local-server preview was unavailable in the editing environment. After deployment on 2026-09-26, the live Pages site was checked in a real browser: all 2,138 original catalog records loaded and the exact SIDE24 source bytes verified. +The interaction harness tests loading, searching, exact decimal selection and pinned query identity; it is not a visual browser test. Local-server preview was unavailable in the editing environment. The baseline live Pages site was checked in a real browser on 2026-09-26: all 2,138 original catalog records loaded and the exact SIDE24 source bytes verified. This baseline check does not validate a later museum deployment. Reproduce the exports with `python3 -B tools/public_shop_data.py --check`. The exporter uses fixed source identities, refuses changed bytes or unfamiliar tables, and preserves verbatim cells. Updating the snapshot requires an explicit source-bound engineering PR; this viewer never decides a review disposition. @@ -39,4 +39,30 @@ The [SIDE24 notebook](../notebooks/SIDE24_PUBLIC_COEFFICIENTS.ipynb) exposes the GitHub Pages is configured as **Deploy from a branch → main → /docs**. The entry `docs/index.html` points to `site/`; `docs/.nojekyll` serves static files. The verified destination is [https://d6g8k5htny-coder.github.io/main/site/](https://d6g8k5htny-coder.github.io/main/site/). GitHub's branch publishing supports `/` or `/docs`, so `docs/site` is the app directory, not a selectable publishing root. -See the [deployment and review settings record](../PUBLIC_SHOP_SETUP.md). Pages, the public Project, the four profile pins, and Math-'s proof-vault branch rules have been activated. Main's tightened review settings remain intended configuration pending separate verification; a public site does not establish branch protection or mathematical acceptance. +See the [deployment and review settings record](../PUBLIC_SHOP_SETUP.md). Pages, the public Project, the four profile pins, and the main/Math- branch rules have installation receipts. A public site does not establish branch protection or mathematical acceptance. + +## 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. + +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. + +Claims use claim/scope, source/review, and replay columns. Missing recorded replay commands are disclosed. The separate engineering strip and CI links do not attest to mathematical acceptance. D5's reviewed fixed-annulus region and its open pin-neighborhood/microdisk work remain separate objects. + +- EC-014 illustrates the two-pin frame and six data coordinates. Camera motion is presentation, not a replay of its Jacobian argument. Imported self-labels are not adopted. +- D4/D5 diagrams show only their stated fixed regions, with OPEN complements. Diagram dimensions are schematic, not certified constants. +- P15 illustrates the source's stated finite realized-family example, with no unrestricted prize claim. +- D2 has a **fixture absent** card: no committed lifetime/barcode samples were found in the audited defaults. No synthetic proof data or live Gaussian sampler is supplied. +- The packet list contains only the one package in the pinned main snapshot. Later or unmerged PRs are excluded until a reviewed engineering refresh. Every row says **packet — not STATUS**. + +```sh +python3 -B -m unittest discover -s tests -p test_museum_data.py +python3 -B tools/museum_check.py +node --test tests/test_museum_geometry.mjs +``` + +Existing intake enforcement remains `.github/workflows/public-intake.yml` and `tools/public_intake_check.py`: trusted `pull_request_target` code, no packet execution, incoming-only files, bounded identities, and a documented credential-pattern scan. The scan is not comprehensive. Task claims remain the human protocol in CONTRIBUTING; display inclusion never replaces review. + +`museum_check.py` reads the pinned public bytes, checks regeneration, and exercises the actual committed manifest through the display code with the declared HTML containers. It also tests refusal of cross-claim proof, scope and replay substitutions. It is an integration harness, not a browser layout or GPU test. `museum_data.py --check` remains available for export-only reproduction. + +The [implementation record](IMPLEMENTATION.md) maps W1–W12, coordination exclusions, and validation boundaries. diff --git a/docs/site/app.js b/docs/site/app.js index ef8e3704c..5bfbcb8a6 100644 --- a/docs/site/app.js +++ b/docs/site/app.js @@ -3,6 +3,7 @@ const el=id=>document.getElementById(id); const node=(tag,text,cls)=>{const n=document.createElement(tag);if(text!==undefined)n.textContent=text;if(cls)n.className=cls;return n;}; const error=(id,e)=>{el(id).textContent=`Unavailable: ${e.message}. No result inferred.`;el(id).className='error';}; const link=(text,url)=>{const a=node('a',text);a.href=url;return a;}; +const disclaimer='This canvas explains the pinned source. It is not a proof and does not change status.'; // Small safe renderer: links to this public GitHub owner; no HTML execution. function cell(target,text,base) { const re=/\[([^\]]+)\]\(([^)]+)\)/g;let start=0; @@ -16,22 +17,33 @@ function cell(target,text,base) { target.append(document.createTextNode(text.slice(start).replace(/\*\*|`/g,''))); } function identity(target,pin) { - for(const [label,value] of [['Commit',pin.commit],['Path',pin.path],['SHA-256',pin.sha256],['Bytes',pin.bytes]]) { + for(const [label,value] of [['Repository',pin.repository],['Path',pin.path],['Commit',pin.commit],['SHA-256',pin.sha256],['Bytes',pin.bytes]]) { const p=node('p');p.append(node('strong',label+': '),node('code',String(value)));target.append(p); } const url=pin.url||pin.raw_url;if(url)target.append(link('Read the pinned public bytes ↗',url)); } +function sourceHeader(target,object,classification,pin) { + const header=node('div',undefined,'source-header'); + for(const [label,value] of [['Object ID',object],['Class',classification]]) { + const p=node('p');p.append(node('strong',label+': '),node('span',value));header.append(p); + } + identity(header,pin);header.append(node('p',disclaimer,'canvas-disclaimer'));target.append(header); +} async function board(config) { const s=validateStatus(await verifiedJSON(config.status_json)); await verifiedBytes(s.source); const base=`https://github.com/d6g8k5htny-coder/main/blob/${s.source.commit}/`; el('status-note').textContent=`Snapshot ${s.snapshot_date}. Counts cover the selected rows below, not every theorem or artifact. ${s.meaning}`; const labels={accept:'ACCEPT — scoped',amend:'AMEND / open',engineering:'Engineering only'}; + const classes={accept:'ACCEPT-scoped',amend:'AMEND/open',engineering:'engineering-only'}; for(const section of s.sections) { - const card=node('article',undefined,section.key);card.append(node('span',String(section.count),'count'),node('h3',labels[section.key]),node('p','Selected source rows; read the scope below.'));el('counts').append(card); + const card=node('article',undefined,section.key);card.append(node('span',String(section.count),'count'),node('h3',labels[section.key]),node('p','Selected source rows; read the scope below.')); + sourceHeader(card,'status-count-'+section.key,'engineering-only',s.source);el('counts').append(card); const details=node('details',undefined,'status-group');details.append(node('summary',`${labels[section.key]} · ${section.count}`)); for(const row of section.rows) { const article=node('article',undefined,'status-object');const title=node('h4');cell(title,row[0],base);article.append(title); + const object=row[0].replace(/\[([^\]]+)\]\([^)]+\)/g,'$1').replace(/\*\*|`/g,''); + article.setAttribute('data-class',classes[section.key]);sourceHeader(article,object,classes[section.key],s.source); row.slice(1).forEach((c,i)=>{const p=node('p');p.append(node('strong',section.headers[i+1]+': '));cell(p,c,base);article.append(p);});details.append(article); }el('status-rows').append(details); } @@ -51,6 +63,7 @@ function drawCoefficient(data,dimension) { } async function coefficients(config) { const data=validateCoefficient(await verifiedJSON(config.coefficient)); + sourceHeader(el('coefficient-source'),'D3 SIDE24 · '+data.object,'engineering-only',config.coefficient); el('coefficient-state').textContent='SHA-256 and byte count verified. Exact endpoints shown verbatim.'; el('proof-link').href=`https://github.com/d6g8k5htny-coder/Math-/blob/${config.proof.commit}/${config.proof.path}`; identity(el('coefficient-identity'),config.coefficient);el('coefficient-identity').append(node('p',data.method),node('p',`Original source scope: ${data.scope}`)); @@ -67,10 +80,14 @@ async function inventory(config) { })); const rows=chunks.flat();if(rows.length!==index.source_count)throw new Error('Catalog total mismatch'); let limit=50; - const render=()=>{const query=el('search').value.trim().toLowerCase();const matches=rows.filter(row=>[row.repository,row.path,row.commit,row.sha256].some(s=>s.toLowerCase().includes(query)));el('catalog').replaceChildren(); + const render=()=>{const query=el('search').value.trim().toLowerCase(),repository=el('repository-filter').value,path=el('path-filter').value.trim().toLowerCase(); + const matches=rows.filter(row=>(!repository||row.repository===repository)&&row.path.toLowerCase().includes(path)&&[row.repository,row.path,row.commit,row.sha256].some(s=>s.toLowerCase().includes(query)));el('catalog').replaceChildren(); matches.slice(0,limit).forEach(row=>{const tr=node('tr'),name=node('td'),commit=node('td'),hash=node('td');name.append(node('small',row.repository),link(row.path,safeSourceURL(row)));commit.append(node('code',row.commit));hash.append(node('code',row.sha256));tr.append(name,commit,hash);el('catalog').append(tr);}); el('inventory-state').textContent=`${matches.length.toLocaleString()} matches · ${Math.min(limit,matches.length)} shown · all 2,138 source records loaded from the original hash-verified shards.`;el('more').hidden=matches.length<=limit;}; - el('search').disabled=false;el('search').addEventListener('input',()=>{limit=50;render();});el('more').addEventListener('click',()=>{limit+=50;render();});render(); + for(const [id,event] of [['search','input'],['repository-filter','change'],['path-filter','input']]) { + el(id).disabled=false;el(id).addEventListener(event,()=>{limit=50;render();}); + } + el('more').addEventListener('click',()=>{limit+=50;render();});render(); } async function custody(config) { const manifest=await verifiedJSON(config.imports); @@ -78,11 +95,11 @@ async function custody(config) { const observed=config.observations; el('custody-note').textContent=`${config.imports.count} byte-copy imports landed at Math ${config.imports.commit}; source labels were not adopted. ${observed.open_math_prs} Math PRs were open when observed ${observed.observed_at}. An open PR is not landed math.`; el('custody-note').append(' ',link('Import identities ↗',config.imports.manifest_url)); - const q=config.query;const bundle=await verifiedJSON(q);if(bundle.math_tip!==q.math_pin||bundle.scientific_status_authority!==false)throw new Error('Query source mismatch');el('query-note').textContent=`Query checkout ${q.commit}; recorded Math commit ${q.math_pin}. --check-math-tip checks seven file identities, not commit equality. The button below checks commit currency only.`; + const q=config.query;const bundle=await verifiedJSON(q);if(bundle.math_tip!==q.math_pin||bundle.scientific_status_authority!==false)throw new Error('Query source mismatch'); if(!hex40.test(q.math_pin)||!hex40.test(q.commit))throw new Error('Query pin unavailable'); - el('check-tip').disabled=false;el('check-tip').addEventListener('click',async()=>{el('check-tip').disabled=true;el('tip-result').textContent='Reading current public Math ref…'; - try{const r=await fetch('https://api.github.com/repos/d6g8k5htny-coder/Math-/git/ref/heads/main',{credentials:'omit',redirect:'error'});if(!r.ok)throw new Error(`GitHub API ${r.status}`);const ref=await r.json(),tip=ref.object?.sha;if(!hex40.test(tip)||ref.ref!=='refs/heads/main')throw new Error('Unexpected ref response');const same=tip===q.math_pin;el('tip-result').className=same?'good':'error';el('tip-result').textContent=`${same?'Commit pin current':'Commit pin differs'} at ${new Date().toISOString()}: Math ${tip}. Gate-byte equality was not tested by this browser check.`; - }catch(e){error('tip-result',e);}finally{el('check-tip').disabled=false;}}); + identity(el('query-identity'),q);el('query-identity').append(node('p','Recorded Math commit: '+q.math_pin)); + el('query-note').textContent='To compare the seven pinned gate-file identities with current public Math bytes, run this command locally from the pinned query checkout: '; + el('query-note').append(node('code','python -B -S verify_portable_stubs.py --check-math-tip'),node('span','. The command checks file bytes, not commit equality. This page reads only the pinned bundle and performs no live tip check.')); } try { const response=await fetch('config.json',{credentials:'omit'});if(!response.ok)throw new Error('Shop config unavailable');const config=await response.json(); diff --git a/docs/site/geometry.mjs b/docs/site/geometry.mjs new file mode 100644 index 000000000..c25a76f8f --- /dev/null +++ b/docs/site/geometry.mjs @@ -0,0 +1,398 @@ +// Illustrations only. Source bytes are verified by the detail-page caller before +// mounting; this module additionally binds each visual to its declared source. +export const THREE_CDN = Object.freeze({ + version: '160', + url: 'https://cdn.jsdelivr.net/npm/three@0.160.0/build/three.js', + integrity: 'sha384-ADduDXZ84mYNs9BwgDbfsq8503KaK0OzR6s3AFB6fclZoaXtLa7zmoXdmbFSEptM' +}); + +const SOURCE_PATHS = Object.freeze({ + ec014: 'imports/hardening_ebedb780/EC-014/proof.md.export.txt', + remote: 'frontiers/remote_window_20260924/PROOF.md', + annulus: 'frontiers/rn_annulus_bridge_20260925/PROOF.md', + p15: 'frontiers/full_price_20260924/PROOF.md' +}); +const SVG_NS = 'http://www.w3.org/2000/svg'; +const ink = '#162f36', teal = '#07596c', amber = '#986323', pale = '#e0ece8'; + +function positive(value, name) { + if (!Number.isFinite(value) || value <= 0) throw new Error(`${name} must be finite and positive`); + return value; +} + +export function ec014Model(r = 1) { + positive(r, 'r'); + return { + pins: [{ name: 'M', t: -r / 2, s: 0 }, { name: 'S', t: r / 2, s: 0 }], + rawRows: ['f(M)', 'f(S)', 'f_t(M)', 'f_s(M)', 'f_t(S)', 'f_s(S)'], + correctedRows: ['V+', 'V-_corr', 'G_t+', 'G_t-', 'G_s+', 'G_s-'] + }; +} + +// These membership helpers describe scope; they do not estimate the field, +// evaluate Kac–Rice, supply theorem constants, or replay an analytic proof. +export function remoteModel({ L, rho }) { + positive(L, 'L'); positive(rho, 'rho'); + if (rho >= L / 4) throw new Error('The fixed exclusion radius must satisfy 0 < rho < L/4'); + return { + L, rho, heightScope: 'between-pin heights only', + contains({ distance, height, b, k, r }) { + positive(k, 'k'); positive(r, 'r'); + if (![distance, height, b].every(Number.isFinite) || distance < 0) return false; + return distance >= rho && height > b - k * r ** 3 && height < b; + } + }; +} + +export function annulusModel({ A, B, dimension = 2 }) { + if (dimension !== 2 || !Number.isFinite(A) || !Number.isFinite(B) || A <= 1 || B <= A) + throw new Error('The fixed annulus requires dimension 2 and finite 1 < A < B'); + return { + A, B, dimension, heightScope: 'all heights', + containsPhysical({ x, y, r }) { + positive(r, 'r'); + if (![x, y].every(Number.isFinite)) return false; + const scaledRadius = Math.hypot(x / r, y / r); + return scaledRadius >= A && scaledRadius <= B; + } + }; +} + +export function p15Model(selection = [0, 1, 2]) { + if (!Array.isArray(selection) || selection.some(v => !Number.isInteger(v) || v < 0 || v > 2) || new Set(selection).size !== selection.length) + throw new Error('Select a subset of the three original coordinates'); + const selected = [...selection].sort(); + const decomposable = selected.length <= 2; + return { + selected, a: 1, d: 2, n: 3, K: 2, macroEdges: [], decomposable, + parts: decomposable ? [selected.slice(0, 1), selected.slice(1, 2)] : null + }; +} + +function element(tag, text, attributes = {}) { + const node = document.createElement(tag); + if (text !== undefined) node.textContent = text; + for (const [key, value] of Object.entries(attributes)) node.setAttribute(key, value); + return node; +} +function shape(tag, attributes = {}, text) { + const node = document.createElementNS(SVG_NS, tag); + for (const [key, value] of Object.entries(attributes)) node.setAttribute(key, value); + if (text !== undefined) node.textContent = text; + return node; +} +function label(svg, x, y, text, attrs = {}) { + svg.append(shape('text', { x, y, fill: ink, 'font-size': 17, 'font-family': 'system-ui, sans-serif', ...attrs }, text)); +} +function line(svg, x1, y1, x2, y2, attrs = {}) { + svg.append(shape('line', { x1, y1, x2, y2, stroke: ink, 'stroke-width': 2, ...attrs })); +} +function visual(title, description, viewBox = '0 0 720 360') { + const figure = element('figure', undefined, { class: 'museum-visual illustration' }); + const svg = shape('svg', { viewBox, role: 'img', 'aria-label': `${title}. ${description}` }); + svg.append(shape('title', {}, title), shape('desc', {}, description)); + figure.append(svg, element('figcaption', description)); + return { figure, svg }; +} +function boundary(host, text) { host.append(element('p', text, { class: 'boundary' })); } + +function ec014Plan() { + const result = visual('EC014 two-pin coordinate plane', 'Illustration: pin separation represents r > 0; t is longitudinal and s is transverse. No field values or surface are invented.'); + const { svg } = result; + svg.append(shape('rect', { x: 24, y: 24, width: 672, height: 296, rx: 12, fill: '#eef3ef', stroke: '#c6d4cd' })); + line(svg, 65, 176, 662, 176, { stroke: '#829b94' }); + line(svg, 360, 50, 360, 300, { stroke: '#829b94' }); + label(svg, 668, 181, 't'); label(svg, 370, 55, 's'); + for (const [name, x, formula, color] of [['M', 225, '(−r/2, 0)', teal], ['S', 495, '(r/2, 0)', amber]]) { + svg.append(shape('circle', { cx: x, cy: 176, r: 10, fill: color })); + label(svg, x, 140, name, { 'text-anchor': 'middle', 'font-size': 23, 'font-weight': 700 }); + label(svg, x, 211, formula, { 'text-anchor': 'middle' }); + } + line(svg, 225, 255, 495, 255); + line(svg, 225, 248, 225, 262); line(svg, 495, 248, 495, 262); + label(svg, 360, 280, 'r > 0', { 'text-anchor': 'middle' }); + return result.figure; +} + +function addRows(host) { + const model = ec014Model(); + const table = element('table', undefined, { 'aria-label': 'Declared ordered six-pin data and corrected frame' }); + const head = element('thead'); const row = element('tr'); + row.append(element('th', 'Order'), element('th', 'Raw vector X_r'), element('th', 'Corrected vector Y_r')); + head.append(row); table.append(head); + const body = element('tbody'); + model.rawRows.forEach((raw, i) => { + const entry = element('tr'); + entry.append(element('td', String(i + 1)), element('td', raw), element('td', model.correctedRows[i])); + body.append(entry); + }); + table.append(body); host.append(table); + host.append(element('p', 'Source identity: det T_r = −r⁻⁵ in these exact row and column orders. The diagram illustrates the six data labels; it does not replay the Jacobian proof or compute a full contact coefficient.', { class: 'muted' })); +} + +function drawRemote(host) { + const { figure, svg } = visual('Fixed remote region and between-pin height window', 'Schematic on the torus: the fixed exterior Dρ is paired only with the shrinking open height window. Diagram distances and heights are not numerical estimates.'); + svg.append(shape('path', { d: 'M24 45H434V315H24Z M229 85A95 95 0 1 0 229 275A95 95 0 1 0 229 85Z', 'fill-rule': 'evenodd', fill: pale })); + svg.append(shape('rect', { x: 24, y: 45, width: 410, height: 270, fill: 'none', stroke: '#b1c7bd', 'stroke-width': 2 })); + svg.append(shape('circle', { cx: 229, cy: 180, r: 95, fill: 'none', stroke: teal, 'stroke-width': 2 })); + label(svg, 42, 75, 'Dρ: dist_X(x, 0) ≥ ρ', { 'font-size': 18, 'font-weight': 700 }); + label(svg, 229, 229, 'excluded interior', { 'text-anchor': 'middle', fill: '#586d6e', 'font-size': 15 }); + line(svg, 229, 180, 308, 129); label(svg, 282, 141, 'ρ fixed', { 'font-size': 15 }); + for (const [x, name, color] of [[203, 'M', teal], [255, 'S', amber]]) { + svg.append(shape('circle', { cx: x, cy: 180, r: 6, fill: color })); label(svg, x, 164, name, { 'text-anchor': 'middle' }); + } + label(svg, 229, 341, '0 < ρ < L/4; ρ does not shrink with r', { 'text-anchor': 'middle', 'font-size': 15 }); + svg.append(shape('rect', { x: 495, y: 126, width: 184, height: 94, fill: pale })); + line(svg, 480, 58, 480, 300, { stroke: '#829b94' }); + line(svg, 495, 126, 679, 126, { 'stroke-dasharray': '5 5', stroke: teal }); + line(svg, 495, 220, 679, 220, { 'stroke-dasharray': '5 5', stroke: teal }); + label(svg, 590, 82, 'HEIGHT', { 'text-anchor': 'middle', 'font-size': 15 }); + label(svg, 590, 111, 'b', { 'text-anchor': 'middle' }); + label(svg, 590, 252, 'b − kr³', { 'text-anchor': 'middle' }); + label(svg, 590, 170, 'open window', { 'text-anchor': 'middle', 'font-size': 16 }); + label(svg, 590, 196, 'length kr³', { 'text-anchor': 'middle', 'font-size': 16 }); + host.append(figure); + boundary(host, 'FIXED REMOTE SCOPE — between-pin heights only: b − kr³ < f(x) < b, E ⊆ Dρ and fixed 0 < ρ < L/4. No fixed-remote all-height estimate is shown.'); +} + +function drawAnnulus(host) { + const { figure, svg } = visual('Fixed scaled annulus and open omitted regions', 'Dimension 2; physical points belong to rE for E ⊆ K_AB and fixed 1 < A < B < ∞. The shaded annulus permits all heights. Dashed regions remain OPEN; radii are symbolic.', '0 0 720 400'); + svg.append(shape('path', { d: 'M260 62A140 140 0 1 0 260 342A140 140 0 1 0 260 62Z M260 114A88 88 0 1 0 260 290A88 88 0 1 0 260 114Z', 'fill-rule': 'evenodd', fill: pale })); + for (const radius of [88, 140]) svg.append(shape('circle', { cx: 260, cy: 202, r: radius, fill: 'none', stroke: teal, 'stroke-width': 2 })); + svg.append(shape('circle', { cx: 260, cy: 202, r: 177, fill: 'none', stroke: amber, 'stroke-width': 2, 'stroke-dasharray': '7 6' })); + line(svg, 260, 202, 323, 141, { stroke: '#68857a' }); label(svg, 289, 181, 'Ar', { 'font-size': 16 }); + line(svg, 260, 202, 369, 289, { stroke: '#68857a' }); label(svg, 334, 250, 'Br', { 'font-size': 16 }); + for (const [x, name, color] of [[231, 'M', teal], [289, 'S', amber]]) { + svg.append(shape('circle', { cx: x, cy: 202, r: 20, fill: 'none', stroke: amber, 'stroke-width': 2, 'stroke-dasharray': '5 4' })); + svg.append(shape('circle', { cx: x, cy: 202, r: 5, fill: color })); + label(svg, x, 234, name, { 'text-anchor': 'middle', 'font-size': 15 }); + } + label(svg, 260, 104, 'rE: all heights', { 'text-anchor': 'middle', 'font-size': 18, 'font-weight': 700 }); + label(svg, 490, 65, 'OPEN REGIONS', { fill: amber, 'font-weight': 700 }); + label(svg, 490, 99, 'Pin neighborhoods', { 'font-size': 16 }); + label(svg, 490, 129, 'Intermediate scales', { 'font-size': 16 }); + label(svg, 490, 152, 'r ≪ distance ≪ ρ', { 'font-size': 15 }); + svg.append(shape('rect', { x: 480, y: 177, width: 220, height: 147, rx: 8, fill: 'none', stroke: amber, 'stroke-width': 2, 'stroke-dasharray': '7 6' })); + for (const x of [574, 604]) svg.append(shape('circle', { cx: x, cy: 219, r: 24, fill: 'none', stroke: amber, 'stroke-width': 2, 'stroke-dasharray': '4 4' })); + label(svg, 590, 269, 'Witness–witness', { 'text-anchor': 'middle', 'font-size': 16 }); + label(svg, 590, 293, 'shrinking separation', { 'text-anchor': 'middle', 'font-size': 15 }); + host.append(figure); + boundary(host, 'FIXED ANNULUS CANDIDATE — d = 2, fixed 1 < A < B < ∞, physical rE, all heights. Dashed pin neighborhoods, intermediate scales and witness–witness collisions remain OPEN. This is not a solved full plane or all-scales RN statement.'); +} + +function drawP15(host) { + const selected = new Set([0, 1, 2]); + let paletteReversed = false; + const { figure, svg } = visual('Three-coordinate realized capacity family', 'One original block with a = 1, d = 2, n = 3, K = 2 and no macro edges. Lines show pair capacity conflicts; they are not macro-clutter edges.'); + const controls = element('div', undefined, { class: 'geometry-controls', role: 'group', 'aria-label': 'Choose a subset of the three coordinates' }); + const status = element('p', undefined, { role: 'status', 'aria-live': 'polite' }); + const palette = element('p'); + const vertices = []; + function redraw() { + const model = p15Model([...selected]); + svg.replaceChildren(shape('title', {}, 'Capacity-one conflicts on three coordinates')); + const positions = [[160, 92], [65, 268], [255, 268]]; + for (const [a, b] of [[0, 1], [0, 2], [1, 2]]) line(svg, ...positions[a], ...positions[b], { stroke: selected.has(a) && selected.has(b) ? '#879c95' : '#cdd7d2', 'stroke-width': 3, 'stroke-dasharray': selected.has(a) && selected.has(b) ? 'none' : '5 5' }); + const colors = paletteReversed ? [amber, teal] : [teal, amber]; + positions.forEach(([x, y], i) => { + const slot = model.parts?.findIndex(part => part.includes(i)) ?? -1; + const fill = !selected.has(i) ? '#f6f5f0' : slot >= 0 ? colors[slot] : '#58746d'; + svg.append(shape('circle', { cx: x, cy: y, r: 29, fill, stroke: ink, 'stroke-width': 2 })); + label(svg, x, y + 7, `x${i + 1}`, { 'text-anchor': 'middle', fill: selected.has(i) ? '#ffffff' : ink, 'font-size': 21, 'font-weight': 700 }); + vertices[i]?.setAttribute('aria-pressed', String(selected.has(i))); + }); + label(svg, 355, 92, 'Two palette classes', { 'font-size': 21, 'font-weight': 700 }); + label(svg, 355, 126, 'Each can contain at most one', { 'font-size': 17 }); + label(svg, 355, 154, 'selected coordinate.', { 'font-size': 17 }); + for (let i = 0; i < 2; i++) { + const y = 195 + i * 58; + svg.append(shape('rect', { x: 355, y, width: 305, height: 43, rx: 6, fill: 'none', stroke: colors[i], 'stroke-width': 3 })); + const names = model.parts ? model.parts[i].map(v => `x${v + 1}`).join(', ') || 'empty' : 'no valid partition'; + label(svg, 371, y + 28, `Palette ${i + 1}: ${names}`, { 'font-size': 16, fill: colors[i] }); + } + status.textContent = model.decomposable + ? `Selected ${model.selected.length} of 3: this proper subset is two-decomposable.` + : 'Selected 3 of 3: the full triple is not two-decomposable.'; + palette.textContent = 'K = 2; each palette class is a member of D and has size at most a = 1.'; + } + for (let i = 0; i < 3; i++) { + const button = element('button', `Toggle x${i + 1}`, { type: 'button', 'data-vertex': i, 'aria-pressed': 'true' }); + button.addEventListener('click', () => { selected.has(i) ? selected.delete(i) : selected.add(i); redraw(); }); + vertices.push(button); controls.append(button); + } + const swap = element('button', 'Swap palette colors', { type: 'button' }); + swap.addEventListener('click', () => { paletteReversed = !paletteReversed; redraw(); }); + controls.append(swap); + host.append(figure, controls, status, palette); + boundary(host, 'REALIZED FAMILY ONLY — full-price proof §5: one block, a = 1, d = 2, n = 3, no macro edges, K = 2. This finite illustration does not assert an unrestricted downset or prize result.'); + redraw(); +} + +let threePromise; +function loadThree() { + if (threePromise) return threePromise; + threePromise = new Promise((resolve, reject) => { + const script = document.createElement('script'); + script.src = THREE_CDN.url; + script.integrity = THREE_CDN.integrity; + script.crossOrigin = 'anonymous'; + script.referrerPolicy = 'no-referrer'; + script.async = true; + const timeout = setTimeout(() => reject(new Error('Three.js CDN timed out')), 15000); + script.onload = () => { + clearTimeout(timeout); + if (globalThis.THREE?.REVISION !== THREE_CDN.version) reject(new Error('Unexpected Three.js revision')); + else resolve(globalThis.THREE); + }; + script.onerror = () => { clearTimeout(timeout); reject(new Error('Three.js CDN unavailable or integrity failed')); }; + document.head.append(script); + }); + return threePromise; +} + +let activeSceneCleanup = null; +let sceneRequest = 0; +async function mountEC014(host) { + const request = ++sceneRequest; + activeSceneCleanup?.(); + const fallback = ec014Plan(); + const status = element('p', '2D coordinate diagram. Checking optional 3D view…', { role: 'status', 'aria-live': 'polite', class: 'muted' }); + const stage = element('div', undefined, { class: 'geometry-3d-stage' }); + stage.hidden = true; + stage.style.position = 'relative'; + stage.style.width = '100%'; + const controls = element('div', undefined, { class: 'geometry-controls' }); + host.append(stage, fallback, status, controls); + addRows(host); + boundary(host, 'ILLUSTRATION — camera orbit changes the view only. The pins and six data labels retain their source definitions. No invented field surface, Jacobian proof replay or full contact coefficient is shown.'); + if (!globalThis.WebGLRenderingContext && !globalThis.WebGL2RenderingContext) { + status.textContent = '2D fallback: WebGL is unavailable. All pin coordinates and six data labels remain visible.'; + return { destroy() {} }; + } + let renderer, observer, disposed = false; + const disposables = []; + let cleanup = () => { + if (disposed) return; + disposed = true; + observer?.disconnect(); + for (const resource of disposables) resource.dispose(); + renderer?.dispose(); + renderer?.forceContextLoss(); + if (activeSceneCleanup === cleanup) activeSceneCleanup = null; + }; + try { + const THREE = await loadThree(); + if (request !== sceneRequest) return { destroy() {} }; + const canvas = element('canvas', undefined, { tabindex: '0', role: 'img', 'aria-label': 'EC014 plane and pins. Drag to orbit, or use arrow keys. Camera movement changes the view only.' }); + canvas.style.width = '100%'; canvas.style.height = '350px'; canvas.style.display = 'block'; canvas.style.touchAction = 'none'; + // One renderer owns one canvas/context. No capability-probe canvas is made. + renderer = new THREE.WebGLRenderer({ canvas, antialias: true, alpha: false }); + renderer.setPixelRatio(Math.min(globalThis.devicePixelRatio || 1, 2)); + renderer.setClearColor('#eef3ef'); + const scene = new THREE.Scene(); + const camera = new THREE.PerspectiveCamera(35, 1, 0.1, 40); + const own = resource => { disposables.push(resource); return resource; }; + const plane = new THREE.Mesh(own(new THREE.PlaneGeometry(3, 1.7)), own(new THREE.MeshBasicMaterial({ color: '#dce7df', side: THREE.DoubleSide }))); + plane.rotation.x = -Math.PI / 2; + plane.position.y = -0.02; + scene.add(plane); + function addLine(points, color) { + const geometry = own(new THREE.BufferGeometry().setFromPoints(points.map(p => new THREE.Vector3(...p)))); + const material = own(new THREE.LineBasicMaterial({ color })); + scene.add(new THREE.Line(geometry, material)); + } + addLine([[-1.4, 0, 0], [1.4, 0, 0]], '#829b94'); + addLine([[0, 0, -0.76], [0, 0, 0.76]], '#829b94'); + addLine([[-0.5, 0.012, 0], [0.5, 0.012, 0]], ink); + const tags = []; + for (const [name, x, color] of [['M = (−r/2, 0)', -0.5, teal], ['S = (r/2, 0)', 0.5, amber]]) { + const pin = new THREE.Mesh(own(new THREE.SphereGeometry(0.065, 16, 12)), own(new THREE.MeshBasicMaterial({ color }))); + pin.position.set(x, 0, 0); scene.add(pin); + const tag = element('span', name); + Object.assign(tag.style, { position: 'absolute', transform: 'translate(-50%, -145%)', fontSize: '13px', fontWeight: '700', color, pointerEvents: 'none', whiteSpace: 'nowrap' }); + tags.push({ node: tag, position: new THREE.Vector3(x, 0, 0) }); + } + for (const [name, position] of [['t', [1.35, 0, 0]], ['s', [0, 0, 0.7]]]) { + const tag = element('span', name); + Object.assign(tag.style, { position: 'absolute', transform: 'translate(-50%, -50%)', pointerEvents: 'none', fontWeight: '700' }); + tags.push({ node: tag, position: new THREE.Vector3(...position) }); + } + stage.append(canvas, ...tags.map(t => t.node)); + let yaw = -0.12, elevation = 0.82, width = 720; + function render() { + if (disposed) return; + camera.position.set(4 * Math.cos(elevation) * Math.sin(yaw), 4 * Math.sin(elevation), 4 * Math.cos(elevation) * Math.cos(yaw)); + camera.lookAt(0, 0, 0); camera.updateMatrixWorld(); + renderer.render(scene, camera); + for (const tag of tags) { + const projected = tag.position.clone().project(camera); + tag.node.style.left = `${(projected.x + 1) * width / 2}px`; + tag.node.style.top = `${(1 - projected.y) * 350 / 2}px`; + } + } + function resize() { + width = Math.max(260, stage.clientWidth || host.clientWidth || 720); + renderer.setSize(width, 350, false); + camera.aspect = width / 350; camera.updateProjectionMatrix(); render(); + } + let drag = null; + canvas.addEventListener('pointerdown', event => { + drag = { x: event.clientX, y: event.clientY, id: event.pointerId }; + canvas.setPointerCapture(event.pointerId); + }); + canvas.addEventListener('pointermove', event => { + if (!drag || drag.id !== event.pointerId) return; + yaw -= (event.clientX - drag.x) * 0.008; + elevation = Math.max(0.2, Math.min(1.45, elevation + (event.clientY - drag.y) * 0.008)); + drag.x = event.clientX; drag.y = event.clientY; render(); + }); + for (const type of ['pointerup', 'pointercancel', 'lostpointercapture']) canvas.addEventListener(type, () => { drag = null; }); + canvas.addEventListener('keydown', event => { + if (!['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(event.key)) return; + event.preventDefault(); + if (event.key === 'ArrowLeft') yaw -= 0.12; + if (event.key === 'ArrowRight') yaw += 0.12; + if (event.key === 'ArrowUp') elevation = Math.min(1.45, elevation + 0.1); + if (event.key === 'ArrowDown') elevation = Math.max(0.2, elevation - 0.1); + render(); + }); + canvas.addEventListener('webglcontextlost', () => { + stage.hidden = true; fallback.hidden = false; controls.hidden = true; + status.textContent = '2D fallback: the graphics context became unavailable. The source-defined geometry remains visible.'; + cleanup(); + }); + const reset = element('button', 'Reset camera', { type: 'button' }); + reset.addEventListener('click', () => { yaw = -0.12; elevation = 0.82; render(); }); + const toggle = element('button', 'Show 2D diagram', { type: 'button' }); + toggle.addEventListener('click', () => { + stage.hidden = !stage.hidden; fallback.hidden = !stage.hidden; + toggle.textContent = stage.hidden ? 'Show 3D view' : 'Show 2D diagram'; + if (!stage.hidden) resize(); + }); + controls.append(reset, toggle); + stage.hidden = false; fallback.hidden = true; + status.textContent = '3D coordinate plane: drag with mouse or touch, or focus the canvas and use arrow keys. Orbit is a camera control only.'; + activeSceneCleanup = cleanup; + if (globalThis.ResizeObserver) { observer = new ResizeObserver(resize); observer.observe(stage); } + resize(); + return { destroy: cleanup }; + } catch { + cleanup(); stage.hidden = true; fallback.hidden = false; + status.textContent = '2D fallback: the optional 3D library or WebGL could not load. All pin coordinates and six data labels remain visible.'; + return { destroy() {} }; + } +} + +export async function mountGeometry(host, kind, source, _quote) { + if (!Object.hasOwn(SOURCE_PATHS, kind)) throw new Error('Unsupported geometry exhibit'); + if (!source || source.repository !== 'd6g8k5htny-coder/Math-' || source.path !== SOURCE_PATHS[kind] || + !/^[0-9a-f]{40}$/.test(source.commit) || !/^[0-9a-f]{64}$/.test(source.sha256) || + !Number.isSafeInteger(source.bytes) || source.bytes <= 0) throw new Error('Geometry source identity does not match the exhibit'); + if (!host || typeof host.append !== 'function') throw new Error('A geometry host is required'); + host.setAttribute('data-illustration', kind); + if (kind === 'ec014') return mountEC014(host); + if (kind === 'remote') drawRemote(host); + if (kind === 'annulus') drawAnnulus(host); + if (kind === 'p15') drawP15(host); + return { destroy() {} }; +} diff --git a/docs/site/index.html b/docs/site/index.html index c522fe43f..6dbe9bc70 100644 --- a/docs/site/index.html +++ b/docs/site/index.html @@ -2,23 +2,25 @@
- +READ · REPLAY · REVIEW
Explore the mathematics, inspect its limits, and contribute a reproducible result. Every view points back to public source bytes.
A plot is not a theorem. Publication, a merge, and green checks do not change mathematical acceptance.
READ · REPLAY · REVIEW
This site is for verifying Universal Law mathematics. Pictures explain pinned sources. Submissions come back as packets. Status changes only when the maintainers land them.
A plot is not a theorem. Publication, a merge, and green checks do not change mathematical acceptance.
01 / THE BOARD
Loading the committed status snapshot…
-02 / SCOPED EXPLORER
Dimensions 2 and 3, SIDE24, normalized variance-one covariance. This view displays a committed arithmetic enclosure. It supplies no finite-radius error band or lifetime cutoff.
+Verifying pinned source bytes…
The enclosure retains its original scientific_acceptance: false flag. The board separately quotes the later scoped review. Neither overrides the parent theorem’s open dependencies.
This engineering-only coefficient exhibit retains the artifact’s original scientific_acceptance: false. Read the later scoped coefficient review and its limits separately. The parent theorem’s open dependencies remain open.
03 / THE EXISTING CATALOG
The existing 2,138-file inventory includes proofs, partial arguments, reviews, and historical reading copies. It counts files, not accepted theorems. New imports and proposals have separate public links.
+Verifying the original inventory and its shards…
| Repository / full text | Commit | SHA-256 |
|---|
04 / JOIN THE WORK
Replay a pinned calculation, chart public data, document an import, or leave a source-bound review comment. Comment /claim; wait for assignment and keep one active claim.
Fork main. Add an incoming/<id>/ package with your result, outputs, and source/file identities. Do not edit scientific status rows.
A designated reviewer checks the sources, scope, and limitations. Intake checks validate packaging; accepted intake is not an accepted theorem.
Public review queue ↗OPEN THE SOURCE · READ THE SCOPE · REPLAY THE EVIDENCE
This site is for verifying Universal Law mathematics. Pictures explain pinned sources. Submissions come back as packets. Status changes only when the maintainers land them.
A scoped result and an open parent can coexist. A hash verifies bytes. It does not verify a theorem.
Verifying the pinned source index and status snapshot…
01 / PICTURES WITH SOURCES
Each picture is an illustration of a declared source. Open one to see its identity, scope and controls.
+ + +02 / SOURCE-BOUND CLAIM CARDS
Eleven reviewed entries are quoted exactly from the pinned Math proof index. Three AMEND rows are quoted separately from STATUS. These source projections create no acceptance register.
+03 / REPLAY BOUNDARY
Verifying the pinned D2 source contract…
04 / PACKETS RETURN TO REVIEW
These are pinned landed submissions. A packet's presence, output or passing check does not promote a claim. Review remains a separate process.