Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
6ed4b82
Prepare independent EPAC packaging and exact artifact verification
erinepshovel-code Sep 12, 2026
feef35a
Bind graduation preparation report to package implementation
erinepshovel-code Sep 12, 2026
6b39248
Preserve continued forge research in the independent EPAC package
erinepshovel-code Sep 12, 2026
9e36242
Record preserved research and current graduation evidence
erinepshovel-code Sep 12, 2026
340b8e4
Retain uv source-build metadata in installed inventories
erinepshovel-code Sep 12, 2026
259b5b9
Repair preserved research claims and exact artifact receipts
erinepshovel-code Sep 12, 2026
57b2bd3
Bind replay evidence to archived verifier and input bytes
erinepshovel-code Sep 12, 2026
7b55cba
Bind accepted UCNS evidence source and retain private package replay …
erinepshovel-code Sep 12, 2026
6443982
Report accepted UCNS pin and remaining EPAC release gates
erinepshovel-code Sep 12, 2026
e81120d
Close structural evidence and transitive runtime provenance gaps
erinepshovel-code Sep 12, 2026
f311eb3
Report repaired evidence gates and expanded artifact checks
erinepshovel-code Sep 12, 2026
208d067
Preserve unresolved semantics and propagate failed audit prerequisites
erinepshovel-code Sep 12, 2026
6f71595
Report aggregate evidence repairs and remaining graduation gates
erinepshovel-code Sep 12, 2026
b158996
Reject missing evidence and preserve direct receipt spiral data
erinepshovel-code Sep 12, 2026
ff88d3d
Record complete-population repair evidence
erinepshovel-code Sep 12, 2026
c495f31
Separate closure status and complete the operation inventory
erinepshovel-code Sep 12, 2026
82ab9e5
Record independent closure and complete-inventory evidence
erinepshovel-code Sep 12, 2026
688e1b8
Make transition predictions independent and preserve constituent evid…
erinepshovel-code Sep 12, 2026
fbee027
Record source-only prediction repair evidence
erinepshovel-code Sep 12, 2026
4d03a5d
Expect rejection for undeclared attachment-count inputs
erinepshovel-code Sep 12, 2026
0fde031
Record molecular validation of fail-closed input handling
erinepshovel-code Sep 12, 2026
75e5afd
Inventory public re-exports and preserve element compatibility status
erinepshovel-code Sep 12, 2026
73fa812
Record public inventory and compatibility review evidence
erinepshovel-code Sep 12, 2026
5845bfd
Keep recurrence, closure, and cached comparison evidence bounded
erinepshovel-code Sep 12, 2026
7d5ff41
Record recurrence and comparison evidence review repairs
erinepshovel-code Sep 12, 2026
e90d1b5
Isolate cached construction and audit evidence from callers
erinepshovel-code Sep 12, 2026
50b6e8b
Record independent cached-evidence verification
erinepshovel-code Sep 12, 2026
f20a478
Bind replay inputs to Git and keep quantified evidence in scope
erinepshovel-code Sep 12, 2026
ce03cde
Record replay input binding and evidence scope repairs
erinepshovel-code Sep 12, 2026
fabbbb6
Align current receipts and constrain replay installer metadata
erinepshovel-code Sep 12, 2026
00afff0
Record receipt synchronization and installer metadata checks
erinepshovel-code Sep 12, 2026
d7b8f81
Derive complete release contracts and preserve unmapped operation unc…
erinepshovel-code Sep 12, 2026
caadc10
Record complete release contract and bounded operation audit evidence
erinepshovel-code Sep 12, 2026
5e29ccb
Preserve unmeasured operation effects and verify complete release che…
erinepshovel-code Sep 12, 2026
625e537
Record scoped audit and release-gate repair evidence
erinepshovel-code Sep 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 59 additions & 52 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,64 +11,34 @@ permissions:
jobs:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ['3.10', '3.11', '3.12']
steps:
- uses: actions/checkout@v7
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
persist-credentials: false
- uses: actions/setup-python@v7
with:
python-version: '3.12'

- name: Resolve pinned UCNS
env:
UCNS_SHA: 828c0b8bbcfc267efb5701da714191c1f73a81ff
python-version: ${{ matrix.python-version }}
- name: Install exact verification environment
run: |
set -euo pipefail
git clone --quiet https://github.com/The-Interdependency/ucns.git _deps/ucns
git -C _deps/ucns checkout --quiet "$UCNS_SHA"
test "$(git -C _deps/ucns rev-parse HEAD)" = "$UCNS_SHA"

