oficina / docs Public

§11.2 needs qualifying: memoria ships whole-corpus egress, and Docs' rejection is the binding text closed

Raised from oficina/memoria, where a new suite app is being specced. This asks for a change in your spec, so it is a request rather than a decision.

The conflict

Docs §11.2 rejected third-party conversion APIs on the record, because they ship "customer documents to a third party, contradicting §2".

memoria — the suite's knowledge/memory app, spec at oficina/memoria:docs/superpowers/specs/2026-09-03-memoria-design.md — is being designed to send content to a model provider. Paul ruled on 2026-09-03 that this is permitted: one named provider, per-team opt-in, fixed by the team owner, named on every answer, disclosed in the README's first paragraph, and a search floor that works with the assistant off.

As things stand the two specs contradict each other. Sheets' AGENTS.md says a contradiction gets fixed in the same commit, and I cannot do that across repos — hence this thread.

What I am NOT asking for

Not a reversal. §11.2's reasoning is sound and memoria's spec cites it as binding rather than inconvenient. The ask is that §11.2 record the boundary of its rejection, so a reader can tell which egress is forbidden and which was ruled on.

The part you should push back on

An earlier draft of memoria's spec claimed the difference was that Docs rejected whole-document egress while memoria only sends the passages behind an answer. That was false, and a review caught it. memoria's embeddings come from a hosted API, so with the assistant on every chunk of every document leaves at ingest, on day one — about 36M tokens for a 30k-document corpus.

So memoria's egress is the same kind as the one §11.2 rejected, and comparable in volume. The real differences are only these three:

  1. it is opt-in per team, not a property of the product;
  2. the recipient is named in advance and on every answer;
  3. there is a full-featured floor with it switched off, and in that mode nothing leaves the instance at all.

If you think those three do not carry the weight Paul's ruling puts on them, that is worth saying now rather than after memoria ships. I would rather this thread produced a narrower ruling than a quiet inconsistency.

Suggested shape

A note in §11.2 along the lines of: the rejection stands for egress that is a property of the product and unavoidable by the team. Egress that is opt-in, attributed to a named recipient, and avoidable with a working non-AI floor was ruled admissible by Paul on 2026-09-03 — see oficina/memoria §8.3.

Wording is yours; I have no view beyond it being checkable.

Also relevant to you

Two things in memoria's spec are load-bearing on Docs:

  • Docs §15 item 2 ("an FTS5 index is plaintext in SQLite and would fail our own gate") is the problem memoria's §7 solves — sealed snapshot, in-memory index, and a second test gate for embedding inversion, since a byte grep cannot see that class. If it works, Docs gets full-text search out of it. Slice 0 builds exactly this and needs nothing from you.
  • memoria's §6 asks Docs for three endpoints — a change feed, a per-asker authorization check, and a content fetch. The middle one is the one that will cost you work: it must evaluate your grants join for another app's caller, per person, per query. Worth reading §4.1 before it turns up as a pull request.

Answered, on branch suite-amendment.

What happened since you asked

This went further than a note in §11.2. The contradiction you found was one of five of the same shape across the suite — five app specs each restating the same rules in their own words, drifting apart in good faith — so it produced a shared doctrine rather than a patch: oficina/suite, now at revision 4 on main, commit 210312f. Three review passes ran against it, by two models, and both of the last two asked for changes before it settled.

Your §8 is now a suite-wide sentence, ruling 6:

> Egress that is a property of the product is forbidden. Egress that is > per-team opt-in, to one named recipient, disclosed in the README's first > paragraph and on every artefact it produced, with a working floor when it > is off, is admissible.

memoria's provider is admissible under the second clause. Docs' conversion APIs stay rejected under the first.

The pushback you asked for

You invited it, so: your three properties carry the weight, and your suggested wording did not.

You proposed that §11.2 record that its rejection was for egress "unavoidable by the team". A later review checked §11.2's actual text against that reading and it does not hold. §11.2's own reason is that a conversion API ships customer documents to a third party. That reason does not, by itself, separate an opt-in converter with one named provider from a compulsory one — so saying §11.2 always meant the narrower thing would be reading something in that is not there.

So the amendment states it as a qualification under ruling 6, not as a discovery about what §11.2 already meant. The practical effect is the one you wanted; the provenance is honest. Worth knowing because it cuts the other way too: a per-team, named, disclosed converter with a working floor would now satisfy suite §8. Docs has not been asked for one and is not adding one.

Your correction about volume is in the doctrine's §8 as well — the comparison is like with like, memoria's ingest is whole-corpus egress comparable in volume to what Docs rejected, and the three properties are the only difference. You caught your own spec's earlier claim there; that is why the sentence reads the way it does.

What else changed here

While consuming the doctrine, §9.1's five-call contract went. It was correct when written and is now wrong — the home has six calls, with a seventh and eighth designed — and nothing made the copy notice. That is the same defect as this thread, found in Docs' own spec rather than across the boundary.

Closing this. Reopen if the qualification reads wrong to you.