@mmnto/totem 1.124.0 → 2.1.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.
Files changed (65) hide show
  1. package/dist/artifacts/grounding.d.ts +27 -7
  2. package/dist/artifacts/grounding.d.ts.map +1 -1
  3. package/dist/artifacts/grounding.js +23 -5
  4. package/dist/artifacts/grounding.js.map +1 -1
  5. package/dist/artifacts/grounding.test.js +28 -0
  6. package/dist/artifacts/grounding.test.js.map +1 -1
  7. package/dist/artifacts/schema.d.ts +63 -18
  8. package/dist/artifacts/schema.d.ts.map +1 -1
  9. package/dist/artifacts/schema.js +13 -4
  10. package/dist/artifacts/schema.js.map +1 -1
  11. package/dist/compiler.d.ts +12 -0
  12. package/dist/compiler.d.ts.map +1 -1
  13. package/dist/compiler.js +17 -3
  14. package/dist/compiler.js.map +1 -1
  15. package/dist/config-schema.d.ts +95 -15
  16. package/dist/config-schema.d.ts.map +1 -1
  17. package/dist/config-schema.js +99 -14
  18. package/dist/config-schema.js.map +1 -1
  19. package/dist/config-schema.test.js +110 -1
  20. package/dist/config-schema.test.js.map +1 -1
  21. package/dist/describe.d.ts +19 -0
  22. package/dist/describe.d.ts.map +1 -1
  23. package/dist/describe.js +83 -12
  24. package/dist/describe.js.map +1 -1
  25. package/dist/describe.test.js +69 -2
  26. package/dist/describe.test.js.map +1 -1
  27. package/dist/index.d.ts +11 -6
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +10 -6
  30. package/dist/index.js.map +1 -1
  31. package/dist/ingest/pipeline.d.ts +12 -0
  32. package/dist/ingest/pipeline.d.ts.map +1 -1
  33. package/dist/ingest/pipeline.js +5 -0
  34. package/dist/ingest/pipeline.js.map +1 -1
  35. package/dist/ingest/pipeline.test.js +9 -0
  36. package/dist/ingest/pipeline.test.js.map +1 -1
  37. package/dist/selection-manifest.d.ts +4 -4
  38. package/dist/selection-manifest.d.ts.map +1 -1
  39. package/dist/selection-manifest.js +2 -0
  40. package/dist/selection-manifest.js.map +1 -1
  41. package/dist/store/lance-search.d.ts +1 -1
  42. package/dist/store/lance-search.d.ts.map +1 -1
  43. package/dist/store/lance-search.js +89 -18
  44. package/dist/store/lance-search.js.map +1 -1
  45. package/dist/store/lance-search.test.js +207 -26
  46. package/dist/store/lance-search.test.js.map +1 -1
  47. package/dist/store/lance-store.d.ts.map +1 -1
  48. package/dist/store/lance-store.js +1 -1
  49. package/dist/store/lance-store.js.map +1 -1
  50. package/dist/store/relevance.d.ts +70 -0
  51. package/dist/store/relevance.d.ts.map +1 -0
  52. package/dist/store/relevance.js +115 -0
  53. package/dist/store/relevance.js.map +1 -0
  54. package/dist/store/relevance.sdk.test.d.ts +20 -0
  55. package/dist/store/relevance.sdk.test.d.ts.map +1 -0
  56. package/dist/store/relevance.sdk.test.js +145 -0
  57. package/dist/store/relevance.sdk.test.js.map +1 -0
  58. package/dist/store/relevance.test.d.ts +2 -0
  59. package/dist/store/relevance.test.d.ts.map +1 -0
  60. package/dist/store/relevance.test.js +192 -0
  61. package/dist/store/relevance.test.js.map +1 -0
  62. package/dist/types.d.ts +4 -2
  63. package/dist/types.d.ts.map +1 -1
  64. package/dist/types.js.map +1 -1
  65. package/package.json +1 -1
@@ -1215,13 +1215,6 @@ export declare const ReviewConfigSchema: z.ZodDefault<z.ZodObject<{
1215
1215
  */
1216
1216
  lanes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1217
1217
  }, z.ZodTypeAny, "passthrough">>>;
1218
- /**
1219
- * Default `searchRelevanceFloor` (mmnto-ai/totem#2463). Exported as the single
1220
- * source shared by the schema default below and the MCP guard that re-applies
1221
- * it for unvalidated configs — retuning one can never silently strand the
1222
- * other on a stale floor.
1223
- */
1224
- export declare const DEFAULT_SEARCH_RELEVANCE_FLOOR = 0.25;
1225
1218
  /**
1226
1219
  * Whether `value` carries a character that cannot be rendered SAFELY into the
1227
1220
  * managed git hooks (mmnto-ai/totem#2692 C4): a single quote (breaks the `sh`
@@ -1237,6 +1230,37 @@ export declare const DEFAULT_SEARCH_RELEVANCE_FLOOR = 0.25;
1237
1230
  * sequence of its own to mis-author.
1238
1231
  */
1239
1232
  export declare function hasUnrenderableHookChar(value: string): boolean;
