No description
Find a file
GeeFourteen 690258db42 clean: remove 23 .push-N.log files from the repo root, and stop them coming back
They are captured stdout from the field-upload pushes - the LFS progress line,
the locksverify hint, the ref update - written next to the data by each upload
run and committed with it. 23 KB across 23 files at the root of a 114 GB data
repository.

Debris, not records: nothing in this repo or the brain reads them, they describe
a transfer the refs already prove, and the real delivery ledger is delivered.txt
plus index.json. Confirmed by grep - zero references anywhere in the tree.

Added a .gitignore (the repo had none) with a deliberately broad .push-*.log
rather than the known 1-23, because the producer numbers them sequentially and
pinning the range would let .push-24.log straight back in.

Done from a sparse blobless clone with GIT_LFS_SKIP_SMUDGE=1, so no LFS object
was fetched or rewritten. Verified before committing: 23 deletions, 1 addition,
0 paths under fields/ or corpora/ staged.
2026-09-06 15:59:38 -06:00
corpora GloVe off LFS: the one file whose absence stops the boot no longer needs an extension nobody provisioned 2026-09-04 03:27:44 -06:00
fields fields: batch 30 (+277) 2026-09-02 18:39:13 -06:00
.gitattributes GloVe off LFS: the one file whose absence stops the boot no longer needs an extension nobody provisioned 2026-09-04 03:27:44 -06:00
.gitignore clean: remove 23 .push-N.log files from the repo root, and stop them coming back 2026-09-06 15:59:38 -06:00
delivered.txt REGFIND.9: the review's second half - an unreachable feature, and a work item I invented 2026-09-02 16:42:13 -06:00
index.json fields: batch 30 (+277) 2026-09-02 18:39:13 -06:00
LINKS-by-cell.json the join tables: LINKS.jsonl + LINKS-by-cell.json, and docs describing every file 2026-09-02 10:38:54 -06:00
LINKS.jsonl the join tables: LINKS.jsonl + LINKS-by-cell.json, and docs describing every file 2026-09-02 10:38:54 -06:00
README.md README: the deletions git status shows here are not real, and a bare commit -a would drop 114 GB 2026-09-03 16:46:15 -06:00
uploaded.jsonl fields: batch 30 (+277) 2026-09-02 18:39:13 -06:00
USING-THE-WAVELETS.md the join tables: LINKS.jsonl + LINKS-by-cell.json, and docs describing every file 2026-09-02 10:38:54 -06:00

BrainWaves

BEFORE YOU RUN ANY GIT COMMAND HERE: git status SHOWS TENS OF THOUSANDS OF DELETIONS AND THEY ARE NOT REAL

The producer writes a field, uploads it, and deletes the local copy immediately — that is the whole point, so a field exists exactly twice in the world: once here and once on the brain box. The working tree therefore holds a few hundred files while the repository tracks 26,359, and git status reports the difference as ~26,000 pending D entries.

git commit -a in this directory would delete 114 GB of wavelet fields from the repository and read as a perfectly ordinary commit while doing it. Stage paths explicitly. Never -a, never git add -A at the root.

⚠ Nothing is lost and nothing needs restoring — every one of those files is committed and pushed. git checkout -- fields/ would pull them all back down, which is a 114 GB download and almost never what anyone wants.

Everything Unity is taught from, and every picture in it written as equations.

Field files are stored gzipped (*.field.json.gz) as of 2026-09-03. A field is a JSON skeleton wrapping base64 payloads, and git LFS stores objects verbatim, so nothing was compressing them — measured 47-51% on real fields with byte-identical coefficients. Readers must accept both encodings: the fields delivered before that date are still plain .field.json and are deliberately NOT being recompressed, because rewriting them would create a second full set of LFS objects (~+57 GB) while the originals stayed referenced in history.

Two halves that only mean something together, and the tables that join them:

corpora/                    THE WORDS    189 cells · 50,242,378 words
fields/                     THE WAVES    32,296 CDF 9/7 fields, one per figure

LINKS.jsonl                 THE JOIN     38,318 citations — which words point at which wave
LINKS-by-cell.json          roll-up      per-cell citation and distinct-wave counts
index.json                  field index  one row per WAVE: key, path, url, w, h, coefficients

USING-THE-WAVELETS.md       how to read a wave and turn it back into pixels
uploaded.jsonl              production ledger — append-only, one line per field as it was
                            made. The record of what exists; also what a resumed
                            ingest reads so it never rebuilds a field twice.
.gitattributes              LFS rules — *.field.json and the vector file are LFS objects,
                            which is why they must be fetched from /media/ and not /raw/

She does not keep images. Seeing, imagining and thinking run on the same equational substrate, so a picture only becomes something she can hold once it is a field. fields/ is that conversion for every illustration the corpus contains.


The join — how a wave knows which words it belongs to

This is the part that makes the repository worth more than its two halves, and it is deliberately bidirectional.

Wave → words. Every field file carries the binding inside it: phrase is the corpus prose that references that figure, and links[] holds every citation of it — subject, grade, theme, alt, caption, context, licence. Hand someone a single field with no other file and they can still tell you what it is a picture of and which lesson it belongs to.

Words → wave. LINKS.jsonl — one row per citation, not per figure:

{ "subject": "ap", "grade": "grade11", "theme": "biology",
  "source": "en.wikipedia.org", "licence": "CC-BY-SA-3.0",
  "alt": null,
  "caption": "Punnett square depicting a cross between two pea plants…",
  "context": "punnett square depicting a cross between two pea plants…",
  "key":   "10n9686",
  "field": "fields/10/10n9686.field.json",
  "url":   "https://upload.wikimedia.org/…/Punnett_square_mendel_flowers.svg" }
