| index 4a70019..aff242f 100644 |
| --- a/docs/superpowers/specs/2026-09-03-memoria-design.md |
| +++ b/docs/superpowers/specs/2026-09-03-memoria-design.md |
| @@ -1013,9 +1013,17 @@ red* — and gate 23 carries the measurement it cannot do. |
| storing, so the table below is unchanged — 90k chunks × 4096 f32 is |
| **~1.4 GB decoded to store 46 MB**, a ratio of about 32×, not the 8× you |
| get by mis-reading the kept width as the f32@512 intermediate (184 MB is |
| -what truncation yields; int8 quantisation is what is stored). On the wire |
| -it is worse than decoded: **~2 GB base64, ~4 GB as JSON floats**, and |
| -whether TensorX honours `encoding_format: "base64"` is unverified (§13). |
| +what truncation yields; int8 quantisation is what is stored). |
| + |
| +**On the wire it is ~4 GB, and there is no opt-out.** Tested 2026-09-05: |
| +`encoding_format: "base64"` is **accepted and silently ignored** — the |
| +response comes back as JSON floats, byte-identical to the request that |
| +omits the parameter. Not an error, just dropped. So the ~2 GB base64 figure |
| +an earlier draft hedged with is unavailable, and the honest number is the |
| +JSON one. Note the behaviour as well as the number: **a provider that |
| +accepts a parameter and discards it will do so again**, which is an |
| +argument for asserting on what comes back rather than on what was asked |
| +for. |
| |
| This is ingest-time, not wake-time, so §7.3's ceiling is untouched. It is |
| not free either: neither the first embed's wall-clock nor the batch size |
| @@ -1196,22 +1204,37 @@ alongside it. The passages have already passed the gate. |
| Two configuration names — `model.cheap`, `model.frontier` — with the |
| route printed on the answer. |
| |
| -**The pinning rule bit the first two ids this section chose.** They were |
| -`z-ai/glm-5.3-flash` and `moonshotai/kimi-k3`; neither is datestamped, and |
| -Kimi's own history (`k2-0711`, `k2-0905`) says a bare family name is an |
| -alias over dated checkpoints. By the rule below they are floating aliases, |
| -so **prefer a datestamped id wherever the catalogue offers one** — |
| -`deepseek/deepseek-v4-pro-0813` for the frontier tier — and where it does |
| -not, the id is provisional and §13 carries it. Whether TensorX holds a |
| -stable id to stable weights is **unread**, not established. |
| - |
| -**Where no datestamped id exists, a canary substitutes for one.** At first |
| -configuration, embed a fixed set of public, non-content sentences — they |
| -are not team content, so §3.2 is untouched — seal the vectors, re-embed on |
| -wake, and **state an anomaly when cosine drift exceeds a stated ε**. That |
| -detects a silent weight swap under a stable id, which is the exact failure |
| -the rule names, and it is the same instrument §13's single-model item |
| -needs. Gate 24. |
| +**The pinning rule bit the first two ids this section chose**, and the |
| +catalogue since settled how to satisfy it. The first pair were |
| +`z-ai/glm-5.3-flash` and `moonshotai/kimi-k3`, neither datestamped. **The |
| +live catalogue proves the concern rather than merely suggesting it: it |
| +lists `deepseek/deepseek-v4-pro` and `deepseek/deepseek-v4-pro-0813` side |
| +by side** — the same model as a bare alias and as a dated snapshot, which |
| +is exactly the shape the rule is about, in this vendor's own inventory |
| +(`GET /v1/models`, 2026-09-05). |
| + |
| +**Only two families offer a dated id at all.** DeepSeek |
| +(`v4-pro-0813`, `v4-flash-0731`, `r1-0528`) and one Qwen |
| +(`qwen3-235b-a22b-2507`). Every Kimi, GLM and MiniMax id is a bare name — |
| +`kimi-k3` exists, but no `kimi-k3-<date>` does. So pinning Kimi would make |
| +gate 24's canary load-bearing, and pinning DeepSeek does not. |
| + |
| +**Both tiers are therefore DeepSeek:** `model.cheap` is |
| +`deepseek/deepseek-v4-flash-0731` and `model.frontier` is |
| +`deepseek/deepseek-v4-pro-0813`. This is the rule below applied, not a |
| +quality judgement — Paul's ruling that the work is "categorisation and |
| +memory, not complex reasoning" (§13) is what makes a dated id worth more |
| +here than a preferred family. **The cost is concentration:** both tiers now |
| +come from one lab as well as one host, so a DeepSeek withdrawal moves both |
| +at once. Recorded rather than mitigated; §13. |
| + |
| +**The canary stays, demoted.** At first configuration, embed a fixed set of |
| +public, non-content sentences — not team content, so §3.2 is untouched — |
| +seal the vectors, re-embed on wake, and **state an anomaly when cosine |
| +drift exceeds a stated ε**. With both chat tiers dated it is no longer the |
| +only thing standing between us and a silent weight swap; it remains the |
| +only such instrument for **the embedding model**, which has no dated form |
| +and cannot be swapped without re-embedding the corpus. Gate 24. |
| |
| **`openrouter/auto` is disqualified**, and so is anything shaped like it. |
| It selects by trailing-7-day community spend, changes weekly, and cannot be |
| @@ -1418,12 +1441,14 @@ tokens against a 90k-chunk corpus; draft 3 corrected to 36M by keeping the |
| from §7.2's measurement, and if that measurement moves so does this. |
| |
| **Query:** retrieval is free. The generative layer sends ~8 passages plus |
| -instructions — ~5k tokens in, ~500 out. At §8.3's list prices |
| -`z-ai/glm-5.3-flash` ($0.20/$0.50 per M) is **~$0.0013 a query** and |
| -`moonshotai/kimi-k3` ($3.00/$15.00) is **~$0.023**. Five people × 20 |
| -queries/day × 22 days = 2,200 queries: **~$3/month if most route cheap, |
| -~$50 if most route frontier** — or ~$26 with |
| -`deepseek/deepseek-v4-pro-0813` as the frontier tier. Read that carefully: |
| +instructions — ~5k tokens in, ~500 out. Against the ids §8.2 pins: |
| +`deepseek/deepseek-v4-pro-0813` at $2.00/$4.00 per M is **~$0.012 a |
| +query**, so 5 people × 20 queries/day × 22 days = 2,200 queries is |
| +**~$26/month with everything on the frontier tier**. **`deepseek/deepseek-v4-flash-0731` |
| +is unpriced here** — it was pinned after the price list was read, and the |
| +figure is owed (§13). For scale only, and not as an estimate: the |
| +comparably-named `z-ai/glm-5.3-flash` is $0.20/$0.50, which would put the |
| +all-cheap month near $3. Read the rest carefully: |
| both figures sit *inside* the $0.001–0.003 and $0.02–0.10 per-query ranges |
| this section already carried, near the bottom. **The ceilings fell; the |
| estimates did not move.** Nothing here is a reason to route more queries to |
| @@ -1680,8 +1705,9 @@ recorded in Docs. **This is the slice that turns on whole-corpus egress**, |
| so it does not land before its disclosure copy does. |
| |
| Four things enter with it rather than after, because each is cheap now and |
| -a silent wrong answer later: **the live-call verification** §13 asks for, |
| -against a real key, before anything is signed; **gate 22**, which is |
| +a silent wrong answer later: **the remaining live-key checks** §13 lists — |
| +the first round ran on 2026-09-05 and left the 403 and the batch size |
| +open; **gate 22**, which is |
| deterministic and costs nothing; **a labelled query set**, without which |
| gate 23 cannot be written at all; and **gate 24's canary**, which is the |
| only thing standing between a stable model id and a silent weight swap. |
| @@ -1796,21 +1822,33 @@ rows. |
| organisation sees the corpus: **whether a subprocessor sits under TensorX |
| is a DPA question and the DPA is unread**, as are the retention terms |
| §8.3 calls "advertised". Both before slice 2. |
| -- **One live call, before anything is signed.** TensorX's *LlamaIndex* page |
| - configures embeddings as `text-embedding-3-small` against |
| - `api.tensorx.ai` — a closed-weight OpenAI model an open-weight EU |
| - provider cannot be serving. It reads as a copy-paste of LlamaIndex's |
| - OpenAI documentation with the base URL swapped, and it is not a source; |
| - the API reference is, and says `/v1/embeddings` serves |
| - `qwen/qwen3-embedding-8b`. **Untested: no API key.** Be clear what the |
| - call can settle: a 400 proves only that TensorX does not proxy *that |
| - model name*. It says nothing about whose GPUs run `qwen3-embedding-8b`, |
| - which is the item above. While there, check `encoding_format: "base64"` |
| - (§7.2) and the accepted batch size. |
| -- **Is the model id stable?** §8.2 selects `moonshotai/kimi-k3` and |
| - `z-ai/glm-5.3-flash`, neither datestamped. **Whether TensorX holds a |
| - stable id to stable weights is unread.** Ask; and until answered, gate |
| - 24's canary is what detects the answer being no. |
| +- **The live calls ran on 2026-09-05, and settled less than hoped.** |
| + `/v1/embeddings` serves `qwen/qwen3-embedding-8b` as documented, and the |
| + model is in `GET /v1/models`. The `text-embedding-3-small` probe — |
| + the one that would have shown TensorX proxying to OpenAI — |
| + **returned 403.** It did not succeed, so no proxying was demonstrated. |
| + **But 403 is a refusal, not a not-found:** a 404 would have said "no such |
| + model", while 403 is consistent with a routable name this key is not |
| + entitled to. It rules out "they proxy for anyone"; it does not rule out |
| + "the name routes for some account tier". Re-probe with a different key if |
| + one is ever to hand, and treat the result as narrowing rather than |
| + closing — like the subprocessor item above, which the API cannot answer |
| + at all. |
| +- **`encoding_format: "base64"` is answered and the answer is no** — see |
| + §7.2. Accepted and silently discarded. |
| +- **Is the model id stable?** Partly answered by the catalogue. It lists |
| + `deepseek/deepseek-v4-pro` *and* `deepseek/deepseek-v4-pro-0813`, which |
| + demonstrates that bare names here are aliases over dated snapshots. §8.2 |
| + now pins the dated ids for both chat tiers. **Two things remain unread:** |
| + whether a dated id is itself immutable at TensorX (ask them), and what |
| + happens to the **embedding** model, which has no dated form at all — gate |
| + 24's canary is the only detector for that one. |
| +- **`deepseek/deepseek-v4-flash-0731` is unpriced**, and §8.6's cheap-tier |
| + month cannot be stated until it is. One lookup. |
| +- **Both chat tiers now come from one lab as well as one host.** §8.2 took |
| + dated ids over family preference, correctly under its own rule, but a |
| + DeepSeek withdrawal would move both tiers at once where the previous pair |
| + spanned two labs. Concentration recorded, not mitigated. |
| - **One embedding model, and the risk is a re-host not a re-embed.** The |
| catalogue offers exactly one. But the weights are open, so any host |
| serving the same `qwen3-embedding-8b` yields compatible vectors — closely |