1233
+ /**
1234
+ * Whether `value` carries a character that cannot be rendered safely into the
1235
+ * managed pre-commit hook as a required SPEC HEADING (mmnto-ai/totem#2737).
1236
+ * Forbids the same five shell/JS-active characters as
1237
+ * {@link hasUnrenderableHookChar} — a single quote, a double quote, a
1238
+ * backslash, a dollar sign, a backtick — plus every line-breaking or control
1239
+ * character the reader's own `safe()` collapses: C0 (below 0x20), the DEL/C1
1240
+ * band (0x7f–0x9f), and U+2028/U+2029 (LINE and PARAGRAPH SEPARATOR). Anything
1241
+ * outside that set could otherwise forge a second `[Totem]` line in the hook's
1242
+ * output. U+2028 and U+2029 are printable-plane code points that terminals and
1243
+ * pagers still break a line on, so banning only the two classic bands would
1244
+ * leave the forge channel open on exactly the characters this predicate exists
1245
+ * to permit the rest of.
1246
+ *
1247
+ * It PERMITS printable non-ASCII, and that is the whole difference. The path
1248
+ * predicate bans everything above 0x7e because git C-quotes path bytes above
1249
+ * 0x7e in the `diff --name-only` output the hooks' `grep -q` filters read, so a
1250
+ * non-ASCII directory name could never match. A required heading meets no such
1251
+ * filter: it is rendered by `JSON.stringify` into the reader's JS source and
1252
+ * compared in memory against the draft's own lines. Holding it to the path
1253
+ * rule would ban `### Verification (MANDATORY — do not skip)` — a heading the
1254
+ * built-in prompt has always asked for — over a hazard it cannot encounter.
1255
+ *
1256
+ * The round-trip is not argued, it is EXECUTED: the frozen falsifier in
1257
+ * `install-hooks.test.ts` runs the real hook over the four schema-constrained
1258
+ * R3 drafts, which carry that em-dash heading byte-identical, and requires them
1259
+ * to match on the EXACT pass and name no tolerance. That test fails on any CI
1260
+ * OS where the em dash does not survive `JSON.stringify` → the single-quoted
1261
+ * `node -e` word → `sh` → node intact.
1262
+ */
1263
+ export declare function hasUnrenderableHeadingChar(value: string): boolean;
1240
1264
  /**
1241
1265
  * Normalise a configured `totemDir` to the ONE spelling every consumer joins and
1242
1266
  * every managed hook renders (mmnto-ai/totem#2692 amendment A7): backslashes →
@@ -1800,14 +1824,49 @@ export declare const TotemConfigSchema: z.ZodObject<{
1800
1824
  /** Character count above which `search_knowledge` appends its `<size-disclosure>` measurement envelope — a size disclosure, not a risk claim (#2600) (~4 chars ≈ 1 token). Default: 40,000 (~10k tokens). */
1801
1825
  contextWarningThreshold: z.ZodDefault<z.ZodNumber>;
1802
1826
  /**
1803
- * Minimum per-hit relevance (vector-leg similarity, 0..1) below which the
1804
- * `search_knowledge` tool reports `status="no_useful_hits"` rather than
1805
- * returning noise-floor matches (mmnto-ai/totem#2463). Floors on the true
1806
- * relevance signal, NOT the RRF rank artifact in the displayed `score`. The
1807
- * per-call `min_relevance` MCP input overrides this; the retrieval-envelope
1808
- * always discloses the effective floor. Default 0.25 (pilot-calibrated).
1827
+ * Optional relevance floor (0..1). A REFUSAL THRESHOLD compared against the
1828
+ * BEST vector-leg relevance of ONE retrieval — never a per-item filter.
1829
+ * Nothing in the product withholds an individual sub-floor hit while keeping
1830
+ * its siblings. Two consumers:
1831
+ *
1832
+ * 1. the MCP `search_knowledge` tool (mmnto-ai/totem#2463): when a
1833
+ * response's best relevance is below the floor it answers
1834
+ * `status="no_useful_hits"` and DISCLOSES the below-floor candidates
1835
+ * (path + relevance, no content) instead of returning them — and a
1836
+ * retrieval whose EVERY hit is FAULTED (a relevance that is not a
1837
+ * finite number in [0, 1]) answers `no_useful_hits` too, floor or no
1838
+ * floor (mmnto-ai/totem#2770);
1839
+ * 2. `totem spec` (mmnto-ai/totem#2700): an unanchored free-text run is
1840
+ * REFUSED when the best relevance is below the floor.
1841
+ *
1842
+ * Floors the true relevance signal, NOT the RRF rank artifact in the
1843
+ * displayed `score`. Hits with no vector leg (keyword-only/FTS) carry no
1844
+ * comparable relevance: they are floor-EXEMPT, and in `totem spec` a single
1845
+ * exempt hit from a grounding partition (specs, sessions, code) saves the
1846
+ * run — a keyword-only lesson does not; lessons never ground a run (ruled
1847
+ * final, mmnto-ai/totem#2727).
1848
+ *
1849
+ * NO DEFAULT since mmnto-ai/totem#2727. Relevance is `1 / (1 + squared L2)`
1850
+ * on unit-norm vectors, so it ranges over [0.2, 1] — 0.25 is INSIDE that
1851
+ * range, but on the gemini-embedding-2-preview 768-d profile the LOWEST
1852
+ * best-relevance over 55 recorded `totem spec` queries was 0.559 (0.5687 over
1853
+ * the runs the spec refusal was even eligible to judge), so the former
1854
+ * default fired on none of those 55, and any value below a repo's own
1855
+ * measured floor is inert. An embedder returning UNNORMALIZED vectors
1856
+ * (custom, some Ollama models) is not bounded that way and can produce
1857
+ * relevances under 0.25, so on such a profile the old default could fire.
1858
+ * A repo that wants weak free-text runs refused sets a value just above the
1859
+ * best-relevance of the weakest run it still wants kept; the recipe is in
1860
+ * `docs/wiki/config-reference.md` and the worked measurement is the R4 record
1861
+ * at `.totem/fixtures/floor-arm-2026-09-03/`.
1862
+ *
1863
+ * UNSET = NO FLOOR: the below-floor arms of `no_useful_hits` and the spec
1864
+ * refusal can never fire (each reader's zero-hit / all-faulted arms still
1865
+ * can — they need no floor). The per-call
1866
+ * `min_relevance` MCP input still applies, and still overrides this value;
1867
+ * the retrieval-envelope always discloses the effective floor, or `none`.
1809
1868
  */
