@polycode-projects/the-mechanical-code-talker 1.4.1 → 1.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -299,7 +299,7 @@ on the chat's hot path.
299
299
  entailment (`tmct syllogise`) is mechanical OWL rule materialization applied
300
300
  offline, rule-by-rule and retractable, not an LLM. There is **no LLM anywhere
301
301
  in the product**. (An LLM-as-judge exists only in the offline eval harness
302
- that tunes tmct, see `SKILL_BENCHMARK_CHAT.md`, never in the product path.)
302
+ that tunes tmct, see `SKILL_BENCHMARK_CEFR_ENGLISH.md`, never in the product path.)
303
303
  - **It never guesses silently.** When it cannot resolve your question it says
304
304
  so and nudges you toward a query it *can* answer.
305
305
 
package/ROADMAP.md CHANGED
@@ -12,6 +12,34 @@ mapped into them (item numbers retained for traceability); the seven sketches
12
12
  formerly held in `code-talker-ideas.txt` are folded into items 8–11 below and
13
13
  the file has been deleted.
14
14
 
15
+ ## Working model: coordinator + background sub-agents
16
+
17
+ Standing orders for every session working this repo (copied verbatim from this repo's own
18
+ `CLAUDE.md` on 2026-07-10, at the operator's request, so the discipline is visible directly in
19
+ the project's own operating docs and not just the config file):
20
+
21
+ Run big tasks in **concurrent background sub-agents** and keep the main chat free — the main
22
+ session is the COORDINATOR (plans, launches, integrates, answers the operator), not the worker.
23
+
24
+ - Decompose into workstreams with **clear file-ownership boundaries**; serialize on shared
25
+ files (one agent owns `package.json`, `src/`, `bin/`, `test/` sequences; docs/site tracks
26
+ run in parallel).
27
+ - **Keep the chat for chat**: anything long-running (benchmarks, judge passes, builds, test
28
+ sweeps) executes as a BACKGROUND task at maximum safe concurrency (the chatbench judge
29
+ defaults to `--concurrency 12`); the main session launches it, keeps coordinating and
30
+ conversing, and collects results on the completion notification. Never block the
31
+ conversation on a run.
32
+ - Commit per completed step with the repo-local identity (`antony@polycode.co.uk` /
33
+ `Antony at Polycode`); keep `npm test` green at every commit.
34
+ - Push/publish is gated on the operator (CI publishes on version bump on `main`).
35
+ - **Version bump timing:** only bump the version (`package.json` + `package-lock.json`) at the
36
+ moment of actually pushing a release — the bump commit is part of that same push, not a
37
+ separate step staged in advance. Default to a patch bump unless the batch is clearly
38
+ feature-level (minor) or breaking (major). Do NOT pre-stage a future version number and leave
39
+ it sitting unpushed in git between releases — that produced confusing "linking to a version
40
+ that doesn't exist yet" noise in practice and was reverted by operator instruction 2026-07-09.
41
+ Between pushes, `package.json`'s version should always equal whatever's actually live on npm.
42
+
15
43
  ## Where we are now (2026-07-09)
16
44
 
17
45
  The full `SKILL_CHAT_PLAYTEST.md` dialogue-flow tier ladder is complete, tiers 0 through 6.
@@ -367,7 +395,7 @@ author lane, wall kindness + honest capability nudges, teach-lane widening, rece
367
395
  prose→detail, plus a live-found scale hotfix (`edgesOfKind` argument-spread overflow past ~100k
368
396
  edges). AGENTBENCH ladder grew 43→56 cases; goal driver 100% plan / 98% result / 0% hallucination,
369
397
  all rungs gate-PASS; resolver floor clean A0–C1 100/100; C2 became rule-general (two declared
370
- goal-rules, pure `applicableRules` selection). Full detail: `CHATBENCH_0.8.2.md`,
398
+ goal-rules, pure `applicableRules` selection). Full detail: `CEFR_ENGLISH_0.8.2.md`,
371
399
  `AGENTBENCH_0.8.2.md`.
372
400
 
373
401
  **v0.8.1** (published): AGENTBENCH grades the executed composed result, not just the call-plan.
@@ -375,12 +403,12 @@ Resolver 97% plan / 91% result / 0% hallucination. Stage 5 (the C2 goal-reasoner
375
403
  Autonomy) lifted result-completion +10pp on a like-for-like driver swap. Stage 2 (imperative intent
376
404
  frames + ACE reach) shipped at 100% plan / 95% result / 0% hallucination, `tmct_calls` genuinely
377
405
  NL-reachable. Chat surface: quick wins + two frozen playtest transcripts, no tier-1 regression vs
378
- 0.7.1. Full detail: `CHATBENCH_0.8.1.md`, `AGENTBENCH_0.8.1.md`.
406
+ 0.7.1. Full detail: `CEFR_ENGLISH_0.8.1.md`, `AGENTBENCH_0.8.1.md`.
379
407
 
380
408
  **v0.8.0** (published): all five Phase-11 tracks. The `/v1/messages` shim + Stage-0 registry +
381
409
  resolver/guardrail/planner (96% plan completion, 0% hallucination, closed-world C1); three chat
382
410
  levers; the `../bedrock-meter` $0 rung; the playtest; Stage-2/Stage-5 research notes. Full detail:
383
- `CHATBENCH_0.8.0.md`, `AGENTBENCH_0.8.0.md`.
411
+ `CEFR_ENGLISH_0.8.0.md`, `AGENTBENCH_0.8.0.md`.
384
412
 
385
413
  **Doc restructuring — `PLAN_AGENTS.md` (2026-07-10)**: `PLAN_TMCT_ECOSYSTEM_INTEGRATION.md` was
