Gloss — Prototype Results, 2026-09-18

Overall verdict

Worth another bounded experiment, not a production concept index yet. Subjective review: 4 useful topical glosses, 4 partial glosses and 1 poor gloss beyond its first label. This is one model, one hand-picked dictionary and nine non-blind examples, not a benchmark. There is some promise in coarse labels, but no demonstration that subtraction recovers a note's meaning or improves on simple cosine ranking.

Method and provenance

Run: 2026-09-18. Sources captured at 2026-09-18T15:23:23.759259+00:00 through the public notes REST API. All nine suggested sample keys were used. Model: text-embedding-3-small; 1536 dimensions; one request, 11,535 input tokens. At the documented $0.02 per million tokens, estimated embedding charge $0.0002307 (not a billing verification). No private-store notes were used.

API/model documentation: OpenAI model documentation; embedding guide.

Embedded each candidate and each note once. Input is the original content wording rendered from JSONHTL: headings, paragraphs, code, list items, table cells and visible link labels. JSON syntax, link destinations and top-level metadata are excluded. No stemming, lemmatization, summarisation or truncation. Exact source snapshots, input text, SHA-256 hashes and returned vectors are retained locally.

72 candidates were frozen before seeing results, informally selected from corpus keys/topics; fast/faster/fastest were added as explicit degree controls. Seven plural variants were merged to singular representatives, leaving 65 atoms. Full pairwise analysis covers all 2,556 unordered pairs. This is manual dictionary curation, not an automatic vocabulary-learning method.

Atoms are normalized to unit length. On each step choose the largest positive cosine against the current residual; record w = residual dot atom; subtract w * atom. Retain the original note-vector scale. Allow repeat selections; stop after at most 3 steps or residual/original norm < 0.5 (also stop if no positive projection). No orthogonal refitting. Weights are sequential projection coefficients, not probabilities or validated semantic salience.

Five mathematical/text-extraction tests pass: exact orthogonal recovery, threshold stopping, selection against the residual, nonorthogonal projection subtraction, and preservation of negation/degree/code/link text. Every live analysis step checks energy reduction equals weight squared and immediate orthogonality to the just-selected atom. Offline reruns use the cached embeddings.

Dictionary and deduplication

Retained atoms: programming, philosophy, exception, error handling, logging, testing, correctness, simplicity, software design, note, documentation, metadata, hypertext, link, orphaning, information loss, versioning, concurrency, database, storage, JSON, API, command line, rendering, Python, concept, embedding, matching pursuit, retrieval, index, navigation, representation, language, meaning, memory, reasoning, artificial intelligence, agent, workflow, planning, email, gathering, summarising, security, infrastructure, authentication, backup, deployment, exercise, demonstration, coaching, fitness, assessment, GPS, location, tracking, accuracy, journey, timetable, astronomy, poetry, music, fast, faster, fastest.

MergeCosine
exceptions → exception0.8728
notes → note0.8740
links → link0.8533
concepts → concept0.5874
embeddings → embedding0.7135
indices → index0.6803
agents → agent0.8752

Returned vector norms across all candidates and notes range 0.999413–1.000683; they carry no useful magnitude distinction in this run. Exact candidate norms are in pairs.json.

There was no numeric auto-merge threshold. The explicit working rule was to collapse grammatical number where it seemed topically dispensable, while keeping semantic neighbours separate. This merged even concept/concepts at 0.5874 and index/indices at 0.6803; it kept documentation/database at 0.6585, correctness/accuracy at 0.6193, and storage/memory at 0.6183 because their meanings differ. Degree variants stayed separate: fast/faster 0.6509, fast/fastest 0.6574, faster/fastest 0.7186. None was selected. The results do not establish linear grammatical directions.

Important sensitivity finding: using all 72 cached candidates changes 7 of 9 output sequences (including simple spelling changes). For concept-factorisation, the unmerged gloss is concepts 0.3587, versioning 0.2472, notes 0.1290; after merging it is versioning, hypertext, matching pursuit. Representation-not-language begins with embeddings 0.3341 instead of embedding 0.2706. Envoy and orphaning also switch leading labels. These are material changes, but do not establish that grammatical plurality itself is the cause; polysemy and model-specific word-form geometry are alternatives. The plural-collapse default is not harmless here.