1810
- searchRelevanceFloor: z.ZodDefault<z.ZodNumber>;
1869
+ searchRelevanceFloor: z.ZodOptional<z.ZodNumber>;
1811
1870
  /** Optional: documents to auto-update via `totem docs` */
1812
1871
  docs: z.ZodOptional<z.ZodArray<z.ZodObject<{
1813
1872
  /** Relative path to the document */
@@ -1971,20 +2030,39 @@ export declare const TotemConfigSchema: z.ZodObject<{
1971
2030
  * for disabling the floor by emptying it). */
1972
2031
  legsOwed: z.ZodDefault<z.ZodObject<{
1973
2032
  globs: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
2033
+ /** The legs arm's OWN enforcement, decoupled from `tier`
2034
+ * (mmnto-ai/totem#2771). `'block'`: `totem legs gate` exits with its
2035
+ * derived state — 3 owed-and-unanswered, 2 could-not-derive — at EVERY
2036
+ * tier, so the managed pre-push hook blocks a legs-owed push on a
2037
+ * standard-tier install too, while the spec-evidence and shield gates
2038
+ * stay at the repo's tier. `'advisory'`: every gate state exits 0 at
2039
+ * every tier, the strict one included. ABSENT ⇒ today's tier-derived
2040
+ * behaviour (the strict tier and agent seats block, the others print
2041
+ * the same lines and pass), so no consumer changes on upgrade.
2042
+ *
2043
+ * Read at RUN time like `globs` — the gate loads it itself, so setting
2044
+ * it needs no `totem hook install --force`. It maps onto the verb's
2045
+ * `--advisory` option inside the gate: the lines are composed once and
2046
+ * only the exit code follows the knob. */
2047
+ enforce: z.ZodOptional<z.ZodEnum<["block", "advisory"]>>;
1974
2048
  }, "strip", z.ZodTypeAny, {
1975
2049
  globs: string[];
2050
+ enforce?: "advisory" | "block" | undefined;
1976
2051
  }, {
1977
2052
  globs?: string[] | undefined;
2053
+ enforce?: "advisory" | "block" | undefined;
1978
2054
  }>>;
1979
2055
  }, "strip", z.ZodTypeAny, {
1980
2056
  tier: "strict" | "standard";
1981
2057
  legsOwed: {
1982
2058
  globs: string[];
2059
+ enforce?: "advisory" | "block" | undefined;
1983
2060
  };
1984
2061
  }, {
1985
2062
  tier?: "strict" | "standard" | undefined;
1986
2063
  legsOwed?: {
1987
2064
  globs?: string[] | undefined;
2065
+ enforce?: "advisory" | "block" | undefined;
1988
2066
  } | undefined;
1989
2067
  }>>;