386
414
  rewritten and renamed to `PLAN_AGENTS.md`, absorbing six sibling docs (`PLAN_AGI_ARCHITECTURE.md`,
@@ -398,8 +426,8 @@ mechanical, extractive text generation (broad search → group → infer between
398
426
  prune → grammar/voice pass), never LLM-style free generation. Separately, the benchmark/skill doc
399
427
  landscape was unified: CHATBENCH stops splitting report+transcripts into two files going forward;
400
428
  `SKILL_CHAT_PLAYTEST.md` and `SKILL_PLAYTEST_SPRINT.md` merged into `SKILL_BENCHMARK_PLAYTEST.md`
401
- (with a new `PLAYTESTBENCH_<version>.md` report convention); `SKILL_TUNING_CYCLE.md` and
402
- `SKILL_INFERENCE_TESTING.md` renamed to `SKILL_BENCHMARK_CHAT.md`/`SKILL_BENCHMARK_INFERENCE.md`;
429
+ (with a new `CONVERSATIONBENCH_<version>.md` report convention); `SKILL_TUNING_CYCLE.md` and
430
+ `SKILL_INFERENCE_TESTING.md` renamed to `SKILL_BENCHMARK_CEFR_ENGLISH.md`/`SKILL_BENCHMARK_INFERENCE.md`;
403
431
  a new `SKILL_BENCHMARK_AGENT.md` formalizes the previously-ad-hoc AGENTBENCH cycle;
404
432
  `SKILL_STRATEGY_ADVISOR.md`/`SKILL_PLAIN_PROSE.md` renamed to `SKILL_AGENT_STRATEGY_ADVISOR.md`/
405
433
  `SKILL_AGENT_PLAIN_PROSE.md`. A new shared reference doc, `docs/references/research-horizon.md`,
@@ -429,6 +457,43 @@ legitimate reads, not just traversal attempts — fixed at the source and defens
429
457
  One scope decision made mid-build: multi-language AST extraction stays in seonix permanently, not
430
458
  tmct's job — full detail in `PLAN_AGENTS.md` §13.
431
459
 
460
+ **The 2026-07-10 uplift batch — largest single session to date, coordinator + ~20 concurrent
461
+ background tracks.** `PLAN_CHAT_FEEL.md` fully archived (all 12 items shipped — item 6's
462
+ remainder: 8 remaining temporal-composition red ids fixed via new `parseCommitFilter`/NP templates/
463
+ a `PERFECT_AUX` carve-out; the presupposition regression turned out to be a stale test fixture, not
464
+ a product bug; the garden-path regression is real, narrow, and documented open). `PLAN_COMPLETIONS.md`
465
+ — a brand-new capability, operator-sign-off given this session — shipped end-to-end, Stages 0-3:
466
+ `src/completions/` (`search.mjs`/`group.mjs`/`rank.mjs`/`infer.mjs`/`prune.mjs`/`complete.mjs`),
467
+ connected-components grouping over `memory/blocks.mjs`'s block-similarity graph, a closed 4-relation
468
+ cross-group inference vocabulary (supports/contradicts/elaborates/exemplifies, each with a named
469
+ mechanical licensing test), PageRank+IDF extractive sentence ranking, and an auditable prune/assemble/
470
+ grammar-pass pipeline — every output sentence traces to a source span, `finish.mjs` generalized from
471
+ single-answer to genuinely multi-sentence output. `PLAN_INFERENCE_TESTING.md` stages 3-5: the
472
+ `cax-dw` disjointness rule (kernel + a live, read-only chat-query wiring closing a real gap where the
473
+ rule existed but was never reachable from a chat turn — INF-B1's gate), `cls-svf1` (someValuesFrom
474
+ restriction membership) plus a new positive infbench template needed to actually measure it, and a
475
+ new consistency checker (`findConsistencyViolations`) that REFUSES to answer from a subject whose own
476
+ taught types contradict each other, naming the clash — INF-C2. `resolveRelationChase`/
477
+ `resolveRelationChaseReverse` extracted from `chat.mjs` closures into standalone exported functions in
478
+ `memory/core.mjs` (PLAN_COMPLETIONS Stage 1's prerequisite). `PLAN_AGENTS.md` Phase 0 essentially
479
+ closed out (cross-repo smoke test, `agentbench/envelope.json`, the `ace-owl` standalone MPL-2.0
480
+ package extraction, ontology-hierarchies tracks a-d, advanced-grammar tracks a/d/f — several tracks
481
+ found already-shipped from earlier sessions and verified/extended rather than redone) — only the
482
+ chat-surface debt re-measure remains open. The SHACL-style declarative ingest gate shipped as a small
483
+ hand-rolled validator (`src/memory/shacl.mjs`) after `shacl-engine` was tried and rejected as
484
+ disproportionately heavy for tmct's minimal-deps floor. A fourth tier2 corpus bundle
485
+ (`tier2-general`) and a context-preserving unknown-word ingestion module shipped, though the latter's
486
+ one production call site doesn't activate it yet (`PLAN_AGENTS.md` §4). CHATBENCH restructured
487
+ (case-set v3): the full 1,075-case CEFR pool preserved at `chatbench/graded-pool-max.jsonl`;
488
+ `chatbench/graded-pool.jsonl` is now a 109-case go-to default (10/CEFR-grade + the former
489
+ `cases.jsonl`'s 49 hand-authored capability cases, each assigned a real grade+construction cell) at
490
+ N=2/single-draw by default. A full capability audit (`CAPABILITIES_AUDIT_2026-07-10.md`) cataloged
491
+ 83 distinct capabilities against every doc claim and the actual code — 57 implemented, 21
492
+ claimed-only, 3 partial, its most notable finding being that `PLAN_AGENTS.md` itself (drafted the
493
+ same session) already listed several now-shipped items as "not started," a same-session docs-lag
494
+ issue, not months-old drift. See `HANDOVER.md` for the ranked next-steps this batch's four fresh
495
+ benchmark runs (AGENTBENCH/INFBENCH/PLAYTEST/CHATBENCH) surfaced.
496
+
432
497
  ## The umbrella product definition (item 1)
433
498
 
434
499
  **A tolerant, ELIZA/PARRY-style chat, obsessed with software.** A best-efforts
@@ -588,7 +653,7 @@ in `SKILL_TUNING_CYCLE.md`:
588
653
  - **LLM-as-judge** scoring (N≥3 samples per case; groundedness / correctness /
589
654
  honesty-on-miss / rephrase-hint helpfulness). The judge lives in the **eval
590
655
  harness only** — the product stays no-LLM;
591
- - `CHATBENCH_0NN.md` artifacts and an autonomous cycle loop (no hard pause;
656
+ - `CEFR_ENGLISH_0NN.md` artifacts and an autonomous cycle loop (no hard pause;
592
657
  each cycle logs its ranked decision menu and continues).
593
658
  - **The graded benchmark** (case-set v2, operator-specified 2026-07-04): a
594
659
  scaled ladder fitted to HUMAN LANGUAGE STANDARDS, not AI-benchmark mechanics
@@ -705,7 +770,7 @@ and the block-index summary (blocks, tokens, top PageRank blocks). Same renderer
705
770
  > near-term actions, both shipped — see below).
706
771
 
707
772
  The immediate work: drive the graded benchmark up the CEFR ladder, one lever per cycle, per
708
- `SKILL_TUNING_CYCLE.md`. Cycle 3 (post-wiring-wave, CHATBENCH_003) gave the first full-spectrum
773
+ `SKILL_TUNING_CYCLE.md`. Cycle 3 (post-wiring-wave, CEFR_ENGLISH_003) gave the first full-spectrum
709
774
  reading — A1 1.72 / A2 1.70 / **B1 0.77 (the cliff)** / B2 0.97 / C1 1.07 / C2 0.69 — and two
710
775
  META-fixes gate everything:
711
776
 
@@ -1042,7 +1107,7 @@ you toward precision" promise on the conversational surface.
1042
1107
  ROUTING to existing capabilities, replays the same conversations until they flow, freezes them as
1043
1108
  regression transcripts, then ratchets the complexity tier. The drill-down transcript above is its
1044
1109
  first frozen fixture (`test/chatflow-drilldown.test.mjs`).
1045
- - **Measured** by the version-matched benchmark (`CHATBENCH_<version>` per `SKILL_TUNING_CYCLE.md`),
1110
+ - **Measured** by the version-matched benchmark (`CEFR_ENGLISH_<version>` per `SKILL_BENCHMARK_CEFR_ENGLISH.md`),
1046
1111
  with new graded cells for the miss / empty-graph / concept-touch surfaces so these become
1047
1112
  regression-protected levers, not one-off polish.
1048
1113
 
@@ -1076,11 +1141,11 @@ remain designed-not-built by intent.
1076
1141
  > g-b1-pron ids; temporal = g-b1-temp ×5 + g-c1-temp ×9; discourse-count re-measure first — it
1077
1142
  > sampled 0/5 red and is likely already green. See HANDOVER follow-up #3.
1078
1143
 
1079
- The three levers `CHATBENCH_0.7.1` measured + ranked — which **double as router prerequisites** (they
1144
+ The three levers `CEFR_ENGLISH_0.7.1` measured + ranked — which **double as router prerequisites** (they
1080
1145
  gate the A2→B1→C1 rungs, per Phase B of the router plan):
1081
1146
  1. **Pronoun / focus binding** — the "it → Commit" mis-bind (`B1 pron 1.24`); biggest movable mass.
1082
1147
  2. **Discourse-count anaphora** — "count them / how many of those" over a prior listing (clears the 2
1083
- `CHATBENCH_0.7.1` tier-1 misses).
1148
+ `CEFR_ENGLISH_0.7.1` tier-1 misses).
1084
1149
  3. **C1 temporal-over-relative composition** — the two-hop ceiling (`C1 temp 0.31`).
1085
1150
  Land all three (not just #1); they raise the chat floor *and* the router's floor at once.
1086
1151
 
@@ -1095,7 +1160,7 @@ Buildable now with a frontier model as co-author (see PLAN §"solved vs unsolved
1095
1160
  - **Phase A — the shim.** An Anthropic Messages API endpoint (`/v1/messages`, `tool_use`/`tool_result`
1096
1161
  blocks). **Extended:** also present as a **`bedrock-meter`-compatible routing target** (see below).
1097
1162
  - **Phase B — measure today → `AGENTBENCH_0.7.2.md`.** Shim + a small graph-query toolset up the
1098
- A0→C2 ladder; the honest baseline (expected A0 solid, A1–A2 partial, per the CHATBENCH_0.7.1
1163
+ A0→C2 ladder; the honest baseline (expected A0 solid, A1–A2 partial, per the CEFR_ENGLISH_0.7.1
1099
1164
  inherited assets).
1100
1165
  - **Phase C — the grading ladder.** The AGENTBENCH benchmark itself (rungs as levels, comparable
1101
1166
  local/hosted models as reference bands, zero-hallucination gate).
package/corpus/README.md CHANGED
@@ -13,7 +13,7 @@ tmct's knowledge arrives in three tiers, distinguished by **when** it lands and
13
13
  | Tier | What | Ships in the package? | Lands when | Provenance |
14
14
  |---|---|---|---|---|
15
15
  | **1 — base** | the general English/tech ConceptNet slice + the response templates + the SE phrasebook — the vocabulary every tmct has out of the box | **yes**, committed here | `tmct init` seeds `.tmct/` from committed data (offline, $0) | `corpus:conceptnet /r/…` |
16
- | **2 — specialised** | LANGUAGE- or DOMAIN-specific fact sets (`aws`, `python`, `java`, ) so tmct can "expand into a concept for an applicable codebase" | **no** — selected per repo | `tmct init` fetches/generates the chosen tier-2 corpuses into `.tmct/` (Wave-2 wiring) | `corpus:tier2:<id> /r/…` |
16
+ | **2 — specialised** | LANGUAGE- or DOMAIN-specific fact sets (`aws`, `python`, `java`) plus one deliberately NON-code-domain "wider general-knowledge" bundle (`general`) so tmct can "expand into a concept for an applicable codebase" — or into a seed set that isn't code at all | **no** — selected per repo | activated via `src/extensions.mjs`'s `[extensions.tier2-<id>] active = true` (or `tmct init --corpus <id>`), inactive by default | `corpus:tier2-<id> /r/…` |
17
17
  | **3 — learned** | facts tmct writes from the actual conversation / the actual codebase it is pointed at | never committed | at runtime, into `.tmct/memory/` | `chat:…`, `codegraph:…` |
18
18
 
19
19
  **Offline / $0 is the default at every tier.** Tier-1 is committed. Tier-2's
@@ -38,7 +38,7 @@ loudly instead of seeding garbage.
38
38
  | `conceptnet/README.md` | provenance, retrieval date, seed terms, filter rules, row counts | — | — |
39
39
  | `tier2/manifest.json` | tier-2: index of specialised corpuses (id, kind, description, source, sha256, size) | — | MPL-2.0 |
40
40
  | `tier2/generate.mjs` | tier-2: the curated-corpus generator + manifest writer (+ opt-in network-fetch path) | — | MPL-2.0 |
41
- | `tier2/{aws,python,java}.jsonl` | tier-2 SAMPLE corpuses — same fact shape as the tier-1 slice, loadable via the same path | ~4 KB each | MPL-2.0 |
41
+ | `tier2/{aws,python,java,general}.jsonl` | tier-2 SAMPLE corpuses — same fact shape as the tier-1 slice, loadable via the same path (`general` is the one deliberately non-code-domain bundle) | ~4-6 KB each | MPL-2.0 |
42
42
 
43
43
  And alongside (same phase, different directory because it is tmct-original
44
44
  data, not a derived corpus):
@@ -94,26 +94,27 @@ sha256) in one deterministic pass. Curated data is authored in that file so it
94
94
  stays reviewable; a corpus too big to hand-curate is a `fetch` manifest entry
95
95
  (URL + sha256, opt-in network — `fetchCorpus()` is the reference downloader).
96
96
 
97
- **How the coordinator should wire tier-2 into `tmct init` (Wave-2NOT done
98
- here):**
99
-
100
- 1. Add a tier-2-aware seeder next to `seedMemory()` (e.g. `seedTier2(dir, id)`)
101
- that reads `corpus/tier2/manifest.json`, resolves the requested corpus's
102
- `file` (curated already on disk; `fetch` → download + `sha256`-verify
103
- first, only when network is explicitly enabled), then runs the SAME
104
- `loadSlice toFacts → appendFact` pipeline**but stamps provenance
105
- `corpus:tier2:<id> <rel>`** instead of the hard-coded `corpus:conceptnet …`
106
- string in `toFacts()`. (Simplest: give `toFacts` an optional
107
- `provenancePrefix` argument, default `"corpus:conceptnet"`.)
108
- 2. Give `tmct init` a `--corpus <id>[,<id>…]` flag (and/or codebase
109
- auto-detection: a `requirements.txt`/`pyproject.toml` → `python`, a
110
- `pom.xml`/`build.gradle` `java`, an AWS SDK dep / `serverless.yml` →
111
- `aws`). Default stays tier-1-only, offline, $0.
112
- 3. Idempotency is free `seedMemory`'s content-hashed fact ids and pre-read
113
- skip already handle re-seeds; tier-2 rides the same path.
114
-
115
- None of that touches `package.json` or the tier-1 budget; tier-2 files are not
116
- shipped, so they do not count against the 1.5 MB slice budget.
97
+ **How tier-2 wires into `tmct init` (done`src/extensions.mjs`):**
98
+ `resolveExtensions(repoRoot)` ships all four tier-2 bundles as
99
+ shipped-but-inactive `BUILTIN_EXTENSIONS` entries (`tier2-aws`/`tier2-python`/
100
+ `tier2-java`/`tier2-general`); `[extensions.tier2-<id>] active = true` in
101
+ `tmct.toml` (or `tmct init --corpus <id>`) flips one on, and
102
+ `seedActiveCorpusEntries` runs it through the exact same
103
+ `loadSlice toFacts appendFacts` pipeline as tier-1, stamped
104
+ `corpus:tier2-<id> <rel>` via `toFacts`'s `provenancePrefix` argumentno
105
+ separate tier-2 code path. Idempotency is free (`seedMemory`'s content-hashed
106
+ fact ids + pre-read skip). None of this touches `package.json` or the tier-1
107
+ budget; tier-2 files are not shipped, so they do not count against the
108
+ ≤ 1.5 MB slice budget. Codebase auto-detection (a `requirements.txt`
109
+ `python`, a `pom.xml`/`build.gradle` → `java`, an AWS SDK dep → `aws`) is
110
+ still unbuilt activation today is config-only, never automatic.
111
+
112
+ A term that would otherwise be silently dropped when a bundle is seeded (an
113
+ `ace = "none"` relation like RelatedTo/HasContext, e.g. from a broader slice)
114
+ can optionally be captured instead of vanishing: `seedMemory`'s
115
+ `captureUnknownContext: true` option (default off) runs
116
+ `src/corpus/unknown-ingest.mjs` over the same batch see that module's own
117
+ doc comment.
117
118
 
118
119
  ## How to regenerate / extend
119
120
 
@@ -18,7 +18,7 @@ CC-BY-SA like the ConceptNet slice.
18
18
 
19
19
  | file | shape | count |
20
20
  |------|-------|-------|
21
- | `concepts.jsonl` | relation facts, byte-identical shape to `corpus/conceptnet/slice.jsonl` | 238 facts |
21
+ | `concepts.jsonl` | relation facts, byte-identical shape to `corpus/conceptnet/slice.jsonl` | 399 facts |
22
22
  | `definitions.jsonl` | `{ "term", "definition", "sense": "software" }`, one per line | 288 definitions |
23
23
  | `LICENSE-NOTICE` | MPL-2.0 provenance for this directory | — |
24
24
 
@@ -42,14 +42,15 @@ emitted-predicate breakdown:
42
42
 
43
43
  | ConceptNet rel | → predicate | facts | meaning |
44
44
  |----------------|-------------|-------|---------|
45
- | `/r/IsA` | `rdfs:subClassOf` | 109 | taxonomy (`class` ⊑ `type`) — the load-bearing layer the syllogise closure walks |
45
+ | `/r/IsA` | `rdfs:subClassOf` | 132 | taxonomy (`class` ⊑ `type`) — the load-bearing layer the syllogise closure walks. Includes the upper-ontology spine (`artifact`/`agent`/`event`/`quality`/`quantity`) added 2026-07-10 |
46
46
  | `/r/UsedFor` | `mgx:usedFor` | 48 | purpose (`cache` usedFor `performance`) |
47
- | `/r/PartOf` | `mgx:partOf` | 35 | meronymy (`method` partOf `class`) |
48
- | `/r/HasA` | `mgx:hasA` | 11 | holonymy (`class` hasA `method`) |
47
+ | `/r/PartOf` | `mgx:partOf` | 37 | meronymy (`method` partOf `class`) |
48
+ | `/r/HasA` | `mgx:hasA` | 18 | holonymy (`class` hasA `method`) |
49
49
  | `/r/CapableOf` | `mgx:capableOf` | 8 | behaviour (`cache` capableOf `store data`) |
50
50
  | `/r/CreatedBy` | `mgx:createdBy` | 4 | provenance (`commit` createdBy `developer`) |
51
- | `/r/HasProperty` | `mgx:hasProperty` | 4 | attributes (`cache` hasProperty `fast`) |
51
+ | `/r/HasProperty` | `mgx:hasProperty` | 19 | attributes (`cache` hasProperty `fast`) |
52
52
  | `/r/RelatedTo` | *(none — non-emitting)* | 19 | weak peer hints (`interface` relatedTo `class`); kept per the map's own note as a future fuzzy-match signal — they load without drift but emit no fact today |
53
+ | `/r/DistinctFrom`| `owl:disjointWith` | 114 | mutual exclusion (`cache` disjointWith `queue`); grown 2026-07-10 (was 42) from a token starter set to a genuine upper-ontology + sibling-cluster disjointness spine for `PLAN_INFERENCE_TESTING.md`'s `cax-dw` rule |
53
54
 
54
55
  `normFactTerm` lowercases and de-underscores endpoints, so `/c/en/java_class` stores
55
56
  as the term `java class`.
@@ -98,7 +99,7 @@ This directory is **data only**; wiring it into seeding is the coordinator's
98
99
  `chat.mjs` / `init.mjs` change. Recommended:
99
100
 
100
101
  1. **Seed `corpus/seon` FIRST, ahead of the ConceptNet slice**, and **exempt it from
101
- the 500-fact cap** (`SEED_LIMIT`). It is small (238 lines → 219 emitted facts) and
102
+ the 500-fact cap** (`SEED_LIMIT`). It is small (399 lines → 380 emitted facts) and
102
103
  fully curated, so the whole tier belongs in memory before any capped ConceptNet
103
104
  fill. Concretely: call `seedMemory(repo, { slicePath: SEON_CONCEPTS_FILE })` with
104
105
  **no `limit`**, then run the existing capped ConceptNet seed after it. The
@@ -278,3 +278,122 @@
278
278
  {"start":"/c/en/question","rel":"/r/DistinctFrom","end":"/c/en/answer","weight":2}
279
279
  {"start":"/c/en/bug","rel":"/r/DistinctFrom","end":"/c/en/feature","weight":2}
280
280
  {"start":"/c/en/issue","rel":"/r/DistinctFrom","end":"/c/en/requirement","weight":2}
281
+ {"start":"/c/en/file","rel":"/r/IsA","end":"/c/en/artifact","weight":2}
282
+ {"start":"/c/en/package","rel":"/r/IsA","end":"/c/en/artifact","weight":2}
283
+ {"start":"/c/en/document","rel":"/r/IsA","end":"/c/en/artifact","weight":2}
284
+ {"start":"/c/en/log","rel":"/r/IsA","end":"/c/en/artifact","weight":2}
285
+ {"start":"/c/en/developer","rel":"/r/IsA","end":"/c/en/agent","weight":2}
286
+ {"start":"/c/en/team","rel":"/r/IsA","end":"/c/en/agent","weight":2}
287
+ {"start":"/c/en/user","rel":"/r/IsA","end":"/c/en/agent","weight":2}
288
+ {"start":"/c/en/change","rel":"/r/IsA","end":"/c/en/event","weight":2}
289
+ {"start":"/c/en/release","rel":"/r/IsA","end":"/c/en/event","weight":2}
290
+ {"start":"/c/en/build","rel":"/r/IsA","end":"/c/en/event","weight":2}
291
+ {"start":"/c/en/deployment","rel":"/r/IsA","end":"/c/en/event","weight":2}
292
+ {"start":"/c/en/review","rel":"/r/IsA","end":"/c/en/event","weight":2}
293
+ {"start":"/c/en/status","rel":"/r/IsA","end":"/c/en/quality","weight":2}
294
+ {"start":"/c/en/severity","rel":"/r/IsA","end":"/c/en/quality","weight":2}
295
+ {"start":"/c/en/impact","rel":"/r/IsA","end":"/c/en/quality","weight":2}
296
+ {"start":"/c/en/risk","rel":"/r/IsA","end":"/c/en/quality","weight":2}
297
+ {"start":"/c/en/size","rel":"/r/IsA","end":"/c/en/quantity","weight":2}
298
+ {"start":"/c/en/complexity","rel":"/r/IsA","end":"/c/en/quantity","weight":2}
299
+ {"start":"/c/en/latency","rel":"/r/IsA","end":"/c/en/quantity","weight":2}
300
+ {"start":"/c/en/duration","rel":"/r/IsA","end":"/c/en/quantity","weight":2}
301
+ {"start":"/c/en/frequency","rel":"/r/IsA","end":"/c/en/quantity","weight":2}
302
+ {"start":"/c/en/churn","rel":"/r/IsA","end":"/c/en/quantity","weight":2}
303
+ {"start":"/c/en/coverage","rel":"/r/IsA","end":"/c/en/quantity","weight":2}
304
+ {"start":"/c/en/module","rel":"/r/HasA","end":"/c/en/class","weight":2}
305
+ {"start":"/c/en/package","rel":"/r/HasA","end":"/c/en/module","weight":2}
306
+ {"start":"/c/en/team","rel":"/r/HasA","end":"/c/en/developer","weight":2}
307
+ {"start":"/c/en/pipeline","rel":"/r/HasA","end":"/c/en/job","weight":2}
308
+ {"start":"/c/en/test","rel":"/r/HasA","end":"/c/en/assertion","weight":2}
309
+ {"start":"/c/en/graph","rel":"/r/HasA","end":"/c/en/edge","weight":2}
310
+ {"start":"/c/en/interface","rel":"/r/HasA","end":"/c/en/method","weight":2}
311
+ {"start":"/c/en/directory","rel":"/r/PartOf","end":"/c/en/repository","weight":2}
312
+ {"start":"/c/en/package","rel":"/r/PartOf","end":"/c/en/repository","weight":2}
313
+ {"start":"/c/en/module","rel":"/r/HasProperty","end":"/c/en/deprecated","weight":2}
314
+ {"start":"/c/en/api","rel":"/r/HasProperty","end":"/c/en/deprecated","weight":2}
315
+ {"start":"/c/en/dependency","rel":"/r/HasProperty","end":"/c/en/deprecated","weight":2}
316
+ {"start":"/c/en/function","rel":"/r/HasProperty","end":"/c/en/pure","weight":2}
317
+ {"start":"/c/en/module","rel":"/r/HasProperty","end":"/c/en/tested","weight":2}
318
+ {"start":"/c/en/function","rel":"/r/HasProperty","end":"/c/en/tested","weight":2}
319
+ {"start":"/c/en/test","rel":"/r/HasProperty","end":"/c/en/flaky","weight":2}
320
+ {"start":"/c/en/test","rel":"/r/HasProperty","end":"/c/en/green","weight":2}
321
+ {"start":"/c/en/build","rel":"/r/HasProperty","end":"/c/en/green","weight":2}
322
+ {"start":"/c/en/build","rel":"/r/HasProperty","end":"/c/en/broken","weight":2}
323
+ {"start":"/c/en/branch","rel":"/r/HasProperty","end":"/c/en/stale","weight":2}
324
+ {"start":"/c/en/api","rel":"/r/HasProperty","end":"/c/en/stable","weight":2}
325
+ {"start":"/c/en/prototype","rel":"/r/HasProperty","end":"/c/en/experimental","weight":2}
326
+ {"start":"/c/en/module","rel":"/r/HasProperty","end":"/c/en/documented","weight":2}
327
+ {"start":"/c/en/codebase","rel":"/r/HasProperty","end":"/c/en/legacy","weight":2}
328
+ {"start":"/c/en/artifact","rel":"/r/DistinctFrom","end":"/c/en/agent","weight":2}
329
+ {"start":"/c/en/artifact","rel":"/r/DistinctFrom","end":"/c/en/event","weight":2}
330
+ {"start":"/c/en/artifact","rel":"/r/DistinctFrom","end":"/c/en/quality","weight":2}
331
+ {"start":"/c/en/artifact","rel":"/r/DistinctFrom","end":"/c/en/quantity","weight":2}
332
+ {"start":"/c/en/agent","rel":"/r/DistinctFrom","end":"/c/en/event","weight":2}
333
+ {"start":"/c/en/agent","rel":"/r/DistinctFrom","end":"/c/en/quality","weight":2}
334
+ {"start":"/c/en/agent","rel":"/r/DistinctFrom","end":"/c/en/quantity","weight":2}
335
+ {"start":"/c/en/event","rel":"/r/DistinctFrom","end":"/c/en/quality","weight":2}
336
+ {"start":"/c/en/event","rel":"/r/DistinctFrom","end":"/c/en/quantity","weight":2}
337
+ {"start":"/c/en/quality","rel":"/r/DistinctFrom","end":"/c/en/quantity","weight":2}
338
+ {"start":"/c/en/function","rel":"/r/DistinctFrom","end":"/c/en/method","weight":2}
339
+ {"start":"/c/en/function","rel":"/r/DistinctFrom","end":"/c/en/procedure","weight":2}
340
+ {"start":"/c/en/function","rel":"/r/DistinctFrom","end":"/c/en/operation","weight":2}
341
+ {"start":"/c/en/function","rel":"/r/DistinctFrom","end":"/c/en/handler","weight":2}
342
+ {"start":"/c/en/method","rel":"/r/DistinctFrom","end":"/c/en/procedure","weight":2}
343
+ {"start":"/c/en/method","rel":"/r/DistinctFrom","end":"/c/en/operation","weight":2}
344
+ {"start":"/c/en/method","rel":"/r/DistinctFrom","end":"/c/en/handler","weight":2}
345
+ {"start":"/c/en/procedure","rel":"/r/DistinctFrom","end":"/c/en/operation","weight":2}
346
+ {"start":"/c/en/procedure","rel":"/r/DistinctFrom","end":"/c/en/handler","weight":2}
347
+ {"start":"/c/en/operation","rel":"/r/DistinctFrom","end":"/c/en/handler","weight":2}
348
+ {"start":"/c/en/helper","rel":"/r/DistinctFrom","end":"/c/en/callback","weight":2}
349
+ {"start":"/c/en/helper","rel":"/r/DistinctFrom","end":"/c/en/generator","weight":2}
350
+ {"start":"/c/en/helper","rel":"/r/DistinctFrom","end":"/c/en/lambda","weight":2}
351
+ {"start":"/c/en/helper","rel":"/r/DistinctFrom","end":"/c/en/closure","weight":2}
352
+ {"start":"/c/en/helper","rel":"/r/DistinctFrom","end":"/c/en/coroutine","weight":2}
353
+ {"start":"/c/en/callback","rel":"/r/DistinctFrom","end":"/c/en/generator","weight":2}
354
+ {"start":"/c/en/callback","rel":"/r/DistinctFrom","end":"/c/en/lambda","weight":2}
355
+ {"start":"/c/en/callback","rel":"/r/DistinctFrom","end":"/c/en/closure","weight":2}
356
+ {"start":"/c/en/callback","rel":"/r/DistinctFrom","end":"/c/en/coroutine","weight":2}
357
+ {"start":"/c/en/generator","rel":"/r/DistinctFrom","end":"/c/en/lambda","weight":2}
358
+ {"start":"/c/en/generator","rel":"/r/DistinctFrom","end":"/c/en/closure","weight":2}
359
+ {"start":"/c/en/generator","rel":"/r/DistinctFrom","end":"/c/en/coroutine","weight":2}
360
+ {"start":"/c/en/lambda","rel":"/r/DistinctFrom","end":"/c/en/closure","weight":2}
361
+ {"start":"/c/en/lambda","rel":"/r/DistinctFrom","end":"/c/en/coroutine","weight":2}
362
+ {"start":"/c/en/closure","rel":"/r/DistinctFrom","end":"/c/en/coroutine","weight":2}
363
+ {"start":"/c/en/struct","rel":"/r/DistinctFrom","end":"/c/en/record","weight":2}
364
+ {"start":"/c/en/trait","rel":"/r/DistinctFrom","end":"/c/en/api","weight":2}
365
+ {"start":"/c/en/plugin","rel":"/r/DistinctFrom","end":"/c/en/controller","weight":2}
366
+ {"start":"/c/en/plugin","rel":"/r/DistinctFrom","end":"/c/en/model","weight":2}
367
+ {"start":"/c/en/plugin","rel":"/r/DistinctFrom","end":"/c/en/view","weight":2}
368
+ {"start":"/c/en/expression","rel":"/r/DistinctFrom","end":"/c/en/assertion","weight":2}
369
+ {"start":"/c/en/expression","rel":"/r/DistinctFrom","end":"/c/en/fact","weight":2}
370
+ {"start":"/c/en/loop","rel":"/r/DistinctFrom","end":"/c/en/fact","weight":2}
371
+ {"start":"/c/en/assertion","rel":"/r/DistinctFrom","end":"/c/en/fact","weight":2}
372
+ {"start":"/c/en/module","rel":"/r/DistinctFrom","end":"/c/en/header","weight":2}
373
+ {"start":"/c/en/module","rel":"/r/DistinctFrom","end":"/c/en/script","weight":2}
374
+ {"start":"/c/en/namespace","rel":"/r/DistinctFrom","end":"/c/en/component","weight":2}
375
+ {"start":"/c/en/commit","rel":"/r/DistinctFrom","end":"/c/en/refactor","weight":2}
376
+ {"start":"/c/en/commit","rel":"/r/DistinctFrom","end":"/c/en/migration","weight":2}
377
+ {"start":"/c/en/commit","rel":"/r/DistinctFrom","end":"/c/en/patch","weight":2}
378
+ {"start":"/c/en/refactor","rel":"/r/DistinctFrom","end":"/c/en/migration","weight":2}
379
+ {"start":"/c/en/refactor","rel":"/r/DistinctFrom","end":"/c/en/patch","weight":2}
380
+ {"start":"/c/en/migration","rel":"/r/DistinctFrom","end":"/c/en/patch","weight":2}
381
+ {"start":"/c/en/defect","rel":"/r/DistinctFrom","end":"/c/en/ticket","weight":2}
382
+ {"start":"/c/en/thread","rel":"/r/DistinctFrom","end":"/c/en/worker","weight":2}
383
+ {"start":"/c/en/question","rel":"/r/DistinctFrom","end":"/c/en/response","weight":2}
384
+ {"start":"/c/en/question","rel":"/r/DistinctFrom","end":"/c/en/sentence","weight":2}
385
+ {"start":"/c/en/response","rel":"/r/DistinctFrom","end":"/c/en/sentence","weight":2}
386
+ {"start":"/c/en/answer","rel":"/r/DistinctFrom","end":"/c/en/sentence","weight":2}
387
+ {"start":"/c/en/cache","rel":"/r/DistinctFrom","end":"/c/en/queue","weight":2}
388
+ {"start":"/c/en/cache","rel":"/r/DistinctFrom","end":"/c/en/database","weight":2}
389
+ {"start":"/c/en/database","rel":"/r/DistinctFrom","end":"/c/en/queue","weight":2}
390
+ {"start":"/c/en/module","rel":"/r/DistinctFrom","end":"/c/en/function","weight":2}
391
+ {"start":"/c/en/module","rel":"/r/DistinctFrom","end":"/c/en/class","weight":2}
392
+ {"start":"/c/en/module","rel":"/r/DistinctFrom","end":"/c/en/variable","weight":2}
393
+ {"start":"/c/en/class","rel":"/r/DistinctFrom","end":"/c/en/function","weight":2}
394
+ {"start":"/c/en/function","rel":"/r/DistinctFrom","end":"/c/en/variable","weight":2}
395
+ {"start":"/c/en/commit","rel":"/r/DistinctFrom","end":"/c/en/branch","weight":2}
396
+ {"start":"/c/en/branch","rel":"/r/DistinctFrom","end":"/c/en/repository","weight":2}
397
+ {"start":"/c/en/commit","rel":"/r/DistinctFrom","end":"/c/en/repository","weight":2}
398
+ {"start":"/c/en/test","rel":"/r/DistinctFrom","end":"/c/en/suite","weight":2}
399
+ {"start":"/c/en/error","rel":"/r/DistinctFrom","end":"/c/en/warning","weight":2}
@@ -0,0 +1,49 @@
1
+ {"start":"/c/en/dog","rel":"/r/IsA","end":"/c/en/mammal","weight":1,"surfaceText":"[[dog]] IsA [[mammal]]"}
2
+ {"start":"/c/en/dog","rel":"/r/HasA","end":"/c/en/tail","weight":1,"surfaceText":"[[dog]] HasA [[tail]]"}
3
+ {"start":"/c/en/dog","rel":"/r/CapableOf","end":"/c/en/bark","weight":1,"surfaceText":"[[dog]] CapableOf [[bark]]"}
4
+ {"start":"/c/en/cat","rel":"/r/IsA","end":"/c/en/mammal","weight":1,"surfaceText":"[[cat]] IsA [[mammal]]"}
5
+ {"start":"/c/en/cat","rel":"/r/CapableOf","end":"/c/en/meow","weight":1,"surfaceText":"[[cat]] CapableOf [[meow]]"}
6
+ {"start":"/c/en/mammal","rel":"/r/IsA","end":"/c/en/animal","weight":1,"surfaceText":"[[mammal]] IsA [[animal]]"}
7
+ {"start":"/c/en/mammal","rel":"/r/HasProperty","end":"/c/en/warm_blooded","weight":1,"surfaceText":"[[mammal]] HasProperty [[warm blooded]]"}
8
+ {"start":"/c/en/bird","rel":"/r/IsA","end":"/c/en/animal","weight":1,"surfaceText":"[[bird]] IsA [[animal]]"}
9
+ {"start":"/c/en/bird","rel":"/r/CapableOf","end":"/c/en/fly","weight":1,"surfaceText":"[[bird]] CapableOf [[fly]]"}
10
+ {"start":"/c/en/bird","rel":"/r/HasA","end":"/c/en/feather","weight":1,"surfaceText":"[[bird]] HasA [[feather]]"}
11
+ {"start":"/c/en/fish","rel":"/r/IsA","end":"/c/en/animal","weight":1,"surfaceText":"[[fish]] IsA [[animal]]"}
12
+ {"start":"/c/en/fish","rel":"/r/AtLocation","end":"/c/en/water","weight":1,"surfaceText":"[[fish]] AtLocation [[water]]"}
13
+ {"start":"/c/en/fish","rel":"/r/CapableOf","end":"/c/en/swim","weight":1,"surfaceText":"[[fish]] CapableOf [[swim]]"}
14
+ {"start":"/c/en/rain","rel":"/r/IsA","end":"/c/en/weather","weight":1,"surfaceText":"[[rain]] IsA [[weather]]"}
15
+ {"start":"/c/en/rain","rel":"/r/MadeOf","end":"/c/en/water","weight":1,"surfaceText":"[[rain]] MadeOf [[water]]"}
16
+ {"start":"/c/en/snow","rel":"/r/IsA","end":"/c/en/weather","weight":1,"surfaceText":"[[snow]] IsA [[weather]]"}
17
+ {"start":"/c/en/snow","rel":"/r/HasProperty","end":"/c/en/cold","weight":1,"surfaceText":"[[snow]] HasProperty [[cold]]"}
18
+ {"start":"/c/en/cloud","rel":"/r/PartOf","end":"/c/en/sky","weight":1,"surfaceText":"[[cloud]] PartOf [[sky]]"}
19
+ {"start":"/c/en/cloud","rel":"/r/CapableOf","end":"/c/en/produce_rain","weight":1,"surfaceText":"[[cloud]] CapableOf [[produce rain]]"}
20
+ {"start":"/c/en/sun","rel":"/r/IsA","end":"/c/en/star","weight":1,"surfaceText":"[[sun]] IsA [[star]]"}
21
+ {"start":"/c/en/sun","rel":"/r/CapableOf","end":"/c/en/produce_light","weight":1,"surfaceText":"[[sun]] CapableOf [[produce light]]"}
22
+ {"start":"/c/en/moon","rel":"/r/AtLocation","end":"/c/en/sky","weight":1,"surfaceText":"[[moon]] AtLocation [[sky]]"}
23
+ {"start":"/c/en/moon","rel":"/r/PartOf","end":"/c/en/solar_system","weight":1,"surfaceText":"[[moon]] PartOf [[solar system]]"}
24
+ {"start":"/c/en/earth","rel":"/r/IsA","end":"/c/en/planet","weight":1,"surfaceText":"[[earth]] IsA [[planet]]"}
25
+ {"start":"/c/en/earth","rel":"/r/PartOf","end":"/c/en/solar_system","weight":1,"surfaceText":"[[earth]] PartOf [[solar system]]"}
26
+ {"start":"/c/en/planet","rel":"/r/CapableOf","end":"/c/en/orbit_a_star","weight":1,"surfaceText":"[[planet]] CapableOf [[orbit a star]]"}
27
+ {"start":"/c/en/water","rel":"/r/IsA","end":"/c/en/liquid","weight":1,"surfaceText":"[[water]] IsA [[liquid]]"}
28
+ {"start":"/c/en/water","rel":"/r/UsedFor","end":"/c/en/drinking","weight":1,"surfaceText":"[[water]] UsedFor [[drinking]]"}
29
+ {"start":"/c/en/ice","rel":"/r/IsA","end":"/c/en/solid","weight":1,"surfaceText":"[[ice]] IsA [[solid]]"}
30
+ {"start":"/c/en/ice","rel":"/r/MadeOf","end":"/c/en/water","weight":1,"surfaceText":"[[ice]] MadeOf [[water]]"}
31
+ {"start":"/c/en/fire","rel":"/r/CapableOf","end":"/c/en/produce_heat","weight":1,"surfaceText":"[[fire]] CapableOf [[produce heat]]"}
32
+ {"start":"/c/en/fire","rel":"/r/CapableOf","end":"/c/en/produce_light","weight":1,"surfaceText":"[[fire]] CapableOf [[produce light]]"}
33
+ {"start":"/c/en/tree","rel":"/r/IsA","end":"/c/en/plant","weight":1,"surfaceText":"[[tree]] IsA [[plant]]"}
34
+ {"start":"/c/en/tree","rel":"/r/HasA","end":"/c/en/root","weight":1,"surfaceText":"[[tree]] HasA [[root]]"}
35
+ {"start":"/c/en/tree","rel":"/r/HasA","end":"/c/en/leaf","weight":1,"surfaceText":"[[tree]] HasA [[leaf]]"}
36
+ {"start":"/c/en/plant","rel":"/r/CapableOf","end":"/c/en/photosynthesize","weight":1,"surfaceText":"[[plant]] CapableOf [[photosynthesize]]"}
37
+ {"start":"/c/en/forest","rel":"/r/HasA","end":"/c/en/tree","weight":1,"surfaceText":"[[forest]] HasA [[tree]]"}
38
+ {"start":"/c/en/kitchen","rel":"/r/PartOf","end":"/c/en/house","weight":1,"surfaceText":"[[kitchen]] PartOf [[house]]"}
39
+ {"start":"/c/en/kitchen","rel":"/r/UsedFor","end":"/c/en/cooking","weight":1,"surfaceText":"[[kitchen]] UsedFor [[cooking]]"}
40
+ {"start":"/c/en/bread","rel":"/r/IsA","end":"/c/en/food","weight":1,"surfaceText":"[[bread]] IsA [[food]]"}
41
+ {"start":"/c/en/bread","rel":"/r/MadeOf","end":"/c/en/flour","weight":1,"surfaceText":"[[bread]] MadeOf [[flour]]"}
42
+ {"start":"/c/en/bicycle","rel":"/r/HasA","end":"/c/en/wheel","weight":1,"surfaceText":"[[bicycle]] HasA [[wheel]]"}
43
+ {"start":"/c/en/bicycle","rel":"/r/UsedFor","end":"/c/en/transportation","weight":1,"surfaceText":"[[bicycle]] UsedFor [[transportation]]"}
44
+ {"start":"/c/en/car","rel":"/r/IsA","end":"/c/en/vehicle","weight":1,"surfaceText":"[[car]] IsA [[vehicle]]"}
45
+ {"start":"/c/en/car","rel":"/r/HasA","end":"/c/en/engine","weight":1,"surfaceText":"[[car]] HasA [[engine]]"}
46
+ {"start":"/c/en/engine","rel":"/r/CapableOf","end":"/c/en/produce_power","weight":1,"surfaceText":"[[engine]] CapableOf [[produce power]]"}
47
+ {"start":"/c/en/book","rel":"/r/MadeOf","end":"/c/en/paper","weight":1,"surfaceText":"[[book]] MadeOf [[paper]]"}
48
+ {"start":"/c/en/book","rel":"/r/UsedFor","end":"/c/en/reading","weight":1,"surfaceText":"[[book]] UsedFor [[reading]]"}
49
+ {"start":"/c/en/clock","rel":"/r/UsedFor","end":"/c/en/telling_time","weight":1,"surfaceText":"[[clock]] UsedFor [[telling time]]"}
@@ -172,6 +172,74 @@ export const CORPUSES = {
172
172
  ["method", "/r/IsA", "function"],
173
173
  ],
174
174
  },
175
+
176
+ // PLAN_AGENTS.md Phase 1's "wider general-knowledge seed set" bullet: the
177
+ // three corpuses above are all code-domain-specific (a LANGUAGE or a cloud
178
+ // DOMAIN); this one deliberately is NOT — everyday-knowledge concepts (the
179
+ // natural world, weather, food, common objects) with zero code-domain
180
+ // framing, proving the extension-pack seam generalizes to a seed set that
181
+ // isn't code at all (the operator's own framing: tmct's code specialization
182
+ // was never a special case, just one seed set among possible others).
183
+ general: {
184
+ kind: "domain",
185
+ description: "General-purpose everyday-knowledge concepts (animals, weather, the natural world, common objects) — a non-code-domain seed set, deliberately outside tmct's own code-domain bias.",
186
+ facts: [
187
+ // animals
188
+ ["dog", "/r/IsA", "mammal"],
189
+ ["dog", "/r/HasA", "tail"],
190
+ ["dog", "/r/CapableOf", "bark"],
191
+ ["cat", "/r/IsA", "mammal"],
192
+ ["cat", "/r/CapableOf", "meow"],
193
+ ["mammal", "/r/IsA", "animal"],
194
+ ["mammal", "/r/HasProperty", "warm_blooded"],
195
+ ["bird", "/r/IsA", "animal"],
196
+ ["bird", "/r/CapableOf", "fly"],
197
+ ["bird", "/r/HasA", "feather"],
198
+ ["fish", "/r/IsA", "animal"],
199
+ ["fish", "/r/AtLocation", "water"],
200
+ ["fish", "/r/CapableOf", "swim"],
201
+ // weather / sky
202
+ ["rain", "/r/IsA", "weather"],
203
+ ["rain", "/r/MadeOf", "water"],
204
+ ["snow", "/r/IsA", "weather"],
205
+ ["snow", "/r/HasProperty", "cold"],
206
+ ["cloud", "/r/PartOf", "sky"],
207
+ ["cloud", "/r/CapableOf", "produce_rain"],
208
+ ["sun", "/r/IsA", "star"],
209
+ ["sun", "/r/CapableOf", "produce_light"],
210
+ ["moon", "/r/AtLocation", "sky"],
211
+ ["moon", "/r/PartOf", "solar_system"],
212
+ ["earth", "/r/IsA", "planet"],
213
+ ["earth", "/r/PartOf", "solar_system"],
214
+ ["planet", "/r/CapableOf", "orbit_a_star"],
215
+ // matter / basic science
216
+ ["water", "/r/IsA", "liquid"],
217
+ ["water", "/r/UsedFor", "drinking"],
218
+ ["ice", "/r/IsA", "solid"],
219
+ ["ice", "/r/MadeOf", "water"],
220
+ ["fire", "/r/CapableOf", "produce_heat"],
221
+ ["fire", "/r/CapableOf", "produce_light"],
222
+ // plants
223
+ ["tree", "/r/IsA", "plant"],
224
+ ["tree", "/r/HasA", "root"],
225
+ ["tree", "/r/HasA", "leaf"],
226
+ ["plant", "/r/CapableOf", "photosynthesize"],
227
+ ["forest", "/r/HasA", "tree"],
228
+ // everyday objects / places
229
+ ["kitchen", "/r/PartOf", "house"],
230
+ ["kitchen", "/r/UsedFor", "cooking"],
231
+ ["bread", "/r/IsA", "food"],
232
+ ["bread", "/r/MadeOf", "flour"],
233
+ ["bicycle", "/r/HasA", "wheel"],
234
+ ["bicycle", "/r/UsedFor", "transportation"],
235
+ ["car", "/r/IsA", "vehicle"],
236
+ ["car", "/r/HasA", "engine"],
237
+ ["engine", "/r/CapableOf", "produce_power"],
238
+ ["book", "/r/MadeOf", "paper"],
239
+ ["book", "/r/UsedFor", "reading"],
240
+ ["clock", "/r/UsedFor", "telling_time"],
241
+ ],
242
+ },
175
243
  };
176
244
 
177
245
  const conceptUri = (term) => `/c/en/${term}`;
@@ -43,6 +43,20 @@
43
43
  "bytes": 3920,
44
44
  "sha256": "d089426833c393f6f1574fe75c4ac94a1483ee80f72f79bd7fd32aaaa24a6e44",
45
45
  "license": "MPL-2.0"
46
+ },
47
+ {
48
+ "id": "general",
49
+ "kind": "domain",
50
+ "description": "General-purpose everyday-knowledge concepts (animals, weather, the natural world, common objects) — a non-code-domain seed set, deliberately outside tmct's own code-domain bias.",
51
+ "source": {
52
+ "kind": "curated",
53
+ "tool": "corpus/tier2/generate.mjs"
54
+ },
55
+ "file": "general.jsonl",
56
+ "facts": 49,
57
+ "bytes": 5826,
58
+ "sha256": "01284f1350fa2ca9653b1c5f52a39fdcb657727c65e77693eae954cb95a14a2e",
59
+ "license": "MPL-2.0"
46
60
  }
47
61
  ]
48
62
  }