Summary table

NoteLabels and projection weightsResidual norm ratioReview
PROGRAMMING_RULES/philosophycorrectness 0.3654; philosophy 0.2388; Python 0.15330.8865Useful
PROGRAMMING_RULES/exceptionserror handling 0.5014; Python 0.1710; exception 0.05910.8461Partial; polarity lost
ideas/concept-factorisationversioning 0.3423; hypertext 0.2097; matching pursuit 0.13870.9053Partial; misleading leading label
first-thoughts/representation-not-languageembedding 0.2706; matching pursuit 0.1954; reasoning 0.13440.9330Partial; mechanism over thesis
gdata-server/notes/designnote 0.3165; API 0.1850; software design 0.08180.9268Useful
envoy/design-phasesworkflow 0.3389; versioning 0.2155; summarising 0.14080.9049Partial; one misleading label
README/orphaningversioning 0.3710; note 0.2169; orphaning 0.13710.8924Useful, with emphasis caveat
TFG/exercise-demo-protocolexercise 0.3840; demonstration 0.1999; coaching 0.13710.8910Useful
using-gps-dataGPS 0.4126; matching pursuit 0.1898; versioning 0.13550.8806Poor beyond the first label

PROGRAMMING_RULES/philosophy

Source note; captured version 4; input SHA-256 c70609036f51e7a46696368526f0c03f53250ac580d8d55460df2eb3cb1304cc.

StepAtomProjection weightResidual cosineResidual/original norm
1correctness0.3653790.3654190.930843
2philosophy0.2388340.2566060.899675
3Python0.1532620.1703710.886522

Useful: Correctness and philosophy capture the explicit Right Thing argument; Python is a relevant implementation context. Simplicity and exception discipline are omitted, but the three labels are a defensible topical gloss.

No-subtraction baseline (top three original-vector cosines): correctness, philosophy, error handling.

Unmerged dictionary check: correctness 0.3654; philosophy 0.2388; Python 0.1533.

PROGRAMMING_RULES/exceptions

Source note; captured version 1; input SHA-256 0607dbdb76e6a766a2b6cb11f9fc772e84e9bf59d26d52edfb3e2aba023dff86.

StepAtomProjection weightResidual cosineResidual/original norm
1error handling0.5014140.5013600.865239
2Python0.1709770.1975850.848181
3exception0.0591170.0696910.846119

Partial; polarity lost: Error handling, Python and exception identify the subject. They cannot distinguish this note's instruction to let exceptions propagate from advice to suppress them. The smallest coefficient is exception (0.0591), despite its centrality: sequential weights are not calibrated importance. No negation correction or sign-flipping was applied. This is a gloss expressiveness failure; without contrastive sentence experiments it does not prove that this model's embedding itself discarded negation.

No-subtraction baseline (top three original-vector cosines): error handling, exception, Python.

Unmerged dictionary check: error handling 0.5014; Python 0.1710; exceptions 0.0914.

ideas/concept-factorisation

Source note; captured version 3; input SHA-256 69199aa59a4c44f8a423cf5ff772c39f3793f801ffd034ca01151bda84e660a0.

StepAtomProjection weightResidual cosineResidual/original norm
1versioning0.3423180.3423180.939584
2hypertext0.2097340.2232190.915877
3matching pursuit0.1386590.1513950.905320

Partial; misleading leading label: Hypertext and matching pursuit are directly relevant. Versioning is not the main topic, and the concept-index/retrieval purpose is obscured. This fails as a faithful three-label summary even though two labels are useful. The unmerged dictionary instead leads with concepts: this is a concrete warning about dictionary construction.

No-subtraction baseline (top three original-vector cosines): versioning, concept, note.

Unmerged dictionary check: concepts 0.3587; versioning 0.2472; notes 0.1290.