1990
2068
  /** Review gate configuration. `sourceExtensions` drives the content-hash
@@ -2174,7 +2252,6 @@ export declare const TotemConfigSchema: z.ZodObject<{
2174
2252
  indexIgnorePatterns: string[];
2175
2253
  shieldIgnorePatterns: string[];
2176
2254
  contextWarningThreshold: number;
2177
- searchRelevanceFloor: number;
2178
2255
  shieldAutoLearn: boolean;
2179
2256
  review: {
2180
2257
  sourceExtensions: string[];
@@ -2266,6 +2343,7 @@ export declare const TotemConfigSchema: z.ZodObject<{
2266
2343
  } | undefined;
2267
2344
  numCtx?: number | undefined;
2268
2345
  } | undefined;
2346
+ searchRelevanceFloor?: number | undefined;
2269
2347
  docs?: {
2270
2348
  path: string;
2271
2349
  trigger: "post-release" | "on-change";
@@ -2296,6 +2374,7 @@ export declare const TotemConfigSchema: z.ZodObject<{
2296
2374
  tier: "strict" | "standard";
2297
2375
  legsOwed: {
2298
2376
  globs: string[];
2377
+ enforce?: "advisory" | "block" | undefined;
2299
2378
  };
2300
2379
  } | undefined;
2301
2380
  orient?: {
@@ -2371,6 +2450,7 @@ export declare const TotemConfigSchema: z.ZodObject<{
2371
2450
  tier?: "strict" | "standard" | undefined;
2372
2451
  legsOwed?: {
2373
2452
  globs?: string[] | undefined;
2453
+ enforce?: "advisory" | "block" | undefined;
2374
2454
  } | undefined;
2375
2455
  } | undefined;
2376
2456
  review?: z.objectInputType<{
@@ -1 +1 @@
1
- {"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../src/config-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../src/config-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB;;GAEG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,uGAU3B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,mBAAmB,aAAoB,CAAC;AAErD,eAAO,MAAM,iBAAiB,sDAAoD,CAAC;AAEnF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI7B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;EAO/B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;EAK/B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;EAO/B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIlC,CAAC;AAEH,eAAO,MAAM,uBAAuB,UAUnC,CAAC;AAwDF,eAAO,MAAM,uBAAuB;IAlDlC,kDAAkD;;IAElD,4FAA4F;;IAE5F,+EAA+E;;IAE/E,gFAAgF;;IAEhF;;;;;;;;;OASG;;IAEH;;;;;;;;;;;OAWG;;IAEH;;;;;;;;;;OAUG;;;;;;;;;IAUH,yDAAyD;;;;;;;;;;;;;;;;;;;;;;;;;;EAGzD,CAAC;AAEH,eAAO,MAAM,wBAAwB;IAzDnC,kDAAkD;;IAElD,4FAA4F;;IAE5F,+EAA+E;;IAE/E,gFAAgF;;IAEhF;;;;;;;;;OASG;;IAEH;;;;;;;;;;;OAWG;;IAEH;;;;;;;;;;OAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBH,CAAC;AAEH,eAAO,MAAM,2BAA2B;IA9DtC,kDAAkD;;IAElD,4FAA4F;;IAE5F,+EAA+E;;IAE/E,gFAAgF;;IAEhF;;;;;;;;;OASG;;IAEH;;;;;;;;;;;OAWG;;IAEH;;;;;;;;;;OAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBH,CAAC;AAEH,eAAO,MAAM,wBAAwB;IAnEnC,kDAAkD;;IAElD,4FAA4F;;IAE5F,+EAA+E;;IAE/E,gFAAgF;;IAEhF;;;;;;;;;OASG;;IAEH;;;;;;;;;;;OAWG;;IAEH;;;;;;;;;;OAUG;;;;;;;;;IA2BH,gFAAgF;;;;;;;;;;;;;;;;;;;;;;;;;;EAGhF,CAAC;AAEH,eAAO,MAAM,wBAAwB;IA1EnC,kDAAkD;;IAElD,4FAA4F;;IAE5F,+EAA+E;;IAE/E,gFAAgF;;IAEhF;;;;;;;;;OASG;;IAEH;;;;;;;;;;;OAWG;;IAEH;;;;;;;;;;OAUG;;;;;;;;;IAkCH,qCAAqC;;IAErC,kFAAkF;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGlF,CAAC;AAEH,eAAO,MAAM,kBAAkB;IAnF7B,kDAAkD;;IAElD,4FAA4F;;IAE5F,+EAA+E;;IAE/E,gFAAgF;;IAEhF;;;;;;;;;OASG;;IAEH;;;;;;;;;;;OAWG;;IAEH;;;;;;;;;;OAUG;;;;;;;;;IAUH,yDAAyD;;;;;;;;;;;;;;;;;;;;;;;;;;;IApDzD,kDAAkD;;IAElD,4FAA4F;;IAE5F,+EAA+E;;IAE/E,gFAAgF;;IAEhF;;;;;;;;;OASG;;IAEH;;;;;;;;;;;OAWG;;IAEH;;;;;;;;;;OAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA1CH,kDAAkD;;IAElD,4FAA4F;;IAE5F,+EAA+E;;IAE/E,gFAAgF;;IAEhF;;;;;;;;;OASG;;IAEH;;;;;;;;;;;OAWG;;IAEH;;;;;;;;;;OAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA1CH,kDAAkD;;IAElD,4FAA4F;;IAE5F,+EAA+E;;IAE/E,gFAAgF;;IAEhF;;;;;;;;;OASG;;IAEH;;;;;;;;;;;OAWG;;IAEH;;;;;;;;;;OAUG;;;;;;;;;IA2BH,gFAAgF;;;;;;;;;;;;;;;;;;;;;;;;;;;IArEhF,kDAAkD;;IAElD,4FAA4F;;IAE5F,+EAA+E;;IAE/E,gFAAgF;;IAEhF;;;;;;;;;OASG;;IAEH;;;;;;;;;;;OAWG;;IAEH;;;;;;;;;;OAUG;;;;;;;;;IAkCH,qCAAqC;;IAErC,kFAAkF;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAWlF,CAAC;AAmBH,eAAO,MAAM,uBAAuB;IAClC,4CAA4C;;IAE5C,uEAAuE;;IAEvE,kFAAkF;;;;;;;;;;EAIlF,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;IAE3B;;;;;;;;OAQG;;;;;;GAGO,CAAC;AAEf,eAAO,MAAM,eAAe;IAC1B,oCAAoC;;IAEpC,yEAAyE;;IAEzE,6DAA6D;;IAE7D,uJAAuJ;;;;;;;;;;;;EAEvJ,CAAC;AAEH,eAAO,MAAM,gBAAgB,yCAAuC,CAAC;AACrE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB;IAC7B,4EAA4E;;IAE5E;;;;;;;;;OASG;;IAEH;;;;;;;;;;;;OAYG;;;;;;;;;;EAEH,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,eAAe;IAC1B;;kFAE8E;;;;;;EAE9E,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,yCAA0C,CAAC;AAExF;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,yEAMrC,CAAC;AAaJ,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;gCAgCnC,CAAC;AAEL,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;IAO3B;;;;;;;;;;;;;;;;;;;;OAoBG;;;;;;;;;;;;;;;;;;;;IApBH;;;;;;;;;;;;;;;;;;;;OAoBG;;;;;;;;;;;;;;;;;;;;IApBH;;;;;;;;;;;;;;;;;;;;OAoBG;;iCAIO,CAAC;AAEf;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAW9D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAQjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED,eAAO,MAAM,iBAAiB;IAC5B,mEAAmE;;;;;;;;;;;;;;IAGnE,gEAAgE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAGhE,iEAAiE;;QApajE,kDAAkD;;QAElD,4FAA4F;;QAE5F,+EAA+E;;QAE/E,gFAAgF;;QAEhF;;;;;;;;;WASG;;QAEH;;;;;;;;;;;WAWG;;QAEH;;;;;;;;;;WAUG;;;;;;;;;QAUH,yDAAyD;;;;;;;;;;;;;;;;;;;;;;;;;;;QApDzD,kDAAkD;;QAElD,4FAA4F;;QAE5F,+EAA+E;;QAE/E,gFAAgF;;QAEhF;;;;;;;;;WASG;;QAEH;;;;;;;;;;;WAWG;;QAEH;;;;;;;;;;WAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA1CH,kDAAkD;;QAElD,4FAA4F;;QAE5F,+EAA+E;;QAE/E,gFAAgF;;QAEhF;;;;;;;;;WASG;;QAEH;;;;;;;;;;;WAWG;;QAEH;;;;;;;;;;WAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA1CH,kDAAkD;;QAElD,4FAA4F;;QAE5F,+EAA+E;;QAE/E,gFAAgF;;QAEhF;;;;;;;;;WASG;;QAEH;;;;;;;;;;;WAWG;;QAEH;;;;;;;;;;WAUG;;;;;;;;;QA2BH,gFAAgF;;;;;;;;;;;;;;;;;;;;;;;;;;;QArEhF,kDAAkD;;QAElD,4FAA4F;;QAE5F,+EAA+E;;QAE/E,gFAAgF;;QAEhF;;;;;;;;;WASG;;QAEH;;;;;;;;;;;WAWG;;QAEH;;;;;;;;;;WAUG;;;;;;;;;QAkCH,qCAAqC;;QAErC,kFAAkF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyVlF;;;;;;;;;;;;;;;;;;OAkBG;;IAeH,sDAAsD;;IAMtD;;;;;;;;;OASG;;IAGH;;;;OAIG;;IAGH,oHAAoH;;IAGpH,6MAA6M;;IAG7M;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0CG;;IAGH,0DAA0D;;QAxY1D,oCAAoC;;QAEpC,yEAAyE;;QAEzE,6DAA6D;;QAE7D,uJAAuJ;;;;;;;;;;;;;IAqYvJ,8GAA8G;;IAG9G,mGAAmG;;IAGnG,0IAA0I;;IAG1I,kJAAkJ;;IAGlJ;;;;;;;;;;;OAWG;;IAGH;;;;;;;;;;;OAWG;;IAGH;;;;;;;;;;;;;OAaG;;IAIH,kKAAkK;;IAGlK,sFAAsF;;;;;;;;;;;IAGtF,wFAAwF;;IAGxF,qEAAqE;;QA5erE,4CAA4C;;QAE5C,uEAAuE;;QAEvE,kFAAkF;;;;;;;;;;;IA2elF,4EAA4E;;QA9d1E;;;;;;;;WAQG;;;;;;;IAydL;wFACoF;;;;;;;;;;;IAWpF,oDAAoD;;QAGhD;;;;;;;;;;oFAU4E;;QAG5E;;;;;;;;;;;;;;;uDAe+C;;;YAW3C;;;;;;;;;;;;;uDAa2C;;;;;;;;;;;;;;;;;;;;;;IAOnD;;;iFAG6E;;;;;;;;;;;;;;;;;;;QA5X3E;;;;;;;;;;;;;;;;;;;;WAoBG;;;;;;;;;;;;;;;;;;;;QApBH;;;;;;;;;;;;;;;;;;;;WAoBG;;;;;;;;;;;;;;;;;;;;QApBH;;;;;;;;;;;;;;;;;;;;WAoBG;;;IA2WL,gGAAgG;;QAxgBhG,4EAA4E;;QAE5E;;;;;;;;;WASG;;QAEH;;;;;;;;;;;;WAYG;;;;;;;;;;;IAkfH;wFACoF;;QApdpF;;sFAE8E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA+E5E;;;;;;;;;;;;;;;;;;;;WAoBG;;;;;;;;;;;EAiXL,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AACtF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC9E,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;;GAGG;AACH,eAAO,MAAM,YAAY,uEAAwE,CAAC;AAElG;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CAI7D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,iBAAiB,CAQvE"}
@@ -400,13 +400,6 @@ export const ReviewConfigSchema = z
400
400
  })
401
401
  .passthrough()
402
402
  .default({});
403
- /**
404
- * Default `searchRelevanceFloor` (mmnto-ai/totem#2463). Exported as the single
405
- * source shared by the schema default below and the MCP guard that re-applies
406
- * it for unvalidated configs — retuning one can never silently strand the
407
- * other on a stale floor.
408
- */
409
- export const DEFAULT_SEARCH_RELEVANCE_FLOOR = 0.25;
410
403
  /**
411
404
  * Whether `value` carries a character that cannot be rendered SAFELY into the
412
405
  * managed git hooks (mmnto-ai/totem#2692 C4): a single quote (breaks the `sh`
@@ -435,6 +428,48 @@ export function hasUnrenderableHookChar(value) {
435
428
  }
436
429
  return false;
437
430
  }
431
+ /**
432
+ * Whether `value` carries a character that cannot be rendered safely into the
433
+ * managed pre-commit hook as a required SPEC HEADING (mmnto-ai/totem#2737).
434
+ * Forbids the same five shell/JS-active characters as
435
+ * {@link hasUnrenderableHookChar} — a single quote, a double quote, a
436
+ * backslash, a dollar sign, a backtick — plus every line-breaking or control
437
+ * character the reader's own `safe()` collapses: C0 (below 0x20), the DEL/C1
438
+ * band (0x7f–0x9f), and U+2028/U+2029 (LINE and PARAGRAPH SEPARATOR). Anything
439
+ * outside that set could otherwise forge a second `[Totem]` line in the hook's
440
+ * output. U+2028 and U+2029 are printable-plane code points that terminals and
441
+ * pagers still break a line on, so banning only the two classic bands would
442
+ * leave the forge channel open on exactly the characters this predicate exists
443
+ * to permit the rest of.
444
+ *
445
+ * It PERMITS printable non-ASCII, and that is the whole difference. The path
446
+ * predicate bans everything above 0x7e because git C-quotes path bytes above
447
+ * 0x7e in the `diff --name-only` output the hooks' `grep -q` filters read, so a
448
+ * non-ASCII directory name could never match. A required heading meets no such
449
+ * filter: it is rendered by `JSON.stringify` into the reader's JS source and
450
+ * compared in memory against the draft's own lines. Holding it to the path
451
+ * rule would ban `### Verification (MANDATORY — do not skip)` — a heading the
452
+ * built-in prompt has always asked for — over a hazard it cannot encounter.
453
+ *
454
+ * The round-trip is not argued, it is EXECUTED: the frozen falsifier in
455
+ * `install-hooks.test.ts` runs the real hook over the four schema-constrained
456
+ * R3 drafts, which carry that em-dash heading byte-identical, and requires them
457
+ * to match on the EXACT pass and name no tolerance. That test fails on any CI
458
+ * OS where the em dash does not survive `JSON.stringify` → the single-quoted
459
+ * `node -e` word → `sh` → node intact.
460
+ */
461
+ export function hasUnrenderableHeadingChar(value) {
462
+ for (const ch of value) {
463
+ if (ch === "'" || ch === '"' || ch === '\\' || ch === '$' || ch === '`')
464
+ return true;
465
+ const code = ch.codePointAt(0) ?? 0;
466
+ if (code < 0x20 || (code >= 0x7f && code <= 0x9f))
467
+ return true;
468
+ if (code === 0x2028 || code === 0x2029)
469
+ return true;
470
+ }
471
+ return false;
472
+ }
438
473
  /**
439
474
  * Normalise a configured `totemDir` to the ONE spelling every consumer joins and
440
475
  * every managed hook renders (mmnto-ai/totem#2692 amendment A7): backslashes →
@@ -510,14 +545,49 @@ export const TotemConfigSchema = z.object({
510
545
  /** Character count above which `search_knowledge` appends its `<size-disclosure>` measurement envelope — a size disclosure, not a risk claim (#2600) (~4 chars ≈ 1 token). Default: 40,000 (~10k tokens). */
