@polycode-projects/the-mechanical-code-talker 0.8.2 → 0.9.1

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
@@ -42,6 +42,20 @@ is refused outright). Reversible-passive questions traverse the right direction:
42
42
  "what is imported by Y" and "what does Y import" are understood as opposite
43
43
  edges, not the same one.
44
44
 
45
+ **Finding by description.** "find me the payment class" searches by type and a
46
+ fuzzy match against the entity's own properties, instead of making you name it
47
+ exactly. It checks the type itself and its subclasses first. Only if nothing
48
+ matches there does it widen to a related type, and when it does, it says so
49
+ plainly rather than presenting the looser match as exact.
50
+
51
+ **Synonyms and everyday phrasing.** tmct matches many of the words people
52
+ actually use for the same idea, from a curated synonym list plus a filtered
53
+ ConceptNet slice. A slightly different word for the same concept still
54
+ resolves. It also follows a few common sentence shapes: clauses starting with
55
+ *because/although/while*, and conditionals ("if X were removed, what
56
+ breaks"). It flags a question whose premise doesn't hold, too: "why does X
57
+ still import Y" when it no longer does.
58
+
45
59
  **Response finishing.** Before an answer is printed it is segmented into typed
46
60
  spans — prose versus *protected* entities, paths, numbers, code, provenance, and
47
61
  receipts — and a small data-driven grammar pass runs on the prose spans only,
package/ROADMAP.md CHANGED
@@ -14,63 +14,96 @@ the file has been deleted.
14
14
 
15
15
  ## Where we are now (2026-07-07)
16
16
 
17
- **Built: v0.8.2 the chat-feel wave + rule-general C2 (0.8.1 published; 0.8.2 gated green, push =
18
- the next operator action).** `npm test` green (**974**). 0.8.2 deepened both axes at once:
19
-
20
- - **Chat feel (CHATBENCH_0.8.2, deterministic tier):** tier-1 **334/334 (draw A) + 285/285 (draw
21
- B)**, zero regressions; the cycle-1 standing hard-fail `gq-functions-call-fnalpha` **flipped
22
- green**. Landed (PLAN_CHAT_FEEL items 1–5, 7, 8): recall hygiene, preamble/politeness frames,
23
- calls∪callsSymbol + grain/meta fallbacks, the author lane, wall kindness + honest capability
24
- nudges, teach-lane widening + the taught-class↔inherits bridge, receipt tails prose→detail.
25
- Plus a live-found scale hotfix (edgesOfKind argument-spread overflow past ~100k edges, from a
26
- 27,770-module monorepo). **The judged (LLM) re-judge of the touched tags is DEFERRED
27
- post-release (ship-over-delay)** 0.8.1 judged scores stay the judged record and are stale on
28
- those tags; see CHATBENCH_0.8.2.
29
- - **Agent (AGENTBENCH_0.8.2):** ladder 43→56 cases; goal driver **100% plan / 98% result / 0%
30
- hallucination, all rungs gate-PASS** (one deliberate honest red: `ab-c2-what-to-test`); resolver
31
- floor clean **A0–C1 100/100** via the new member-filter HTN method + per-member hop (flips
32
- `ab-c1-widget-methods-calling` in both drivers). **C2 is now rule-general**: a second declared
33
- goal-rule (`cochange-risk-invariant`) + pure `applicableRules` selection (0→refuse open-world,
34
- >1→refuse ambiguous; grep-clean of request keywords). Bench-import inversion
35
- (`src/router/call-validator.mjs` + `set-algebra.mjs`); bounded runner pool (`--concurrency` 8).
36
-
37
- **Shipped in v0.8.1 (published):** the same demonstrated-vs-designed honesty discipline, summarized:
38
-
39
- - **AGENTBENCH now grades the executed composed RESULT, not just the call-plan** (retires the headline
40
- 0.8.0 caveat). Under result-grading the resolver is **97% plan / 91% result / 0% hallucination**; the
41
- honest gap lands exactly where reasoning is hard (C1, C2).
42
- - **Stage 5 the C2 goal-reasoner** (BDI + Goal-Driven Autonomy) genuinely lifts result-completion.
43
- The honest, **like-for-like** figure is the *driver swap on the identical 39-case ladder*
44
- (`AGENTBENCH_0.8.1_001`): resolver **85% goal-reasoner 95% result** (+10pp, purely the driver, 0%
45
- hallucination). C2 is **cleared for one declared coverage-invariant goal-rule** real and
46
- phrasing-robust (validated by held-out phrasings graded blind, no request-string literals), but
47
- **thinly sampled, not rule-general**; the open-world case is honestly **refused**. *(NB: the
48
- cross-release "0→83% C2" reads on a grown 6-case C2 ladder whose 4 new cases exercise the
49
- goal-reasoner — not a like-for-like rate; the same-basket win is one case fixed, 0→50% original C2.)*
50
- - **Stage 2 imperative intent frames + ACE reach** (`AGENTBENCH_0.8.1_002`, goal driver): **100% plan
51
- / 95% result / 0% hallucination**. `tmct_calls` is now **genuinely NL-reachable** via a distinct
52
- edge-dump frame (not by un-tagging bidirectional conformance enforces it; `NOT_NL_REACHABLE` is now
53
- `{}`). ACE is wired **async** into the interpret pipeline so the synchronous CHATBENCH parse spine is
54
- **byte-identical** ACE is inert in the shipped product path (`interpret()` is called nowhere in
55
- chat/ask/server/bin), reach without regression.
56
- - **Chat surface (CHATBENCH_0.8.1):** quick wins (singular "what is a test", friendly commit-author
57
- refs, "No tests cover X" honest-empty, the chatbench discourse-count flake root-caused + scrubbed) +
58
- two playtests (coverage-survey + authorship routing; **6 frozen `chatflow-*` transcripts** total).
59
- Joint deterministic CHATBENCH (both new frame tables together): **no tier-1 regression vs 0.7.1.**
60
- Judged tags touched by the text changes were re-judged (not blanket-reused) — see `CHATBENCH_0.8.1`.
61
-
62
- **Shipped earlier in v0.8.0 (published):** all five Phase-11 tracks the `/v1/messages` shim + Stage-0
63
- registry + resolver/guardrail/planner (`AGENTBENCH_0.8.0_001`: 96% *plan* completion, 0% hallucination,
64
- closed-world C1); the three chat levers (`CHATBENCH_0.8.0`: tier-1 331→333); the `../bedrock-meter` `$0`
65
- rung (rank 0 below nova-micro, £0 metered e2e); the playtest; and the Stage-2/Stage-5 research notes.
66
-
67
- **Next (post-release, in order):** (1) the judged re-judge of the stale tags (the deferred half of
68
- the 0.8.2 evidence); (2) the chat-feel fast-follows from the confirmation playtest (recall
69
- conjunction enforcement, the fuzzy-entity FALSE-EMPTY confident-wrong class, function-grain
70
- coverage, module-grain overview); (3) the Track-1 trio against the measured red set (pron ×18,
71
- temporal b1×5 + c1×9, disc-count re-measure first); (4) `edgesOfKind` memoization + endpoint
72
- indices (perf at monorepo scale); (5) the seonix cutover ping + wh-scale feedback loop. Full list
73
- with targets in `HANDOVER.md`.
17
+ `npm test` green (**1033**). A version bump to reflect this session's wave is imminent; see
18
+ `HANDOVER.md` for the exact release status.
19
+
20
+ ### Now: shipped this session
21
+
22
+ - **5 bugs fixed.** Recall half-match replay + staple-onto-wall; 4 wall-kindness gaps (orientation
23
+ blurb repeat, "thanks, `<clause>`" walls, a reexports vocabulary leak, `/describe` not surfacing
24
+ taught facts); grain-aware entity resolution (fixes the fuzzy-entity false-empty and a
25
+ function/module coverage contradiction); module-grain overview gap. Full list in `HANDOVER.md`.
26
+ - **A new feature: predicate-based "find" queries.** "find me the payment class" now works:
27
+ type-filtered, fuzzy property-surface matching, with a narrow-then-broaden inheritance-aware
28
+ cascade and a boolean-fold generalization for compositional predicate queries. Design:
29
+ `PLAN_PREDICATE_QUERIES.md`.
30
+ - **Two research tracks landed as code.** The ontology plan's two inert synonym resources
31
+ (ConceptNet synonym/similar-to rows, phrasebook synonym families) are now wired into query-time
32
+ matching, and the disjointness premise set plus numeric vocabulary grew
33
+ (`PLAN_ontology-hierarchies.md`). The advanced-grammar plan's closed-frame subordination and
34
+ conditional support, plus presupposition honest-nudges, landed (`PLAN_ADVANCED_GRAMMAR.md`); the
35
+ graded pool grew 925 to 1075 cases across 6 new construction families (`chatbench/GRADED.md`).
36
+ - **A new benchmark: infbench.** A 6-band classical-logic ladder (INF-A1..C2), mechanically
37
+ generated, first baseline in `INFBENCH_0.8.2.md`. Kernel A1/A2 clean; chat A1 100%, A2 exactly
38
+ 50% (the cax-sco gap, now measured). The ladder gates at B1 (33%) because the disjointness proof
39
+ rule doesn't exist yet.
40
+ - **A new demo** (`demo/agentic-loop-demo.mjs`) shows the zero-LLM deduce-plan-execute-compose loop
41
+ end to end, and surfaced a real goal-reasoner honesty gap (Bug 8, below).
42
+ - **A session-loop fix.** A throwing turn no longer aborts a piped/non-interactive session.
43
+ - **4 new plan docs.** `PLAN_ontology-hierarchies.md`, `PLAN_INFERENCE_TESTING.md` (revised so
44
+ infbench generation is mechanical, not hand-authored), `PLAN_PREDICATE_QUERIES.md`, and
45
+ `PLAN_CODE.md` (new, program synthesis over tmct's closed DSLs, gated on explicit operator
46
+ sign-off per track, not built yet).
47
+
48
+ ### Next: the open follow-ups
49
+
50
+ In priority order (full detail and measured targets in `HANDOVER.md`):
51
+
52
+ 1. **Bug 8.** The goal-reasoner's global-mode deduction answers requests unrelated to any deduced
53
+ goal with false confidence, once no focus entity binds (`src/router/goal-reasoner.mjs:226`).
54
+ The most serious open issue: a genuine confident-wrong failure in the flagship
55
+ zero-hallucination capability. Needs a real semantic gate.
56
+ 2. **Bug 6.** Scoped listing false-empty: "list modules in `<pkg>`" returns empty though the
57
+ unscoped lister shows matches. Found dogfooding a 191k-entity monorepo graph.
58
+ 3. **Bug 7.** A modal auxiliary ("should") survives the fuzzy-correction cascade and misreads as
59
+ "hold". The diagnosed fix is adding modals to `STOPWORDS`.
60
+ 4. **`PLAN_TMCT_ECOSYSTEM_INTEGRATION.md`.** A separate concurrent session is drafting this
61
+ 3-part tmct/bedrock-meter/marginalia integration plan. Check for completion and finalize.
62
+ 5. **`PLAN_CODE.md`'s sign-off decision.** Track 1 (rule/frame synthesis) is the lowest-risk
63
+ candidate; decide with the operator whether to greenlight it.
64
+ 6. Smaller chat-feel residuals from the 0.8.2 confirmation playtest, the Track-1 trio (pronoun,
65
+ temporal, discourse-count, measured red sets), `edgesOfKind` memoization for monorepo-scale
66
+ latency, and the version bump plus push.
67
+
68
+ ### Later: deferred by design, staged inside each plan
69
+
70
+ Each plan doc stages its own later phases; this list just points to them rather than repeating
71
+ their tables.
72
+
73
+ - **infbench stages 1-5** (`PLAN_INFERENCE_TESTING.md` §4). The disjointness proof rule (unlocks
74
+ B1), proof-chain materialization, cardinality entailment, consistency checking.
75
+ - **Advanced-grammar tracks b/d/e** (`PLAN_ADVANCED_GRAMMAR.md`). The constructions not landed
76
+ this wave: stacked modality/passive, implicit arguments, and the rest of the CEFR inventory
77
+ audit table.
78
+ - **Ontology stage 3+** (`PLAN_ontology-hierarchies.md`). Beyond the synonym-wiring and
79
+ disjointness growth landed this wave.
80
+ - **`PLAN_CODE.md` tracks 2/3.** Small JS-function synthesis and HTML/CSS-fragment synthesis, both
81
+ via a Playwright-sandboxed headless browser. Explicitly staged well behind Track 1, each gated
82
+ on its own operator sign-off.
83
+
84
+ ### History — what shipped in earlier releases
85
+
86
+ **v0.8.2** (the chat-feel wave + rule-general C2): tier-1 CHATBENCH 334/334 (draw A) + 285/285
87
+ (draw B), zero regressions; the cycle-1 hard-fail `gq-functions-call-fnalpha` flipped green.
88
+ Landed recall hygiene, preamble/politeness frames, calls∪callsSymbol + grain/meta fallbacks, the
89
+ author lane, wall kindness + honest capability nudges, teach-lane widening, receipt tails
90
+ prose→detail, plus a live-found scale hotfix (`edgesOfKind` argument-spread overflow past ~100k
91
+ edges). AGENTBENCH ladder grew 43→56 cases; goal driver 100% plan / 98% result / 0% hallucination,
92
+ all rungs gate-PASS; resolver floor clean A0–C1 100/100; C2 became rule-general (two declared
93
+ goal-rules, pure `applicableRules` selection). Full detail: `CHATBENCH_0.8.2.md`,
94
+ `AGENTBENCH_0.8.2.md`.
95
+
96
+ **v0.8.1** (published): AGENTBENCH grades the executed composed result, not just the call-plan.
97
+ Resolver 97% plan / 91% result / 0% hallucination. Stage 5 (the C2 goal-reasoner, BDI + Goal-Driven
98
+ Autonomy) lifted result-completion +10pp on a like-for-like driver swap. Stage 2 (imperative intent
99
+ frames + ACE reach) shipped at 100% plan / 95% result / 0% hallucination, `tmct_calls` genuinely
100
+ NL-reachable. Chat surface: quick wins + two frozen playtest transcripts, no tier-1 regression vs
101
+ 0.7.1. Full detail: `CHATBENCH_0.8.1.md`, `AGENTBENCH_0.8.1.md`.
102
+
103
+ **v0.8.0** (published): all five Phase-11 tracks. The `/v1/messages` shim + Stage-0 registry +
104
+ resolver/guardrail/planner (96% plan completion, 0% hallucination, closed-world C1); three chat
105
+ levers; the `../bedrock-meter` $0 rung; the playtest; Stage-2/Stage-5 research notes. Full detail:
106
+ `CHATBENCH_0.8.0.md`, `AGENTBENCH_0.8.0.md`.
74
107
 
75
108
  ## The umbrella product definition (item 1)
76
109
 
@@ -236,3 +236,45 @@
236
236
  {"start":"/c/en/memory_graph","rel":"/r/HasA","end":"/c/en/fact","weight":2}
237
237
  {"start":"/c/en/fact","rel":"/r/PartOf","end":"/c/en/memory_graph","weight":2}
238
238
  {"start":"/c/en/seon","rel":"/r/IsA","end":"/c/en/ontology","weight":2}
239
+ {"start":"/c/en/class","rel":"/r/DistinctFrom","end":"/c/en/interface","weight":2}
240
+ {"start":"/c/en/class","rel":"/r/DistinctFrom","end":"/c/en/enum","weight":2}
241
+ {"start":"/c/en/interface","rel":"/r/DistinctFrom","end":"/c/en/enum","weight":2}
242
+ {"start":"/c/en/structure","rel":"/r/DistinctFrom","end":"/c/en/interface","weight":2}
243
+ {"start":"/c/en/structure","rel":"/r/DistinctFrom","end":"/c/en/enum","weight":2}
244
+ {"start":"/c/en/class","rel":"/r/DistinctFrom","end":"/c/en/structure","weight":2}
245
+ {"start":"/c/en/constructor","rel":"/r/DistinctFrom","end":"/c/en/destructor","weight":2}
246
+ {"start":"/c/en/constructor","rel":"/r/DistinctFrom","end":"/c/en/getter","weight":2}
247
+ {"start":"/c/en/constructor","rel":"/r/DistinctFrom","end":"/c/en/setter","weight":2}
248
+ {"start":"/c/en/destructor","rel":"/r/DistinctFrom","end":"/c/en/getter","weight":2}
249
+ {"start":"/c/en/destructor","rel":"/r/DistinctFrom","end":"/c/en/setter","weight":2}
250
+ {"start":"/c/en/getter","rel":"/r/DistinctFrom","end":"/c/en/setter","weight":2}
251
+ {"start":"/c/en/controller","rel":"/r/DistinctFrom","end":"/c/en/model","weight":2}
252
+ {"start":"/c/en/controller","rel":"/r/DistinctFrom","end":"/c/en/view","weight":2}
253
+ {"start":"/c/en/model","rel":"/r/DistinctFrom","end":"/c/en/view","weight":2}
254
+ {"start":"/c/en/string","rel":"/r/DistinctFrom","end":"/c/en/number","weight":2}
255
+ {"start":"/c/en/string","rel":"/r/DistinctFrom","end":"/c/en/object","weight":2}
256
+ {"start":"/c/en/string","rel":"/r/DistinctFrom","end":"/c/en/list","weight":2}
257
+ {"start":"/c/en/string","rel":"/r/DistinctFrom","end":"/c/en/array","weight":2}
258
+ {"start":"/c/en/number","rel":"/r/DistinctFrom","end":"/c/en/object","weight":2}
259
+ {"start":"/c/en/number","rel":"/r/DistinctFrom","end":"/c/en/list","weight":2}
260
+ {"start":"/c/en/number","rel":"/r/DistinctFrom","end":"/c/en/array","weight":2}
261
+ {"start":"/c/en/object","rel":"/r/DistinctFrom","end":"/c/en/list","weight":2}
262
+ {"start":"/c/en/object","rel":"/r/DistinctFrom","end":"/c/en/array","weight":2}
263
+ {"start":"/c/en/compiler","rel":"/r/DistinctFrom","end":"/c/en/linter","weight":2}
264
+ {"start":"/c/en/compiler","rel":"/r/DistinctFrom","end":"/c/en/formatter","weight":2}
265
+ {"start":"/c/en/compiler","rel":"/r/DistinctFrom","end":"/c/en/parser","weight":2}
266
+ {"start":"/c/en/linter","rel":"/r/DistinctFrom","end":"/c/en/formatter","weight":2}
267
+ {"start":"/c/en/linter","rel":"/r/DistinctFrom","end":"/c/en/parser","weight":2}
268
+ {"start":"/c/en/formatter","rel":"/r/DistinctFrom","end":"/c/en/parser","weight":2}
269
+ {"start":"/c/en/constant","rel":"/r/DistinctFrom","end":"/c/en/attribute","weight":2}
270
+ {"start":"/c/en/constant","rel":"/r/DistinctFrom","end":"/c/en/parameter","weight":2}
271
+ {"start":"/c/en/attribute","rel":"/r/DistinctFrom","end":"/c/en/parameter","weight":2}
272
+ {"start":"/c/en/field","rel":"/r/DistinctFrom","end":"/c/en/property","weight":2}
273
+ {"start":"/c/en/loop","rel":"/r/DistinctFrom","end":"/c/en/expression","weight":2}
274
+ {"start":"/c/en/assertion","rel":"/r/DistinctFrom","end":"/c/en/loop","weight":2}
275
+ {"start":"/c/en/header","rel":"/r/DistinctFrom","end":"/c/en/script","weight":2}
276
+ {"start":"/c/en/client","rel":"/r/DistinctFrom","end":"/c/en/server","weight":2}
277
+ {"start":"/c/en/request","rel":"/r/DistinctFrom","end":"/c/en/response","weight":2}
278
+ {"start":"/c/en/question","rel":"/r/DistinctFrom","end":"/c/en/answer","weight":2}
279
+ {"start":"/c/en/bug","rel":"/r/DistinctFrom","end":"/c/en/feature","weight":2}
280
+ {"start":"/c/en/issue","rel":"/r/DistinctFrom","end":"/c/en/requirement","weight":2}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polycode-projects/the-mechanical-code-talker",
3
- "version": "0.8.2",
3
+ "version": "0.9.1",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "The Mechanical Code Talker (tmct) — a tolerant, offline, $0 chat surface that guides you toward precision queries about a software repository. ELIZA/PARRY-style but domain-obsessed with code. No model calls; no codebase index of its own.",
@@ -87,6 +87,7 @@
87
87
  "chatbench:judge": "node chatbench/judge.mjs",
88
88
  "serve": "node bin/tmct.mjs serve",
89
89
  "agentbench:run": "node agentbench/run.mjs",
90
+ "infbench": "node infbench/generate-cases.mjs && node infbench/run.mjs",
90
91
  "audit": "npm audit --audit-level=high",
91
92
  "audit:fix": "npm audit fix"
92
93
  },