Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
d5cd2ea
feat: add D4-TIA-15 profile core
EmergentMonk Sep 18, 2026
7b1f12f
feat: add D4-TIA-15 deterministic receivers
EmergentMonk Sep 18, 2026
398425b
feat: add D4-TIA-15 artifact builder
EmergentMonk Sep 18, 2026
354664c
feat: add D4-TIA-15 verifier
EmergentMonk Sep 18, 2026
f0d20da
test: cover D4-TIA-15 mapping and provenance
EmergentMonk Sep 18, 2026
97b84ba
spec: add D4-TIA-15 v1 contract schema
EmergentMonk Sep 18, 2026
f4438d7
spec: add D4-TIA-15 v1 canonical contract
EmergentMonk Sep 18, 2026
97c279e
docs: specify D4-TIA-15 v1 sonification profile
EmergentMonk Sep 18, 2026
69b1c44
build: wire D4-TIA-15 into root scripts
EmergentMonk Sep 18, 2026
8d5f13a
docs: expose D4-TIA-15 profile
EmergentMonk Sep 18, 2026
07a5672
docs: mark D4-TIA-15 profile implemented
EmergentMonk Sep 18, 2026
6b6ef6f
docs: record D4-TIA-15 profile
EmergentMonk Sep 18, 2026
8d1fa28
fix: preserve D4-TIA-15 math markup
EmergentMonk Sep 18, 2026
bc40911
fix: normalize D4-TIA source identity bytes
EmergentMonk Sep 18, 2026
7bd9f48
fix: harden D4-TIA artifact CLI and output confinement
EmergentMonk Sep 18, 2026
3736e06
fix: bind D4-TIA canonical schema identity sections
EmergentMonk Sep 18, 2026
501348c
test: cover D4-TIA provenance and build hardening
EmergentMonk Sep 18, 2026
937522e
verify: enforce D4-TIA schema and source normalization
EmergentMonk Sep 18, 2026
34335fc
docs: record D4-TIA build and provenance guards
EmergentMonk Sep 18, 2026
ef83aed
docs: restore D4-TIA Markdown delimiters
EmergentMonk Sep 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
# Changelog

## Unreleased — D4-TIA-15 v1.0.0 profile

- Added a separately versioned symbolic sonification profile over the published
15-generator D4 triality-invariant/covariant basis.
- Preserved the published grading ledger exactly and added machine checks for
\(k=4d_a+6d_b+m\) and
\(\omega=2d_a+3d_b-m=(k-3m)/2\).
- Added direct identity transfers from polynomial degree, total covariant
degree, modular weight, and covariant order into symbolic tick, duration,
MIDI-note, and MIDI-channel fields without rescaling the source grades.
- Added canonical contract/schema fixtures, JSON/CSV event artifacts, a
16-track symbolic MIDI receiver with no tempo event, implementation identity,
SHA-256 manifest, build command, verifier, tests, and documentation.
- Kept ETQ-101 v2 and ETQ-303 v3 protocol identities unchanged and retained the
root ban on PCM/rendered audio.

## Unreleased — D4/F4 triality reference bridge

- Added the ETQ-303 v3.0.1 Zenodo DOI `10.5281/zenodo.21494678` to the
Expand Down
32 changes: 31 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,35 @@ ETQ's 101-state selector, independent \(\mathbb C^3\) factor, SCL stencil, or
sonification choices. See
[the D4/F4 triality reference bridge](docs/D4_TRIALITY_REFERENCE_BRIDGE.md).


## D4-TIA-15: separately versioned invariant-algebra profile

The published 15-generator D4 triality-invariant/covariant basis is now also
available as the independent **D4-TIA-15 v1.0.0** symbolic sonification
profile. It preserves the grading ledger exactly and uses identity transfers
rather than fitted or normalized mappings:

```text
m -> onset tick
d=da+db -> duration ticks
k -> MIDI note number
omega -> MIDI channel
da, db -> unchanged event metadata
```

This mapping is still an authored receiver convention; invariant theory does
not identify modular weight with acoustic pitch. No tempo, tuning, timbre,
loudness, PCM, or rendered audio enters the profile identity.

Build and verify it independently:

```bash
npm run verify:d4-tia
npm run build:d4-tia
```