511
546
  contextWarningThreshold: z.number().int().positive().default(40_000),
512
547
  /**
513
- * Minimum per-hit relevance (vector-leg similarity, 0..1) below which the
514
- * `search_knowledge` tool reports `status="no_useful_hits"` rather than
515
- * returning noise-floor matches (mmnto-ai/totem#2463). Floors on the true
516
- * relevance signal, NOT the RRF rank artifact in the displayed `score`. The
517
- * per-call `min_relevance` MCP input overrides this; the retrieval-envelope
518
- * always discloses the effective floor. Default 0.25 (pilot-calibrated).
548
+ * Optional relevance floor (0..1). A REFUSAL THRESHOLD compared against the
549
+ * BEST vector-leg relevance of ONE retrieval — never a per-item filter.
550
+ * Nothing in the product withholds an individual sub-floor hit while keeping
551
+ * its siblings. Two consumers:
552
+ *
553
+ * 1. the MCP `search_knowledge` tool (mmnto-ai/totem#2463): when a
554
+ * response's best relevance is below the floor it answers
555
+ * `status="no_useful_hits"` and DISCLOSES the below-floor candidates
556
+ * (path + relevance, no content) instead of returning them — and a
557
+ * retrieval whose EVERY hit is FAULTED (a relevance that is not a
558
+ * finite number in [0, 1]) answers `no_useful_hits` too, floor or no
559
+ * floor (mmnto-ai/totem#2770);
560
+ * 2. `totem spec` (mmnto-ai/totem#2700): an unanchored free-text run is
561
+ * REFUSED when the best relevance is below the floor.
562
+ *
563
+ * Floors the true relevance signal, NOT the RRF rank artifact in the
564
+ * displayed `score`. Hits with no vector leg (keyword-only/FTS) carry no
565
+ * comparable relevance: they are floor-EXEMPT, and in `totem spec` a single
566
+ * exempt hit from a grounding partition (specs, sessions, code) saves the
567
+ * run — a keyword-only lesson does not; lessons never ground a run (ruled
568
+ * final, mmnto-ai/totem#2727).
569
+ *
570
+ * NO DEFAULT since mmnto-ai/totem#2727. Relevance is `1 / (1 + squared L2)`
571
+ * on unit-norm vectors, so it ranges over [0.2, 1] — 0.25 is INSIDE that
572
+ * range, but on the gemini-embedding-2-preview 768-d profile the LOWEST
573
+ * best-relevance over 55 recorded `totem spec` queries was 0.559 (0.5687 over
574
+ * the runs the spec refusal was even eligible to judge), so the former
575
+ * default fired on none of those 55, and any value below a repo's own
576
+ * measured floor is inert. An embedder returning UNNORMALIZED vectors
577
+ * (custom, some Ollama models) is not bounded that way and can produce
578
+ * relevances under 0.25, so on such a profile the old default could fire.
579
+ * A repo that wants weak free-text runs refused sets a value just above the
580
+ * best-relevance of the weakest run it still wants kept; the recipe is in
581
+ * `docs/wiki/config-reference.md` and the worked measurement is the R4 record
582
+ * at `.totem/fixtures/floor-arm-2026-09-03/`.
583
+ *
584
+ * UNSET = NO FLOOR: the below-floor arms of `no_useful_hits` and the spec
585
+ * refusal can never fire (each reader's zero-hit / all-faulted arms still
586
+ * can — they need no floor). The per-call
587
+ * `min_relevance` MCP input still applies, and still overrides this value;
588
+ * the retrieval-envelope always discloses the effective floor, or `none`.
519
589
  */
