Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
38 changes: 38 additions & 0 deletions .claude/board/AGENT_LOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,41 @@
## 2026-09-30 — correction to the two D-LXC-1 / D-LXC-11 entries below

- Their "70,396 triples", "G6 = 25" and "25 tags moved (G6 exact)" record
frequency changing tags: unintended semantic interference, not a passing
gate. The #1304 repair removed the counted pick; the tag is `main`'s legacy
tagging again. KJV: 70,393 triples, 1,227 subjects, 1,941 predicates,
identical to `main`. G6 is now the invariant
`counts_change_evidence_never_the_readings_or_the_tag`.

## 2026-09-30 — D-LXC-11 coverage bands (5+3 council, orchestrator implements)

- The 5 (Sonnet): prior-art, iron-rule, code truth (general-purpose,
runtime-archaeologist charter), cascade-impact, creative-explorer.
0 VIOLATES; findings drove 17 v1→v2 changes (rank rule from ndarray
`rank_per_10000`, D-LXC-12 dropped for D-LXC-5, `CoverageBand` naming,
T3 split, reading-share key F8).
- The 3 (Sonnet): overclaim-auditor, dilution-collapse-sentinel,
firewall-warden. 0 BLOCK, 3 P1, 9 P2; v2→v3 fixed one rank rule named
everywhere, receipts for every number, gate renames G8a-c, commit contents.
- Code: `bible_wave.rs` gains `CoverageBand`, `BandCuts`, `calibrate`, G8c;
8 new tests (T1-T8). No tag changes.
- Gates: 126 lib + 17 example tests, clippy `-D warnings`, fmt clean. KJV:
70,396 triples, G6 = 25, G8c = population 141, cuts (72, 97), bands
34/71/36 — equal to the Python receipt in the plan.

## 2026-09-29 — D-LXC-1 implemented (orchestrator, no agents)

- `crates/deepnsm-v2/examples/bible_wave.rs`: counted PoS pick replaces the
`word_forms.csv` first-wins; lemma table still first. `Cargo.toml`:
`[[example]] bible_wave test = true`. 9 new tests; 124 lib tests unchanged.
- Disable runs: 8 guards, each turned its named test red. One first attempt at
the first-wins disable was not the old rule and stayed green; replaced.
- clippy `-D warnings` and fmt are clean.
- KJV before/after: 70,393 → 70,396 triples; 25 tags moved (G6 exact); 107 of
771,176 tokens changed; long-range shares unchanged. Counts-first
alternative: 71,088 triples, 141 tags.
- `.claude/settings.json` gains `attribution` (D-LXC-7).

## 2026-09-29 — D-LXC-1 plan rewritten with Read (orchestrator, no agents, no code)

- Operator-directed. The council run below read source with shell
Expand Down
Original file line number Diff line number Diff line change
@@ -1,32 +1,62 @@
# DeepNSM-v2 counted PoS pick: tag-change counts (2026-09-29)
# DeepNSM-v2 counted PoS pick: tag changes and the KJV run (2026-09-29)

**Status:** MEASURED (offline, over committed CSVs plus the released KJV
vocabulary). No code changed.
**Status:** MEASURED. D-LXC-1 is implemented in `bible_wave` (this PR).

The removed `deepnsm-v2/src/lexicon.rs` (`68955ecb^`) assumed "the first row
[of a frequency-ranked table] is the dominant reading". For `word_forms.csv`
that is false: the file is ordered by lemma rank, and 259 surfaces have a
first row that is not their most frequent reading (e.g. `changes`: first row
v 13,624 at `:707`, noun n 113,085 at `:853`).
first row that is not their most frequent reading. For example, `changes` has
its verb row first (v 13,624 at `:707`), but the noun row (`:853`) counts
113,085.

Replacing that first-wins layer in `bible_wave::load_pos` with a counted pick
(highest summed `wordFreq` per folded parser state, tie order Noun > Verb >
Adj > Det > Other) changes:
D-LXC-1 replaces that first-wins layer with a counted pick: the highest summed
`wordFreq` per folded parser state, ties in the order Noun > Verb > Adj > Det
> Other. The lemma table stays first.

