@polycode-projects/the-mechanical-code-talker 0.8.2 → 0.9.0
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 +14 -0
- package/ROADMAP.md +90 -57
- package/corpus/seon/concepts.jsonl +42 -0
- package/package.json +2 -1
- package/src/ask.mjs +460 -13
- package/src/chat.mjs +516 -31
- package/src/grammar/lexicon-core.json +7 -0
- package/src/interpret/normalize.mjs +139 -3
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
- **
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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.
|
|
3
|
+
"version": "0.9.0",
|
|
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
|
},
|