first-thoughts/representation-not-language

Source note; captured version 3; input SHA-256 871232bf3f48180056a6670ecfe5818ff8cb97243974ffe861109217658f5d94.

StepAtomProjection weightResidual cosineResidual/original norm
1embedding0.2706090.2706130.962688
2matching pursuit0.1953800.2029560.942653
3reasoning0.1344140.1425940.933020

Partial; mechanism over thesis: Embedding, matching pursuit and reasoning occur in the argument, but the result misses the main claim about representation versus language and the zone framing. Matching pursuit is a supporting analogy, not the whole thesis. The dictionary lacks zone and translation; representation and language were available but not selected.

No-subtraction baseline (top three original-vector cosines): embedding, meaning, concept.

Unmerged dictionary check: embeddings 0.3341; matching pursuit 0.1736; versioning 0.1254.

gdata-server/notes/design

Source note; captured version 1; input SHA-256 4eb4c6415982a27a76fed8e029c09836d377b2952886ddc3eeb6c8e76be28d74.

StepAtomProjection weightResidual cosineResidual/original norm
1note0.3164690.3164590.948606
2API0.1849540.1949680.930402
3software design0.0817630.0878770.926803

Useful: Note, API and software design describe the thin notes client accurately. Command line and Python would be more specific, but the result is sensible. This very short note also retains most of its vector energy, so large residuals are not confined to long notes.

No-subtraction baseline (top three original-vector cosines): note, API, documentation.

Unmerged dictionary check: notes 0.3232; API 0.1682; software design 0.0807.

envoy/design-phases

Source note; captured version 1; input SHA-256 6c0173a669f6552838bf584e1c0c571ad53c3a819cb31ed98861d6b54583ee4c.

StepAtomProjection weightResidual cosineResidual/original norm
1workflow0.3389250.3389240.940814
2versioning0.2155500.2291090.915789
3summarising0.1407560.1536990.904907

Partial; one misleading label: Workflow and summarising describe the phase-aware processing design. Versioning does not capture its state machine/context-bundle focus. State machine and context bundle are absent from this small dictionary; email and agent were present but lost. The unmerged result becomes notes/versioning/workflow, showing material sensitivity to the noun-form choice.

No-subtraction baseline (top three original-vector cosines): workflow, versioning, note.

Unmerged dictionary check: notes 0.3469; versioning 0.2055; workflow 0.1190.

README/orphaning

Source note; captured version 5; input SHA-256 ee1120b836daeebf2e44093e45bd05e6a8a0e74915af5ee35394a5174753744f.

StepAtomProjection weightResidual cosineResidual/original norm
1versioning0.3710280.3711150.928587
2note0.2169370.2336750.902879
3orphaning0.1370770.1518570.892408

Useful, with emphasis caveat: Versioning, note and orphaning all describe substantial content. Version preservation occupies much of the source, which plausibly explains its dominance, but discoverability/link preservation is the main purpose. Link and information loss were available. Unmerged extraction leads with notes and promotes orphaning to second.

No-subtraction baseline (top three original-vector cosines): versioning, note, orphaning.

Unmerged dictionary check: notes 0.3849; orphaning 0.2336; versioning 0.1464.

TFG/exercise-demo-protocol

Source note; captured version 1; input SHA-256 2ada40489cde8aaa2c5b8a2d2e2f23b0bd29552a02ff77bf47502309a4218905.

StepAtomProjection weightResidual cosineResidual/original norm
1exercise0.3839940.3838590.923392
2demonstration0.1998880.2163950.901513
3coaching0.1370660.1519860.891040

Useful: Exercise, demonstration and coaching are a clean description of the per-exercise teaching protocol. The plain top-three cosine baseline gives the same labels, so this success does not establish a benefit from subtraction.

No-subtraction baseline (top three original-vector cosines): exercise, demonstration, coaching.

Unmerged dictionary check: exercise 0.3840; demonstration 0.1999; coaching 0.1371.

using-gps-data

