BREAKING CHANGES:fjs/ci/deno no longer exports coverageInclude. The Deno CI job runs deno task cov, so deno.json owns the coverage filter, matching how the Node jobs leave npm run cov to package.json#1512
npm run cov names its test entrypoint instead of relying on node --test default discovery, which silently reported no tests on some Node versions. The dead .f.ts extension is dropped from the Node and Deno coverage filters #1512
BREAKING CHANGES:fjs/djs/examples/input.f.ts and fjs/djs/examples/m.f.ts migrate to .f.mjs. Being .mjs they now ship in the tarball, which .f.ts did not #1505
BREAKING CHANGES:fjs/types/nominal/proof.f.ts migrates to .f.mjs. Its two unique symbol brands move to types.ts, exported as _SymbolKeyBranded and _SymbolIntersectionBranded#1505
BREAKING CHANGES:fjs/types/ts/proof.f.ts migrates to .f.mjs. Its declare const index-signature block moves to types.ts, non-exported, so no public type changes #1505
BREAKING CHANGES:fjs/emergent_testing/example.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) — the four typed consts become JSDoc @type annotations #1505
BREAKING CHANGES:fjs/types/rtti/validate/proof.f.ts migrates to .f.mjs — 23 compile-time round-trips stay function-local as JSDoc @typedefs and are not emitted #1505
BREAKING CHANGES:fjs/types/rtti/parse/proof.f.ts migrates to .f.mjs — compile-time round-trips stay function-local as JSDoc @typedefs and are not emitted #1505
BREAKING CHANGES:fjs/emergent_testing/proof.f.ts migrates to .f.mjs. Six module-local types become _-prefixed @typedefs, as a JSDoc @typedef has no non-exported form #1505
BREAKING CHANGES:fjs/effects/node/proof.f.ts migrates to .f.mjs — explicit generic instantiations become checked @type declarations, as JSDoc has no call-site form #1505
BREAKING CHANGES:fjs/js/tokenizer/proof.f.ts migrates to .f.mjs — typed consts become JSDoc @type annotations #1505
BREAKING CHANGES:fjs/media/json/parser/proof.f.ts migrates to .f.mjs — the typed const becomes a JSDoc @type annotation #1505
BREAKING CHANGES:todo/proof.f.ts migrates to .f.mjs. The TemplateType alias is renamed _TemplateType: it was never exported, but a JSDoc @typedef has no non-exported form #1505
BREAKING CHANGES:fjs/media/json/tokenizer/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) — the typed tokenizeString const becomes a JSDoc @type annotation, and the JsonToken type import becomes an @import#1504
BREAKING CHANGES:fjs/media/json/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) — two nested as unknown as null double-casts become nested inline @type casts #1504
BREAKING CHANGES:fjs/effects/proof.f.ts and fjs/effects/eff/proof.f.ts migrate from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) — explicit generic instantiations (match<AddOp, number>(...), do_<AddOp>('add'), pure<readonly number[]>([]), okStep<number, string, never, number>(...), error<string>(...)) become inline @type casts, per convention; assertPure's generic function becomes a @template/@param block; the local AddOp/AnyOp types are renamed _AddOp/_AnyOp (neither was previously exported, but a JSDoc @typedef has no non-exported form). fjs/effects/eff/proof.f.mjs updates its import of assertPure accordingly #1503
BREAKING CHANGES:fjs/text/utf8/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) — no type annotations to convert #1503
BREAKING CHANGES:fjs/text/utf16/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/ci/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/types/btree/remove/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/types/btree/set/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/cli/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/ci/nix/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/types/range_map/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/types/list/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/types/btree/find/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/types/btree/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/types/byte_set/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/effects/memory/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) — the local MemoryState type is renamed _MemoryState (it was never exported, but a JSDoc @typedef has no non-exported form) #1503
BREAKING CHANGES:fjs/types/sorted_set/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/text/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/types/sorted_list/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/website/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) — no type annotations to convert #1503
BREAKING CHANGES:fjs/types/bit_vec/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/types/bigint/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) — the local Benchmark type is renamed _Benchmark (it was never exported, but a JSDoc @typedef has no non-exported form) #1503
BREAKING CHANGES:fjs/fsc/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/dev/update/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/djs/ast/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) — no type annotations to convert #1503
BREAKING CHANGES:fjs/crypto/sha2/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/crypto/pow/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/text/code_point/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/types/array/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/types/function/operator/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/common/monoid/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/text/sgr/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) #1503
BREAKING CHANGES:fjs/text/ascii/proof.f.ts migrates from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) — no type annotations to convert #1503
BREAKING CHANGES:fjs/module.ts (the fjs CLI entry point) migrates to fjs/module.mjs, per the module.ts -> module.mjs stage-1 mapping. package.json's bin.fjs now points directly at the authored .mjs (dropping the compiled-.js indirection, since .mjs already ships in the npm package) and its test/start/ci-update/dev-update/ index-html scripts, and deno.json's fjs task, are updated accordingly #1503
BREAKING CHANGES:fjs/effects/node/module.ts (the Node.js effect runner — runEffect, run) migrates from authored TypeScript to JSDoc-typed JavaScript, per the module.ts -> module.mjs stage-1 mapping — the local Server, Readable, IncomingMessage, ServerResponse, RequestListener, EffectToPromise, and FrameworkRegister types are renamed _Server, _Readable, _IncomingMessage, _ServerResponse, _RequestListener, _EffectToPromise, _FrameworkRegister (none were previously exported, but a JSDoc @typedef has no non-exported form; the _-prefix also avoids a same-name collision with the differently-shaped public Server/IncomingMessage/ServerResponse/RequestListener types in the sibling fjs/effects/node/types.ts). Importers must use the .mjs specifier. Updates fjs/module.ts and fjs/emergent_testing/all.test.ts accordingly. Also fixes two stale fjs/mcp/module.f.ts / fjs/protocol/mcp/module.f.ts doc-comment references (left over from earlier commits in this PR) to their current .f.mjs paths #1503
BREAKING CHANGES:fjs/effects/node/memory/module.ts and proof migrate from authored TypeScript to JSDoc-typed JavaScript, per the module.ts -> module.mjs stage-1 mapping — no local complex types to split (MemoryOperationMap/Uuid are only used internally). Importers must use the .mjs specifier. Updates fjs/effects/node/module.ts accordingly #1503
BREAKING CHANGES:fjs/effects/module.ts (asyncRun) and fjs/types/result/module.ts (tryCatch, asyncTryCatch) migrate from authored TypeScript to JSDoc-typed JavaScript, per the module.ts -> module.mjs stage-1 mapping (these are plain .ts implementation modules, not .f.ts). Importers must use the .mjs specifier. Updates fjs/effects/node/module.ts, fjs/effects/node/memory/module.ts, and fjs/effects/node/memory/proof.ts accordingly #1503
BREAKING CHANGES:fjs/module and proof (the top-level FunctionalScript compiler entry point and command dispatcher) migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) — no local complex types to split. Importers must use the .f.mjs specifier. Updates fjs/module.ts's import accordingly #1503
BREAKING CHANGES:fjs/mcp/cas/module migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) — the local Meta type is renamed _Meta (it was never exported, but a JSDoc @typedef has no non-exported form). Importers must use the .f.mjs specifier. Updates fjs/mcp/module.f.ts accordingly #1503
BREAKING CHANGES:fjs/mcp/evo/module and proof migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) — no local types to split (evoToolRegistry is the only export beyond the four rtti schema consts). Importers must use the .f.mjs specifier. Updates fjs/mcp/module.f.ts accordingly #1503
BREAKING CHANGES:fjs/protocol/mcp/module and proof migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), moving Implementation, ServerCapabilities, InitializeParams, InitializeResult, TextContent, BlobResource, EmbeddedResource, ContentItem, Tool, ToolsListParams, ToolsListResult, ToolsCallParams, ToolsCallResult, McpHandlers, ToolEntry, Handle, Uninitialized, Initializing, InitializedState, McpSessionState, and McpConfig into a sibling types.ts — importers must use the .f.mjs specifier for the runtime values and the types.ts specifier for the types. Updates fjs/mcp/evo/module.f.ts, fjs/mcp/evo/proof.f.ts, fjs/mcp/module.f.ts, fjs/mcp/cas/module.f.ts, and fjs/mcp/proof.f.ts accordingly #1503
BREAKING CHANGES:fjs/media/json/schema/module and proof migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) — Unknown stays as a JSDoc typedef in the module (no separate types.ts, no external importers of the type); the local UnknownConst type is renamed _UnknownConst (it was never exported, but a JSDoc @typedef has no non-exported form). Importers must use the .f.mjs specifier. Updates fjs/protocol/mcp/module.f.ts accordingly #1503
BREAKING CHANGES:fjs/mcp/module and proof migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) — no local complex types to split (casMcpHandlers, casConfig, and casMcpServer are the only exports). Importers must use the .f.mjs specifier. Updates fjs/module.f.ts accordingly #1503
BREAKING CHANGES:fjs/djs/module and proof migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) — Object, Array, Primitive, and Unknown no longer re-export from the module; importers must use fjs/djs/types.ts directly (this completes the extraction started when those types moved out of fjs/djs/module.f.ts earlier in this PR). Updates fjs/types/rtti/validate/proof.f.ts, fjs/types/rtti/parse/proof.f.ts, fjs/media/json/schema/module.f.ts, and fjs/module.f.ts accordingly #1503
BREAKING CHANGES:fjs/djs/transpiler/module and proof migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) — ParseContext and djsResult stay as JSDoc typedefs in the module (no separate types.ts, no external importers of the types). Importers must use the .f.mjs specifier. Updates fjs/djs/module.f.ts accordingly #1503
BREAKING CHANGES:fjs/djs/parser/module and proof migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), moving ParseError into a sibling types.ts — importers must use the .f.mjs specifier for the runtime value and the types.ts specifier for the type. Updates fjs/djs/transpiler/module.f.ts accordingly #1503
BREAKING CHANGES:fjs/djs/tokenizer/module and proof migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), moving DjsToken and DjsTokenWithMetadata into a sibling types.ts — importers must use the .f.mjs specifier for the runtime values and the types.ts specifier for the types. Updates fjs/djs/parser/module.f.ts, fjs/djs/parser/proof.f.ts, and fjs/djs/transpiler/module.f.ts accordingly #1503
BREAKING CHANGES:fjs/djs/serializer/module and proof migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) — MapEntries, RefCounter, Refs, GetConstsState, and RefLookup stay as _-prefixed JSDoc typedefs in the module (no separate types.ts, no external importers of the types). Importers must use the .f.mjs specifier. Updates fjs/djs/module.f.ts, fjs/djs/tokenizer/module.f.ts, and six proof files (fjs/djs/ast, fjs/djs/parser, fjs/djs/tokenizer, fjs/djs/transpiler, fjs/js/tokenizer, fjs/media/json/tokenizer) accordingly #1503
BREAKING CHANGES:fjs/protocol/json_rpc/module's id schema const is renamed to _id — it crosses into the sibling types.ts (as typeof _id) but was never meant to be a public runtime export, so the _ prefix marks it private-by-convention like the equivalent case in fjs/media/revision/module's _lock. fjs/media/module's CHANGELOG entry below is corrected: it no longer claims fjs/media/proof.f.ts stays TypeScript, since this PR migrates it (see the next entry). Also adds the required @module header to four types.ts files added earlier in this PR that were missing one (fjs/cas/evo/types.ts, fjs/media/types.ts, fjs/media/revision/types.ts, fjs/protocol/json_rpc/types.ts) #1503
BREAKING CHANGES:fjs/media/proof.f.ts migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) — no local types to split #1503
BREAKING CHANGES:fjs/djs/ast/module migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), moving AstModule, AstConst, AstModuleRef, AstArray, AstObject, and AstBody into a sibling types.ts — importers must use the .f.mjs specifier for the runtime value and the types.ts specifier for the types. fjs/djs's own recursive Primitive/Object/Array/Unknown types move out of fjs/djs/module.f.ts into a new sibling fjs/djs/types.ts (hand-authored, following the pattern fjs/media/json/types.ts established), with fjs/djs/module.f.ts re-exporting them — fjs/djs/module.f.ts itself stays TypeScript for now, since it still depends on fjs/djs/serializer and fjs/djs/transpiler, neither yet migrated. Updates fjs/djs/ast/proof.f.ts, fjs/djs/parser/module.f.ts, and fjs/djs/transpiler/module.f.ts accordingly #1503
BREAKING CHANGES:fjs/cas/evo/module and proof migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), moving Hash, Subject, RevisionData, SubjectState, Cache, and Evo into a sibling types.ts — importers must use the .f.mjs specifier for the runtime values and the types.ts specifier for the types. Updates fjs/mcp/evo/module, fjs/mcp/evo/proof.f.ts, fjs/mcp/module, fjs/mcp/cas/module, and fjs/mcp/proof.f.ts accordingly #1503
BREAKING CHANGES:fjs/protocol/mcp/stdio/module and proof migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) — Step stays as a JSDoc typedef in the module (no separate types.ts, no external importers of the type). Importers must use the .f.mjs specifier. Updates fjs/mcp/module and fjs/mcp/proof.f.ts accordingly #1503
BREAKING CHANGES:fjs/media/revision/module and proof migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), moving LockMap, Revision, and RevisionError into a sibling types.ts — importers must use the .f.mjs specifier for the runtime values and the types.ts specifier for the types. Updates fjs/cas/evo/module, fjs/cas/evo/proof.f.ts, fjs/mcp/cas/module, fjs/mcp/proof.f.ts, and fjs/media/proof.f.ts accordingly #1503
BREAKING CHANGES:fjs/protocol/json_rpc/module and proof migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), moving Id, Request, RpcError, Response, Handler, and Handlers into a sibling types.ts — importers must use the .f.mjs specifier for the runtime values and the types.ts specifier for the types. Updates fjs/protocol/mcp/module, fjs/protocol/mcp/stdio/module, fjs/protocol/mcp/stdio/proof.f.ts, and fjs/mcp/proof.f.ts accordingly #1503
BREAKING CHANGES:fjs/media/module migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), moving DialectEntry into a sibling types.ts — importers must use the .f.mjs specifier for the runtime value and the types.ts specifier for the type. Updates fjs/media/revision/module and fjs/mcp/cas/module accordingly #1503
BREAKING CHANGES:fjs/fsm/module and proof migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) — Grammar stays as a JSDoc typedef in the module (no separate types.ts, no external importers of the type). Importers must use the .f.mjs specifier #1503
BREAKING CHANGES:fjs/dev/package_json/module and proof migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) — PackageJson and JsonTextError stay as JSDoc typedefs in the module (no separate types.ts, no external importers of the types). Importers must use the .f.mjs specifier #1503
nanvm-lib operator behaviour is described once, as data, in fjs/nanvm/module.f.mjs: the JavaScript proof and the generated Rust tests both read it, so a case is written once instead of twice #1489
BREAKING CHANGES:fjs/bnf/proof migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) — no local types to split. Importers must use the .f.mjs specifier #1501
BREAKING CHANGES:fjs/media/json/module migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), moving Entry, _Entries, and _MapEntries into the sibling types.ts — importers must use the .f.mjs specifier for the runtime value and the types.ts specifier for the types. This pulls in four more files that depend on it directly or transitively: fjs/bnf/testlib, fjs/bnf/data/proof, fjs/bnf/descent/proof, and fjs/bnf/ll1/proof all migrate to .f.mjs as well, with no local types to split #1501
BREAKING CHANGES:fjs/media/json/parser migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) under the stage-1 TypeScript-to-mjs migration, splitting _JsonObject, _JsonArray, _JsonStack, _StateParse, and _JsonState into a sibling types.ts — importers must use the .f.mjs specifier for the runtime value and the types.ts specifier for the types. proof.f.ts stays TypeScript for now (it depends on fjs/media/json/module.f.ts, still unmigrated) #1499
BREAKING CHANGES: the JSON rtti schemas primitive, unknown, object, and array move from fjs/media/json/module.f.ts to a new JSDoc-typed fjs/media/json/rtti/module.f.mjs, and the Primitive, Unknown, Object, and Array types to a sibling fjs/media/json/types.ts — importers must use the rtti/module.f.mjs specifier for the schemas and the types.ts specifier for the types. fjs/media/json/module.f.ts stays TypeScript and no longer re-exports either #1498
BREAKING CHANGES:fjs/fsc/json.f.ts and fjs/fsc/bnf.f.ts migrate from authored TypeScript to JSDoc-typed JavaScript (.f.mjs) — no local types to split, both use only Rule/TerminalRange from fjs/bnf/types.ts. Importers must use the .f.mjs specifier #1494
BREAKING CHANGES:fjs/media/json/tokenizer migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting JsonToken and the internal _ScanState/_ScanInput types into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types. proof.f.ts stays TypeScript for now (it depends on djs/serializer/module.f.ts, still unmigrated) #1494
BREAKING CHANGES:fjs/js/tokenizer/module.f.ts migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting StringToken, NumberToken, BigIntToken, ErrorToken, WhitespaceToken, NewLineToken, IdToken, CommentToken, EofToken, JsToken, TokenMetadata, JsTokenWithMetadata, and a large set of internal state-machine types into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types. proof.f.ts stays TypeScript for now (it depends on djs/serializer/module.f.ts, still unmigrated) #1494
BREAKING CHANGES:fjs/emergent_testing/module.f.ts migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting TestFn, TestEntry, TestSet, Path, Reporter, and the internal _TestState/_TestAndPath types into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types. proof.f.ts stays TypeScript for now (it depends on media/json/module.f.ts, still unmigrated) #1494
BREAKING CHANGES:fjs/cas/cli migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) — no local types to split. proof.f.ts migrates alongside it. Importers must use the .f.mjs specifier #1494
BREAKING CHANGES:fjs/cas migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting Cas, FileCas, and FileCasOperation into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types. proof.f.ts migrates alongside it #1494
BREAKING CHANGES:fjs/dev migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting Module, ModuleMap, and LoadModuleOperations into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types. proof.f.ts migrates alongside it #1494
BREAKING CHANGES:fjs/effects/node/virtual migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting Dir, State, and JsModule into a sibling types.ts, and narrowing the previously-exported Entity to the internal _Entity — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types. proof.f.ts migrates alongside it #1494
BREAKING CHANGES:fjs/media/type migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting DetectState, DetectMeta, and the internal _Signature/_MagicState/ _Utf8Detect types into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types. proof.f.ts migrates alongside it #1493
BREAKING CHANGES:fjs/ci/module.f.ts migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting the Setup type into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types. proof.f.ts stays TypeScript for now #1493
BREAKING CHANGES:fjs/ci/node migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) — no local types to split. proof.f.ts migrates alongside it. Importers must use the .f.mjs specifier #1493
BREAKING CHANGES:fjs/ci/nix migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting the NixJob type into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types. proof.f.ts stays TypeScript for now #1493
BREAKING CHANGES:fjs/cli migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting its type-level API into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types. proof.f.ts stays TypeScript for now #1491
BREAKING CHANGES:fjs/website migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) — importers must use the .f.mjs specifier. proof.f.ts stays TypeScript for now #1491
BREAKING CHANGES:fjs/dev/update migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) — importers must use the .f.mjs specifier. proof.f.ts stays TypeScript for now #1491
BREAKING CHANGES:fjs/text/sgr migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting its type-level API into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types. proof.f.ts stays TypeScript for now #1488
BREAKING CHANGES:fjs/effects/node/module.f.ts migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting its type-level API into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types. Updates 26 dependents across the repo; proof.f.ts stays TypeScript for now #1488
BREAKING CHANGES:fjs/effects/eff migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting the Eff type into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types. proof.f.ts stays TypeScript for now #1488
BREAKING CHANGES:fjs/effects/mock migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting its type-level API into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types #1488
BREAKING CHANGES:fjs/effects/memory migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting its type-level API into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types. proof.f.ts stays TypeScript for now #1488
BREAKING CHANGES:fjs/effects/list migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting its type-level API into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types #1487
BREAKING CHANGES:fjs/effects/module.f.ts migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting its type-level API into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types. Updates all 30+ dependents across the repo; proof.f.ts stays TypeScript for now #1487
BREAKING CHANGES:fjs/bnf/descent migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting its type-level API into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types. proof.f.ts stays TypeScript for now #1487
BREAKING CHANGES:fjs/bnf/ll1 migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting its type-level API into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types. proof.f.ts stays TypeScript for now #1487
BREAKING CHANGES:fjs/bnf/data migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting its type-level API into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types. proof.f.ts stays TypeScript for now #1487
BREAKING CHANGES:fjs/bnf/token_symbol migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting the Encoding<T> type into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types #1486
BREAKING CHANGES:fjs/crypto/vdf migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting the Sloth type into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types #1486
BREAKING CHANGES:fjs/bnf/module.f.ts migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting its type-level API into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types. proof.f.ts and testlib.f.ts stay TypeScript for now #1485
BREAKING CHANGES:fjs/media/nix migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting the Expression type (and its private helper types) into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types #1485
BREAKING CHANGES:fjs/ci/rust migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) — importers must use the .f.mjs specifier #1485
BREAKING CHANGES:fjs/ci/deno migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) — importers must use the .f.mjs specifier #1485
BREAKING CHANGES:fjs/ci/bun migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) — importers must use the .f.mjs specifier #1485
BREAKING CHANGES:fjs/ci/common migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting its type-level API (Os, Architecture, Image, Step, Job, Jobs, GitHubAction, StepType, MetaStep) into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types #1485
BREAKING CHANGES:fjs/types/rtti/parse/module.f.ts migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting its Result/Parse types into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types. proof.f.ts stays TypeScript for now: it has a type-only dependency on the not-yet-migrated fjs/djs#1485
BREAKING CHANGES:fjs/types/rtti/validate/module.f.ts migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) — importers must use the .f.mjs specifier for runtime values and fjs/types/rtti/common/types.ts for the re-exported types. proof.f.ts stays TypeScript for now: it has a type-only dependency on the not-yet-migrated fjs/djs#1485
BREAKING CHANGES:fjs/types/rtti/common migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting its type-level API into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types #1485
BREAKING CHANGES:fjs/types/rtti/ts migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting its Ts<T> type-transformer API into a sibling types.ts — importers must use the .f.mjs specifier for the printer runtime value and the types.ts specifier for types #1485
BREAKING CHANGES:fjs/types/rtti migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting its type-level API into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types #1485
BREAKING CHANGES:fjs/crypto/sign migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting the All type into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for the type #1485
BREAKING CHANGES:fjs/media/html migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting the Element/Node types into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types #1485
BREAKING CHANGES:fjs/sul migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs), splitting the EncodeState/Encode types into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types #1485
BREAKING CHANGES:fjs/types/object, fjs/sul/level/literal, fjs/sul/id, fjs/sul/level/hash, fjs/types/string_set, and the module.f.ts of fjs/types/sorted_set and fjs/types/byte_set migrate to .f.mjs, splitting their public types into a sibling types.ts — importers must use the .f.mjs specifier for runtime values and the types.ts specifier for types #1484
BREAKING CHANGES:fjs/crypto/hmac, fjs/path, and fjs/media/json/serializer migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) under the stage-1 TypeScript-to-mjs migration — importers must use the .f.mjs specifier #1484
BREAKING CHANGES: every public type exported by an authored .f.mjs module moves to a sibling types.ts (31 modules, including asserts, types/list, types/bit_vec, types/result, text, crypto/sha2) — importers of these types must use the types.ts specifier. The runtime-empty fjs/types/option/module.f.mjs becomes fjs/types/option/types.ts#1483
fjs/types/nullable/proof.f.ts, fjs/types/range/proof.f.ts, fjs/types/function/proof.f.ts, fjs/types/result/proof.f.ts, and fjs/types/function/compare/proof.f.ts migrate to proof.f.mjs under the stage-1 TypeScript-to-mjs migration; no other module imports a proof file, so this is not a breaking change #1480
BREAKING CHANGES:fjs/text/utf8, fjs/text (top module), and fjs/types/uint8array migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) under the stage-1 TypeScript-to-mjs migration — importers must use the .f.mjs specifier #1480
BREAKING CHANGES:fjs/ci/config, fjs/text/ascii, and fjs/fsc migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) under the stage-1 TypeScript-to-mjs migration — importers must use the .f.mjs specifier #1479
BREAKING CHANGES:fjs/types/patricia_trie, fjs/types/sorted_list, fjs/types/range_map, fjs/types/range_set, fjs/crypto/pow, fjs/types/bigfloat, fjs/types/prime_field, and fjs/crypto/secp migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) under the stage-1 TypeScript-to-mjs migration — importers must use the .f.mjs specifier #1478
BREAKING CHANGES:fjs/types/number and fjs/types/nibble_set migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) under the stage-1 TypeScript-to-mjs migration — importers must use the .f.mjs specifier #1477
BREAKING CHANGES:fjs/types/map migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) under the stage-1 TypeScript-to-mjs migration — importers must use the .f.mjs specifier #1476
BREAKING CHANGES:fjs/types/btree migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) under the stage-1 TypeScript-to-mjs migration — importers must use the .f.mjs specifier #1475
BREAKING CHANGES:fjs/crypto/sha2 migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) under the stage-1 TypeScript-to-mjs migration — importers must use the .f.mjs specifier #1472
BREAKING CHANGES:fjs/types/btree/set and fjs/types/btree/remove migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) under the stage-1 TypeScript-to-mjs migration — importers must use the .f.mjs specifier #1471
BREAKING CHANGES:fjs/types/btree/find migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) under the stage-1 TypeScript-to-mjs migration — importers must use the .f.mjs specifier; implementation-only typedefs (FirstLeaf1, FirstBranch3, FirstLeaf2, FirstBranch5, PathItem3, PathItem5) are renamed to their private _-prefixed forms #1470
BREAKING CHANGES:fjs/types/btree/types migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) under the stage-1 TypeScript-to-mjs migration — importers must use the .f.mjs specifier #1469
BREAKING CHANGES:fjs/text/utf16 migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) under the stage-1 TypeScript-to-mjs migration — importers must use the .f.mjs specifier; implementation-only typedefs in fjs/bnf/data are renamed to their private _-prefixed forms to match the established convention #1468
BREAKING CHANGES:fjs/types/range and fjs/text/code_point migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) under the stage-1 TypeScript-to-mjs migration — importers must use the .f.mjs specifier #1464
BREAKING CHANGES:fjs/basen, fjs/basen/base64, and fjs/basen/cbase32 migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) under the stage-1 TypeScript-to-mjs migration — importers must use the .f.mjs specifier #1464
BREAKING CHANGES: the fjs/base_n module moves to fjs/basen, next to the encodings built on it — importers must use the fjs/basen/module.f.mjs specifier #1464
BREAKING CHANGES:fjs/asn.1 migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) under the stage-1 TypeScript-to-mjs migration — importers must use the .f.mjs specifier #1464
BREAKING CHANGES:fjs/basen/base128 migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) under the stage-1 TypeScript-to-mjs migration — importers must use the .f.mjs specifier #1463
BREAKING CHANGES: Implementation-only JSDoc typedefs in the migrated fjs/types/array and fjs/types/bit_vec modules are renamed to their private _-prefixed forms. Public declarations keep the same expanded types #1462
BREAKING CHANGES:fjs/types/bit_vec migrates from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) under the stage-1 TypeScript-to-mjs migration — importers must use the .f.mjs specifier #1460
BREAKING CHANGES:fjs/types/list, fjs/types/result, fjs/common/monoid, fjs/types/bigint, and fjs/types/nominal migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) under the stage-1 TypeScript-to-mjs migration — importers must use the .f.mjs specifier #1458
BREAKING CHANGES:fjs/types/function/compare and fjs/types/function/operator migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) under the stage-1 TypeScript-to-mjs migration — importers must use the .f.mjs specifier #1456
BREAKING CHANGES:fjs/types/array, fjs/types/function, fjs/types/nullable, and fjs/types/option migrate from authored TypeScript (.f.ts) to JSDoc-typed JavaScript (.f.mjs) under the stage-1 TypeScript-to-mjs migration — importers must use the .f.mjs specifier; fjs/types/array's fixed-arity type exports (Array1..Array16, Index1..Index16, Tuple2, Tuple3, isArray2) are replaced by the generic Tuple<N, T>, Index<N>, and isTuple(n)#1454
ci: generated workflows invoke the CLI by full command name (fjs test, functionalscript@<version> test) instead of the t alias #1450