See [D4-TIA-15 v1.0.0](docs/D4_TRIALITY_ALGEBRA_SONIFICATION.md).

## Notation and Conventions

Unless explicitly stated otherwise, scalars are in \(\mathbb C\), all vector
Expand Down Expand Up @@ -180,14 +209,15 @@ npm run verify
npm run build:v3
```

`npm run verify` validates v3 and continues to validate the immutable v2 and v1
`npm run verify` validates D4-TIA-15, v3, and continues to validate the immutable v2 and v1
contracts. The build command fails closed for unsafe, existing nonempty, or
non-`dist/` output paths and never recursively deletes a caller-selected path.

## Documentation

- [Exact event protocol](docs/ETQ_V3_EVENT_PROTOCOL.md)
- [D4/F4 triality reference bridge](docs/D4_TRIALITY_REFERENCE_BRIDGE.md)
- [D4-TIA-15 invariant-algebra sonification profile](docs/D4_TRIALITY_ALGEBRA_SONIFICATION.md)
- [Claim boundaries](docs/ETQ_V3_CLAIM_BOUNDARIES.md)
- [v2 to v3 migration](docs/ETQ_V2_TO_V3_MIGRATION.md)
- [Formal v3.0.1 paper and build instructions](docs/etq-303/README.md)
Expand Down
141 changes: 141 additions & 0 deletions docs/D4_TRIALITY_ALGEBRA_SONIFICATION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
# D4-TIA-15 v1.0.0 — Triality-Invariant Algebra Sonification Profile

**Status:** implemented root research profile
**Profile ID:** `D4-TIA-15`
**Version:** `1.0.0`
**Relationship to ETQ:** separate; ETQ-101 v2 and ETQ-303 v3 identities are unchanged

## Purpose

D4-TIA-15 turns the published 15-generator minimal basis used in Kazuhiro
Sakai's 2026 treatment of the ring of D4 triality invariants into a deterministic
symbolic event profile. The source object is not an invented 15-state physical
system: it is the finite generator ledger of the invariant/covariant algebra.

The profile preserves the published grading

$$
(d_a,d_b,m,k,\omega)
$$

and the relations

$$
k=4d_a+6d_b+m,
\qquad
\omega=2d_a+3d_b-m
=\frac{k-3m}{2}.
$$

The total covariant degree is

$$
d=d_a+d_b.
$$

No grade is normalized, ranked, fitted, interpolated, or replaced by an
additional latent quantity.

## Direct receiver projection

Version 1 deliberately uses identity transfers wherever a published integer
grade already fits a MIDI/event field:

| Published quantity | Profile field | Transfer |
|---|---|---|
| generator basis order | event sequence | identity |
| polynomial degree \(m\) | onset tick | identity |
| covariant degree \(d=d_a+d_b\) | duration ticks | identity |
| modular weight \(k\) | MIDI note number | identity |
| covariant order \(\omega\) | MIDI channel | identity |
| refined degree \(d_a\) | event metadata | unchanged |
| refined degree \(d_b\) | event metadata | unchanged |

The velocity is the fixed receiver constant 64. It carries no mathematical
meaning. MIDI division is 1 tick per quarter-note unit, but **no tempo meta
event is emitted**. Acoustic tuning, instrument, timbre, loudness, and wall-clock
tempo remain receiver choices.

This is still an authored sonification mapping: mathematics does not say that
modular weight "is pitch" or that covariant order "is channel." The point of v1
is narrower: once those assignments are declared, the values are copied
losslessly rather than rescaled or aesthetically massaged.

## Why the MIDI file uses separate tracks

The 15 generators occupy 15 generator tracks plus one metadata track. This
retains generator identity even when two generators share the same
\((k,\omega,m)\)-projection. Track text records all exact grades, so the MIDI
view does not replace the JSON/CSV ledger.

The canonical information-bearing objects remain:

- `contract.json` — versioned mapping contract;
- `events.json` — lossless generator/event document;
- `events.csv` — auditable grading table;
- `events.mid` — symbolic MIDI projection; and
- `manifest.json` — artifact hashes and implementation identity.

Root artifacts remain restricted to JSON, CSV, and MIDI. No PCM or rendered
audio is constructed anywhere in the profile.

## Published generator ledger

| # | Generator | \(d_a\) | \(d_b\) | \(d\) | \(m\) | \(k\) | \(\omega\) |
|---:|---|---:|---:|---:|---:|---:|---:|
| 1 | \(f\) | 1 | 0 | 1 | 0 | 4 | 2 |
| 2 | \(g\) | 0 | 1 | 1 | 0 | 6 | 3 |
| 3 | \((f,g)_1\) | 1 | 1 | 2 | 2 | 12 | 3 |
| 4 | quadratic discriminant | 2 | 0 | 2 | 4 | 12 | 0 |
| 5 | \((f,g)_2\) | 1 | 1 | 2 | 4 | 14 | 1 |
| 6 | \(P=(g,g)_2\) | 0 | 2 | 2 | 4 | 16 | 2 |
| 7 | \((f^2,g)_3\) | 2 | 1 | 3 | 6 | 20 | 1 |
| 8 | \((f,P)_1\) | 1 | 2 | 3 | 6 | 22 | 2 |
| 9 | \(Q=(g,P)_1\) | 0 | 3 | 3 | 6 | 24 | 3 |
| 10 | \((f,P)_2\) | 1 | 2 | 3 | 8 | 24 | 0 |
| 11 | \((f,Q)_2\) | 1 | 3 | 4 | 10 | 32 | 1 |
| 12 | \((f^3,g^2)_6\) | 3 | 2 | 5 | 12 | 36 | 0 |
| 13 | cubic discriminant \((P,P)_2\) | 0 | 4 | 4 | 12 | 36 | 0 |
| 14 | \((f^2,Q)_3\) | 2 | 3 | 5 | 12 | 38 | 1 |
| 15 | \((f^3,gQ)_6\) | 3 | 4 | 7 | 18 | 54 | 0 |

## Determinism and provenance

`manifest.json` records SHA-256 for each emitted artifact and an implementation
identity over the reference ledger, profile implementation, artifact builder,
canonical serializer, and build entrypoint. The build command refuses a
nonempty target and writes exclusively into a dedicated `dist/` subdirectory.

Run:

```bash
npm test
npm run verify:d4-tia
npm run build:d4-tia
```

## Claim boundary

Supported:

- the 15 generator rows are copied from the repository's Sakai-aligned
reference ledger;
- every grading relation is checked before event generation;
- the v1 mapping uses the declared identity transfers with no grade
normalization;
- JSON/CSV are lossless for the grading ledger; and
- MIDI is a deterministic symbolic projection.

Not supported:

- the MIDI mapping is uniquely selected by invariant theory;
- MIDI note number is a physical frequency predicted by the algebra;
- a listener can necessarily distinguish all 15 generators;
- the 15 generators are physical states; or
- the profile validates ETQ, E-string theory, or any physical interpretation.

## References

- K. Sakai, *The ring of D4 triality invariants*, arXiv:2504.00546v2 (2026).
- K. Sakai, *E-strings, F4, and D4 triality*, JHEP 07 (2023) 192,
arXiv:2304.04878.
25 changes: 17 additions & 8 deletions docs/ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,23 @@ must not silently inherit the separate audio laboratories' clocks or tunings.
This bridge is noncanonical context. It changes no v2/v3 fixture, event
ordering, implementation identity, or receiver artifact.

## Future root research profile — triality-invariant algebra sonification

A later separately versioned profile may use the 15-generator invariant basis
as a finite symbolic source object. Before any auditory mapping is canonical it
must preserve and test the published grading relations, define its event
semantics and provenance, and remain within the root MIDI/CSV/JSON output
policy. No tempo, acoustic tuning, timbre, or rendered audio may enter root ETQ
identity.
## Root D4-TIA-15 v1.0.0 — triality-invariant algebra sonification (implemented)

- separately versioned profile over the published 15-generator minimal basis;
- exact preservation of \(d_a,d_b,m,k,\omega\) and derived
\(d=d_a+d_b\);
- identity-transfer receiver projection: \(m\) to onset tick, \(d\) to
duration, \(k\) to MIDI note, and \(\omega\) to MIDI channel;
- unchanged \(d_a,d_b\) retained in JSON/CSV and MIDI track metadata;
- 15 generator tracks plus one metadata track, with no canonical tempo;
- canonical JSON contract and fixture, schema, lossless event document, CSV,
symbolic MIDI, implementation identity, and SHA-256 manifest; and
- fail-closed root build restricted to JSON, CSV, and MIDI.

The mapping is explicitly authored even though its transfers are identities:
the mathematics does not declare modular weight to be pitch or covariant order
to be channel. Tuning, timbre, loudness, wall-clock tempo, PCM, and rendered
audio remain outside profile identity. ETQ-101 v2 and ETQ-303 v3 are unchanged.

The remaining numbered phases below apply only to the independent `APP/` and
`sonification/` audio laboratories.
Expand Down
79 changes: 79 additions & 0 deletions examples/d4-tia-15.v1.canonical.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
{
"schema": "qsol.d4-tia-15.profile/v1",
"profileId": "D4-TIA-15",
"profileVersion": "1.0.0",
"status": "separate-noncanonical-research-profile",
"source": {
"author": "Kazuhiro Sakai",
"title": "The ring of D4 triality invariants",
"arxiv": "2504.00546v2",
"year": 2026,
"theorem": "Theorem 5.2 / equation (5.23) minimal 15-generator basis",
"grading": "Theorem 4.10 and Remark 4.17"
},
"publishedStructure": {
"generatorCount": 15,
"refinedDegrees": ["d_a", "d_b"],
"covariantDegree": "d=d_a+d_b",
"polynomialDegree": "m",
"modularWeight": "k",
"covariantOrder": "omega",
"gradingRelations": [
"k=4*d_a+6*d_b+m",
"omega=2*d_a+3*d_b-m",
"omega=(k-3*m)/2"
]
},
"mapping": {
"eventOrder": {
"source": "published 15-generator basis order",
"transfer": "identity"
},
"onsetTick": {
"source": "polynomial degree m",
"transfer": "identity"
},
"durationTicks": {
"source": "covariant degree d=d_a+d_b",
"transfer": "identity"
},
"midiNote": {
"source": "modular weight k",
"transfer": "identity"
},
"midiChannel": {
"source": "covariant order omega",
"transfer": "identity"
},
"quadraticDegree": {
"source": "refined degree d_a",
"transfer": "preserved as event metadata"
},
"cubicDegree": {
"source": "refined degree d_b",
"transfer": "preserved as event metadata"
},
"velocity": {
"value": 64,
"status": "authored receiver constant; not grading data"
},
"midiDivision": {
"value": 1,
"status": "symbolic tick resolution; no canonical tempo"
},
"tempoMicrosecondsPerQuarter": null,
"absoluteFrequencyHz": null,
"receiverTuning": "external-and-nonnormative",
"renderedAudioStatus": "permanently-disabled-in-root-profile"
},
"determinism": {
"numericAbi": "safe-integers-only",
"eventCount": 15,
"runtimeArtifactExtensions": [".json", ".csv", ".mid"]
},
"lineage": {
"relationToEtq": "independent profile; does not modify ETQ-101 v2 or ETQ-303 v3 protocol identity",
"referenceBridge": "docs/D4_TRIALITY_REFERENCE_BRIDGE.md"
},
"claimBoundary": "The 15 source generators and their grading ledger are literature-derived. Their direct placement into MIDI note/channel/tick fields is an authored sonification convention chosen to avoid scaling, normalization, or invented latent quantities. MIDI is symbolic; tempo, tuning, timbre, loudness, and rendered audio are outside profile identity."
}
6 changes: 4 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@
"test:tuning": "node --test tests/tanner-tuning-fork.test.mjs",
"build:v3": "node scripts/build-v3-artifacts.mjs",
"build:paper": "bash scripts/build-etq303-paper.sh",
"verify": "node scripts/verify-v3.mjs && node scripts/verify.mjs && node scripts/verify-legacy.mjs",
"verify": "node scripts/verify-d4-tia.mjs && node scripts/verify-v3.mjs && node scripts/verify.mjs && node scripts/verify-legacy.mjs",
"verify:v3": "node scripts/verify-v3.mjs",
"verify:v2": "node scripts/verify.mjs",
"verify:legacy": "node scripts/verify-legacy.mjs"
"verify:legacy": "node scripts/verify-legacy.mjs",
"build:d4-tia": "node scripts/build-d4-tia-artifacts.mjs",
"verify:d4-tia": "node scripts/verify-d4-tia.mjs"
},
"engines": {
"node": ">=20"
Expand Down
Loading
Loading