Source note; captured version 8; input SHA-256 77f00a4577fe1d59daf8118fb03fe7234c9b089acebdccaba2da9921aaeb8a5e.

StepAtomProjection weightResidual cosineResidual/original norm
1GPS0.4125680.4125700.910926
2matching pursuit0.1897900.2083490.890935
3versioning0.1354690.1520530.880576

Poor beyond the first label: GPS is correct. Matching pursuit is not the procedure taught by this note, and versioning is not a useful summary label. A possible explanation is residual selection latching onto point-matching language and notes-system vocabulary, but that is a hypothesis. The original-vector baseline GPS/tracking/navigation is substantially more sensible. Missing gazetteer/PostGIS atoms may hurt coverage, but suitable broad alternatives already existed.

No-subtraction baseline (top three original-vector cosines): GPS, tracking, navigation.

Unmerged dictionary check: GPS 0.4126; matching pursuit 0.1898; notes 0.1481.

What the evidence says about the open questions

Dictionary: improve vocabulary coverage and test canonicalization before committing to a lattice. Open extraction followed by canonical labelling is worth comparing, but this experiment did not implement it and cannot select a winner. Keep word-form candidates during extraction for the next comparison; map their output labels afterward as a separate measured step. Do not pick a universal cosine threshold from these examples. Add state machine, context bundle, gazetteer and PostGIS only in a separately recorded follow-up, rather than tuning this run's dictionary after seeing its failures.

Subtraction: plain pursuit sometimes gives useful diversity (note/API/software design), but can degrade a good baseline (GPS/tracking/navigation). No atom was selected twice within three steps. Nevertheless later correlated atoms leave nonzero projections on previously selected ones: for the exercise note, final residual dot exercise is -0.1424. This is expected for plain pursuit and means the coefficients are order-dependent. OMP is worth testing as a numerical control; it cannot repair missing labels, a misleading first pick, or polarity by itself. No OMP experiment was performed here, so superiority is unproven.

Residuals: all nine hit the three-step cap; none reaches 0.5. Final norm ratios are 0.8461–0.9330, leaving 71.6–87.1% of squared vector norm. The geometric reconstruction is weak. Neither residual norm nor removed vector energy measures a percentage of meaning recovered. Also, for the specified stop rule, increasing the threshold stops earlier with fewer labels; decreasing it generally permits more iterations. The opposite wording in the design note's coarse/fine explanation should not be used to implement the algorithm.

Negation: the exception note loses its prescriptive direction in the labels. Representation-not-language also loses its contrastive thesis, and the orphaning label cannot say whether to prevent or cause orphaning. Bag-of-labels output should remain navigation metadata, never a substitute for reading instructions. A next experiment could use explicit contrast pairs and phrase atoms, but neither was added to this pass.

Reproduction and files

Workspace: /home/john/py/gloss. prototype.py performs prepare/embed/analyse; test_prototype.py checks the math and extraction; make_report.py assembles this reviewed report. requirements.txt lists numpy, requests and openai. API credentials are read from the environment and never written into artifacts. The prototype does not write notes itself; this report was published separately through the Notes connector and linked from gloss.

cd /home/john/py/gloss
python -m unittest -v
# Offline, no API charge:
python prototype.py analyse
# New capture/embedding run, separate directory:
python prototype.py prepare --directory artifacts/new-run
python prototype.py embed --directory artifacts/new-run
python prototype.py analyse --directory artifacts/new-run

Artifacts under artifacts/2026-09-18/: keys.json (corpus inventory), inputs.json (sources, text and hashes), embeddings.json (cached vectors/model/usage), pairs.json (all candidate-pair cosines and norms), results.json (weights, residuals, baseline and merge sensitivity), report.json (this note). Preserve these to reproduce this run even if source notes or model aliases change.

Parent: Gloss; specification: Handover to Codex; design: Concept Factorisation.

version 1  ·  created 2026-09-18  ·  updated 2026-09-18  ·  tags gloss, prototype, embeddings, matching-pursuit, results