v3.0.0
What's Changed
- fix: stop the reactivity/realtime plugins reporting frozen versions by @codetalcott in #926
- fix(mcp-server): unshadow analyze_content, extend the next-step hint to the warning band by @codetalcott in #927
- docs: correct the CI job table — it had drifted four ways by @codetalcott in #928
- fix(deps): clear the three high-severity Dependabot alerts, plus a fourth npm audit found by @codetalcott in #929
- fix(semantic): localize value interiors when rendering, and ratchet the en→foreign direction by @codetalcott in #931
- fix(semantic): render wait events and dotted property paths in every language by @codetalcott in #932
- fix(semantic): protect contract keys, and carry fetch's options object into every language by @codetalcott in #933
- fix(semantic): give the verb-final languages a slot for fetch's response type by @codetalcott in #934
- fix(semantic): render a prepositional possessive property-first by @codetalcott in #935
- fix(semantic): render a block feature's body, not just its keyword by @codetalcott in #936
- fix(semantic): render a possessive adjective before its property by @codetalcott in #937
- fix(semantic): derive the possessive adjective from the profile's parse vocabulary by @codetalcott in #938
- fix(semantic): make the primary fused event-handler patterns schema-driven by @codetalcott in #939
- fix(semantic): render bn
set's value marker as the schema'sতে, notএby @codetalcott in #940 - fix(semantic): find a feature block's handler whatever word it opens with by @codetalcott in #941
- fix(semantic): parse a handler whose event name is a CUSTOM identifier by @codetalcott in #942
- fix(semantic): count nested slots when the renderer picks a pattern by @codetalcott in #943
- fix(semantic): fold render's with-phrase into one expression, not a bare reference by @codetalcott in #944
- fix(semantic): render a marker that may be dropped colloquially by @codetalcott in #945
- fix(semantic): drop i18n's attachment hyphen from send's destination marker by @codetalcott in #946
- fix(semantic): rewind a fused handler's body to the slot its action ate by @codetalcott in #947
- fix(semantic): stop a positional run spending the marker its pattern owes by @codetalcott in #948
- fix(semantic): recover a fused handler's body HEAD, counted loop and all by @codetalcott in #949
- fix(semantic): a marker-less optional slot must not eat its pattern's verb by @codetalcott in #950
- fix(semantic): a role the MATCHER defaulted is not one the re-parse must keep by @codetalcott in #951
- fix(semantic): glue a possessive marker only where the tokenizer can undo it by @codetalcott in #952
- feat(testing-framework): gate the BARE render surface, which nothing covered by @codetalcott in #953
- fix(semantic): find the fused body's verb by SURFACE, not by normalized form by @codetalcott in #954
- fix(semantic): an SOV override marker goes AFTER its value, and its duration is reclaimed by @codetalcott in #955
- fix(semantic): give the SOV six a repeat-while head the renderer can use by @codetalcott in #956
- fix(semantic): let th's generated patterns outrank the bare handcrafted forms by @codetalcott in #957
- fix(semantic): emit a condition-only unless guard, and give bn an unless word by @codetalcott in #958
- fix(semantic): a role captured without its marker rolls back; an implicit
menever picks the render pattern by @codetalcott in #959 - fix(semantic): a fronted personal reference is never an event head by @codetalcott in #960
- fix(semantic): the generated repeat's optional slots never eat the next command's verb by @codetalcott in #961
- docs(semantic): resolve the native-idiom review queue with researched verdicts by @codetalcott in #962
- fix(semantic): three pattern-priority/homonym repairs — uk put positions, vi get marker-eat, ja get-as-fetch by @codetalcott in #963
- fix(semantic): render trigger's bn/hi event with its accusative marker by @codetalcott in #964
- fix(semantic): localize he's booleans, and render th's genitive in its true direction by @codetalcott in #965
- fix(semantic): a duration-typed literal in transition's goal re-roles to duration by @codetalcott in #967
- fix(semantic): a marker-less slot yields only when skipping consumes the clause by @codetalcott in #968
- fix(semantic): the unless guard captures its whole condition by @codetalcott in #970
- fix(semantic): reactive
when … changesparses in all 24 languages by @codetalcott in #971 - fix(semantic):
whenis canonical-only in English, andwhen-value-changesis engine-portable in all 24 languages by @codetalcott in #972 - feat(patterns-reference): corpus writer →
best, with a shrink-only ratchet on the rows i18n still renders by @codetalcott in #973 - feat(patterns-reference): translate the hyperscript inside markup rows; kept-rows ratchet 229 → 161 by @codetalcott in #974
- fix(semantic): a brace group's interior is data — stop localizing it, and stop corrupting its keys by @codetalcott in #975
- docs(multilingual): prioritize the kept-row queue by canonical syntax; record the qu head swap as zero-sum by @codetalcott in #976
- fix(semantic):
put X before/after Yrendered as "at end of" in ar and tl by @codetalcott in #977 - fix(semantic): a fused handler body kept its commands but lost its then-chain in 15 languages by @codetalcott in #978
- fix(semantic): hand-crafted patterns inherit the schema's role defaults by @codetalcott in #979
- fix(semantic): a
*-sigil property read the possessive backwards in seven languages by @codetalcott in #980 - fix(semantic): th marks
set's value, not its target by @codetalcott in #981 - fix(semantic): a
js … endblock round-trips verbatim, in every language by @codetalcott in #982 - fix(semantic): type a handler's event the way English types it by @codetalcott in #983
- fix(semantic): bn's
emptypredicate is not bn'semptycommand by @codetalcott in #984 - fix(semantic): a possessive property that translates to a keyword is still a property by @codetalcott in #985
- fix(semantic): four vocabulary/homonym repairs from the canonical kept-row queue by @codetalcott in #986
- fix(semantic): tl's swap destination marker, and a qu
gopattern that outlived its purpose by @codetalcott in #987 - fix(semantic): a positional source clause survives, bare and inside a handler by @codetalcott in #988
- fix(semantic): localize a possessive inside an expression, in both directions by @codetalcott in #989
- fix(semantic): give qu a repeat-until head it can RENDER, not only read by @codetalcott in #990
- fix(semantic):
as JSONis part of the value, not a dropped tail by @codetalcott in #991 - fix(semantic): close a flattened loop header, so the handler's
endis its own by @codetalcott in #992 - fix(semantic): zh renders
为forset, and为IS zh'sforkeyword by @codetalcott in #993 - fix(semantic): a
jsblock renders verb-INITIAL, so its clause is identifiable by @codetalcott in #994 - fix(semantic): two fused slots that stopped one token short by @codetalcott in #995
- fix(semantic): ko renders its handler head as
할 때— kept rows reach ZERO by @codetalcott in #996 - fix(vite-plugin): the generated bundle's translator comes from its own parser by @codetalcott in #997
- refactor(core)!: the classic-i18n bundle drops its four transformer helpers by @codetalcott in #998
- feat(hyperscript-tools-i18n)!: translate on the semantic engine, not the transformer by @codetalcott in #999
- refactor(patterns-reference)!: the corpus writer is semantic-only by @codetalcott in #1000
- refactor(i18n)!: delete the grammar transformer by @codetalcott in #1001
- docs: correct the language guide, the broken cold-start commands, and three post-transformer descriptions by @codetalcott in #1002
- fix: repair the domain-flow route pin and repoint the deprecated domain names by @codetalcott in #1004
- docs: write the 3.0.0 release notes, backfill 2.11.x, and unstall six package changelogs by @codetalcott in #1005
- docs: correct five stale multilingual figures in CLAUDE.md by @codetalcott in #1006
- feat(engine): type-escape ratchet + engine migration plan (Arc 0 step 1) by @codetalcott in #1007
- feat(engine): layering ratchet (Arc 0 step 2) by @codetalcott in #1008
- docs(parser): file the 15 documented examples the parser rejects by @codetalcott in #1011
- bench(engine): hot-path benchmark (Arc 0 step 4) — and two corrections to the plan it forced by @codetalcott in #1010
- refactor(engine): delete the unexported dead trees and type surface (Arc 6a) by @codetalcott in #1012
- feat(engine): AST vocabulary + equivalence corpus (Arc 0, steps 3 and 5) by @codetalcott in #1009
- feat(engine): boundary ratchet, the semantic-first measurement, and the live bug it found (Arc 1, steps 1 and 5) by @codetalcott in #1013
- docs(engine): Arc 7 step 1 — measured, and it rescopes the arc to one file by @codetalcott in #1014
- docs(engine): Arc 1 brief, and refresh the step-5 numbers my own fix moved by @codetalcott in #1015
- Arc 1 step 4, the convergence measurement, and the silent-truncation fix by @codetalcott in #1016
- Interchange roles no longer bind role markers as values by @codetalcott in #1017
- Arc 2 step 1: classify the strays (and score 1 of its 9 hypotheses correct) by @codetalcott in #1018
- A command node spans the command, not its last argument by @codetalcott in #1019
- A semantically-adopted command carries a real span by @codetalcott in #1020
- hide/show no longer drop a query-reference target by @codetalcott in #1021
- Fresh-session handoff for the convergence arc's remaining items by @codetalcott in #1022
- fix(semantic): a query reference builds the canonical core selector shape by @codetalcott in #1023
- feat(semantic): an implicit schema default stays on semanticRoles, out of args by @codetalcott in #1024
- test(parser): gate every documented example, and file the silent-drop class by @codetalcott in #1025
- fix(parser): report the input it discards instead of dropping it in silence by @codetalcott in #1026
- docs(engine): bring the convergence arc's handoff up to date with #1023–#1026 by @codetalcott in #1027
- fix(parser): show/hide keep their
in <scope>qualifier andwhenfilter by @codetalcott in #1028 - fix(parser):
if <cond> then <cmd>needsendonly when input follows by @codetalcott in #1029 - fix(parser):
transition … to <value>keeps the value's CSS unit by @codetalcott in #1030 - docs(parser):
install X on <target>is a docs defect, not a parser bug by @codetalcott in #1031 - docs(engine): bring the convergence handoff's own brief up to date with #1028–#1031 by @codetalcott in #1033
- fix(parser): close Thread A item 2b — scroll, make's comma list, and spaced time units by @codetalcott in #1034
- docs: the local gate set misses a FOURTH class of CI gate, not three by @codetalcott in #1035
- fix: three live defects hiding in the node-type "alias" family by @codetalcott in #1036
- docs: handoff for the next convergence session by @codetalcott in #1037
- fix: the four decision-free filings — parseTimeToMs 60x, empty interchange template literals, duplicate MultiWordPattern, scroll runtime alignment by @codetalcott in #1038
- test: the 10 unchecked node-type rows executed — all benign, pinned on both paths by @codetalcott in #1039
- refactor(semantic): converge the AST vocabulary on the core spellings — node-type 12 → 2 by @codetalcott in #1040
- fix(runtime): bare detail and sender were unresolved — the body defect had siblings by @codetalcott in #1041
- feat(parser): semantic roles carry their source span — and the traditional parser was wrong about spans in four places by @codetalcott in #1042
- docs: close the convergence detour, and correct Arc 2's position premise with a measurement by @codetalcott in #1043
- docs: open Arc 2 with a re-measured brief — four of its seven claims are false by @codetalcott in #1044
- chore(core): delete two features/ subtrees nothing could reach, and gate the shape by @codetalcott in #1045
- feat(core): one typed AST union — and parser-types.ts was describing a shape nothing emits by @codetalcott in #1046
- docs: the type-escape ratchet has a blind spot, and it inverts step 6's order for ast-utils by @codetalcott in #1048
- fix(parser): pratt-parser had 46 type escapes and none of them were load-bearing by @codetalcott in #1047
- feat(parser): typed construction for every semantic-built expression — the lie crosses at one boundary, not 21 by @codetalcott in #1049
- feat(commands): execute the re-scoped step 5 — guard adoption at the sites that are actually AST-shaped by @codetalcott in #1050
- docs: step 3's PluginNode design cannot compile — probed, corrected in place by @codetalcott in #1051
- feat(parser): exhaustive evaluators — two switches, and the 11 kinds that never arrive by @codetalcott in #1052
- feat(ast-utils): retype signature-first — 157 → 2 hatches, and the AST these modules were written for does not exist by @codetalcott in #1053
- feat(types): collapse the definitions — eleven base-types interfaces deleted, the union completed from what the parser emits by @codetalcott in #1054
- feat(types): close the union — the index signature comes off, and 117 implicit crossings become explicit by @codetalcott in #1055
- docs: Arc 2 is closed — the ratchet moved 1088 → 927, and 161 of those tell two opposite stories by @codetalcott in #1056
- docs: Arc 3 brief — fourteen claims scored, the dispatch map measured, and marker-in-args turns out to be Arc 3's to close by @codetalcott in #1057
- feat(parser): Arc 1 step 6 — English is parsed by the core parser alone; the in-loop semantic attempt is deleted by @codetalcott in #1058
- feat(commands): COMMAND_NAMES is a const tuple, and CommandName is derived from it — Arc 3 prep by @codetalcott in #1059
- feat(parser): Arc 3 step 4 — every generic command parses from a declared grammar, and the two loops it replaces are gone by @codetalcott in #1060
- feat(commands): Arc 3 step 1 — the parseInput census is a shrink-only ratchet by @codetalcott in #1061
- feat(parser): toggle's destination is a slot — Arc 3 step 3, toggle PR A by @codetalcott in #1062
- feat(parser): toggle's
betweenpair and dialog mode are slots — Arc 3 step 3, toggle PR B by @codetalcott in #1063 - feat(parser): swap, morph and the
using view transitiontail are slots — Arc 3 step 3 by @codetalcott in #1064 - feat(parser): put's operation is the slot its target lives under — Arc 3 step 3 by @codetalcott in #1065
- feat(parser): repeat's loop form and operands are slots — Arc 3 step 3 by @codetalcott in #1066
- feat(parser): set's value is the
toslot — and increment's desugar was the hidden producer of the flat shape (Arc 3 step 3) by @codetalcott in #1067 - feat(parser): take's source, trigger's target and options, render's vars are slots — and the command suite could not tell the parser half was missing (Arc 3 step 3) by @codetalcott in #1068
- feat(commands): delete the preposition filter — dead for ten of its twelve callers, the two it was live for (add/remove) move to slots, and push/replace get a parser (Arc 3 step 5) by @codetalcott in #1069
- feat(parser): retire COMPOUND_COMMANDS — one dedicated-parser table replaces the set and the switch that had to agree with it by hand (Arc 3 step 5) by @codetalcott in #1070
- feat(parser): delete parseRegularCommand — the last copy of the generic argument loop; its three fallback callers use the declared parser (Arc 3 step 5) by @codetalcott in #1071
- test(commands): slot-key parity gate — every modifiers key a parseInput reads must be one some parser emits (Arc 3 step 2 opener) by @codetalcott in #1072
- refactor(commands): delete the eleven parseInput reads only a hand-built node could satisfy — and the 22 wait tests that had never seen a real parse (Arc 3 step 2) by @codetalcott in #1073
- feat(commands): typed slots — one COMMAND_SLOTS table, and every parseInput's raw.modifiers is keyed by its command's row (Arc 3 step 2) by @codetalcott in #1074
- feat(parser): typed emit — CommandNodeBuilder and SlotMap locals, so a slot key a parser writes outside its command's row is a compile error (Arc 3 step 2) by @codetalcott in #1075
- feat(parser): process and halt stop receiving marker words in args — the step-3 tail named by the arity census (Arc 3 step 3) by @codetalcott in #1076
- feat(parser): scroll and go's syntax is slots, and both commands read a structured input — the two census-blind cases (Arc 3 step 3) by @codetalcott in #1077
- feat(ast): CommandNode, COMMAND_ARITY and ArgsOf — the node and its positional args typed by the same tables as the slots; Arc 3 step 2 closed by @codetalcott in #1078
- test(runtime): the control-flow matrix — 35 cells pinning halt/exit/break/continue/return in seven contexts, and the two signal-losing bugs it found (Arc 4a step 1) by @codetalcott in #1079
- feat(runtime): Completion — halt/exit/break/continue/return return their signal instead of throwing; both dispatch paths route it (Arc 4a step 2, first half) by @codetalcott in #1080
- docs(plan): Arc 5 spike inputs measured — parser sizes, the hybrid ceiling and today's snapshot by @codetalcott in #1083
- refactor(expressions): delete the three stragglers' documentation blocks and guard the last unguarded evaluation timings (Arc 7 steps 1 and 3, in part) by @codetalcott in #1081
- refactor(runtime): delete the non-Result execution path — enableResultPattern was always true (Arc 4a step 3, first slice) by @codetalcott in #1082
- refactor(runtime): delete the message-string signal branches and the signal commands' error fields; repeat reads the break/continue flags (Arc 4a step 3, second slice) by @codetalcott in #1084
- feat(runtime): completion boundaries — return ends the handler or function, halt/exit inside a def end the function only, the program entry resolves (Arc 4a step 2, second half) by @codetalcott in #1085
- docs(plan): Arc 4a complete; Arc 4b brief (compile to closures) — claims re-measured by @codetalcott in #1087
- feat(runtime): every loop reads Results — the thrown signal form is deleted (Arc 4a step 3, last slice) by @codetalcott in #1086
- feat(bench): hot-path baseline + bench:check (Arc 4b step 0) by @codetalcott in #1088
- chore(deps): bump qs from 6.15.2 to 6.16.0 by @dependabot[bot] in #1089
- chore(deps-dev): bump postcss-selector-parser from 7.1.1 to 7.1.5 by @dependabot[bot] in #1090
- feat(runtime): compile to closures — bodies are Ops, the _runtimeExecute channel is deleted (Arc 4b steps 1+2) by @codetalcott in #1091
- feat(runtime): handler and def bodies compile once at registration; Program cache is the compile memo (Arc 4b steps 3+4) + Arc 4c brief by @codetalcott in #1092
- refactor(runtime): delete the dead context fields — bridge ballast, meta, events, the control-flow flags (Arc 4c step 1) by @codetalcott in #1093
- refactor(runtime): evaluation tracking is an opt-in sink; TypedExecutionContext folds; ContextBridge deleted (Arc 4c step 2) by @codetalcott in #1094
- refactor(runtime): no Proxy without providers; scope hooks move to core; Scope named (Arc 4c steps 3–5) + Arc 7 brief by @codetalcott in #1095
- refactor(expressions): one arithmetic across every registry; collection's dead registry shape deleted (Arc 7 steps 1+2) by @codetalcott in #1096
- refactor(evaluator): core-set expressions referenced statically (Arc 7 step 3) + Arc 5 spike measured and closed by @codetalcott in #1097
- docs(plan): bundle lineup collapses to two names — decided, on the 4.0 list beside Arc 6b by @codetalcott in #1098
- refactor(core)!: delete the six @deprecated features/ families (Arc 6b, 4.0 cycle) by @codetalcott in #1099
- refactor(core)!: delete Lexer/Tokens and the root tokenizer.ts (Arc 6b, 4.0 cycle) by @codetalcott in #1100
- refactor(core)!: delete three never-reachable exports — Validator, types.d.ts, registry/multilingual (Arc 6b, 4.0 cycle) by @codetalcott in #1101
- refactor(core)!: delete the async command (Arc 6b, 4.0 cycle) by @codetalcott in #1102
- fix(bundles): a small bundle fails LOUDLY on a command it lacks and names hyperfixi.js (bundle lineup step 1) by @codetalcott in #1103
- refactor(bundles)!: the prebuilt lineup collapses to two names — hyperfixi-hx.js and hyperfixi.js (bundle lineup steps 2+3, 4.0 cycle) by @codetalcott in #1105
- refactor(core)!: delete ContextProviderRegistry and the context-provider Proxy (Arc 6b, 4.0 cycle) by @codetalcott in #1104
- docs(plan): Arc 6b and the lineup record cite #1105 by @codetalcott in #1106
- docs(changelog): one 3.0.0, minimal by @codetalcott in #1107
- ci(publish): npm version --no-workspaces-update — the bump was deleting the framework link by @codetalcott in #1108
Full Changelog: v2.11.1...v3.0.0