Repository navigation
feat(dp): two-way marginals in DP stage 1, MST and AIM-style selection (T07b) - #42
Merged
Merged
Conversation
… checks C1300-C1306 (T07b, WIP) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com>
…silon curves on Chinook, Contoso, AdventureWorks Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com>
…EADME Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com>
…AIM scores Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com>
…xed labels; dp-eval: one smartnoise job per (measure, epsilon); docs/dp.md section 7 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com>
SQLAlchemy 2.1.8's stubs reject **dict[str, bool | None] for Column, which failed the mypy ratchet on every PR (not caused by this PR's changes). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwFQpRaQG7JXjqkxnbn Signed-off-by: Claude <noreply@anthropic.com>
…conditions; dp-eval: Contoso one job per epsilon, attack audit job The Contoso DP sweep failed with a 32 GB class x word allocation in the naive Bayes of the text metric. Above 50 M cells it now scores from an inverted index (same predictions, tested). dp-eval splits Contoso by epsilon (the two-epsilon job hit its time limit), gives smartnoise AIM at epsilon 4 and 8 one repetition, and runs tools/dp_audit.py for mst and aim on Contoso at epsilon 1. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com>
…a PR is opened or marked ready Two-way error on ACS against smartnoise-synth MST and AIM, scorecard share on Chinook, Contoso and AdventureWorks at epsilon 0.5-8, and the attack audit for mst and aim (membership TPR 0.011 and 0.012 against the bound 0.027). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com>
nick-developer
marked this pull request as ready for review
November 6, 2026 06:27
…P-20) with T07b evidence The claim register from #41 is now on main. Adds the two-way marginal claims with their propositions, checks and the dp-eval records (docs/assurance/evidence/T07b/), updates the README documentation-map row and drops the duplicate row the merge left. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com>
nick-developer
added a commit
that referenced
this pull request
Nov 6, 2026
…n (T07b) (#42) * feat(dp): two-way marginals in stage 1 (MST and AIM-style selection), checks C1300-C1306 (T07b, WIP) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com> * ci(dp): dp-eval workflow: smartnoise MST/AIM comparison on ACS and epsilon curves on Chinook, Contoso, AdventureWorks Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com> * docs(dp): Props. 1300-1306 with proofs, --dp-measure, CHANGELOG and README Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com> * fix(dp): create the output folder of the dp-eval tools; mypy type of AIM scores Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com> * ci(dp-eval): install pyarrow for the Contoso build Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com> * fix(dp): empty seed tables keep their columns; text metrics accept mixed labels; dp-eval: one smartnoise job per (measure, epsilon); docs/dp.md section 7 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com> * fix(proofs): unique labels for Props. 1303-1305 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com> * fix(types): type the Column keyword arguments in ddl.py SQLAlchemy 2.1.8's stubs reject **dict[str, bool | None] for Column, which failed the mypy ratchet on every PR (not caused by this PR's changes). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwFQpRaQG7JXjqkxnbn Signed-off-by: Claude <noreply@anthropic.com> * fix(evaluate): text TSTR metric without a dense table for many-level conditions; dp-eval: Contoso one job per epsilon, attack audit job The Contoso DP sweep failed with a 32 GB class x word allocation in the naive Bayes of the text metric. Above 50 M cells it now scores from an inverted index (same predictions, tested). dp-eval splits Contoso by epsilon (the two-epsilon job hit its time limit), gives smartnoise AIM at epsilon 4 and 8 one repetition, and runs tools/dp_audit.py for mst and aim on Contoso at epsilon 1. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com> * docs(dp): results of the dp-eval run in section 7; dp-eval runs when a PR is opened or marked ready Two-way error on ACS against smartnoise-synth MST and AIM, scorecard share on Chinook, Contoso and AdventureWorks at epsilon 0.5-8, and the attack audit for mst and aim (membership TPR 0.011 and 0.012 against the bound 0.027). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com> * docs(assurance): register the docs/dp.md section 7 claims (DP-16 to DP-20) with T07b evidence The claim register from #41 is now on main. Adds the two-way marginal claims with their propositions, checks and the dp-eval records (docs/assurance/evidence/T07b/), updates the README documentation-map row and drops the duplicate row the merge left. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com> * docs(changelog): restore the T07b entries the main merge dropped Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk Signed-off-by: Claude <noreply@anthropic.com> --------- Signed-off-by: Claude <noreply@anthropic.com> Co-authored-by: Claude <noreply@anthropic.com> Signed-off-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Cod3r · project thread
What and why
Roadmap T07b (wave D plan, section 5). T07's DP mode was nearly flat in ε because stage 1 only released one-way histograms and one Gaussian correlation matrix per table. This adds
synthesis.privacy.dp.measure: mst | aim(relsynth run --dp-measure). The default stayscopula, so nothing changes for existing specs.mechanisms.noisy_max).pair_binscells (default 8) from released marginals only.docs/proofs/sec_v26_dpselect.tex); guidedocs/dp.mdsection 7; CHANGELOG and README updated.typesfix from ci(service): run the service end to end on kind and docker compose; fix two Helm chart bugs (T09 follow-up) #44, commit 4e3026f) so the mypy job passes before ci(service): run the service end to end on kind and docker compose; fix two Helm chart bugs (T09 follow-up) #44 lands.dp-evalworkflow: smartnoise-synth 1.0.8 MST/AIM comparison on ACS, ε sweeps on Chinook, Contoso and AdventureWorks, attack audit (tools/dp_audit.py). It now runs on PR open/ready, weekly and on demand, not on every push.Results (dp-eval run 42141805823, three repetitions, 95 % t intervals)
How it was tested
ruff check src tests toolspassespytest -m science tests/science/test_dp_select_checks.py): 9 passed. C1301 replays the noisy outputs and choices into neighbouring databases: every score vector and two-way histogram moves within its charged sensitivity.tests/unit/test_text_nb.py: the sparse naive Bayes path gives the dense path's predictionsroadmap/reports/T07b.mdin the project files)Statistics and privacy
measure: copulais the default)docs/dp.mdsection 7 are drafted; they go intodocs/assurance/claims.yamlonce feat(assurance): claim register, assurance case and regulation mapping (T17) #41 is on mainChecklist
Generated by Claude Code
🤖 Generated with Claude Code
https://claude.ai/code/session_01PSVqwDw4YbuLAH7eDJyBvk