38,318 citations   →   32,296 distinct waves   (3,010 figures cited more than once)
189 cells covered      33,839 citations carry referencing text (88%)

A row is a CITATION, not a figure, and that is not an accident. A plate cited by two cells is one wave with two sets of referencing words. The first version of this ingest deduplicated by url and kept only the first citation, silently discarding 6,024 links — which is precisely the text↔wave synchronisation the whole exercise exists to produce. One wave, every citation.

LINKS-by-cell.json is the roll-up: for each (subject, grade), how many citations it makes and how many distinct waves that is. The two differ wherever a cell cites the same plate twice.

Both tables are generated from the corpus alone and need no field to exist, so they are complete and correct independently of the field set.


The words

corpora/academic/<subject>/<grade>.json     189 cells, ~50.2M words
corpora/life/                               the lived-year canon
corpora/coding/                             code-concept corpus + exemplars
corpora/phonics/gpc.json                    241 grapheme→phoneme rules, derived
corpora/aoa.tsv                             age-of-acquisition ordering
corpora/glove.6B.300d.txt                   third-party word vectors (see licence)

One file per (subject, grade) cell. Each holds experiences[], and each experience is { theme, story, source, licence, figures[] } — a real course's prose, with its illustrations attached to the entry whose text they belong to.

189 cells        50,242,378 words        38,318 figure citations
                                          33,839 anchored to referencing text (88%)

A figure is never stored apart from the words that point at it. Every figures[] entry carries its own alt, caption and context — the corpus prose that references it. That is the whole design: an illustration bound to nothing teaches nothing.

The pictures

fields/<2-char shard>/<key>.field.json      32,296 fields
index.json                                  every field: key, path, url, w, h, coefficients, citations

One field per distinct figure, sharded two characters deep off the key so no single directory holds more than a few hundred files.

index.json is the field-side index — enumerate it if you would rather not derive keys. LINKS.jsonl is the text-side index. They are the same set seen from opposite ends: index.json has one row per wave, LINKS.jsonl one row per citation.

Fetch from /media/, not /raw/. The fields are Git LFS objects; /raw/ returns the LFS pointer stub, /media/ returns the field.

https://git.unityailab.com/UnityAILab/BrainWaves/media/branch/main/fields/11/11xggvp.field.json

No list of URLs exists, on purpose. A field's name is djb2 of the figure's own source url, and those urls are already in the corpus. The brain hashes the figure it is about to teach and fetches that path — nothing enumerated, and unlike a positional index a re-ingest cannot silently re-point a field at different content.

Why the fields live here and not on the brain's own disk

The brain server and Forgejo share one machine. Keeping the fields in the brain repo would put a second copy on the same drive, and a git repository needs its working tree plus .git — roughly double again. So the fields live here once, and the brain pulls a single field when it teaches the figure that field belongs to. Nothing is cloned wholesale.

How the fields were made

.claude/scripts/perceive-corpus-figures.mjs in the brain repo, using the same two stages the live perception path uses, called directly: the production image decoder (jpeg, png, and an in-repo VP8/webp decoder written for this), then equationalizeImageData — the exact CDF 9/7 forward transform perceive() runs.

At full source resolution, with no downsample before the transform. A field renders at any size, but the analysis is discrete: shrink the image first and the fine subbands carrying a one-pixel axis label are never created. Render-at-any-size and capture-all-detail are different properties.

Two exclusions, both structural and both reported rather than silent:

  • Site furniture — images cited by five or more distinct themes. A real illustration belongs to one discussion; furniture repeats. Question_book-new.svg was cited by 248 themes across 18 subjects, so perceiving it once would bind a "citation needed" icon to 248 unrelated concepts. Repetition is the signal, not a list of names, so an icon nobody has seen before is caught on its behaviour.
  • Unanchored figures — no caption, no in-text reference, no substantive alt.

SVG is rendered, not skipped. 1,752 figures are vector — the schematics, the biology diagrams, the charts. A vector has no pixels until something chooses a size, so the width is a choice by necessity; the MediaWiki API is asked for a permitted rendition rather than a URL being constructed, because Wikimedia now rejects unlisted thumbnail widths.

Regenerating

Derived data, reproducible from corpora/ at any time. If the fidelity constants change this repository is reset, not appended to — git keeps every version forever, and a second copy of 200 GB of history on a shared machine is not a mistake that deleting files undoes.

Licences — read this before redistributing anything here

This repository is a mixed-licence aggregate, and the terms travel with the material rather than being replaced by anything here.

The words. Per-experience licence fields record the terms of each source: CC-BY, CC-BY-SA, CC-BY-NC, CC-BY-NC-ND, OGL, BSD, and public domain (Project Gutenberg). Some sources are non-commercial and some are no-derivatives; both are present and both are labelled.

The pictures. Each field's links[] entries record the licence of the work the figure came from. A wavelet transform does not launder provenance — an ND figure's field is still governed by ND terms.

corpora/glove.6B.300d.txt is Stanford's GloVe vectors, redistributed under their own terms. It is a third-party artifact included for reproducibility, not part of the derived corpus.

This repository is public and requires no login to download — verified by anonymous fetch from outside the network. Anyone with the URL can retrieve any field or corpus file. That is a deliberate operator decision, recorded here so the licence position is stated rather than implied: material under NC and ND terms is publicly reachable from this repository.