Skip to content

Commit 96e8248

Browse files
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

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/CLAUDE.md

Lines changed: 3 additions & 1 deletion

.editorconfig

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
# SPDX-License-Identifier: MPL-2.0
2-
# (PMPL-1.0-or-later preferred; MPL-2.0 required for Julia ecosystem)
32
# Skein.jl - Editor Configuration
43
# https://editorconfig.org
54

.gitattributes

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# SPDX-License-Identifier: PMPL-1.0-or-later
1+
# SPDX-License-Identifier: MPL-2.0
22
# RSR-compliant .gitattributes
33

44
* text=auto eol=lf

.github/workflows/boj-build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# SPDX-License-Identifier: PMPL-1.0-or-later
1+
# SPDX-License-Identifier: MPL-2.0
22
name: BoJ Server Build Trigger
33
on:
44
push:

.github/workflows/casket-pages.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# SPDX-License-Identifier: PMPL-1.0-or-later
1+
# SPDX-License-Identifier: MPL-2.0
22
name: GitHub Pages
33

44
on:

.github/workflows/governance.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# SPDX-License-Identifier: PMPL-1.0-or-later
1+
# SPDX-License-Identifier: MPL-2.0
22
# governance.yml — single wrapper calling the shared estate governance bundle
33
# in hyperpolymath/standards instead of carrying per-repo copies.
44
#

.github/workflows/hypatia-scan.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# SPDX-License-Identifier: PMPL-1.0-or-later
1+
# SPDX-License-Identifier: MPL-2.0
22
# Hypatia Neurosymbolic CI/CD Security Scan
33
name: Hypatia Security Scan
44

.github/workflows/instant-sync.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# SPDX-License-Identifier: PMPL-1.0-or-later
1+
# SPDX-License-Identifier: MPL-2.0
22
# Instant Forge Sync - Triggers propagation to all forges on push/release
33
name: Instant Sync
44

.github/workflows/mirror.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# SPDX-License-Identifier: PMPL-1.0-or-later
1+
# SPDX-License-Identifier: MPL-2.0
22
# SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell
33
name: Mirror to Git Forges
44

.github/workflows/scorecard-enforcer.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# SPDX-License-Identifier: PMPL-1.0-or-later
1+
# SPDX-License-Identifier: MPL-2.0
22
# Prevention workflow - runs OpenSSF Scorecard and fails on low scores
33
name: OpenSSF Scorecard Enforcer
44

0 commit comments

Comments
 (0)