- name: Repository regression suite
run: |
set -euo pipefail
PYTHONPATH=".:_deps/ucns/src" python -m unittest discover -s tests -q

- name: Subatomic executable witnesses
run: |
set -euo pipefail
PYTHONPATH=".:subatomic:_deps/ucns/src" python - <<'PY'
from pathlib import Path
import importlib.util
import inspect

total = 0
for path in sorted(Path("subatomic").glob("test_*.py")):
spec = importlib.util.spec_from_file_location(f"epac_subatomic_{path.stem}", path)
if spec is None or spec.loader is None:
raise RuntimeError(f"cannot load {path}")
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
for name, fn in sorted(vars(module).items()):
if not name.startswith("test_") or not callable(fn):
continue
if inspect.signature(fn).parameters:
raise RuntimeError(f"unsupported fixture-bearing witness: {path}:{name}")
fn()
total += 1
if total == 0:
raise RuntimeError("no subatomic witnesses executed")
print(f"{total} subatomic witnesses passed")
PY

- name: Preserve molecular falsification standing
python -m pip install uv==0.11.18
uv sync --locked --python python --extra test --extra build
- name: Build package candidates
env:
EXPECTED_SOURCE_COMMIT: ${{ github.event.pull_request.head.sha || github.sha }}
run: |
set -euo pipefail
PYTHONPATH=".:_deps/ucns/src" python - <<'PY'
from epac_comparison import compare_after_construction
standings = compare_after_construction()["standings"]
assert standings
assert set(standings.values()) == {"FALSIFIED"}, standings
print(standings)
PY

