Commit 96e8248
Registry-readiness: MPL-2.0 (REUSE), de-LLM, + correct Jones-from-PD (1089/1089 green) (#10)
* licensing-readiness: single MPL-2.0 (REUSE-compliant), de-LLM
NOT a registration-ready claim. Scope: licensing/REUSE/de-LLM only,
via standards/scripts/registry-readiness.sh.
- PMPL/MPL-2.0 contradiction -> single OSI MPL-2.0; SPDX normalised;
REUSE.toml; LICENSE rebuilt; LICENSES/PMPL removed; reuse lint:
COMPLIANT (REUSE 3.3); SPDX-in-content wrapped with REUSE-Ignore.
- de-LLM: 0-AI-MANIFEST + llm-warmup removed; NOTICE canonicalised.
HONEST CAVEAT: Pkg.test() is PRE-EXISTING RED (1 failed, 4 errored —
UndefVarError GaussCode; SQLite v3->v4) — unrelated to these licensing
changes. Skein.jl is NOT registration-ready until those code defects
are fixed. Matches the prior Julia-suite adversarial audit (Skein =
'salvageable', not defensible).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix: root-cause four pre-existing test errors (schema migration + GaussCode ambiguity)
Two distinct defects, four errored testsets in Pkg.test():
1. Legacy-DB schema migration (3 errored: v1/v2/v3 -> v4 in
test/canonical_gauss_test.jl). Two layered bugs:
a. SkeinDB() ran the CREATE_TABLES block (which includes
"CREATE INDEX ... ON knots(diagram_format)") *before* the
_migrate_v3_to_v4 step that adds the diagram_format column.
On a fresh DB the full CREATE TABLE defines every column so it
worked; on a pre-existing legacy DB the "CREATE TABLE IF NOT
EXISTS knots" is a no-op and the new columns are absent, so the
index DDL threw SQLiteException("no such column: diagram_format").
Fix: split index DDL into CREATE_INDEXES and apply it strictly
after migrations (create tables -> migrate -> create indexes).
b. row_to_record parsed created_at/updated_at with
DateTime(::String), which only accepts Julia's ISO-8601
"yyyy-mm-ddTHH:MM:SS.s". Rows inserted via the schema's own
"DEFAULT (datetime('now'))" (legacy/external rows) use SQLite's
"yyyy-mm-dd HH:MM:SS" with a space and no fractional seconds,
raising ArgumentError: Invalid DateTime string. Added
_parse_db_timestamp to normalise both formats.
2. GaussCode UndefVarError (1 errored: "Gauss fallback remains
available" in test/knot_theory_ext_test.jl). The file does both
and , which export different
GaussCode types, making the bare name ambiguous. Skein's storage
API dispatches on Skein.GaussCode, so the reference is now
explicitly qualified.
Pkg.test() goes from 1044 passed/1 failed/4 errored to
1057 passed/1 failed/0 errored. No tests deleted, skipped, or
weakened. The remaining failure (test/runtests.jl:1210, Jones
polynomial uniqueness) is a separate pre-existing deeper defect,
reported but deliberately not hacked.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix: compute knot-table Jones polynomials from planar diagrams (PD codes)
Real cause (pre-existing latent defect, never green since release):
test/runtests.jl asserted all 15 prime-knot-table Jones polynomials
are distinct, but only 6 were. src/knot_table.jl computed Jones via
jones_polynomial_str(dt_to_gauss(dt)) — from a bare Gauss code with no
planar embedding. The Kauffman bracket / Jones polynomial is a DIAGRAM
invariant: per-state loop counts depend on the rotation system, which a
Gauss code does not encode. So the bracket collapsed distinct knots
(e.g. figure-eight 4_1 -> a single monomial instead of
t^-2 - t^-1 + 1 - t + t^2). src/polynomials.jl predated the assertion,
so this test was never green (latent, not a regression).
Fix (PD-based, mathematically correct):
* src/polynomials.jl: add a planar-diagram Kauffman state sum —
PDCode/PDCrossing, parse_pd, pd_writhe (geometric writhe read from
the PD: positive crossing iff over-strand out-arc b == d+1 mod 2n),
pd_bracket_polynomial (loops counted exactly as cycles of the
perfect matching of arc-incidence + per-state smoothing pairings),
jones_from_pd / jones_from_pd_str. Existing Gauss-code API untouched.
* src/knot_table.jl: embed the canonical Knot Atlas (Rolfsen) PD codes
for all 15 knots; compute jones_polynomial from the PD.
* src/import_export.jl: import_knotinfo! stores the PD-based Jones for
the through-7-crossing knots so DB records stay consistent with
prime_knot(...).
* test/runtests.jl: assert each table knot's Jones EQUALS the published
Knot Atlas value (term-for-term), not merely that they are distinct.
Verification (computed vs published Knot Atlas, all term-for-term MATCH):
0_1 1; 3_1 -t^-4+t^-3+t^-1; 4_1 t^-2-t^-1+1-t+t^2;
5_1 -t^-7+t^-6-t^-5+t^-4+t^-2; 5_2 -t^-6+t^-5-t^-4+2t^-3-t^-2+t^-1;
6_1..7_7 all verified against https://katlas.org/wiki/<name>.
Engine independently calibrated against the published 3_1/4_1/5_1
before integration. All 15 distinct => the uniqueness assertion now
holds for the right (mathematically genuine) reason.
Full suite: Testing Skein tests passed (1089/1089).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent c6470e6 commit 96e8248
109 files changed
Lines changed: 816 additions & 520 deletions
File tree
- .claude
- .github/workflows
- .machine_readable
- 6a2
- agent_instructions
- contractiles
- bust
- dust
- trust
- integrations
- .well-known
- LICENSES
- benchmark
- contractiles
- intend
- must
- trust
- examples
- ext
- ffi/zig
- src
- test
- generated/abi
- src
- abi
- backends
- test
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
3 | 2 | | |
4 | 3 | | |
5 | 4 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| |||
0 commit comments