Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
108 commits
Select commit Hold shift + click to select a range
71275a4
Add bounded BISPF conditional-energy DDGAN repair protocol
martyn Oct 20, 2026
c4beb25
Preregister matched BISPF VAEGAN coverage study and observation check…
martyn Oct 20, 2026
dc2ac91
Add scoped BISPF MisGAN recovery and neural imputer diagnostic
martyn Oct 20, 2026
0e4fb61
Preserve DDGAN task source provenance and add evidence-only exporter
martyn Oct 20, 2026
b8a25fa
Bind complete MisGAN streams and match imputer sampling kernel
martyn Oct 20, 2026
86ee9d9
Retain failed VAEGAN coverage round and preregister finite-budget set…
martyn Oct 20, 2026
2054e69
Repair MisGAN snapshot discovery and preserve source fingerprint prov…
martyn Oct 20, 2026
34b7a7d
Retain DDGAN round-one failures and freeze bounded mobility repair
martyn Oct 20, 2026
627ec65
Publish passing BISPF VAEGAN settling repair and all retained failed …
martyn Oct 20, 2026
9605a35
Publish immutable DDGAN failure readouts and compact provenance
martyn Oct 20, 2026
21efa29
Record MisGAN failures and freeze observed-mass transport settling re…
martyn Oct 20, 2026
223d245
Freeze final DDGAN objective-geometry diagnostic after marginal repair
martyn Oct 20, 2026
2ec47c4
Publish complete DDGAN mobility comparison with matched bimodal baseline
martyn Oct 20, 2026
f4e8cc4
Refresh diagnostic report navigation after VAEGAN study registration
martyn Oct 20, 2026
9659abd
Conclude three DDGAN repair rounds and refresh display-only evidence
martyn Oct 20, 2026
8b7f3c3
Preserve inactive DDGAN receipt compatibility and source ancestry
martyn Oct 20, 2026
e2ff574
Complete scoped MisGAN transport and neural imputation study
martyn Oct 20, 2026
5ff21ab
Investigate selected BISPF vector_overlap failure from saved evidence
martyn Oct 22, 2026
a61fb84
Diagnose R1/R2 density and retention failures
martyn Oct 22, 2026
92b565b
Freeze R1-only and joint inverse repair experiments
martyn Oct 22, 2026
df196bf
Repair frozen model execution and resume bounded R1 comparisons
martyn Oct 22, 2026
ebfef03
Record rejected density mechanisms and DDGAN field evidence
martyn Oct 22, 2026
91178a3
Publish bounded R1 repair outcomes and preserve full evidence archives
martyn Oct 22, 2026
45ed71a
fix(forge): refresh current-source family readouts and restore Cohort…
martyn Nov 7, 2026
528807d
Merge pull request #527 from 255BITS/fix/refresh-current-source-readouts
martyn Nov 7, 2026
e75ccb3
Investigate selected BISPF Gaussian stability failure
martyn Oct 22, 2026
e671a29
Investigate selected BISPF img_bars4 failure from frozen evidence
martyn Oct 22, 2026
a56d5d2
Investigate selected BISPF img_blobs4 failure from frozen evidence
martyn Oct 22, 2026
c969c00
Investigate selected BISPF img_intensity2 failure from frozen evidence
martyn Oct 22, 2026
63c851b
Investigate selected BISPF grid100 failure
martyn Oct 22, 2026
9e762f2
Investigate selected BISPF rotated100 failure
martyn Oct 22, 2026
36e1ff4
Investigate selected BISPF staggered100 failure
martyn Oct 22, 2026
3609a2a
Investigate selected BISPF vector_unequal_mass failure from saved evi…
martyn Oct 22, 2026
6e25b04
Investigate selected BISPF vector_unequal_width failure from saved ev…
martyn Oct 22, 2026
c39edf3
Investigate selected BISPF vector_anisotropic failure from saved evid…
martyn Oct 22, 2026
22893d2
Merge remote-tracking branch 'origin/develop' into fixes/research-pr4…
mikkel Nov 8, 2026
ed04b6b
Explain all eleven recorded BISPF failures in one review
mikkel Nov 8, 2026
00ae271
Merge develop and reconcile PR #460 source contracts
mikkel Nov 8, 2026
6ed0af6
Merge develop and reconcile PR #461 source contracts
mikkel Nov 8, 2026
d198aaf
Merge develop and reconcile PR #462 source contracts
mikkel Nov 8, 2026
6da0ca6
Merge develop and reconcile PR #474 source contracts
mikkel Nov 8, 2026
395a3c7
Preserve archived identities across neutral recipe extensions
mikkel Nov 8, 2026
7b55b65
Preserve archived identities across neutral recipe extensions
mikkel Nov 8, 2026
f6031ec
Preserve archived identities across neutral recipe extensions
mikkel Nov 8, 2026
096b576
Preserve source-only evaluator ancestry and scoped leaderboard discovery
mikkel Nov 8, 2026
a9ecd9e
Preserve source-only evaluator ancestry and scoped leaderboard discovery
mikkel Nov 8, 2026
c8a299b
Preserve source-only evaluator ancestry and scoped leaderboard discovery
mikkel Nov 8, 2026
25e8a78
Register scoped VAEGAN research leaderboard
mikkel Nov 8, 2026
26ba7a4
Verify retained PR399 declarations through exact source-only ancestry
mikkel Nov 8, 2026
2025ca2
Verify retained PR399 declarations through exact source-only ancestry
mikkel Nov 8, 2026
682901f
Verify retained PR399 declarations through exact source-only ancestry
mikkel Nov 8, 2026
6c603ec
fix(toys): preserve vector formulas and declared architectures
martyn Nov 8, 2026
0a0cf2d
fix(forge): require formula-faithful experiment admission
martyn Nov 8, 2026
b4c79e3
Merge commit '0a0cf2d93' into fix/audit-vector-contracts
martyn Nov 8, 2026
63e103e
fix(forge): preserve exact scientific statuses and scope diagnostic e…
martyn Nov 8, 2026
b0dc5c0
Merge commit '0a0cf2d93' into fix/audit-reporting-integrity
martyn Nov 8, 2026
873ca1c
fix(forge): bind scope-correction code in publication freshness
martyn Nov 8, 2026
2a2d992
fix(toys): execute intact MisGAN recipes and checkpoint owned state
martyn Nov 8, 2026
506913e
fix(ci): enforce base compatibility, license metadata and strict names
martyn Nov 8, 2026
e673f8c
Merge branch 'fix/audit-vector-contracts' into integration/audit-form…
martyn Nov 8, 2026
e587212
Merge branch 'fix/audit-reporting-integrity' into integration/audit-f…
martyn Nov 8, 2026
b15fcd6
Merge branch 'fix/audit-misgan-contracts' into integration/audit-form…
martyn Nov 8, 2026
89f2ebc
Merge commit '506913ee4' into integration/audit-formula-contracts
martyn Nov 8, 2026
8e1e528
fix(forge): separate faithful current measurements from diagnostic in…
martyn Nov 8, 2026
2f4fae0
Merge commit '8e1e5282f' into integration/audit-formula-contracts
martyn Nov 8, 2026
6d60a3a
fix(forge): distinguish faithful diagnostics from qualification eligi…
martyn Nov 8, 2026
be39aa2
fix(toys): validate task-owned MisGAN priors and critic history copies
martyn Nov 8, 2026
41d2d39
Merge commit 'be39aa273' into integration/audit-formula-contracts
martyn Nov 8, 2026
774fb7b
fix: preserve vector recipes and declare checkpoint capabilities
martyn Nov 8, 2026
a54bb93
Merge commit '6d60a3a4f' into integration/audit-formula-contracts
martyn Nov 8, 2026
d912cdc
Merge commit '774fb7b604ef19db013eb8a912525b8aebf731a5' into integrat…
martyn Nov 8, 2026
d285755
fix(forge): verify current measurements against certified producer ev…
martyn Nov 8, 2026
7527a93
Merge commit 'd28575538' into fix/audit-producer-witness
martyn Nov 8, 2026
76ad882
Merge commit 'd28575538' into integration/audit-formula-contracts
martyn Nov 8, 2026
1ee1c43
fix(forge): emit observed contracts and certified future coverage exp…
martyn Nov 8, 2026
0c25472
test(ci): require full coverage on each supported interpreter
martyn Nov 8, 2026
6133600
docs(audit): publish corrected evidence attribution and remediation map
martyn Nov 8, 2026
76808f3
Merge complete supported-interpreter coverage policy
martyn Nov 8, 2026
279fb5e
Merge prospective execution witness producer
martyn Nov 8, 2026
2fbcfb3
docs(audit): seal integrated source catalog and software verification
martyn Nov 8, 2026
9d22b2a
test(reports): preserve dated diagnoses and derive current summaries
martyn Nov 8, 2026
5acfe15
test(reports): require exact retained outcomes instead of binary comp…
martyn Nov 8, 2026
082d796
fix: separate archived coordinator cards from current recipe software…
martyn Nov 8, 2026
04e4dbf
docs(audit): record verified archival and current recipe boundaries
martyn Nov 8, 2026
7f1b61f
test(forge): scope archived compatibility controls to measured Tier 1
martyn Nov 8, 2026
84434f4
test: separate source-cohort refusal from exact restoration proofs
martyn Nov 8, 2026
5854eb6
fix: retain scalar task MoG law outside trainer overrides
martyn Nov 8, 2026
3b8153e
fix(toy): complete BiGAN checkpoint and intact recipe contracts
martyn Nov 8, 2026
7693ec3
fix(audit): enforce independent checkpoints and exact task-law proven…
martyn Nov 8, 2026
5a905a2
Merge pull request #535 from 255BITS/integration/audit-formula-contracts
martyn Nov 8, 2026
cb3267c
Reject unsupported MisGAN model and precision recipes
mikkel Nov 9, 2026
5b8c514
Integrate audited develop without regrading archived evidence
mikkel Nov 9, 2026
77850d3
Integrate audited develop without regrading archived evidence
mikkel Nov 9, 2026
ea75964
Integrate audited develop and isolate MisGAN critic histories
mikkel Nov 9, 2026
6c0f7fc
Integrate audited develop without regrading archived evidence
mikkel Nov 9, 2026
ad492b8
Merge pull request #473 from HyperGAN/investigate/leading-vector-over…
martyn Nov 9, 2026
4a5ff6d
Merge pull request #474 from HyperGAN/research/r1r2-failure-diagnosis…
martyn Nov 9, 2026
89072b2
Merge reviewed DDGAN controls with R1/R2 execution fixes
martyn Nov 9, 2026
b97fc48
Merge VAE observation checkpoints and scoped transport admission
martyn Nov 9, 2026
03765cb
Merge independent MisGAN games and bind reviewed model integration so…
martyn Nov 9, 2026
edd9684
Verify combined source ancestry and retain imported leaderboard regis…
martyn Nov 9, 2026
69d5be2
Merge pull request #537 from HyperGAN/integration/reviewed-model-prs-…
martyn Nov 9, 2026
1132d48
Ignore /TODO.md
martyn Nov 10, 2026
be3c7e6
fix(packaging,misgan,lint): shrink PyPI sdist, mask observed NaNs bef…
martyn Nov 10, 2026
76c989a
Merge pull request #538 from HyperGAN/fix/review-remediations-pypi-sd…
martyn Nov 10, 2026
951018a
add AGENTS instruction
martyn Nov 10, 2026
31c1a8f
Merge pull request #536 from HyperGAN/fix/misgan-model-precision-cont…
martyn Nov 10, 2026
421d8f8
chore(release): prepare ParticleGAN 0.9.8
martyn Nov 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
96 changes: 73 additions & 23 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ jobs:
matrix:
include:
- {python: "3.11", shard: 0}
- {python: "3.11", shard: 1}
- {python: "3.11", shard: 2}
- {python: "3.11", shard: 3}
- {python: "3.12", shard: 0}
- {python: "3.12", shard: 1}
- {python: "3.12", shard: 2}
Expand Down Expand Up @@ -68,33 +71,23 @@ jobs:
if: matrix.python == '3.12' && matrix.shard == 0
run: python scripts/check_lint.py
- name: Test numerical kernels and experiment workflows
if: matrix.python == '3.12'
run: >-
python scripts/ci_pytest.py run --index ${{ matrix.shard }} --count 4
--receipt /tmp/pytest-shard-${{ matrix.shard }}.json --
-q --durations=25 -o faulthandler_timeout=600
--ignore=tests/test_e22_routed_caption_late_phase_renderer.py
# The minimum supported Python runs one deterministic quarter of the same
# suite. Its receipt stays local: release coverage is checked on 3.12.
- name: Test one suite shard on the minimum supported Python
if: matrix.python == '3.11'
run: >-
python scripts/ci_pytest.py run --index ${{ matrix.shard }} --count 4
--receipt /tmp/pytest-py311-shard-${{ matrix.shard }}.json --
--receipt /tmp/pytest-${{ matrix.python }}-shard-${{ matrix.shard }}.json --
-q --durations=25 -o faulthandler_timeout=600
--ignore=tests/test_e22_routed_caption_late_phase_renderer.py
- name: Save collection coverage receipt
if: always() && matrix.python == '3.12'
if: always()
uses: actions/upload-artifact@v4
with:
name: pytest-shard-${{ matrix.shard }}
path: /tmp/pytest-shard-${{ matrix.shard }}.json
name: pytest-${{ matrix.python }}-shard-${{ matrix.shard }}
path: /tmp/pytest-${{ matrix.python }}-shard-${{ matrix.shard }}.json
if-no-files-found: error
- name: Test bounded late-phase renderer in a fresh process
if: matrix.python == '3.12' && matrix.shard == 0
if: matrix.shard == 0
run: timeout --signal=INT --kill-after=5s 60s python -m pytest -q tests/test_e22_routed_caption_late_phase_renderer.py
- name: Exercise the complete Lunar pipeline and GIF exports
if: matrix.python == '3.11'
if: matrix.python == '3.11' && matrix.shard == 0
env:
SDL_VIDEODRIVER: dummy
run: python -u examples/fast_lander.py --smoke --out /tmp/lunar-smoke
Expand Down Expand Up @@ -217,9 +210,42 @@ jobs:
PY
/tmp/particlegan-base-env/bin/python -m particlegan_forge --help