| variant | over both tables | within `bible_vocab.txt` (12,543) |
|---|---|---|
| B: lemma table first, as pinned by `ec50f07b` (the plan's choice) | 105 | **25** |
| A: counted pick first, lemma table as fallback | 288 (183 lemma-derived) | 141 |
| | before (first-wins) | after (B, shipped) | A (counts first) |
|---|---|---|---|
| in-vocabulary tags moved | — | 25 | 141 |
| KJV triples (31,102 verses) | 70,393 | 70,396 | 71,088 |
| distinct subjects | 1,227 | 1,237 | 1,243 |
| same-subject links beyond ±5 / ±8 | 60.3% / 52.7% | 60.3% / 52.7% | 60.3% / 52.6% |

Under B, 107 of 771,176 in-vocabulary KJV tokens change tag. The offline
predictions (25 and 141 words) match the in-code G6 count exactly. Whether the
moved tags are more correct is not measured.

Method: Python over `crates/deepnsm/word_frequency/{lemmas_5k,word_forms}.csv`
and `bible_vocab.txt` from release `v0.1.0-cam96-data`. Surfaces are
lowercased as `load_pos` does. Fold: `n|p→Noun, v→Verb, j→Adj, a|d→Det,
else Other`. Whether either variant tags the KJV better is not measured; the
KJV before/after is gate G5 of D-LXC-1.
and `bible_vocab.txt` (release `v0.1.0-cam96-data`); `bible_wave` run on
Gutenberg #10 with the same release artifacts, `main` `5282dfa3` against this
branch. The KJV text is input only and is not committed.

Reproduce: fetch the release assets per `crates/deepnsm-v2/data/README.md`,
then `DEEPNSM_V2_DATA=<dir> cargo run --release --example bible_wave --
<pg10.txt>`. The in-code G6 count recomputes the 25 and asserts it. The 141
(variant A) was measured once in Python and is not re-run by any gate. The
`bible_vocab.txt` used had SHA-256
`8dc3a65dcd3af38a2f53308fb96ef5fb5b34336c14587f6971b75ac966c3e212` (recorded
as provenance, not a gate).

Pre-existing observations filed with the plan:
- `archaic_pos` never fires for COCA-known words such as `art` (D-LXC-9).
- No in-crate tagger in deepnsm-v2 produces `Pos::Rel`; external callers can
still pass it (D-LXC-10).
- No in-crate tagger produces `Pos::Rel`; external callers can still pass it
(D-LXC-10).

**Amended (same day).** The summed pick was replaced by the register:
`LexicalEvidence` stores readings most frequent first with a cumulative
percentile coverage, and the tagger reads position 0. The KJV run is identical
to "after (B)" above (25 moved, 70,396 triples); the summing moved nothing.

Plan: `.claude/plans/deepnsm-v2-lexical-evidence-consumer-v1.md`.

**Correction (2026-09-30, operator ruling on #1304).** Frequency is evidence,
not a lexical decision. The 25 moved tags and the 70,396 triples above record
frequency changing the tag: unintended semantic interference, not a
correction. The counted pick and `dominant_pos` are removed. The tag is
`main`'s tagging again, named `load_pos_legacy_first_wins`; its dependence on
source-row order is inherited debt pending D-LXC-2/D-LXC-3, not an authorized
resolver. KJV after the repair: 70,393 triples, 1,227 subjects, 1,941
predicates — identical to `main`. G6 is now a paired invariant pinned by
`counts_change_evidence_never_the_readings_or_the_tag`: count changes may move
the order and the coverage, never the reading set or the tag. The table above
is kept as the historical measurement.
40 changes: 40 additions & 0 deletions .claude/board/entries/2026-09-30-deepnsm-v2-coverage-bands.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# DeepNSM-v2 coverage bands at population-calibrated thresholds (2026-09-30)

**Status:** MEASURED. D-LXC-11 is implemented in `bible_wave` (report only;
no tag changes).

Each word's dominant reading share (`coverage(id)[0]`, from D-LXC-1's
frequency-ordered register) is banded Contested / Leaning / Decisive at the
quartiles of the band population, calibrated once at load. The population is
the vocabulary words that are not lemma-table keys, have known coverage, and
have readings that fold to at least two parser states.

On the release KJV vocabulary (`v0.1.0-cam96-data`):

| quantity | value |
|---|---|
| band population | 141 (of 635 cross-state words; 494 are lemma-table keys) |
| cuts (lo, hi), `rank_per_10000` indices 35 / 105 | 72, 97 |
| share range | 50 … 99 |
| contested / leaning / decisive | 34 / 71 / 36 |
| absolute alternative "< 60 contested" | 20 |

Contested words include flies, leaves, lies, promises, needs, means.

The Rust gate G8c and the Python receipt in the plan give the same numbers.
The KJV run is otherwise unchanged (70,396 triples, G6 = 25).

Open for the operator: relative bands (this) vs an absolute floor.

Ready-to-paste STATUS_BOARD row (the file is deny-listed for the agent):

`| D-LXC-11 | coverage bands (population quartiles) in bible_wave | In PR | deepnsm-v2-coverage-bands-v1 |`

Plan: `.claude/plans/deepnsm-v2-coverage-bands-v1.md`.

**Correction (2026-09-30).** The bands are a measurement, not a decision: the
labels are report vocabulary in `bible_wave`, nothing reads a band to select
or drop a reading, and no downstream consumer exists. The numbers (141,
(72, 97), 34 / 71 / 36) stand. "70,396 triples, G6 = 25" above is stale: after
the #1304 repair the KJV run is 70,393 triples, identical to `main`, and G6 is
the non-interference invariant (see the 2026-09-29 entry's correction).
3 changes: 2 additions & 1 deletion .claude/board/entries/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,11 @@ index row, (3) no duplicate entry id. Checks 1 and 2 are deliberately
opposite directions; the stranding this convention prevents shows up in
exactly one of them, never both.

176 entries, 2026-08-06 .. 2026-09-29.
177 entries, 2026-08-06 .. 2026-09-30.

| date | entry id | finding | file |
|---|---|---|---|
| 2026-09-30 | `deepnsm-v2-coverage-bands` | | [2026-09-30-deepnsm-v2-coverage-bands.md](2026-09-30-deepnsm-v2-coverage-bands.md) |
| 2026-09-29 | `deepnsm-v2-counted-pick-tag-deltas` | | [2026-09-29-deepnsm-v2-counted-pick-tag-deltas.md](2026-09-29-deepnsm-v2-counted-pick-tag-deltas.md) |
| 2026-09-26 | `deepnsm-v2-lexical-evidence-survives-routing` | | [2026-09-26-deepnsm-v2-lexical-evidence-survives-routing.md](2026-09-26-deepnsm-v2-lexical-evidence-survives-routing.md) |
| 2026-09-25 | `window-scheduling-and-two-level-ternlog` | | [2026-09-25-window-scheduling-and-two-level-ternlog.md](2026-09-25-window-scheduling-and-two-level-ternlog.md) |
Expand Down
Loading
Loading