ms408 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ms408-0.1.0/.claude/skills/package-paper/SKILL.md +87 -0
- ms408-0.1.0/.claude/skills/package-paper/assets/metadata.example.yaml +15 -0
- ms408-0.1.0/.claude/skills/package-paper/assets/refs.bib +83 -0
- ms408-0.1.0/.claude/skills/package-paper/assets/template.tex +66 -0
- ms408-0.1.0/.env.example +13 -0
- ms408-0.1.0/.github/ISSUE_TEMPLATE/activity-submission.yml +91 -0
- ms408-0.1.0/.github/ISSUE_TEMPLATE/bug_report.md +23 -0
- ms408-0.1.0/.github/ISSUE_TEMPLATE/config.yml +8 -0
- ms408-0.1.0/.github/ISSUE_TEMPLATE/hypothesis_eval.md +20 -0
- ms408-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +32 -0
- ms408-0.1.0/.github/workflows/ci.yml +59 -0
- ms408-0.1.0/.github/workflows/pages.yml +64 -0
- ms408-0.1.0/.github/workflows/publish.yml +53 -0
- ms408-0.1.0/.gitignore +28 -0
- ms408-0.1.0/CHANGELOG.md +30 -0
- ms408-0.1.0/CITATION.cff +30 -0
- ms408-0.1.0/CLAUDE.md +41 -0
- ms408-0.1.0/CODE_OF_CONDUCT.md +51 -0
- ms408-0.1.0/CONTRIBUTING.md +71 -0
- ms408-0.1.0/LICENSE +202 -0
- ms408-0.1.0/NOTICE +21 -0
- ms408-0.1.0/OSS_RELEASE.md +120 -0
- ms408-0.1.0/PKG-INFO +188 -0
- ms408-0.1.0/README.md +153 -0
- ms408-0.1.0/SECURITY.md +25 -0
- ms408-0.1.0/data/processed/.gitkeep +0 -0
- ms408-0.1.0/data/processed/h4/manifest.json +200 -0
- ms408-0.1.0/data/processed/harness/h2/naibbe_pliny_deck52_seed408_manifest.json +23 -0
- ms408-0.1.0/data/processed/harness/h3/selfcitation_B_seed19_lines1200_manifest.json +1 -0
- ms408-0.1.0/data/processed/manifest.json +29 -0
- ms408-0.1.0/data/processed/scan_map.json +1403 -0
- ms408-0.1.0/docs/DEPLOY.md +44 -0
- ms408-0.1.0/docs/GLOSSARY.md +68 -0
- ms408-0.1.0/docs/LIMITS.md +57 -0
- ms408-0.1.0/docs/METHODOLOGY.md +75 -0
- ms408-0.1.0/docs/RELEASE-READINESS.md +183 -0
- ms408-0.1.0/docs/RELEASE_NOTES_v0.1.0.md +55 -0
- ms408-0.1.0/docs/SEO_STRATEGY.md +130 -0
- ms408-0.1.0/docs/SITE_PLAN.md +72 -0
- ms408-0.1.0/docs/THEME_PLAN.md +86 -0
- ms408-0.1.0/docs/TUTORIAL.md +115 -0
- ms408-0.1.0/docs/dossiers/.gitkeep +0 -0
- ms408-0.1.0/docs/dossiers/astrological-iconography.md +223 -0
- ms408-0.1.0/docs/dossiers/balneology.md +246 -0
- ms408-0.1.0/docs/dossiers/cipher-culture.md +240 -0
- ms408-0.1.0/docs/dossiers/gynecological-reading.md +250 -0
- ms408-0.1.0/docs/dossiers/provenance-chain.md +248 -0
- ms408-0.1.0/docs/planning/CONCEPT-variable-introduction.md +130 -0
- ms408-0.1.0/docs/planning/i01/DECISIONS.md +60 -0
- ms408-0.1.0/docs/planning/i01/README.md +29 -0
- ms408-0.1.0/docs/planning/i01/RESEARCH-PLAN.md +123 -0
- ms408-0.1.0/docs/planning/i01/SOURCES.md +71 -0
- ms408-0.1.0/docs/planning/i01/STATUS.md +49 -0
- ms408-0.1.0/docs/planning/i01/T12-annotation-schema.md +285 -0
- ms408-0.1.0/docs/planning/i01/W6a-assumption-audit.md +269 -0
- ms408-0.1.0/docs/planning/i01/WORKFLOW.md +104 -0
- ms408-0.1.0/docs/planning/i01/specs/T03-h4-acquisition.md +93 -0
- ms408-0.1.0/docs/planning/i01/specs/T03-naibbe-spec.md +342 -0
- ms408-0.1.0/docs/planning/i01/specs/T03-selfcitation-spec.md +940 -0
- ms408-0.1.0/docs/planning/i01/specs/T11-currier-positional-targets.md +137 -0
- ms408-0.1.0/docs/planning/i01/specs/T11-entropy-targets.md +319 -0
- ms408-0.1.0/docs/planning/i01/specs/T11-montemurro-targets.md +287 -0
- ms408-0.1.0/docs/planning/i02/EXPERIMENTS.md +103 -0
- ms408-0.1.0/docs/planning/i02/README.md +40 -0
- ms408-0.1.0/docs/planning/i02/STATUS.md +62 -0
- ms408-0.1.0/docs/planning/i03/E9-preregistration.md +127 -0
- ms408-0.1.0/docs/planning/i03/EXPERIMENTS.md +143 -0
- ms408-0.1.0/docs/planning/i03/README.md +70 -0
- ms408-0.1.0/docs/planning/i03/STATUS.md +45 -0
- ms408-0.1.0/docs/planning/i04/EXPERIMENTS.md +60 -0
- ms408-0.1.0/docs/planning/i04/README.md +40 -0
- ms408-0.1.0/docs/planning/i04/STATUS.md +38 -0
- ms408-0.1.0/docs/planning/i05/EXPERIMENTS.md +93 -0
- ms408-0.1.0/docs/planning/i05/README.md +51 -0
- ms408-0.1.0/docs/planning/i05/STATUS.md +56 -0
- ms408-0.1.0/docs/planning/i06/EXPERIMENTS.md +58 -0
- ms408-0.1.0/docs/planning/i06/README.md +38 -0
- ms408-0.1.0/docs/planning/i06/STATUS.md +38 -0
- ms408-0.1.0/docs/planning/i07/EXPERIMENTS.md +50 -0
- ms408-0.1.0/docs/planning/i07/README.md +56 -0
- ms408-0.1.0/docs/planning/i07/STATUS.md +62 -0
- ms408-0.1.0/docs/planning/i08/EXPERIMENTS.md +36 -0
- ms408-0.1.0/docs/planning/i08/README.md +41 -0
- ms408-0.1.0/docs/planning/i08/STATUS.md +45 -0
- ms408-0.1.0/docs/planning/i09/README.md +42 -0
- ms408-0.1.0/docs/planning/i09/STATUS.md +44 -0
- ms408-0.1.0/docs/planning/i10/EXPERIMENTS.md +73 -0
- ms408-0.1.0/docs/planning/i10/README.md +69 -0
- ms408-0.1.0/docs/planning/i10/STATUS.md +60 -0
- ms408-0.1.0/docs/planning/i11/README.md +54 -0
- ms408-0.1.0/docs/planning/i11/STATUS.md +93 -0
- ms408-0.1.0/docs/planning/publication-h2-2026/PATHWAYS.md +50 -0
- ms408-0.1.0/docs/planning/publication-h2-2026/README.md +60 -0
- ms408-0.1.0/docs/planning/publication-h2-2026/SCORING.md +53 -0
- ms408-0.1.0/docs/planning/publication-h2-2026/VENUE-LANDSCAPE.md +84 -0
- ms408-0.1.0/docs/planning/publication-h2-2026/outreach/voynich-conf-2026-email.md +49 -0
- ms408-0.1.0/docs/planning/publication-h2-2026/pathways/alpha/v1.md +53 -0
- ms408-0.1.0/docs/planning/publication-h2-2026/pathways/beta/v1.md +52 -0
- ms408-0.1.0/docs/planning/publication-h2-2026/pathways/delta/v1.md +68 -0
- ms408-0.1.0/docs/planning/publication-h2-2026/pathways/gamma/v1.md +52 -0
- ms408-0.1.0/docs/refutations/2026-07-15-e21-positional-generator.md +35 -0
- ms408-0.1.0/docs/refutations/2026-07-15-e22-e23-genericity-reuse.md +35 -0
- ms408-0.1.0/docs/refutations/2026-07-16-e25-e26-v5-deflation.md +37 -0
- ms408-0.1.0/docs/refutations/2026-07-17-e29-naibbe.md +44 -0
- ms408-0.1.0/docs/refutations/2026-07-17-methods-paper.md +82 -0
- ms408-0.1.0/docs/refutations/2026-07-17-paper-v6.md +48 -0
- ms408-0.1.0/docs/refutations/2026-07-22-e33-block-scale-di.md +57 -0
- ms408-0.1.0/docs/refutations/README.md +45 -0
- ms408-0.1.0/docs/synthesis/FLAGSHIP.md +488 -0
- ms408-0.1.0/docs/synthesis/FRAMEWORKS.md +142 -0
- ms408-0.1.0/docs/synthesis/T33-critique-log.md +155 -0
- ms408-0.1.0/docs/synthesis/TIMELINE.md +101 -0
- ms408-0.1.0/examples/README.md +23 -0
- ms408-0.1.0/examples/evaluate_naibbe.py +104 -0
- ms408-0.1.0/paper/CHANGELOG.md +182 -0
- ms408-0.1.0/paper/SUBMISSION.md +130 -0
- ms408-0.1.0/paper/make_arxiv_bundle.sh +31 -0
- ms408-0.1.0/paper/metadata.yaml +16 -0
- ms408-0.1.0/paper/methods/main.tex +340 -0
- ms408-0.1.0/paper/methods/refs.bib +159 -0
- ms408-0.1.0/paper/methods/v2/main.tex +378 -0
- ms408-0.1.0/paper/methods/v2/refs.bib +177 -0
- ms408-0.1.0/paper/methods/v3/main.tex +403 -0
- ms408-0.1.0/paper/methods/v3/refs.bib +183 -0
- ms408-0.1.0/paper/pathways/README.md +30 -0
- ms408-0.1.0/paper/pathways/alpha-tacl/main.tex +206 -0
- ms408-0.1.0/paper/pathways/alpha-tacl/refs.bib +126 -0
- ms408-0.1.0/paper/pathways/beta-lre/main.tex +199 -0
- ms408-0.1.0/paper/pathways/beta-lre/refs.bib +183 -0
- ms408-0.1.0/paper/pathways/delta-conf/main.tex +92 -0
- ms408-0.1.0/paper/pathways/delta-conf/refs.bib +111 -0
- ms408-0.1.0/paper/pathways/gamma-dhq/main.tex +164 -0
- ms408-0.1.0/paper/pathways/gamma-dhq/refs.bib +119 -0
- ms408-0.1.0/paper/v1/main.tex +253 -0
- ms408-0.1.0/paper/v1/refs.bib +83 -0
- ms408-0.1.0/paper/v2/main.tex +313 -0
- ms408-0.1.0/paper/v2/refs.bib +97 -0
- ms408-0.1.0/paper/v3/main.tex +400 -0
- ms408-0.1.0/paper/v3/refs.bib +97 -0
- ms408-0.1.0/paper/v4/main.tex +507 -0
- ms408-0.1.0/paper/v4/refs.bib +97 -0
- ms408-0.1.0/paper/v5/main.tex +532 -0
- ms408-0.1.0/paper/v5/refs.bib +97 -0
- ms408-0.1.0/paper/v5b/main.tex +569 -0
- ms408-0.1.0/paper/v5b/refs.bib +97 -0
- ms408-0.1.0/paper/v6/main.tex +601 -0
- ms408-0.1.0/paper/v6/refs.bib +111 -0
- ms408-0.1.0/paper/v6b/main.tex +616 -0
- ms408-0.1.0/paper/v6b/refs.bib +111 -0
- ms408-0.1.0/paper/v7/main.tex +644 -0
- ms408-0.1.0/paper/v7/refs.bib +111 -0
- ms408-0.1.0/pyproject.toml +77 -0
- ms408-0.1.0/reports/.gitkeep +0 -0
- ms408-0.1.0/reports/e1_meaning_detector.md +34 -0
- ms408-0.1.0/reports/e21_positional_generator.md +31 -0
- ms408-0.1.0/reports/e22_generator_genericity.md +25 -0
- ms408-0.1.0/reports/e23_reuse_generator.md +23 -0
- ms408-0.1.0/reports/e24_typelevel_lexicon.md +18 -0
- ms408-0.1.0/reports/e25_decoupled_ed1.md +17 -0
- ms408-0.1.0/reports/e26_length_variance.md +17 -0
- ms408-0.1.0/reports/e27_symbol_quantification.md +20 -0
- ms408-0.1.0/reports/e28_angular_anchor.md +26 -0
- ms408-0.1.0/reports/e29_naibbe_discriminators.md +20 -0
- ms408-0.1.0/reports/e2_wordorder_confound.md +23 -0
- ms408-0.1.0/reports/e30_cipher_reexamination.md +31 -0
- ms408-0.1.0/reports/e31_harden_syntax.md +19 -0
- ms408-0.1.0/reports/e33_block_scale_di.md +52 -0
- ms408-0.1.0/reports/e3_anchor_power.md +28 -0
- ms408-0.1.0/reports/e4_root_leaf.md +28 -0
- ms408-0.1.0/reports/e5_encoding_fair.md +32 -0
- ms408-0.1.0/reports/e6_cipher_reconstruction.md +34 -0
- ms408-0.1.0/reports/harness_benchmark.md +55 -0
- ms408-0.1.0/reports/replication_report.md +74 -0
- ms408-0.1.0/reports/study_anchor_hunt.md +44 -0
- ms408-0.1.0/reports/study_anchor_labels.md +36 -0
- ms408-0.1.0/reports/study_encoding_bracket.md +30 -0
- ms408-0.1.0/reports/study_morphology.md +30 -0
- ms408-0.1.0/reports/study_p1_variants.md +37 -0
- ms408-0.1.0/reports/study_referential_realism.md +39 -0
- ms408-0.1.0/reports/study_topics.md +33 -0
- ms408-0.1.0/reports/synthesis_competing_narratives.md +102 -0
- ms408-0.1.0/results/.gitkeep +0 -0
- ms408-0.1.0/results/annotations/archive/t13_annotations_v0.1-coarse.jsonl +227 -0
- ms408-0.1.0/results/annotations/archive/t13_qa_v0.1-coarse.json +455 -0
- ms408-0.1.0/results/annotations/t13_manifest.json +9 -0
- ms408-0.1.0/results/annotations/t13_qa.json +410 -0
- ms408-0.1.0/results/experiments/e10_haiku_annotations.jsonl +129 -0
- ms408-0.1.0/results/experiments/e12_openai_annotations.jsonl +129 -0
- ms408-0.1.0/results/experiments/e4b_opus_annotations.jsonl +129 -0
- ms408-0.1.0/results/harness/benchmark.json +981 -0
- ms408-0.1.0/results/replication/measurements.json +172 -0
- ms408-0.1.0/results/replication/replication.json +840 -0
- ms408-0.1.0/results/studies/anchor_hunt.json +194 -0
- ms408-0.1.0/results/studies/anchor_labels.json +124 -0
- ms408-0.1.0/results/studies/encoding_bracket.json +140 -0
- ms408-0.1.0/results/studies/morphology.json +935 -0
- ms408-0.1.0/results/studies/p1_variants.json +296 -0
- ms408-0.1.0/results/studies/referential_realism.json +136 -0
- ms408-0.1.0/results/studies/topics.json +127 -0
- ms408-0.1.0/scripts/load-env.sh +14 -0
- ms408-0.1.0/site/.gitignore +8 -0
- ms408-0.1.0/site/README.md +38 -0
- ms408-0.1.0/site/astro.config.mjs +22 -0
- ms408-0.1.0/site/package-lock.json +5669 -0
- ms408-0.1.0/site/package.json +22 -0
- ms408-0.1.0/site/public/CNAME +1 -0
- ms408-0.1.0/site/public/papers/adversarial-self-correction.pdf +0 -0
- ms408-0.1.0/site/public/papers/constraint-envelope.pdf +0 -0
- ms408-0.1.0/site/scripts/build-font.mjs +131 -0
- ms408-0.1.0/site/scripts/build-papers.sh +20 -0
- ms408-0.1.0/site/scripts/sync-content.mjs +68 -0
- ms408-0.1.0/site/src/components/BalneoBathers.astro +42 -0
- ms408-0.1.0/site/src/components/BalneoPool.astro +30 -0
- ms408-0.1.0/site/src/components/BalneoTubes.astro +26 -0
- ms408-0.1.0/site/src/components/BotanicalDivider.astro +30 -0
- ms408-0.1.0/site/src/components/Frame.astro +36 -0
- ms408-0.1.0/site/src/components/GlyphFrieze.astro +30 -0
- ms408-0.1.0/site/src/components/HerbalSprig.astro +41 -0
- ms408-0.1.0/site/src/components/Rosette.astro +30 -0
- ms408-0.1.0/site/src/components/RosettesFoldout.astro +49 -0
- ms408-0.1.0/site/src/config.ts +14 -0
- ms408-0.1.0/site/src/content/activities/is-it-a-language.md +66 -0
- ms408-0.1.0/site/src/content/activities/make-and-test-a-cipher.md +62 -0
- ms408-0.1.0/site/src/content/activities/observe-like-a-scholar.md +53 -0
- ms408-0.1.0/site/src/content.config.ts +33 -0
- ms408-0.1.0/site/src/data/media.json +45 -0
- ms408-0.1.0/site/src/data/papers.json +28 -0
- ms408-0.1.0/site/src/data/timeline.json +64 -0
- ms408-0.1.0/site/src/layouts/Base.astro +76 -0
- ms408-0.1.0/site/src/pages/about.astro +65 -0
- ms408-0.1.0/site/src/pages/balneo/index.astro +68 -0
- ms408-0.1.0/site/src/pages/cite.astro +42 -0
- ms408-0.1.0/site/src/pages/docs/[...slug].astro +26 -0
- ms408-0.1.0/site/src/pages/docs/index.astro +21 -0
- ms408-0.1.0/site/src/pages/index.astro +67 -0
- ms408-0.1.0/site/src/pages/library/activities/[...slug].astro +41 -0
- ms408-0.1.0/site/src/pages/library/index.astro +75 -0
- ms408-0.1.0/site/src/pages/library/submit.astro +46 -0
- ms408-0.1.0/site/src/pages/media/index.astro +97 -0
- ms408-0.1.0/site/src/pages/papers/index.astro +32 -0
- ms408-0.1.0/site/src/pages/robots.txt.ts +17 -0
- ms408-0.1.0/site/src/pages/timeline/index.astro +81 -0
- ms408-0.1.0/site/src/styles/global.css +174 -0
- ms408-0.1.0/site/src/styles/theme-ms408.css +148 -0
- ms408-0.1.0/site/tsconfig.json +5 -0
- ms408-0.1.0/src/ms408/__init__.py +18 -0
- ms408-0.1.0/src/ms408/__main__.py +45 -0
- ms408-0.1.0/src/ms408/acquire.py +64 -0
- ms408-0.1.0/src/ms408/annotate/__init__.py +6 -0
- ms408-0.1.0/src/ms408/annotate/pipeline.py +223 -0
- ms408-0.1.0/src/ms408/annotate/qa.py +204 -0
- ms408-0.1.0/src/ms408/annotate/schema.py +217 -0
- ms408-0.1.0/src/ms408/benchmark.py +245 -0
- ms408-0.1.0/src/ms408/data/__init__.py +7 -0
- ms408-0.1.0/src/ms408/data/reference_bands.json +122 -0
- ms408-0.1.0/src/ms408/dataset.py +97 -0
- ms408-0.1.0/src/ms408/env.py +46 -0
- ms408-0.1.0/src/ms408/experiments/__init__.py +5 -0
- ms408-0.1.0/src/ms408/experiments/e10_third_rater.py +312 -0
- ms408-0.1.0/src/ms408/experiments/e11_style_control.py +184 -0
- ms408-0.1.0/src/ms408/experiments/e12_independent_rater.py +446 -0
- ms408-0.1.0/src/ms408/experiments/e13_function_content.py +290 -0
- ms408-0.1.0/src/ms408/experiments/e13b_function_content.py +181 -0
- ms408-0.1.0/src/ms408/experiments/e13c_function_content_corrected.py +156 -0
- ms408-0.1.0/src/ms408/experiments/e13d_band_robustness.py +169 -0
- ms408-0.1.0/src/ms408/experiments/e14_word_classes.py +210 -0
- ms408-0.1.0/src/ms408/experiments/e14b_word_class_robustness.py +166 -0
- ms408-0.1.0/src/ms408/experiments/e15_morphology.py +206 -0
- ms408-0.1.0/src/ms408/experiments/e15b_morphology_corrected.py +167 -0
- ms408-0.1.0/src/ms408/experiments/e17_ab_contrast.py +168 -0
- ms408-0.1.0/src/ms408/experiments/e18_corpus_completeness.py +107 -0
- ms408-0.1.0/src/ms408/experiments/e19_joint_signature.py +187 -0
- ms408-0.1.0/src/ms408/experiments/e19b_language_universality.py +139 -0
- ms408-0.1.0/src/ms408/experiments/e1_meaning_detector.py +253 -0
- ms408-0.1.0/src/ms408/experiments/e20_transposition_closure.py +148 -0
- ms408-0.1.0/src/ms408/experiments/e21_positional_generator.py +408 -0
- ms408-0.1.0/src/ms408/experiments/e22_generator_genericity.py +273 -0
- ms408-0.1.0/src/ms408/experiments/e23_reuse_generator.py +294 -0
- ms408-0.1.0/src/ms408/experiments/e24_typelevel_lexicon.py +287 -0
- ms408-0.1.0/src/ms408/experiments/e25_decoupled_ed1.py +359 -0
- ms408-0.1.0/src/ms408/experiments/e26_length_variance.py +277 -0
- ms408-0.1.0/src/ms408/experiments/e27_symbol_quantification.py +228 -0
- ms408-0.1.0/src/ms408/experiments/e28_angular_anchor.py +350 -0
- ms408-0.1.0/src/ms408/experiments/e29_naibbe_discriminators.py +265 -0
- ms408-0.1.0/src/ms408/experiments/e2_wordorder_confound.py +282 -0
- ms408-0.1.0/src/ms408/experiments/e30_cipher_reexamination.py +223 -0
- ms408-0.1.0/src/ms408/experiments/e31_harden_syntax.py +264 -0
- ms408-0.1.0/src/ms408/experiments/e32_reference_bands.py +158 -0
- ms408-0.1.0/src/ms408/experiments/e33_block_scale_di.py +281 -0
- ms408-0.1.0/src/ms408/experiments/e3_anchor_power.py +269 -0
- ms408-0.1.0/src/ms408/experiments/e4_root_leaf.py +282 -0
- ms408-0.1.0/src/ms408/experiments/e4b_reannotate.py +263 -0
- ms408-0.1.0/src/ms408/experiments/e5_encoding_fair.py +565 -0
- ms408-0.1.0/src/ms408/experiments/e6_cipher_reconstruction.py +338 -0
- ms408-0.1.0/src/ms408/experiments/e7_fine_anchor.py +305 -0
- ms408-0.1.0/src/ms408/experiments/e8_whitened_bracket.py +332 -0
- ms408-0.1.0/src/ms408/experiments/e9_vms_coordinate.py +204 -0
- ms408-0.1.0/src/ms408/experiments/mid_level_null.py +42 -0
- ms408-0.1.0/src/ms408/h4.py +270 -0
- ms408-0.1.0/src/ms408/harness/__init__.py +1 -0
- ms408-0.1.0/src/ms408/harness/naibbe.py +303 -0
- ms408-0.1.0/src/ms408/harness/selfcitation.py +1221 -0
- ms408-0.1.0/src/ms408/ivtff.py +184 -0
- ms408-0.1.0/src/ms408/mz.py +107 -0
- ms408-0.1.0/src/ms408/replication.py +798 -0
- ms408-0.1.0/src/ms408/scanmap.py +84 -0
- ms408-0.1.0/src/ms408/scans.py +123 -0
- ms408-0.1.0/src/ms408/signature.py +257 -0
- ms408-0.1.0/src/ms408/sources.py +151 -0
- ms408-0.1.0/src/ms408/studies/__init__.py +1 -0
- ms408-0.1.0/src/ms408/studies/anchor_hunt.py +363 -0
- ms408-0.1.0/src/ms408/studies/anchor_labels.py +276 -0
- ms408-0.1.0/src/ms408/studies/encoding.py +335 -0
- ms408-0.1.0/src/ms408/studies/morphology.py +373 -0
- ms408-0.1.0/src/ms408/studies/referential_realism.py +331 -0
- ms408-0.1.0/src/ms408/studies/topics.py +374 -0
- ms408-0.1.0/src/ms408/studies/variants.py +428 -0
- ms408-0.1.0/src/ms408/synthesis/__init__.py +5 -0
- ms408-0.1.0/src/ms408/synthesis/narratives.py +259 -0
- ms408-0.1.0/src/ms408/synthesis/registry.py +213 -0
- ms408-0.1.0/src/ms408/textstats.py +145 -0
- ms408-0.1.0/src/ms408/verify.py +109 -0
- ms408-0.1.0/tests/.gitkeep +0 -0
- ms408-0.1.0/tests/test_anchor_hunt.py +77 -0
- ms408-0.1.0/tests/test_anchor_labels.py +40 -0
- ms408-0.1.0/tests/test_annotate_schema.py +52 -0
- ms408-0.1.0/tests/test_dataset.py +32 -0
- ms408-0.1.0/tests/test_e1.py +35 -0
- ms408-0.1.0/tests/test_e2.py +45 -0
- ms408-0.1.0/tests/test_e3.py +28 -0
- ms408-0.1.0/tests/test_e4.py +24 -0
- ms408-0.1.0/tests/test_encoding.py +56 -0
- ms408-0.1.0/tests/test_env.py +32 -0
- ms408-0.1.0/tests/test_h4.py +95 -0
- ms408-0.1.0/tests/test_ivtff.py +124 -0
- ms408-0.1.0/tests/test_morphology.py +60 -0
- ms408-0.1.0/tests/test_mz.py +103 -0
- ms408-0.1.0/tests/test_naibbe.py +128 -0
- ms408-0.1.0/tests/test_qa_scoring.py +51 -0
- ms408-0.1.0/tests/test_referential_realism.py +53 -0
- ms408-0.1.0/tests/test_replication.py +72 -0
- ms408-0.1.0/tests/test_scanmap.py +41 -0
- ms408-0.1.0/tests/test_selfcitation.py +184 -0
- ms408-0.1.0/tests/test_signature.py +120 -0
- ms408-0.1.0/tests/test_synthesis.py +43 -0
- ms408-0.1.0/tests/test_textstats.py +86 -0
- ms408-0.1.0/tests/test_topics.py +63 -0
- ms408-0.1.0/tests/test_verify.py +81 -0
- ms408-0.1.0/theme-kit/README.md +67 -0
- ms408-0.1.0/theme-kit/bootstrap/_ms408-variables.scss +42 -0
- ms408-0.1.0/theme-kit/demo.html +95 -0
- ms408-0.1.0/theme-kit/font/ms408-dingbats.css +37 -0
- ms408-0.1.0/theme-kit/font/ms408-dingbats.otf +0 -0
- ms408-0.1.0/theme-kit/font/specimen.json +82 -0
- ms408-0.1.0/theme-kit/motifs/balneo-bathers.svg +1 -0
- ms408-0.1.0/theme-kit/motifs/balneo-pool.svg +12 -0
- ms408-0.1.0/theme-kit/motifs/balneo-tubes.svg +11 -0
- ms408-0.1.0/theme-kit/motifs/botanical-divider.svg +12 -0
- ms408-0.1.0/theme-kit/motifs/glyph-frieze.svg +11 -0
- ms408-0.1.0/theme-kit/motifs/herbal-sprig.svg +19 -0
- ms408-0.1.0/theme-kit/motifs/rosette.svg +22 -0
- ms408-0.1.0/theme-kit/motifs/rosettes-foldout.svg +1 -0
- ms408-0.1.0/theme-kit/package.json +12 -0
- ms408-0.1.0/theme-kit/tokens.css +39 -0
- ms408-0.1.0/theme-kit/wordpress/theme.json +42 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: package-paper
|
|
3
|
+
description: Package the current MS408 research state into a versioned LaTeX/arXiv preprint (PDF). Reads FLAGSHIP.md + results/ + reports/, assembles a graded paper snapshot, compiles to PDF. Re-run each iteration to re-release. Invoke when the user asks to build/update the paper, cut a preprint, or package research for peer feedback.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# package-paper — MS408 preprint packaging
|
|
7
|
+
|
|
8
|
+
Turn the program's current, already-graded synthesis into a self-contained
|
|
9
|
+
LaTeX/arXiv preprint PDF. This is a **re-releasable** snapshot: run it at the end of
|
|
10
|
+
any iteration to produce the next version. It does NOT do new analysis — it packages
|
|
11
|
+
what is already firewall-verified.
|
|
12
|
+
|
|
13
|
+
## Binding rules (inherit the program's discipline)
|
|
14
|
+
|
|
15
|
+
- **Firewall (L3).** Every number in the paper is copied from `results/**/*.json` or a
|
|
16
|
+
`reports/*.md` table — never estimated or recalled. If a needed number isn't in
|
|
17
|
+
`results/`, stop and say so; do not invent it.
|
|
18
|
+
- **Evidence grading (L6).** Carry the A–D grade on every claim, exactly as graded in
|
|
19
|
+
`docs/synthesis/FLAGSHIP.md`. Do not upgrade a claim to make the paper stronger.
|
|
20
|
+
- **No translation / no over-reach (L7).** No decipherment, plaintext, or real-taxon
|
|
21
|
+
claims. The paper's thesis is the *constraint envelope* + the *method*, not meaning.
|
|
22
|
+
- **Scope = the latest COMPLETED iteration.** Anything still in flight → "Future Work".
|
|
23
|
+
- **Honesty is the selling point.** The self-correction record (refutation passes
|
|
24
|
+
overturning the program's own conclusions) is a headline contribution, not an
|
|
25
|
+
embarrassment — report it plainly.
|
|
26
|
+
|
|
27
|
+
## Inputs (read in this order)
|
|
28
|
+
|
|
29
|
+
1. `docs/synthesis/FLAGSHIP.md` — the primary content source; it is already the
|
|
30
|
+
graded, refutation-passed synthesis. The paper is essentially a formatted,
|
|
31
|
+
citation-backed rendering of it.
|
|
32
|
+
2. `docs/planning/i0*/STATUS.md` — per-experiment verdicts and grades.
|
|
33
|
+
3. `results/experiments/*.json` and `results/**/*.json` — exact numbers (cite the
|
|
34
|
+
producing script + the value; spot-check that FLAGSHIP's numbers match the JSON).
|
|
35
|
+
4. `reports/*.md` — human-readable per-study tables for figures/appendix.
|
|
36
|
+
5. `paper/metadata.yaml` — title, authors, affiliations, venue, keywords (create from
|
|
37
|
+
`.claude/skills/package-paper/assets/metadata.example.yaml` if missing; if author
|
|
38
|
+
fields are placeholders, compile anyway and WARN the user to fill them).
|
|
39
|
+
|
|
40
|
+
## Procedure
|
|
41
|
+
|
|
42
|
+
1. **Determine version.** Next `paper/vN/` (v1 if none). Read `paper/metadata.yaml`
|
|
43
|
+
for `version` override; else N = highest existing + 1.
|
|
44
|
+
2. **Assemble `paper/vN/main.tex`** from the template
|
|
45
|
+
(`.claude/skills/package-paper/assets/template.tex`), filling:
|
|
46
|
+
- **Abstract** — the honest headline from FLAGSHIP: a genuine constrained two-system
|
|
47
|
+
script; meaning underdetermined and *provably* so with current statistics; the
|
|
48
|
+
one positive lead (root↔leaf) unresolved/underpowered; the method (harness +
|
|
49
|
+
firewall + adversarial self-correction) as the transferable contribution.
|
|
50
|
+
- **1 Introduction** — the manuscript; why prior decipherment claims fail; the
|
|
51
|
+
program's stance (shrink the constraint envelope, every claim graded; decipherment
|
|
52
|
+
is NOT the goal).
|
|
53
|
+
- **2 Data & Transliteration** — Beinecke MS 408; EVA (Zandbergen–Landini) primary,
|
|
54
|
+
v101 sensitivity; Currier A/B; Fagin Davis hands; the annotation pipeline.
|
|
55
|
+
- **3 Method: harness, firewall, adversarial refutation** — H1–H4 controls; the
|
|
56
|
+
replication gate; deterministic code→results→reports; evidence grades A–D; the
|
|
57
|
+
standing clean-context refutation pass. This section is the methodological
|
|
58
|
+
contribution; make it concrete.
|
|
59
|
+
- **4 Results** — grouped as in FLAGSHIP §1–§3: (a) established [A] facts
|
|
60
|
+
(entropy anomaly, A/B split, positional grammar, replication gate, ED1 network);
|
|
61
|
+
(b) disfavoured [C] (no lexical herbal naming system; verbose ciphers excluded,
|
|
62
|
+
abjad revived); (c) not established / underdetermined (meaning not localizable —
|
|
63
|
+
E9; no encoding family distinguished — E5/E8); (d) the root↔leaf arc E4→E12 →
|
|
64
|
+
UNRESOLVED-underpowered. Every subsection cites exact numbers from `results/`.
|
|
65
|
+
- **5 Discussion** — meaning-vs-meaningless is underdetermined and E9 shows *why*
|
|
66
|
+
(structure statistics ≠ meaning detectors); the abjad revival; the self-
|
|
67
|
+
correction meta-result (list the overturned own-conclusions).
|
|
68
|
+
- **6 Limitations** — annotation noise (leaf κ≈0.45), model-lineage dependence,
|
|
69
|
+
single-corpus power limits, EVA-dependence (v101 sensitivity).
|
|
70
|
+
- **7 Future Work** — everything post-scope: the human-panel root↔leaf adjudication;
|
|
71
|
+
the i05 mid-level linguistic program (morphology, word-classes, function/content
|
|
72
|
+
bimodality) with A/B stratification; abjad joint-signature test; second cross-
|
|
73
|
+
vendor rater.
|
|
74
|
+
- **References** — use `assets/refs.bib`; add any missing key works; mark any
|
|
75
|
+
citation whose details you could not verify with a `% UNVERIFIED` comment.
|
|
76
|
+
3. **Copy** `assets/refs.bib` → `paper/vN/refs.bib`; copy any figures.
|
|
77
|
+
4. **Compile:** `cd paper/vN && latexmk -pdf -interaction=nonstopmode main.tex`
|
|
78
|
+
(fallback: two `pdflatex` passes + `bibtex`). Fix LaTeX errors and recompile.
|
|
79
|
+
5. **Verify & report:** confirm `paper/vN/main.pdf` exists and page count > 0; list
|
|
80
|
+
any `% UNVERIFIED` citations and placeholder metadata; print the version + path.
|
|
81
|
+
Do NOT auto-send anywhere (publishing is a user decision).
|
|
82
|
+
|
|
83
|
+
## Re-release
|
|
84
|
+
|
|
85
|
+
Each run writes a new `paper/vN/`; prior versions are immutable. Bump the version in
|
|
86
|
+
`paper/metadata.yaml` or let the skill auto-increment. A changelog line per version
|
|
87
|
+
lives in `paper/CHANGELOG.md` (create/append).
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Copy to paper/metadata.yaml and fill in. The package-paper skill reads this.
|
|
2
|
+
title: "Shrinking the Constraint Envelope of the Voynich Manuscript: A Firewall-Disciplined, Self-Correcting Computational Program"
|
|
3
|
+
authors:
|
|
4
|
+
- "FILL IN — e.g. Tim <Surname>"
|
|
5
|
+
affiliations:
|
|
6
|
+
- "FILL IN — affiliation / independent researcher"
|
|
7
|
+
contact: "tim@mims.ms"
|
|
8
|
+
keywords:
|
|
9
|
+
- "Voynich Manuscript"
|
|
10
|
+
- "computational philology"
|
|
11
|
+
- "constraint-based analysis"
|
|
12
|
+
- "adversarial validation"
|
|
13
|
+
- "evidence grading"
|
|
14
|
+
venue: "arXiv preprint" # or a target venue name
|
|
15
|
+
version: auto # 'auto' -> next vN; or pin e.g. v1
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
% Seed bibliography for MS408 preprints. Details for well-known works are standard;
|
|
2
|
+
% VERIFY volume/page/year before submission. Add new refs as the program cites them.
|
|
3
|
+
|
|
4
|
+
@article{montemurro2013keywords,
|
|
5
|
+
title = {Keywords and Co-Occurrence Patterns in the Voynich Manuscript: An Information-Theoretic Analysis},
|
|
6
|
+
author = {Montemurro, Marcelo A. and Zanette, Damian H.},
|
|
7
|
+
journal = {PLoS ONE},
|
|
8
|
+
volume = {8}, number = {6}, pages = {e66344}, year = {2013},
|
|
9
|
+
doi = {10.1371/journal.pone.0066344}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
@article{bowern2021linguistics,
|
|
13
|
+
title = {The Linguistics of the Voynich Manuscript},
|
|
14
|
+
author = {Bowern, Claire L. and Lindemann, Luke},
|
|
15
|
+
journal = {Annual Review of Linguistics},
|
|
16
|
+
volume = {7}, pages = {285--308}, year = {2021},
|
|
17
|
+
doi = {10.1146/annurev-linguistics-011619-030613}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@article{reddy2011know,
|
|
21
|
+
title = {What We Know About the Voynich Manuscript},
|
|
22
|
+
author = {Reddy, Sravana and Knight, Kevin},
|
|
23
|
+
journal = {Proceedings of the 5th ACL-HLT Workshop on Language Technology for Cultural Heritage, Social Sciences, and Humanities (LaTeCH)},
|
|
24
|
+
pages = {78--86}, year = {2011}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@article{hauer2016decoding,
|
|
28
|
+
title = {Decoding Anagrammed Texts Written in an Unknown Language and Script},
|
|
29
|
+
author = {Hauer, Bradley and Kondrak, Grzegorz},
|
|
30
|
+
journal = {Transactions of the Association for Computational Linguistics},
|
|
31
|
+
volume = {4}, pages = {75--86}, year = {2016}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@techreport{currier1976,
|
|
35
|
+
title = {Papers on the Voynich Manuscript},
|
|
36
|
+
author = {Currier, Prescott H.},
|
|
37
|
+
institution = {Unpublished; collected in the New Signals seminars},
|
|
38
|
+
year = {1976},
|
|
39
|
+
note = {Origin of the Currier A/B language distinction. % UNVERIFIED details}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@book{dimperio1978elegant,
|
|
43
|
+
title = {The Voynich Manuscript: An Elegant Enigma},
|
|
44
|
+
author = {D'Imperio, Mary E.},
|
|
45
|
+
publisher = {National Security Agency / Aegean Park Press},
|
|
46
|
+
year = {1978}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@misc{fagindavis2020hands,
|
|
50
|
+
title = {How Many Glyphs and How Many Scribes? Digital Paleography and the Voynich Manuscript},
|
|
51
|
+
author = {Fagin Davis, Lisa},
|
|
52
|
+
year = {2020},
|
|
53
|
+
note = {Manuscript Studies; identification of multiple scribal hands. % UNVERIFIED details}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@misc{zandbergen_voynichnu,
|
|
57
|
+
title = {The Voynich Manuscript ({voynich.nu})},
|
|
58
|
+
author = {Zandbergen, Ren\'e},
|
|
59
|
+
year = {2024},
|
|
60
|
+
note = {EVA and ZL transliterations; IVTFF format. \url{https://www.voynich.nu}}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@misc{timm2020selfcitation,
|
|
64
|
+
title = {The Voynich Manuscript: Symbol Roots, Features, and a Self-Citation Generative Method},
|
|
65
|
+
author = {Timm, Torsten and Schinner, Andreas},
|
|
66
|
+
year = {2020},
|
|
67
|
+
note = {Self-citation / auto-copying generation hypothesis. % UNVERIFIED details}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
@misc{stolfi_grammar,
|
|
71
|
+
title = {A Prefix-Midfix-Suffix Grammar for Voynichese Words},
|
|
72
|
+
author = {Stolfi, Jorge},
|
|
73
|
+
year = {2000},
|
|
74
|
+
note = {Word-structure ``crust-mantle-core'' model. \url{https://www.ic.unicamp.br/~stolfi/voynich/}}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
@article{lindemann2022entropy,
|
|
78
|
+
title = {Character Entropy and the Voynich Manuscript},
|
|
79
|
+
author = {Lindemann, Luke and Bowern, Claire L.},
|
|
80
|
+
journal = {Working paper},
|
|
81
|
+
year = {2022},
|
|
82
|
+
note = {Conditional character entropy (h1/h2) with spaces. % UNVERIFIED details}
|
|
83
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
% MS408 preprint template (arXiv-style, self-contained; compiles with pdflatex).
|
|
2
|
+
% Placeholders in <ANGLE BRACKETS> are filled by the package-paper skill.
|
|
3
|
+
\documentclass[11pt]{article}
|
|
4
|
+
|
|
5
|
+
\usepackage[utf8]{inputenc}
|
|
6
|
+
\usepackage[T1]{fontenc}
|
|
7
|
+
\usepackage{lmodern}
|
|
8
|
+
\usepackage[margin=1in]{geometry}
|
|
9
|
+
\usepackage{microtype}
|
|
10
|
+
\usepackage{amsmath,amssymb}
|
|
11
|
+
\usepackage{booktabs}
|
|
12
|
+
\usepackage{graphicx}
|
|
13
|
+
\usepackage{xcolor}
|
|
14
|
+
\usepackage{enumitem}
|
|
15
|
+
\usepackage[hidelinks]{hyperref}
|
|
16
|
+
\usepackage{natbib}
|
|
17
|
+
\usepackage{titlesec}
|
|
18
|
+
\titleformat{\section}{\normalfont\large\bfseries}{\thesection}{0.6em}{}
|
|
19
|
+
|
|
20
|
+
% Evidence-grade tag, e.g. \grade{A}
|
|
21
|
+
\newcommand{\grade}[1]{{\small\textbf{[Grade #1]}}}
|
|
22
|
+
|
|
23
|
+
\title{\textbf{<TITLE>}}
|
|
24
|
+
\author{<AUTHORS> \\ \small <AFFILIATIONS> \\ \small \texttt{<CONTACT>}}
|
|
25
|
+
\date{Preprint <VERSION> --- <DATE>}
|
|
26
|
+
|
|
27
|
+
\begin{document}
|
|
28
|
+
\maketitle
|
|
29
|
+
|
|
30
|
+
\begin{abstract}
|
|
31
|
+
\noindent <ABSTRACT>
|
|
32
|
+
\end{abstract}
|
|
33
|
+
|
|
34
|
+
\noindent\textbf{Keywords:} <KEYWORDS>
|
|
35
|
+
|
|
36
|
+
\section{Introduction}
|
|
37
|
+
<INTRODUCTION>
|
|
38
|
+
|
|
39
|
+
\section{Data and Transliteration}
|
|
40
|
+
<DATA>
|
|
41
|
+
|
|
42
|
+
\section{Method: Harness, Firewall, and Adversarial Refutation}
|
|
43
|
+
<METHOD>
|
|
44
|
+
|
|
45
|
+
\section{Results}
|
|
46
|
+
<RESULTS>
|
|
47
|
+
|
|
48
|
+
\section{Discussion}
|
|
49
|
+
<DISCUSSION>
|
|
50
|
+
|
|
51
|
+
\section{Limitations}
|
|
52
|
+
<LIMITATIONS>
|
|
53
|
+
|
|
54
|
+
\section{Future Work}
|
|
55
|
+
<FUTUREWORK>
|
|
56
|
+
|
|
57
|
+
\section*{Reproducibility}
|
|
58
|
+
All statistics are produced by deterministic, versioned code (fixed seeds) writing
|
|
59
|
+
machine-readable JSON to \texttt{results/}; every reported number records its
|
|
60
|
+
producing script, git commit, dataset version, and parameters. Source and data-
|
|
61
|
+
processing code accompany this preprint.
|
|
62
|
+
|
|
63
|
+
\bibliographystyle{plainnat}
|
|
64
|
+
\bibliography{refs}
|
|
65
|
+
|
|
66
|
+
\end{document}
|
ms408-0.1.0/.env.example
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Copy to .env (which is gitignored) and fill in real values. NEVER commit real keys.
|
|
2
|
+
# These are needed ONLY for the optional vision-annotation / cross-rater track
|
|
3
|
+
# (the `[vision]` extra). The core evaluator — ms408.evaluate / the CLI / verify —
|
|
4
|
+
# needs NO keys and makes no network calls.
|
|
5
|
+
|
|
6
|
+
# Anthropic — vision annotation pipeline (ms408.annotate, e4b, e10)
|
|
7
|
+
ANTHROPIC_API_KEY=sk-ant-your-key-here
|
|
8
|
+
|
|
9
|
+
# OpenAI — cross-vendor independent rater (e12, "openai")
|
|
10
|
+
OPENAI_API_KEY=sk-proj-your-key-here
|
|
11
|
+
|
|
12
|
+
# Google — cross-vendor independent rater (e12, "gemini")
|
|
13
|
+
GOOGLE_API_KEY=your-google-api-key-here
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
name: Guided activity submission
|
|
2
|
+
description: Submit a guided activity for the library/education portal. Educators only; must be classroom-tested.
|
|
3
|
+
title: "[activity] "
|
|
4
|
+
labels: ["activity-submission"]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: |
|
|
9
|
+
Thanks for contributing! Two requirements keep this collection trustworthy:
|
|
10
|
+
**(1)** you are an educational practitioner, and **(2)** you have run this activity
|
|
11
|
+
with real learners. Please answer honestly — untested ideas can't be published.
|
|
12
|
+
- type: dropdown
|
|
13
|
+
id: practitioner
|
|
14
|
+
attributes:
|
|
15
|
+
label: Are you an educational practitioner?
|
|
16
|
+
description: Required. Roughly — do you work with learners?
|
|
17
|
+
options:
|
|
18
|
+
- Teacher (K–12)
|
|
19
|
+
- Librarian
|
|
20
|
+
- Museum / informal educator
|
|
21
|
+
- Homeschool educator
|
|
22
|
+
- Tutor / after-school
|
|
23
|
+
- University / college educator
|
|
24
|
+
- Other educator
|
|
25
|
+
validations:
|
|
26
|
+
required: true
|
|
27
|
+
- type: checkboxes
|
|
28
|
+
id: qualify
|
|
29
|
+
attributes:
|
|
30
|
+
label: Required confirmations
|
|
31
|
+
options:
|
|
32
|
+
- label: I have run this activity with a real class or group of learners (at least once).
|
|
33
|
+
required: true
|
|
34
|
+
- label: I can describe how it went and what I would change.
|
|
35
|
+
required: true
|
|
36
|
+
- label: I agree to license the submitted activity under CC BY 4.0 so others can use it.
|
|
37
|
+
required: true
|
|
38
|
+
- type: input
|
|
39
|
+
id: title
|
|
40
|
+
attributes:
|
|
41
|
+
label: Activity title
|
|
42
|
+
validations:
|
|
43
|
+
required: true
|
|
44
|
+
- type: input
|
|
45
|
+
id: ages
|
|
46
|
+
attributes:
|
|
47
|
+
label: Age range
|
|
48
|
+
placeholder: "e.g. 8–12"
|
|
49
|
+
validations:
|
|
50
|
+
required: true
|
|
51
|
+
- type: input
|
|
52
|
+
id: duration
|
|
53
|
+
attributes:
|
|
54
|
+
label: Duration
|
|
55
|
+
placeholder: "e.g. 30–45 min"
|
|
56
|
+
validations:
|
|
57
|
+
required: true
|
|
58
|
+
- type: textarea
|
|
59
|
+
id: summary
|
|
60
|
+
attributes:
|
|
61
|
+
label: One-paragraph summary
|
|
62
|
+
description: What learners do and take away.
|
|
63
|
+
validations:
|
|
64
|
+
required: true
|
|
65
|
+
- type: textarea
|
|
66
|
+
id: objectives
|
|
67
|
+
attributes:
|
|
68
|
+
label: Learning goals (one per line)
|
|
69
|
+
validations:
|
|
70
|
+
required: true
|
|
71
|
+
- type: textarea
|
|
72
|
+
id: materials
|
|
73
|
+
attributes:
|
|
74
|
+
label: Materials (one per line)
|
|
75
|
+
- type: textarea
|
|
76
|
+
id: steps
|
|
77
|
+
attributes:
|
|
78
|
+
label: Step-by-step instructions
|
|
79
|
+
validations:
|
|
80
|
+
required: true
|
|
81
|
+
- type: textarea
|
|
82
|
+
id: classroom_experience
|
|
83
|
+
attributes:
|
|
84
|
+
label: How did it go with real learners?
|
|
85
|
+
description: The group/setting, what worked, and what you would change. This is how we know it's tested.
|
|
86
|
+
validations:
|
|
87
|
+
required: true
|
|
88
|
+
- type: input
|
|
89
|
+
id: credit
|
|
90
|
+
attributes:
|
|
91
|
+
label: Name / affiliation for credit (optional)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug report
|
|
3
|
+
about: Something in the toolkit is broken or behaves incorrectly
|
|
4
|
+
title: "[bug] "
|
|
5
|
+
labels: bug
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
**What happened**
|
|
9
|
+
<!-- and what you expected instead -->
|
|
10
|
+
|
|
11
|
+
**To reproduce**
|
|
12
|
+
```
|
|
13
|
+
# exact command / code, e.g. python -m ms408 my_tokens.txt
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**Environment**
|
|
17
|
+
- ms408 version / commit:
|
|
18
|
+
- Python version:
|
|
19
|
+
- OS:
|
|
20
|
+
|
|
21
|
+
**Reproducibility check (if relevant)**
|
|
22
|
+
- [ ] `python -m ms408.verify` output:
|
|
23
|
+
- [ ] Did the input have at least 1000 tokens? (the evaluator refuses shorter streams — see docs/LIMITS.md)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
blank_issues_enabled: true
|
|
2
|
+
contact_links:
|
|
3
|
+
- name: Read the limits first
|
|
4
|
+
url: https://github.com/DireLabs/ms408/blob/main/docs/LIMITS.md
|
|
5
|
+
about: "Most 'unexpected verdict' questions are answered here — matching is necessary, not sufficient."
|
|
6
|
+
- name: Security issue
|
|
7
|
+
url: https://github.com/DireLabs/ms408/blob/main/SECURITY.md
|
|
8
|
+
about: "Please report security issues privately, not as a public issue."
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Hypothesis / evaluation question
|
|
3
|
+
about: A question about evaluating a hypothesis, or an unexpected verdict
|
|
4
|
+
title: "[eval] "
|
|
5
|
+
labels: question
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
**Your hypothesis**
|
|
9
|
+
<!-- e.g. "my generator output should match the manuscript" / "is this cipher scheme excluded?" -->
|
|
10
|
+
|
|
11
|
+
**What the evaluator reported**
|
|
12
|
+
<!-- paste the `python -m ms408 --json ...` verdict, or the hard/soft axis counts -->
|
|
13
|
+
|
|
14
|
+
**What's confusing / what you expected**
|
|
15
|
+
<!-- Remember: matching the bands is NECESSARY, not SUFFICIENT. Out-of-band on a CONFOUNDED
|
|
16
|
+
axis (dI, *_global) or an ADVISORY axis (ttr) is not exclusion — see docs/LIMITS.md and the
|
|
17
|
+
Naibbe worked example (examples/evaluate_naibbe.py). -->
|
|
18
|
+
|
|
19
|
+
**Token budget**
|
|
20
|
+
- Number of tokens evaluated (bands are built at 10,000; below ~8,000 axes aren't strictly comparable):
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<!-- Thanks for contributing. This project runs on a firewall discipline (see CONTRIBUTING.md);
|
|
2
|
+
the checklist below is that discipline at the door. -->
|
|
3
|
+
|
|
4
|
+
## What this PR does
|
|
5
|
+
|
|
6
|
+
<!-- one or two sentences -->
|
|
7
|
+
|
|
8
|
+
## Discipline checklist
|
|
9
|
+
|
|
10
|
+
- [ ] **Firewall:** every reported number is produced by deterministic, versioned code
|
|
11
|
+
writing to `results/` — none hand-entered, estimated, or recalled.
|
|
12
|
+
- [ ] **Determinism:** fixed seeds; no wall-clock/randomness in reported computations. The
|
|
13
|
+
result reproduces from committed code + acquired data.
|
|
14
|
+
- [ ] **Evidence grade:** any empirical claim states its grade (A–D). I have not raised a
|
|
15
|
+
grade to make a result look stronger.
|
|
16
|
+
- [ ] **No decipherment / meaning claims (L7).** This PR makes no plaintext/meaning/symbol-value
|
|
17
|
+
claim; "matches the manuscript" is treated as necessary, not sufficient.
|
|
18
|
+
- [ ] **Data (L19):** no third-party corpora committed; any new source is added to
|
|
19
|
+
`ms408.sources` pinned by URL + sha256 + licence note.
|
|
20
|
+
- [ ] **Tests:** added/updated. If I changed a reported number or an axis definition, I
|
|
21
|
+
rebuilt the reference bands and re-pinned `tests/test_verify.py`, and
|
|
22
|
+
`python -m ms408.verify --full` passes.
|
|
23
|
+
- [ ] `ruff check src tests examples` and `pytest -q` pass locally.
|
|
24
|
+
|
|
25
|
+
## Adversarial check (for A/B-grade claims)
|
|
26
|
+
|
|
27
|
+
<!-- If this PR asserts a strong empirical claim, describe (or link) the clean-context
|
|
28
|
+
refutation it survived, per docs/METHODOLOGY.md. -->
|
|
29
|
+
|
|
30
|
+
## Notes / limitations
|
|
31
|
+
|
|
32
|
+
<!-- Be honest about what this does NOT establish. An accurately-scoped negative is welcome. -->
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
name: ci
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
concurrency:
|
|
12
|
+
group: ci-${{ github.ref }}
|
|
13
|
+
cancel-in-progress: true
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
test:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
strategy:
|
|
19
|
+
fail-fast: false
|
|
20
|
+
matrix:
|
|
21
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v4
|
|
24
|
+
- uses: actions/setup-python@v5
|
|
25
|
+
with:
|
|
26
|
+
python-version: ${{ matrix.python-version }}
|
|
27
|
+
cache: pip
|
|
28
|
+
- name: Install (core + dev)
|
|
29
|
+
run: pip install -e ".[dev]"
|
|
30
|
+
- name: Lint
|
|
31
|
+
run: ruff check src tests examples
|
|
32
|
+
# Tests needing the acquired corpus (L19 consume-only) skip automatically; the
|
|
33
|
+
# value-pinning test (test_shipped_bands_are_pinned) runs data-free and guards the
|
|
34
|
+
# exact numbers the tool reports.
|
|
35
|
+
- name: Test
|
|
36
|
+
run: pytest -q
|
|
37
|
+
|
|
38
|
+
build:
|
|
39
|
+
# Packaging guard: the wheel must build and ship the reference-band artifact.
|
|
40
|
+
runs-on: ubuntu-latest
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/checkout@v4
|
|
43
|
+
- uses: actions/setup-python@v5
|
|
44
|
+
with:
|
|
45
|
+
python-version: "3.12"
|
|
46
|
+
cache: pip
|
|
47
|
+
- name: Build wheel
|
|
48
|
+
run: pip install build && python -m build --wheel
|
|
49
|
+
- name: Assert bands artifact is in the wheel
|
|
50
|
+
run: |
|
|
51
|
+
python - <<'PY'
|
|
52
|
+
import glob, zipfile, sys
|
|
53
|
+
whl = sorted(glob.glob("dist/*.whl"))[-1]
|
|
54
|
+
names = zipfile.ZipFile(whl).namelist()
|
|
55
|
+
assert any(n.endswith("ms408/data/reference_bands.json") for n in names), \
|
|
56
|
+
"reference_bands.json missing from wheel"
|
|
57
|
+
assert any(n.endswith("ms408/__main__.py") for n in names), "CLI missing from wheel"
|
|
58
|
+
print("wheel OK:", whl)
|
|
59
|
+
PY
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
name: pages
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths:
|
|
7
|
+
- 'site/**'
|
|
8
|
+
- 'docs/**'
|
|
9
|
+
- 'paper/**'
|
|
10
|
+
- 'CONTRIBUTING.md'
|
|
11
|
+
- '.github/workflows/pages.yml'
|
|
12
|
+
workflow_dispatch:
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
pages: write
|
|
17
|
+
id-token: write
|
|
18
|
+
|
|
19
|
+
concurrency:
|
|
20
|
+
group: pages
|
|
21
|
+
cancel-in-progress: true
|
|
22
|
+
|
|
23
|
+
jobs:
|
|
24
|
+
build:
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
steps:
|
|
27
|
+
- uses: actions/checkout@v4
|
|
28
|
+
- uses: actions/setup-node@v4
|
|
29
|
+
with:
|
|
30
|
+
node-version: '20'
|
|
31
|
+
cache: npm
|
|
32
|
+
cache-dependency-path: site/package-lock.json
|
|
33
|
+
- name: Configure Pages
|
|
34
|
+
id: pages
|
|
35
|
+
# Requires Pages to be enabled once in repo Settings → Pages → Source: GitHub Actions
|
|
36
|
+
# (auto-enablement needs an admin-scoped token the default GITHUB_TOKEN lacks).
|
|
37
|
+
uses: actions/configure-pages@v5
|
|
38
|
+
- name: Install
|
|
39
|
+
working-directory: site
|
|
40
|
+
run: npm ci
|
|
41
|
+
# Paper PDFs are committed under site/public/papers/ (see site/.gitignore) — no
|
|
42
|
+
# LaTeX-in-CI step, which was fragile. Regenerate locally with scripts/build-papers.sh.
|
|
43
|
+
- name: Build
|
|
44
|
+
working-directory: site
|
|
45
|
+
# base_path / origin auto-derive the correct base for project vs user/org Pages;
|
|
46
|
+
# PUBLIC_REPO_URL replaces the OWNER placeholder in links.
|
|
47
|
+
env:
|
|
48
|
+
SITE_BASE: ${{ steps.pages.outputs.base_path }}
|
|
49
|
+
SITE_URL: ${{ steps.pages.outputs.origin }}
|
|
50
|
+
PUBLIC_REPO_URL: ${{ github.server_url }}/${{ github.repository }}
|
|
51
|
+
run: npm run build
|
|
52
|
+
- uses: actions/upload-pages-artifact@v3
|
|
53
|
+
with:
|
|
54
|
+
path: site/dist
|
|
55
|
+
|
|
56
|
+
deploy:
|
|
57
|
+
needs: build
|
|
58
|
+
runs-on: ubuntu-latest
|
|
59
|
+
environment:
|
|
60
|
+
name: github-pages
|
|
61
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
62
|
+
steps:
|
|
63
|
+
- id: deployment
|
|
64
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
name: publish
|
|
2
|
+
|
|
3
|
+
# Publishes ms408 to PyPI when a GitHub Release is published, via PyPI Trusted Publishing
|
|
4
|
+
# (OIDC) — no API tokens stored. ONE-TIME SETUP on PyPI: pypi.org → your project (or "pending
|
|
5
|
+
# publisher") → add a Trusted Publisher: owner=DireLabs, repo=ms408, workflow=publish.yml,
|
|
6
|
+
# environment=pypi. Then each GitHub Release triggers a publish. Bump `version` in
|
|
7
|
+
# pyproject.toml before tagging — PyPI refuses to overwrite an existing version.
|
|
8
|
+
|
|
9
|
+
on:
|
|
10
|
+
release:
|
|
11
|
+
types: [published]
|
|
12
|
+
workflow_dispatch: # allow a manual dry run (build only; publish step is release-gated)
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
build:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
- uses: actions/setup-python@v5
|
|
23
|
+
with:
|
|
24
|
+
python-version: "3.12"
|
|
25
|
+
- name: Build sdist + wheel
|
|
26
|
+
run: |
|
|
27
|
+
pip install build
|
|
28
|
+
python -m build
|
|
29
|
+
- name: Check metadata
|
|
30
|
+
run: |
|
|
31
|
+
pip install twine
|
|
32
|
+
twine check dist/*
|
|
33
|
+
- uses: actions/upload-artifact@v4
|
|
34
|
+
with:
|
|
35
|
+
name: dist
|
|
36
|
+
path: dist/
|
|
37
|
+
|
|
38
|
+
pypi:
|
|
39
|
+
needs: build
|
|
40
|
+
runs-on: ubuntu-latest
|
|
41
|
+
if: github.event_name == 'release'
|
|
42
|
+
environment:
|
|
43
|
+
name: pypi
|
|
44
|
+
url: https://pypi.org/project/ms408/
|
|
45
|
+
permissions:
|
|
46
|
+
id-token: write # required for Trusted Publishing (OIDC)
|
|
47
|
+
steps:
|
|
48
|
+
- uses: actions/download-artifact@v4
|
|
49
|
+
with:
|
|
50
|
+
name: dist
|
|
51
|
+
path: dist/
|
|
52
|
+
- name: Publish to PyPI
|
|
53
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
ms408-0.1.0/.gitignore
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
.DS_Store
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.pyc
|
|
4
|
+
.venv/
|
|
5
|
+
venv/
|
|
6
|
+
.pytest_cache/
|
|
7
|
+
.ipynb_checkpoints/
|
|
8
|
+
*.egg-info/
|
|
9
|
+
data/raw/
|
|
10
|
+
data/processed/*.jsonl
|
|
11
|
+
data/processed/harness/**/*.txt
|
|
12
|
+
data/processed/h4/*.txt
|
|
13
|
+
.env
|
|
14
|
+
results/annotations/*.jsonl
|
|
15
|
+
results/synthesis/*.json
|
|
16
|
+
results/experiments/*.json
|
|
17
|
+
|
|
18
|
+
# LaTeX build artifacts — keep .tex/.bib source; PDFs are built on demand
|
|
19
|
+
# (make_arxiv_bundle.sh) or hosted on the site, not committed.
|
|
20
|
+
paper/**/main.pdf
|
|
21
|
+
paper/**/*.aux
|
|
22
|
+
paper/**/*.bbl
|
|
23
|
+
paper/**/*.blg
|
|
24
|
+
paper/**/*.fls
|
|
25
|
+
paper/**/*.fdb_latexmk
|
|
26
|
+
paper/**/*.out
|
|
27
|
+
paper/**/*.log
|
|
28
|
+
paper/dist/
|