520
- searchRelevanceFloor: z.number().min(0).max(1).default(DEFAULT_SEARCH_RELEVANCE_FLOOR),
590
+ searchRelevanceFloor: z.number().min(0).max(1).optional(),
521
591
  /** Optional: documents to auto-update via `totem docs` */
522
592
  docs: z.array(DocTargetSchema).optional(),
523
593
  /** Optional: export targets for cross-model lesson enforcement (e.g., { gemini: '.gemini/styleguide.md' }) */
@@ -628,6 +698,21 @@ export const TotemConfigSchema = z.object({
628
698
  .array(z.string().min(1))
629
699
  .min(1, 'hooks.legsOwed.globs must contain at least one glob — omit the key to take the default floor')
630
700
  .default([...DEFAULT_LEGS_OWED_GLOBS]),
701
+ /** The legs arm's OWN enforcement, decoupled from `tier`
702
+ * (mmnto-ai/totem#2771). `'block'`: `totem legs gate` exits with its
703
+ * derived state — 3 owed-and-unanswered, 2 could-not-derive — at EVERY
704
+ * tier, so the managed pre-push hook blocks a legs-owed push on a
705
+ * standard-tier install too, while the spec-evidence and shield gates
706
+ * stay at the repo's tier. `'advisory'`: every gate state exits 0 at
707
+ * every tier, the strict one included. ABSENT ⇒ today's tier-derived
708
+ * behaviour (the strict tier and agent seats block, the others print
709
+ * the same lines and pass), so no consumer changes on upgrade.
710
+ *
711
+ * Read at RUN time like `globs` — the gate loads it itself, so setting
712
+ * it needs no `totem hook install --force`. It maps onto the verb's
713
+ * `--advisory` option inside the gate: the lines are composed once and
714
+ * only the exit code follows the knob. */
715
+ enforce: z.enum(['block', 'advisory']).optional(),
631
716
  })