minimum-base:
name: Minimum base dependencies / Python 3.11
if: >-
github.event_name != 'workflow_dispatch' ||
github.ref == 'refs/heads/develop' ||
github.ref == 'refs/heads/master'
runs-on: ubuntu-latest
timeout-minutes: 15
env:
CUDA_VISIBLE_DEVICES: ""
OMP_NUM_THREADS: "1"
MKL_NUM_THREADS: "1"
steps:
- uses: actions/checkout@v4
with:
ref: ${{ inputs.source_ref || github.sha }}
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install exact minimum base versions
run: |
python -m pip install 'torch==2.6.0' --index-url https://download.pytorch.org/whl/cpu
python -m pip install 'numpy==1.26.0'
- name: Build and install the base wheel without experiment extras
run: |
python -m pip wheel --no-deps . --wheel-dir /tmp/minimum-wheel
python -m pip install --no-deps /tmp/minimum-wheel/*.whl
python -m pip check
cp scripts/base_compatibility_smoke.py /tmp/particlegan-minimum-smoke.py
- name: Check public API and exact checkpoint continuation outside checkout
working-directory: /tmp
run: python /tmp/particlegan-minimum-smoke.py

distributions:
name: Build release distributions
needs: [cpu-tests, base-wheel]
needs: [cpu-tests, base-wheel, minimum-base]
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
Expand All @@ -233,11 +259,13 @@ jobs:
run: python -m pip install build twine
- uses: actions/download-artifact@v4
with:
pattern: pytest-shard-*
pattern: pytest-*-shard-*
path: /tmp/pytest-shards
merge-multiple: true
- name: Require complete nonoverlapping regression coverage
run: python scripts/ci_pytest.py check /tmp/pytest-shards/*.json
run: |
python scripts/ci_pytest.py check /tmp/pytest-shards/pytest-3.11-shard-*.json
python scripts/ci_pytest.py check /tmp/pytest-shards/pytest-3.12-shard-*.json
- name: Build source archive and wheel
run: python -m build
- name: Keep research artifacts outside release distributions
Expand All @@ -247,17 +275,39 @@ jobs:
import tarfile
import zipfile

max_bytes = 600_000
for wheel in Path('dist').glob('*.whl'):
assert wheel.stat().st_size < max_bytes, wheel.stat().st_size
with zipfile.ZipFile(wheel) as archive:
roots = {name.split('/')[0] for name in archive.namelist()}
names = archive.namelist()
roots = {name.split('/')[0] for name in names}
license_path = next(name for name in names if name.endswith('.dist-info/licenses/LICENSE'))
assert archive.read(license_path) == Path('LICENSE').read_bytes()
metadata_path = next(name for name in names if name.endswith('.dist-info/METADATA'))
metadata = archive.read(metadata_path).decode()
assert 'License-Expression: MIT' in metadata
assert 'License-File: LICENSE' in metadata
# particlegan_forge is the documented external tier API (EXPERIMENTATION.md).
packages = {'particlegan', 'particlegan_forge'}
assert all(root in packages or root.endswith('.dist-info') for root in roots), roots
research = {'reports', 'results', 'experiments', 'benchmarks', 'lib', 'configs', 'data', 'runs', 'artifacts'}
excluded = {
'tests', 'reports', 'results', 'experiments', 'benchmarks', 'lib',
'configs', 'data', 'runs', 'artifacts', 'docs', 'examples', 'ops', 'scripts',
}
allowed_sdist_roots = {
'LICENSE', 'MANIFEST.in', 'PKG-INFO', 'README.md',
'particlegan', 'particlegan.egg-info', 'particlegan_forge',
'pyproject.toml', 'setup.cfg',
}
for source in Path('dist').glob('*.tar.gz'):
assert source.stat().st_size < max_bytes, source.stat().st_size
with tarfile.open(source) as archive:
roots = {parts[1] for name in archive.getnames() if len(parts := name.split('/')) > 1}
assert not roots & research, roots & research
names = archive.getnames()
roots = {parts[1] for name in names if len(parts := name.split('/')) > 1}
license_path = next(name for name in names if name.count('/') == 1 and name.endswith('/LICENSE'))
assert archive.extractfile(license_path).read() == Path('LICENSE').read_bytes()
assert not roots & excluded, roots & excluded
assert roots <= allowed_sdist_roots, roots - allowed_sdist_roots
PY
- name: Validate package metadata and README
run: python -m twine check --strict dist/*
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -161,3 +161,4 @@ dist/
runs/prior-coulomb/
/runs/prior-mmd/
/runs/test_m3/
/TODO.md
34 changes: 2 additions & 32 deletions .ruff-baseline.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,21 +46,11 @@
"`benchmarks.legacy.recipe.get_recipe` imported but unused": 1
}
},
"benchmarks/toy_audit/api_gaussian1d.py": {
"F401": {
"`.gaussian1d_quality` imported but unused": 1
}
},
"benchmarks/toy_audit/api_model_ae_ddgan.py": {
"F401": {
"`.api_model_ddgan.task_recipe` imported but unused": 1
}
},
"benchmarks/toy_audit/api_run.py": {
"F401": {
"`textwrap` imported but unused": 1
}
},
"benchmarks/toy_audit/api_sources/circle.py": {
"F401": {
"`torch.nn.functional` imported but unused": 1,
Expand Down Expand Up @@ -89,11 +79,6 @@
"`copy.deepcopy` imported but unused": 1
}
},
"benchmarks/toy_audit/prior_proximal_smoke.py": {
"F821": {
"Undefined name `restored`": 1
}
},
"benchmarks/toy_audit/proposal.py": {
"F841": {
"Local variable `result` is assigned to but never used": 1
Expand Down Expand Up @@ -232,16 +217,6 @@
"`benchmarks.legacy.recipe.get_recipe` imported but unused": 1
}
},
"examples/e22_routed_caption_late_phase.py": {
"F821": {
"Undefined name `p`": 1
}
},
"examples/e22_routed_caption_untied.py": {
"F821": {
"Undefined name `p`": 1
}
},
"examples/e22_routed_g_clean.py": {
"F402": {
"Import `time` from an earlier line shadowed by loop variable": 1
Expand Down Expand Up @@ -309,11 +284,6 @@
"`collections.defaultdict` imported but unused": 1
}
},
"experiments/forge/runtime.py": {
"F401": {
"`os` imported but unused": 1
}
},
"experiments/forge/scaling_profile.py": {
"F401": {
"`.contracts.stable_hash` imported but unused": 1
Expand Down Expand Up @@ -532,7 +502,7 @@
},
"F811": {
"Redefinition of unused `checkout` from an earlier line: `checkout` redefined here": 5,
"Redefinition of unused `spec` from an earlier line: `spec` redefined here": 5
"Redefinition of unused `spec` from an earlier line: `spec` redefined here": 4
}
},
"tests/test_forge_dispositions.py": {
Expand All @@ -550,7 +520,7 @@
},
"F811": {
"Redefinition of unused `checkout` from an earlier line: `checkout` redefined here": 6,
"Redefinition of unused `spec` from an earlier line: `spec` redefined here": 4
"Redefinition of unused `spec` from an earlier line: `spec` redefined here": 3
}
},
"tests/test_forge_family_documentation.py": {
Expand Down
44 changes: 44 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,49 @@ sampling law. Check these against the qualified evidence before attributing a
failure to a formulation change. Clean and noisy served results are separate
cohorts; matching training settings alone does not make their gates comparable.

**A faithful numerical FAIL is better evidence than a PASS obtained by changing
the formula.** Keep these boundaries explicit in implementation, tests and reports:

- The recipe owns every training update and intervention, including prior moves,
gradient transformations, controllers, regularizers and noise. Task hosts must
not add cluster fitting, particle placement, weight resets, auxiliary solvers,
surrogate gradients or other post-optimizer repairs to make a recipe pass.
A useful new mechanism needs its own public recipe capability, declared delta
and evidence identity before comparison.
- Execute the exact resolved recipe. Never substitute a different preset,
schedule, prior, guard or noise policy to accommodate a host. Implement the
missing capability or report BLOCKED; do not silently drop the mechanism.
- Evaluate the object and law named by the question: a neural-imputer test must
call that neural imputer; no-posterior-resampling means no fallback to posterior
resampling. Live, EMA, averaged and clean/noisy serving are separate contracts.
Record the observed sampler and resolved recipe, not just the requested labels.
- Architecture and initialization belong to the task. Imports must not replace
shared model classes or change constructor defaults. Normalized, scaled,
identity-initialized and assisted variants need explicit separate task/cohort
identities. Custom backward functions must implement their declared derivative;
a surrogate update is a recipe mechanism, not an invisible architecture repair.
- Checkpoint every behavior-changing state and consumed RNG stream, including
host caches, control flags, penalty clocks and actual EMA histories. Verify
continuation in a fresh object/process across mechanism activation boundaries;
reject incompatible old checkpoints rather than reconstructing missing history.
- Keep numerical FAIL distinct from BLOCKED, ERROR, INVALID, INCOMPLETE, TIMEOUT
and unmeasured outcomes. A negative eligibility decision is not a numerical
failure. Diagnostic, assisted, adapted or incompatible-source results cannot
fill ordinary qualification or a selected recipe's matched comparison cells.
- Preserve affected historical receipts byte for byte. Publish explicit,
source-bound scope corrections instead of rewriting old grades or presenting
old assisted passes as evidence for a corrected implementation. Keep one
current leaderboard and derive its current explanations from the same records.
- Add semantic controls that would detect the wrong formula or evaluator:
forbidden-fallback checks, deliberate damage to the measured model, fresh-process
import-order checks and exact continuation checks. Passing software tests, an
oracle witness or a training GIF does not itself establish learned quality.

Scientific superiority and default adoption also require accepted compatible
calibration and independent confirmation. Keep unequal tuning budgets, selection
tasks, untouched task-level holdouts and unresolved uncertainty visible; never
manufacture calibration acceptance or run seed-only searches to improve a score.

Toy tests must follow the [public-API test contract](reports/toy_audit/api_contract/README.md):
execute through the ParticleGAN API, declare a numerical pass/fail metric, and
provide an actual-training GIF that illustrates the test's goal. Reform an
Expand All @@ -50,3 +93,4 @@ Each agent can queue experiments on the GPUs without waiting for it to be free.

---
develop->master PR should always exist and have a link to the up to date https://github.com/255BITS/ParticleGAN/blob/develop/reports/forge/technique-inventory.md
master should always reflect whats in pypi
28 changes: 26 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,31 @@
# Changelog

## Unreleased

## 0.9.8 — 2026-11-09

- **Tiny PyPI source distribution (`sdist`) and strict distribution gates.**
Prune non-package trees (`tests`, `reports`, `results`, `experiments`,
`benchmarks`, `lib`, `configs`, `data`, `runs`, `artifacts`, `docs`,
`examples`, `ops`, `scripts`) and workspace files via `MANIFEST.in`,
shrinking `particlegan-0.9.8.tar.gz` from `1.7 MB` (`7.14 MB` uncompressed)
to `~343 KiB` (`~373 KiB` wheel) and enforcing `< 600 KB` byte-size and root
allowlists in CI and packaging tests.
- **Reviewed model objectives, pre-subtraction `NaN` masking, and public exports.**
Export `conditional_energy_score`, `joint_reconstruction_loss`,
`masked_mixture_nll`, `NeuralComponentImputer`, `masked_quantile_transport_loss`,
`EmulatedLinear`, and `emulate_linear_training_` from top-level `particlegan`.
Mask `observed` via `torch.where` before subtracting `components` in
`masked_mixture_nll` so unobserved `NaN` entries cannot contaminate gradients
when `observed.requires_grad` is `True`.
- **Formula-faithful recipe admission, independent critic histories, and provenance.**
Enforce formula-faithful admission across vector, BiGAN, DDGAN, VAE-GAN, and
MisGAN hosts (including rejecting unsupported `model="ddgan"` and
`training_precision="bf16_channels_last"` settings on MisGAN hosts before
optimizer construction and isolating independent MisGAN critic histories),
separate faithful numerical `FAIL` from `BLOCKED`/`INCOMPLETE`/`UNMEASURED`
outcomes, and preserve byte-exact historical receipts with ancestral
source-binding verification
([integration scope](reports/forge/reviewed-pr-integration-20261109/README.md),
[audit](reports/gpt-audit-2026-11-08.md)).
- **Exact trainer checkpoint continuation with gradient response.** Save,
validate and restore gradient-coherence history when enabled, preserving the
next update in fresh and previously used trainers. Reject older enabled-response
Expand Down
10 changes: 10 additions & 0 deletions EXPERIMENTATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,16 @@ per-mode moments before another supported, bounded training hypothesis. No
automatic matrix filling, tuning, seed study, continuation or promotion follows.

The history, recall, compile, validate, and board commands launch no training.
The alternate `ops/formulaic_coverage.py` executor is retired after the
[2026-11-08 scientific audit](reports/gpt-audit-2026-11-08.md). It changed
recipes and host update rules outside ordinary admission. Its old receipts
remain source-bound diagnostic evidence; a reporting refresh must not repeat
them or use them to qualify a corrected implementation. Use the frozen-study
workflow above for new measurements. An unsupported public adapter remains
BLOCKED, and a correctly measured numerical FAIL remains FAIL. The ownership,
sampler, architecture and continuation boundaries in [AGENTS.md](AGENTS.md)
apply to every execution path, including coverage diagnostics.

Recall includes source-bound concluded configuration and policy publications as
non-qualifying summaries. It returns compact source identity pins and a file
count by default. Add `recall --full-provenance` when the complete source-file
Expand Down
21 changes: 21 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2025-2026 Martyn Garcia

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
20 changes: 20 additions & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
prune tests
prune reports
prune results
prune experiments
prune benchmarks
prune lib
prune configs
prune data
prune runs
prune artifacts
prune docs
prune examples
prune ops
prune scripts
exclude .ruff-baseline.json
exclude AGENTS.md
exclude CLAUDE.md
exclude EXPERIMENTATION.md
exclude RESEARCH_GLOSSARY.md
exclude TODO.md
Loading
Loading