test -z "$(git status --porcelain --untracked-files=all)"
test "$(git rev-parse HEAD)" = "$EXPECTED_SOURCE_COMMIT"
mkdir /tmp/epac-build-source
git archive "$EXPECTED_SOURCE_COMMIT" | tar -x -C /tmp/epac-build-source
.venv/bin/python -m build --outdir "$PWD/dist" /tmp/epac-build-source
.venv/bin/python -m twine check dist/*
- name: Replay installed wheel and source artifact
run: bash tools/replay_distributions.sh . dist /tmp/epac-replay python
- name: Verify work-graph identity
run: |
python - <<'PY'
Expand All @@ -84,3 +54,40 @@ jobs:
assert actual == doc["work_graph_sha256"], (actual, doc["work_graph_sha256"])
print(actual)
PY
- name: Retain private artifact replay evidence
env:
EXPECTED_SOURCE_COMMIT: ${{ github.event.pull_request.head.sha || github.sha }}
run: |
python - <<'PY'
import json
import os
from pathlib import Path
import shutil
import subprocess
import sys

def git(*args):
return subprocess.check_output(['git', *args], text=True).strip()
if git('status', '--porcelain', '--untracked-files=all') or git('rev-parse', 'HEAD') != os.environ['EXPECTED_SOURCE_COMMIT']:
raise SystemExit('source identity changed during qualification')
output = Path('/tmp/epac-ci-evidence')
output.mkdir()
shutil.copytree('dist', output / 'artifacts')
replay = output / 'replay'
replay.mkdir()
for path in Path('/tmp/epac-replay').iterdir():
if path.is_file():
shutil.copy2(path, replay / path.name)
(output / 'source.json').write_text(json.dumps({
'source_commit': git('rev-parse', 'HEAD'),
'source_tree': git('rev-parse', 'HEAD^{tree}'),
'python': sys.version,
'license_qualification': 'recorded; release qualification separate' if Path('LICENSE').is_file() else 'pending owner choice',
'publication_or_authority_transfer': False
}, indent=2) + '\n')
PY
- uses: actions/upload-artifact@v7
with:
name: epac-private-replay-${{ matrix.python-version }}
path: /tmp/epac-ci-evidence
if-no-files-found: error
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@ Before work:
7. include runnable usage guidance in code and research artifacts;
8. unknown authority, mapping, or evidence remains `hmmm`.

Current graduation boundary: this repository is being physically extracted and independently verified. Stable release/reconsumption, clean packaging, and license/distribution gates remain separate evidence requirements.
Current graduation boundary: this repository is extracted and its package is being qualified. Clean packaging, owner-selected licensing, exact candidate stack verification, stable release, and reconsumption remain separate evidence requirements.
12 changes: 12 additions & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
include AGENTS.md LICENSE LICENSE_STATUS.md uv.lock
include .gitignore
recursive-include .github *
recursive-include tools *.py *.sh
include requirements-build.txt
recursive-include tests *.py
recursive-include docs *.md *.json
recursive-include data *.json
recursive-include subatomic *.md *.json
recursive-include .agents/skills *
recursive-include viz *.py *.md *.svg
include requirements-replay.txt
84 changes: 77 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,18 +35,63 @@ The extraction preserves the stack research artifacts and their epistemic status

## Verification

The current extraction gate executes:

- 60 repository regression tests;
- 30 subatomic executable witnesses;
- the preregistered molecular comparison, requiring all four current standings to remain `FALSIFIED`;
The package gate executes:

- exact Git comparisons for both artifact payloads and the complete archived
source before running any archived verifier or tests; release-manifest hashes
are checked when present, and the input binding is checked again at the end;
- all repository and subatomic tests against separate clean wheel and source installs;
- complete installed-distribution byte maps, import origins, exact UCNS source maps,
and complete source snapshots before and after each replay;
- the preregistered molecular comparison, requiring all 14 current standings (including the original four) to remain `FALSIFIED`;
- deterministic work-graph digest verification.

CI resolves the pinned UCNS source before running those gates. Passing those checks establishes reproducibility of the extracted research tree; it does **not** satisfy `exact_candidate_forge_verification`, stable release, or reconsumption by itself.
CI resolves UCNS through the source URL and SHA-256 in `pyproject.toml` and `uv.lock`. Python 3.10, 3.11, and 3.12 are the declared verification matrix. Package tests establish the checked construction and replay behavior; reproducible immutable candidate qualification, exact candidate stack verification, licensing, stable release, and reconsumption remain separate gates.

## Usage guidance

Until packaging is independently qualified, run the research suite from a checkout with the pinned UCNS source available on `PYTHONPATH`; `.github/workflows/ci.yml` is the executable reference invocation.
The candidate distribution is `interdependency-epac` version `0.1.0`. Its public
modules remain `epac_atomic`, `epac_periodic`, `epac_public_gonol`,
`epac_dimensional_arity`, `epac_molecular`, and `epac_comparison`. Subatomic
candidate modules are imported through `epac_subatomic`. Names beginning with
`_` are implementation details. The only runtime project dependency is the
exact UCNS archive; METAPAT supplies recorded semantic provenance, and stack
supplies extraction provenance. Neither is a hidden runtime import.

The verification commands require Git and a clean committed checkout. Use new
output directories. The replay gate records the exact source and artifact binding
in `candidate-source.json`; a stale or incomplete sdist is rejected before its
code can run. Source distributions include every tracked repository file,
including CI definitions and the complete local operational skill snapshot.

```bash
python -m pip install uv==0.11.18
uv sync --locked --extra test --extra build
.venv/bin/python -m pytest
.venv/bin/python -m build --outdir /tmp/epac-dist
.venv/bin/python -m twine check /tmp/epac-dist/*
bash tools/replay_distributions.sh . /tmp/epac-dist /tmp/epac-replay python3.12
```

After installation, construction and replay require no checkout paths:

```python
from epac_public_gonol import construct_public_gonol, replay_public_gonol

receipt = construct_public_gonol(source_id="example:oxygen",
relation="epac.atomic.element", identity_glyph="O")
assert replay_public_gonol(receipt).receipt_digest == receipt.receipt_digest
```

GitHub release assets are the selected distribution surface. Once the owner
records the license, install `requirements-build.txt` and run
`python tools/build_release.py /tmp/epac-candidate` from a clean commit using
uv-managed CPython 3.11.15 and `requirements-build.txt`. The builder enforces that Python implementation/version plus
zlib 1.3.1 at compile time and runtime and records both identities. Test
those exact hashes in both the clean installation and stack before publishing.
Download the published assets and verify `SHA256SUMS` before reconsumption.
`LICENSE_STATUS.md` retains the current license gate; package builds alone do
not grant redistribution rights or complete graduation.

Do not treat successful execution as empirical validation. Constructors establish reproducible declared structures; comparison tests determine the standing of the claims they actually test.

Expand All @@ -58,3 +103,28 @@ Do not treat successful execution as empirical validation. Constructors establis
- clean package/install dependency contract for UCNS
- downstream forge reconsumption and authority-transition receipt
- whether standing-wave language earns a stronger domain claim after explicit external-physics comparison

## Continued forge research

The handoff also preserves the EPAC research present in stack commit
`0e8384bbb60e4c2189016a212bdd0030d04aed7d`: nine declared molecular
formulas, subatomic coverage through krypton, boundary-capacity and refinement
audits, and carried spiral visualization. These remain research constructions
and scoped internal evidence; packaging does not promote their empirical status.

- [Cross-scale closure](docs/cross_scale_compositional_closure.md)
- [Boundary capacity](docs/boundary_capacity_principle.md)
- [Descriptor non-degeneracy](docs/boundary_descriptor_nondegeneracy.md)
- [Capacity quotient](docs/boundary_capacity_quotient.md)
- [Probe completeness](docs/boundary_probe_completeness.md)
- [Minimal refinement](docs/boundary_minimal_refinement.md)
- [Spiral visualization](viz/README.md)

After installing the package, run a scoped audit through its public module:

```bash
python -c "from epac_cross_scale_closure import cross_scale_compositional_closure; print(cross_scale_compositional_closure()['statuses'])"
python -m epac_viz --help
```

Release qualification requires an owner-selected `LICENSE`, its explicit SPDX expression and `license-files = ["LICENSE"]` in `pyproject.toml`, and removal of the unresolved `LICENSE_STATUS.md` (its history remains in Git). Adding license text alongside a status that still prohibits publication does not pass the gate. The replay shell bootstraps the hash-pinned Python 3.10 TOML parser from `requirements-replay.txt`, then validates all source-derived core metadata and every optional release-manifest field before archived code runs. To call `tools/verify_replay_inputs.py` directly on Python 3.10, first install that requirements file with `uv pip install --python /path/to/python --no-deps --require-hashes -r requirements-replay.txt`.
5 changes: 5 additions & 0 deletions data/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
"""EPAC-owned bounded inputs and sealed comparison evidence.

Usage: importlib.resources.files("epac_data").joinpath(name).read_text()
Construction modules must not read sealed molecular comparison labels.
"""
9 changes: 7 additions & 2 deletions data/sealed_known_molecular_geometry.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
{
"schema": "epac.sealed-known-molecular-geometry",
"version": "v1",
"version": "v2",
"opened_only_after_construction": true,
"note": "Original v1 set (H2,H2O,NH3,CH4,CO2) remains the frozen preregistration policy baseline. v2 adds the next maximal enlarged experiment set using Z=1..36 subatomic coverage.",
"molecules": {
"H2": {"atom_count": 2, "known_shape": "linear"},
"H2O": {"atom_count": 3, "known_shape": "bent"},
"NH3": {"atom_count": 4, "known_shape": "trigonal-pyramidal"},
"CH4": {"atom_count": 5, "known_shape": "tetrahedral"},
"CO2": {"atom_count": 3, "known_shape": "linear"}
"CO2": {"atom_count": 3, "known_shape": "linear"},
"H2S": {"atom_count": 3, "known_shape": "bent"},
"BF3": {"atom_count": 4, "known_shape": "trigonal-planar"},
Comment thread
erinepshovel-code marked this conversation as resolved.
"PH3": {"atom_count": 4, "known_shape": "trigonal-pyramidal"},
"SiH4": {"atom_count": 5, "known_shape": "tetrahedral"}
}
}
48 changes: 48 additions & 0 deletions data/ucns-source-lock.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
{
"commit": "6eea1828a34ed8ec99879f8090ea5d48352d8c2d",
"installed_source_sha256": {
"ucns/__init__.py": "504875a0a41549acb755d43aad8bf14f0118112df85b982e3d54cf52c84d3a6f",
"ucns/carrier.py": "7983f49df68271b2b6b758ba74ea19a3bec332279ef667616456c5ea6b1acf7f",
"ucns/direct_mobius.py": "d8d1360c753dac7431071e007c5105a21b5396dd9e2f7e5ba4089d99e056a5bf",
"ucns/gonal_boundary_trace.py": "332358a21d5d9edac5b0b61806d4785f0c3caecf6704abb842e173c2939c35d0",
"ucns/mobius_certificates.py": "7607385c6ad6398cd7079490554dbfd7800b478212607ba8785168305fd5e72f",
"ucns/mobius_continuation.py": "34c2c0603366167f68b522a39ad0947c5957ab2eb70ed65875c567fa5a8a08e3",
"ucns/mobius_global_compatibility.py": "cd5cf73e072c405bbf4c33c18804c5822700ad813def76b063a40ebeb9e7ac3b",
"ucns/mobius_seed.py": "1d09e2fbb5e86ce191fa7f4c860ed2241728597bf789fc125869ee8850461770",
"ucns/mobius_seed_construction.py": "f492924f6d62932fb47908e389759d75d4bd5989bd4fbd4393220063f74309eb",
"ucns/mobius_vesica.py": "ac05d4043e60f272cee365852f068521c1e96f4b716cab67eb449483ed9c827d",
"ucns/modular_orbit.py": "7bfab10697b93ff87ea53f49f540896840f8c3fc789a2ef7f901c2cf5836f282",
"ucns/mpfr_interval.py": "f80ce770c3506b321e9f3c7fdf6d6dacf3d472074c22780bb1ea2138684df99a",
"ucns/prime_boundary_link_invariants.py": "8e8f6969bfe7ebd98fdd0d5c0a6e4739e9752c9fbf6f04162355bc258042cadf",
"ucns/prime_determinantal_grobner.py": "3c52defa24140e1bea977ab9832e3a8719eb9b8f2e007aef57b395f59a437696",
"ucns/prime_exact_milnor_alexander.py": "e26d37ac8bacfd58d365d8aa98da67ddf5d529e450a0803e2220be8db012c56d",
"ucns/prime_generic_diagram.py": "927e6a16e81368945a6edb24d9ff63c82852b35509e6633bb4eb33a1a5b41a93",
"ucns/prime_generic_interval_certificate.py": "5a721824ae50b84c4e75c53d1cbc744e6aba1f31ba9608028fab15d67ae9c8a1",
"ucns/prime_independent_phase_milnor.py": "999591d9ae4455fe40a5d8711a277745e4c1a3f6abb74b5f6aca29b10be03f15",
"ucns/prime_interval_boundaries.py": "95628818f447f5a1320996fda4d080f2674636aac2189b6e0f7b9c7d85461955",
"ucns/prime_interval_boundary_links.py": "ace9e7e0ef28b94e0de5a3f7c82cf18b8cd84d2ef162db205e21a1d46415bcd6",
"ucns/prime_interval_common.py": "42e60fed3d9c8dc965220bac8b8b9de2db32606103d862f2caeb93992ae7f997",
"ucns/prime_interval_replay.py": "96c70d20c2d9a8227535a657476bf6bb1b2fa68bac7a42c4fcb86a739825f5fc",
"ucns/prime_length4_milnor.py": "c5d6436ca131b79b548a239932e44b04d257f246d9b6857eb5e3038e06736778",
"ucns/prime_milnor_invariants.py": "f7647198d0e4e5b1b32470c6beb26f7b0c2f019a4b8e0a2bcfc5d468627d1b1f",
"ucns/prime_nilpotent_discriminator.py": "f6fb2dae0f3e1465be894cdda2e44edb1010b0885b6dff56886e0de96f970217",
"ucns/prime_phase_lift.py": "9091ea420bedb93df5bc5a844fe515cc86bd0523d5b9c6e05225d9c532423b76",
"ucns/prime_phase_lift_data.py": "6a370310001faa738f9dd447128e94242cb70414a890868012a500486f62bde0",
"ucns/prime_phase_lift_model.py": "e8285ab15095a627b44a7eaab81088e173c3a21deb49bb95487aefb6cd4d8ab5",
"ucns/prime_primitives.py": "aba49af233d17e7663caad40b7faa0d73bf524cdd21f09b52ed07607f72d30cb",
"ucns/prime_replay_phase_milnor_data.py": "00868e1799406aca280261162308db1886fe6b9cc474719ff8f93904792fd164",
"ucns/prime_replay_phase_milnor_receipt.py": "fce9ba70eff0214745ed385033ec106e3eaf9c74d67c6d750879845cb1c8b4cb",
"ucns/prime_smooth_ribbons.py": "08d5a54d18cc20094966e0b8822b1b744bd0f61917d5f35f9d5943ce478677bc",
"ucns/prime_symbolic_alexander.py": "6202dd871c2ac00623380739bedc3a5b87a8ff8b87d4ea3595cd7488d3705fea",
"ucns/public_gonol.py": "2da287ce9691b494fc921d14684a3bf7e0633f3a579ea040e3b6ddbaf0d92f27"
},
"repository": "The-Interdependency/ucns",
"schema": "epac.ucns-source-lock",
"source_archive": {
"sha256": "1665ae06921a0a425ef1c99ce9d811cf8b52c20e4873edea53c4cdecaf2895d9",
"url": "https://github.com/The-Interdependency/ucns/archive/6eea1828a34ed8ec99879f8090ea5d48352d8c2d.tar.gz"
},
"source_tree": "41a5207600b8b5eaeef907199e48d841362cc934",
"standing": "Source-byte provenance only; no geometry or empirical status transfer.",
"version": 1
}
Loading