632
717
  .default({}),
633
718
  })
@@ -1 +1 @@
1
- {"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../src/config-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../src/config-schema.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, it } from 'vitest';
2
- import { DocTargetSchema, DoctorConfigSchema, GarbageCollectionSchema, getConfigTier, hasUnrenderableHookChar, normalizeTotemDir, OrchestratorSchema, requireEmbedding, TotemConfigSchema, } from './config-schema.js';
2
+ import { DocTargetSchema, DoctorConfigSchema, GarbageCollectionSchema, getConfigTier, hasUnrenderableHeadingChar, hasUnrenderableHookChar, normalizeTotemDir, OrchestratorSchema, requireEmbedding, TotemConfigSchema, } from './config-schema.js';
3
3
  import { DEFAULT_LEGS_OWED_GLOBS } from './routing/legs-owed.js';
4
4
  const BASE_TARGETS = [
5
5
  { glob: '**/*.md', type: 'spec', strategy: 'markdown-heading' },
@@ -1056,6 +1056,56 @@ describe('totemDir — normalised, then refused where the managed hooks could no
1056
1056
  for (const ch of accepted)
1057
1057
  expect(hasUnrenderableHookChar(`a${ch}b`), JSON.stringify(ch)).toBe(false);
1058
1058
  });
1059
+ // The sibling predicate for required SPEC HEADINGS (mmnto-ai/totem#2737).
1060
+ // Same five shell/JS-active characters and the same line-breaking bands, but
1061
+ // printable non-ASCII is PERMITTED: a heading is rendered by JSON.stringify
1062
+ // into the reader's JS source and compared in memory, where the path
1063
+ // predicate's ban on everything above 0x7e exists for git's C-quoting of
1064
+ // `diff --name-only` output that a heading never meets.
1065
+ it('hasUnrenderableHeadingChar — the character set, pinned as a set', () => {
1066
+ const refused = [
1067
+ "'",
1068
+ '"',
1069
+ String.fromCharCode(0x5c), // backslash
1070
+ '$',
1071
+ '`',
1072
+ String.fromCharCode(0x0a), // newline
1073
+ String.fromCharCode(0x09), // tab
1074
+ String.fromCharCode(0x00), // NUL
1075
+ String.fromCharCode(0x1f), // the top of C0
1076
+ String.fromCharCode(0x7f), // DEL
1077
+ String.fromCharCode(0x85), // NEL — a line break to some terminals
1078
+ String.fromCharCode(0x9f), // the top of C1
1079
+ String.fromCharCode(0x2028), // LINE SEPARATOR
1080
+ String.fromCharCode(0x2029), // PARAGRAPH SEPARATOR
1081
+ ];
1082
+ const accepted = [
1083
+ '.',
1084
+ '-',
1085
+ '&',
1086
+ '(',
1087
+ ')',
1088
+ ':',
1089
+ ' ',
1090
+ 'é',
1091
+ 'ü',
1092
+ String.fromCharCode(0x2014), // the em dash the Verification heading carries
1093
+ ];
1094
+ for (const ch of refused)
1095
+ expect(hasUnrenderableHeadingChar(`a${ch}b`), JSON.stringify(ch)).toBe(true);
1096
+ for (const ch of accepted)
1097
+ expect(hasUnrenderableHeadingChar(`a${ch}b`), JSON.stringify(ch)).toBe(false);
1098
+ // The whole heading, not just its bytes one at a time. Core cannot import
1099
+ // SPEC_SYSTEM_PROMPT (it lives in @mmnto/cli, which depends on this
1100
+ // package, not the other way round), so the em dash is BUILT rather than
1101
+ // typed — the same guarantee against a look-alike byte. That this string is
1102
+ // verbatim the prompt's line is locked on the CLI side, where
1103
+ // SPEC_REQUIRED_SECTIONS is asserted to be a subset of SPEC_SYSTEM_PROMPT
1104
+ // and every entry is run through this predicate.
1105
+ const verification = `### Verification (MANDATORY ${String.fromCharCode(0x2014)} do not skip)`;
1106
+ expect(hasUnrenderableHeadingChar(verification), verification).toBe(false);
1107
+ expect(hasUnrenderableHookChar(verification), 'the PATH predicate still refuses it').toBe(true);
1108
+ });
1059
1109
  });
1060
1110
  describe('hooks.legsOwed.globs — the judgment-dense path floor (mmnto-ai/totem#2698)', () => {
1061
1111
  it('resolves to the default floor when `hooks` is absent entirely', () => {
@@ -1118,6 +1168,39 @@ describe('hooks.legsOwed.globs — the judgment-dense path floor (mmnto-ai/totem
1118
1168
  ]);
1119
1169
  }
1120
1170
  });
1171
+ it('hooks.legsOwed.enforce accepts block | advisory, is ABSENT by default, and rejects any other spelling (mmnto-ai/totem#2771)', () => {
1172
+ for (const enforce of ['block', 'advisory']) {
1173
+ const result = TotemConfigSchema.safeParse({
1174
+ targets: BASE_TARGETS,
1175
+ hooks: { legsOwed: { enforce } },
1176
+ });
1177
+ expect(result.success).toBe(true);
1178
+ if (result.success) {
1179
+ expect(result.data.hooks?.legsOwed.enforce).toBe(enforce);
1180
+ // Declaring the knob alone leaves the globs at the default floor — the
1181
+ // two keys are independent.
1182
+ expect(result.data.hooks?.legsOwed.globs).toEqual([...DEFAULT_LEGS_OWED_GLOBS]);
1183
+ }
1184
+ }
1185
+ // Absent stays absent: no default is minted, so an upgraded consumer keeps
1186
+ // its tier-derived behaviour.
1187
+ const absent = TotemConfigSchema.safeParse({
1188
+ targets: BASE_TARGETS,
1189
+ hooks: { tier: 'strict' },
1190
+ });
1191
+ expect(absent.success).toBe(true);
1192
+ if (absent.success)
1193
+ expect(absent.data.hooks?.legsOwed.enforce).toBeUndefined();
1194
+ // A third spelling is a parse error, never a silent synonym for either.
1195
+ expect(TotemConfigSchema.safeParse({
1196
+ targets: BASE_TARGETS,
1197
+ hooks: { legsOwed: { enforce: 'sometimes' } },
1198
+ }).success).toBe(false);
1199
+ expect(TotemConfigSchema.safeParse({
1200
+ targets: BASE_TARGETS,
1201
+ hooks: { legsOwed: { enforce: true } },
1202
+ }).success).toBe(false);
1203
+ });
1121
1204
  it('refuses an empty-string glob and a non-array', () => {
1122
1205
  expect(TotemConfigSchema.safeParse({
1123
1206
  targets: BASE_TARGETS,
@@ -1129,4 +1212,30 @@ describe('hooks.legsOwed.globs — the judgment-dense path floor (mmnto-ai/totem
1129
1212
  }).success).toBe(false);
1130
1213
  });
1131
1214
  });
1215
+ describe('searchRelevanceFloor — optional, NO default (mmnto-ai/totem#2727)', () => {
1216
+ // The whole point of the slice: an unconfigured repo must come out of the
1217
+ // parse with NO floor, so the below-floor arms are unreachable rather than
1218
+ // reachable-but-inert at a number no index ever crosses.
1219
+ // `{ targets }` is the minimal PARSEABLE config — `targets` is required — so
1220
+ // this is a config that simply does not mention the key.
1221
+ it('a config that does not set the key leaves searchRelevanceFloor undefined — no default', () => {
1222
+ const parsed = TotemConfigSchema.parse({ targets: BASE_TARGETS });
1223
+ expect(parsed.searchRelevanceFloor).toBeUndefined();
1224
+ expect('searchRelevanceFloor' in parsed).toBe(false);
1225
+ });
1226
+ it('a configured value round-trips unchanged', () => {
1227
+ expect(TotemConfigSchema.parse({ targets: BASE_TARGETS, searchRelevanceFloor: 0.57 })
1228
+ .searchRelevanceFloor).toBe(0.57);
1229
+ // The bounds still hold — optional loosened the default, not the range.
1230
+ expect(TotemConfigSchema.parse({ targets: BASE_TARGETS, searchRelevanceFloor: 0 })
1231
+ .searchRelevanceFloor).toBe(0);
1232
+ expect(TotemConfigSchema.parse({ targets: BASE_TARGETS, searchRelevanceFloor: 1 })
1233
+ .searchRelevanceFloor).toBe(1);
1234
+ });
1235
+ it('rejects a value outside [0, 1] and a non-number', () => {
1236
+ expect(TotemConfigSchema.safeParse({ targets: BASE_TARGETS, searchRelevanceFloor: -0.1 }).success).toBe(false);
1237
+ expect(TotemConfigSchema.safeParse({ targets: BASE_TARGETS, searchRelevanceFloor: 1.1 }).success).toBe(false);
1238
+ expect(TotemConfigSchema.safeParse({ targets: BASE_TARGETS, searchRelevanceFloor: '0.5' }).success).toBe(false);
1239
+ });
1240
+ });
1132
1241
  //# sourceMappingURL=config-schema.test.js.map