Anytwo Curriculum Review
Independent text review of the 23-unit Anytwo curriculum against the Video Curriculum Guide and the anyproto sources: per-unit answers to the guide's questions, 34 factual accuracy findings, and series-level notes on order, parked ideas, missing ideas and the shared visual language.

Anytwo Curriculum: Phase 1d Text Review

Reviewer: independent agent, 2026-10-20. Inputs: the Video Curriculum Guide, the curriculum draft 1, and the anyproto sources listed in the brief (all of any/website/01-understanding/*, any/docs/30-global-p2p.md, any/docs/17-files.md, the any-sync-sdk docs on one-to-one spaces, identities and the CRDT, the ACL and tree protos, list/models.go and list/validator.go, the tech-docs protocol overview, AnyBlock v2 PRINCIPLES and README, the anybao README and ADR index). For units 1, 2, 20, 21, 22 and 23 the announcement claims were checked only against the curriculum's own "What the initiative is" and "Sources" paragraphs, as instructed.

Verdict in one line: the protocol and CRDT units (3 to 19) are close to sign-off and mostly true to the sources, with a handful of real errors and several places where a simplification will be heard as a wrong claim. The product units (1, 20, 21, 22, 23) carry many claims that nothing in the recorded paragraphs or the listed sources supports, and two of them (20 and 21) rest their central claim on an unsupported statement. Three units carry two ideas by the guide's own test. One idea the series needs (what an account is) is never taught.

Conventions: "Un" means unit n, "bk" means beat k. Timing estimates assume 2.4 words per second, 0.7 s after each sentence and 1.5 s after each beat, so they are rough.

Part 1: per-unit review

U1: Anytype is being rebuilt as Anytwo

    One idea? No. The sayable idea is "Anytwo keeps the protocol and replaces everything above it; Anytype stays." Beats 4 (feature list), 5 (MIT) and 6 (migration, testers, release date) each carry a separate news item. Cut b4 entirely (it is a list of six product features the series never returns to, and it names the Lexical editor, which the parking list parks). Keep b5 as one sentence inside b3's "Anytype stays". Trim b6 to the migration claim and drop the dates.

    Every beat serves it? b4 and the dates in b6 do not.

    Metaphor. None by design. Acceptable for a news unit, but b2's "tangle of wires" and b3's "four clean layers" are a visual argument the script then contradicts: b3 and b7 say four layers, U2 says five. Pick one.

    Assumes? Nothing beyond the stated context.

    Misconception. Addressed: b1 "Not a release. A rebuild" and b5 "Anytype itself stays."

    Style. Five of seven beats exceed three sentences (b1 has five, b4 has six fragments). "Why? Legacy." is fine. b7 is a table of contents, which is throat-clearing by the guide's rule, but a series opener may keep one such line. Screen for b4 lists six things; the ceiling is four.

    Density. About 100 s at the estimate, inside target, but only because the fragments are short. It is dense in facts, not in words.

U2: Five layers, each with one job

    One idea? Yes: "Five layers, one job each, and product logic stays above the API."

    Every beat serves it? Yes. b7's "It will not be the only one" is a prediction, not part of the idea; cut it.

    Metaphor. A stack of boxes, consistent, never stretched.

    Assumes? b4 uses "CRDT" and b2 uses "Mongo-style", "vector search"; b5 uses "gRPC", "protobufs". For the stated audience those are fine except "CRDT", which the series never defines anywhere, including in units 14 to 18 that teach it. Either define it here in six words or say "the merge rules" and never use the acronym.

    Misconception. Addressed at b2 "No idea that sync exists."

    Style. b2 has five sentences, b4 and b5 four. No sentence over twenty words.

    Density. About 90 s, at the top of target. Fine.

U3: A space is one guest list plus many objects

    One idea? The stated idea is "a space is one ACL plus every object under it, on every device, no master copy." But the check question asks "Why can the space id never change?", which is b3's idea, not the unit's. Either the idea or the check question is wrong. b5 (the settings object records deletions) is a third fact that serves nothing here; it belongs with the parked deletion topic. Cut b5, and change the check question to "Where does a space live?" or similar.

    Every beat serves it? b5 does not. b3 serves only the check question.

    Metaphor. Room, door, guest list, consistent. The break (a room has one location) is handled at b6 as planned.

    Assumes? b3 "Its hash is the space id" uses "hash" before the visual-language plan says it is introduced ("say 'named by its hash' once in unit 4"). b4 "Which key is current" assumes a read key, which U6 introduces. Reorder the words or drop the key clause.

    Misconception. Addressed at b6.

    Style. b2 and b4 are four sentences. "Pages, chats, types, a contact book": see accuracy finding 10.

    Density. About 77 s, inside target.

U4: An object is a chain of sealed envelopes

    One idea? Almost. "A change names the heads it was built on; forks close when a change names both tips; hash order makes every device read the same sequence." b7 (snapshots) is a second idea and is not needed by any later unit. Cut b7 and park snapshots. It also contradicts U14 b4 (finding 12).

    Every beat serves it? b7 does not.

    Metaphor. Envelopes on a string, forking and tying back. Holds. The plan says to say "named by its hash" once here, and the script never does; b6 "sort by hash" is the only mention. Say it at b1 or b2, because U17 b5 later says "content-addressed" with no definition.

    Assumes? "Signed by whoever wrote it" assumes the viewer knows what a signature by an account is. The series never teaches that an account is a key pair. See series notes.

    Misconception. "A conflict needs someone to resolve it" is answered at b4, but overclaimed: the chain shape merges histories, it does not decide which of two values wins. That is U15. Say "the chain merges; which value wins comes later" or the viewer leaves U4 believing forks settle values.

    Style. b1, b4 and b6 are four sentences. "That is the merge" is fine.

    Density. About 89 s. Fine, and shorter once b7 goes.

U5: Peers compare heads, not content

    One idea? Yes: "Sync compares head ids over hashed ranges and fetches only what differs."

    Every beat serves it? Yes. b5 (streaming) is the contrast that makes "the round is the catch-up" land.

    Metaphor. "Comparing the last envelope numbers, not reading the letters" is in the card but the script says "ids of its tips", which is better, since the visual language says envelopes carry no numbers. Fine.

    Assumes? Only U4. The script says "two devices" throughout; the source describes the round as device against responsible node, with LAN peers also diffing. "Two peers" would be exact and costs nothing.

    Misconception. Addressed at b1.

    Style. b3 is four sentences. Clean otherwise.

    Density. About 71 s, inside target. This is the best-shaped unit in the series.

U6: The network holds only ciphertext

    One idea? Yes: "The envelope's outside is readable and verified by nodes; the inside is opaque; so no node can run a query."

    Every beat serves it? Yes.

    Metaphor. Post office. The card and the visual-language section both say the script must say that a real post office does not verify signatures. The script does not say it. Add the clause at b4, as planned.

    Assumes? U4 and the guest list from U3. Fine.

    Misconception. Addressed at b5.

    Style. Four of six beats exceed three sentences; b2 is a list of five fields and its screen shows five things. Drop one from the screen or group them. b5 "Who the members are": see finding 16.

    Density. About 81 s. Fine.

U7: Four kinds of node, and nobody negotiates

    One idea? No. The title's "and" names the two: "four node roles" (b1 to b5) and "placement is computed from the replication key" (b6), with "a node is just a peer" (b7) as a third. The check question is about b6. Options: (a) keep U7 as the roles unit, with check question "Which node validates the guest list?", and move b6 into U10 as the fact that lets a device find its post office, or (b) make b6 its own 50-second unit. I recommend (a). Keep b7 as the closing line of the roles unit; it serves "each has one job" by contrast.

    Every beat serves it? b4 pre-teaches U8 b4 almost word for word ("accepted only if it extends the chain without conflict"). Cut it to "Consensus nodes validate the guest list" and leave the mechanism to U8.

    Metaphor. Four buildings, a referee with a stamp, a directory: consistent with the shared language.

    Assumes? "replication key" is defined inline. b6 never says where the device gets the ring of nodes from; the source says it asks the coordinator for the configuration first (finding 18).

    Misconception. "A central server assigns storage" is answered at b6, but the source says the coordinator does tell clients which nodes serve a space, so the correction as written is half wrong. Say "the coordinator hands out the node list; the device computes which of those nodes hold its space."

    Style. b5 and b6 are five sentences each.

    Density. About 80 s and two ideas. Splitting fixes both.

U8: Membership needs a referee

    One idea? Mostly: "The guest list may never fork, so a referee accepts the first extension and membership changes need the network." b6 (the role ladder) is a second idea that serves nothing here; it is also wrong as a ladder (finding 20). Cut b6, or move the roles into a future unit on invites.

    Every beat serves it? b2 (three slip kinds) is scene-setting; it is fine if "The slips are simple" becomes "Three of the slips", since the list has sixteen kinds (finding 19). b6 does not serve the idea.

    Metaphor. Slips and a referee with a stamp. Holds. The break (configured, not elected) never comes up, which is right.

    Assumes? Read key (U6) and consensus node (U7), both earlier. b2's "invite key" is new and undefined; "a key that comes with the invite" would do.

    Misconception. Addressed at b1 and b3 to b4.

    Style. b2, b4 and b6 exceed three sentences. b4 "its author tries again" is unsupported (finding 21).

    Density. About 83 s. Fine once b6 goes.

U9: Removing a member changes the lock

    One idea? Yes: "Removal rotates the read key forward; it cannot take back what was delivered." b6 (old keys chained under new so newcomers read history) is a closely tied second fact; it earns its place because it answers "then how does anyone read old envelopes?", which the viewer will ask.

    Every beat serves it? Yes.

    Metaphor. Changing the lock. Holds. One wording hazard: the visual language says "a removed member keeps the old key", and b6 says "the old key is kept, sealed under the new one." Two different senses of "keeps the old key" in one unit. In b6 say "the old key is carried forward, sealed under the new one."

    Assumes? b3 "with their own public key" assumes every member has a public key. No earlier unit says an account is a key pair. See series notes.

    Misconception. Addressed at b5.

    Style. Clean. No beat over three sentences.

    Density. About 70 s. Fine.

U10: Three roads, the same envelopes

    One idea? The stated idea is "three transports carry the same envelopes." But the check question asks what a ticket contains, which is b4, and b5 (bridging) is a third fact. Either make b4 the idea ("a device announces an endpoint and a relay, never an address") with the roads as setup, or keep "three roads" and change the check question to "Can a space be fully synced with no sync node in the path?" The second is the cleaner unit; the ticket then becomes one sentence in b3.

    Every beat serves it? b4 and b5 serve the check question and the bridging claim, not the stated idea.

    Metaphor. Three roads to one house, plus the post office and a relay. Holds.

    Assumes? Post office (U6), fine. "Relay" is defined inline.

    Misconception. Addressed at b3.

    Style. b3 and b4 are five and four sentences. "The third is new in Anytwo": see finding 22.

    Density. About 81 s. Fine.

U11: Some ids are computed, not minted

    One idea? Yes: "Leave the seed and the timestamp out of the header and every device computes the same id; the price is that it can never be deleted."

    Every beat serves it? Yes.

    Metaphor. The card says "the same recipe gives the same cake." The script never uses it; it talks of headers, functions and inputs. Either put the recipe in b2 and b3 or drop it from the card. As written the unit has no physical metaphor at all, which the guide requires.

    Assumes? b4 names "the account's private space" (taught in U13, two units later) and "the space's index object" and "a bundle root" (never taught). The viewer cannot use any of the three examples. Reorder so U13 precedes U11, or make b4 forward-looking in words ("the account's own space, which comes next"), and cut the index object and bundle root.

    Misconception. Addressed at b3.

    Style. b1 and b2 are four sentences. "Sign only the inputs" is wrong for derived objects (finding 23).

    Density. About 68 s. Slightly thin; the recipe metaphor would fill it well.

U12: Any two identities already share a space

    One idea? Yes: "Two accounts derive the same space from a shared secret; approval is a local gate."

    Every beat serves it? Yes.

    Metaphor. "Two people who each hold half a secret" is not quite what happens (each computes the whole secret from their own private key and the other's public key), and the script wisely does not say "half". Say "two people who can each work out the same secret alone" in the card. The screen for b4 shows "a synthetic owner" that the narration never names, which the guide forbids. Either say one sentence about it (the list needs an owner slot, so a made-up one fills it) or take it off the screen.

    Assumes? "Public identity and private key" (b1) is the first time the series says an account has a key pair, and it is stated as if known. U9 already needed it. See series notes.

    Misconception. "A direct message needs an invitation" is answered at b4 "No invite", but see finding 24: there is an optional invite message through the coordinator inbox, and the script never says how Bob's device learns there is something to approve. Say "no invite slip on the guest list; Bob only has to be told."

    Style. b2 and b3 exceed three sentences.

    Density. About 79 s. Fine.

U13: Your account has a private space

    One idea? Yes: "Every account has a derived, owner-only space holding what is about the account, and a new device restores it first."

    Every beat serves it? Yes.

    Metaphor. A small locked room beside the shared rooms. Holds.

    Assumes? b5 "recovery phrase" is never introduced; the series never says the account key comes from a phrase. b2 "the account key" likewise. This is the strongest evidence that an identity unit is missing.

    Misconception. Addressed at b6.

    Style. b3 has five short sentences, acceptable as a list. b6 overstates (finding 25).

    Density. About 72 s. Fine.

U14: A change is a batch of edits, not a state

    One idea? Yes: "Inside the envelope is a batch of per-record, per-path edits; state is what applying them gives you." b5 (record ids from the envelope hash) is a sub-fact and the check question targets it rather than the idea; acceptable, but a check question on the main idea ("What travels between devices?") would be stronger.

    Every beat serves it? Yes.

    Metaphor. Opening the envelope. Holds.

    Assumes? b3 "one dataset of one object": "dataset" is never defined anywhere in the series, and U17 and U19 lean on it. One sentence here ("an object keeps its records in named datasets; a chat has its messages, a page its blocks") would fix three units.

    Misconception. Addressed at b1 and b4.

    Style. b6 "is the next idea" is a cross-reference the viewer cannot use; say what the next idea says or end at "a table of rows." b4 "Nobody ever sends state" contradicts U4 b7 (finding 12).

    Density. About 72 s. Fine.

U15: Per field, the last writer wins

    One idea? Yes: "Each field carries the version of its last write; newer in chain order wins; different fields both survive."

    Every beat serves it? Yes. b6 (the design rule) is the consequence and belongs.

    Metaphor. A sticker per field. Holds.

    Assumes? U14, and chain order from U4 b6. Fine.

    Misconception. Addressed at b3.

    Style. b2, b4 and b5 exceed three sentences but each sentence is short; b4 and b5 are the worked example and read well. "So the design rule is simple" is throat-clearing; start at "Fields that people edit at the same time".

    Density. About 75 s. Fine. One missing sentence matters for truth (finding 27): the sticker is this device's position number for that envelope, not the envelope's hash, and two devices write different numbers but agree on order.

U16: Three edits that compose, and one that always wins

    One idea? Borderline. The title's "and" again names two: composing ops (b1 to b2) and the sticky tombstone (b3 to b4), with cross-writer invariants (b5 to b6) as the consequence of the first. The card's "what you can and cannot model" is the unifying idea and it does hold, but the tombstone is a rule about delete, not about composition. If the series is trimmed elsewhere, leave as is; if not, move b3 to b4 into U15 as "and one op, delete, ignores the sticker entirely."

    Every beat serves it? Yes under the card's framing.

    Metaphor. Counter, set, tombstone: three objects, not three metaphors. Holds.

    Assumes? U15. Fine.

    Misconception. Addressed at b5.

    Style. Clean; no beat over three sentences. b6's screen "the trade as a title" is a title the narration speaks, so it passes the rule.

    Density. About 69 s. Fine.

U17: Handlers run on every device, the same way

    One idea? Yes: "A handler runs inside apply on every device from converged inputs, so stamps and refusals need no server." b5 (no rollback) is a tightly tied consequence.

    Every beat serves it? Yes.

    Metaphor. The card says "the same clerk on every device." The script never says "clerk"; it says "handler" from b2 on. Use the clerk once at b2 ("a handler, think of a clerk") or drop it from the card. As written the unit has no physical metaphor.

    Assumes? "apply" as a noun (b2) and "dataset" (b2) are undefined. b5 "content-addressed" is undefined (U4 never said "named by its hash"). b1 "created at, created by" is fine.

    Misconception. Addressed at b1 to b2.

    Style. Four of six beats exceed three sentences. b4 conflates writer and reader behaviour (finding 29).

    Density. About 80 s. Fine.

U18: Rows are a cache. The chain is the truth

    One idea? Yes: "Rows are replay output; when the handler changes, wipe and replay instead of migrating."

    Every beat serves it? b5 (crash safety) is implementation detail that does not serve the idea; the viewer does not need it to answer the check question. Cut or shorten to "Interrupt it, and it starts again."

    Metaphor. Throw away the table, open the envelopes again. The script says "wipe the rows, replay the chain", which is the same picture. Holds.

    Assumes? U17. b5 "The versions stay stale until the replay finishes stamping them" uses "versions" for handler versions, which only the screen line for b2 mentions. Undefined in narration.

    Misconception. Addressed at b2 to b3.

    Style. b2, b5 and b6 exceed three sentences. b6 is the strongest closing argument in the series and reads well aloud.

    Density. About 86 s, at the top of target. Cutting b5 brings it down.

U19: One door, on your own machine

    One idea? Borderline. "Everything goes through one loopback HTTP server with one read path and one write shape." b3, b4 and b5 are three separate API rules (reads, writes, windows). b5 (windows close instead of dropping events) is a rule about subscriptions, not about the door, and nothing later uses it. Cut b5 and the unit is one idea.

    Every beat serves it? b5 does not.

    Metaphor. One door. b5 introduces "a window", a second building part that reads as a second metaphor. Another reason to cut b5.

    Assumes? b1 "Everything above the SDK is one HTTP server" is inexact: above the SDK sit the server and its clients. Say "Everything above the SDK talks to one HTTP server." b3 "dataset" undefined (see U14). "snapshot" here means a query snapshot, while U4 b7 used "snapshot" for a whole-state envelope; one more reason to cut U4 b7.

    Misconception. "A local server needs a login" is answered at b2, but it is a weak misconception for this audience. "The app opens the database file itself" is the one the source's zen rule 1 actually corrects.

    Style. Five of six beats exceed three sentences; b4 has five.

    Density. About 86 s; fine after cutting b5.

U20: File bytes never pass through the node

    One idea? Yes as written: "Small files ride in the change; large files go straight to storage and the node signs a receipt that syncs as cleartext." But the unit's title and b4 rest on a claim the listed sources do not make (finding 31). If the 30 Sep post supports it, cite it in the card; if not, the idea must become "a signed receipt on the row is how every member learns a file is backed up", which the sources do support.

    Every beat serves it? Yes under the stated idea.

    Metaphor. "The courier signs for the parcel." The script says "the node signs a receipt", which is the same picture without the word courier. Fine.

    Assumes? U6 and rows/fields from U14 to U15 (earlier in order, fine). "content-addressed tree" (b3) is undefined; "a tree of chunks, each named by its hash" would do after U4 is fixed.

    Misconception. Addressed at b6.

    Style. Clean; no beat over three sentences. b6's screen lists six things (three cleartext, three sealed); the ceiling is four. Show "root hash, size, receipt" against one sealed box.

    Density. About 77 s. Fine.

U21: A document format a small model can write

    One idea? Yes: "AnyBlock v2 is flat, Markdown-in-text, names-not-ids, so a small model can write it, and one shape serves every door."

    Every beat serves it? Yes.

    Metaphor. "A form a stranger can fill in" is in the card and nowhere in the script. Use it at b5 or drop it. As written the unit has no physical metaphor.

    Assumes? U19 only by the "API" reference. The bigger problem is finding 32: the listed sources describe AnyBlock v2 as the export, import and API v2 format for an Anytype object, with the CRDT protocol unchanged, and nothing in the any or anybao sources says the any server serves it or that bao edits through it. b6 "what the agent edits" and the card's "the API" attribute the format to the Anytwo stack without support. The unit may belong to Anytype, not Anytwo, and the author must settle that from the 22 Sep post before this unit is animated.

    Misconception. "An export format is for humans or machines, not both" is not addressed at any identifiable beat; b6 says one shape serves every door, which is a different claim. b2 to b4 argue for machines; nothing argues for humans. Add the "stranger can read it" half, which is rule 2 of the source, or change the misconception.

    Style. Clean. b5 drops "under a grammar", which is the mechanism (finding 34).

    Density. About 70 s. Fine.

U22: The agent lives in the space, in a cage

    One idea? No. The title's comma hides the "and": (a) the agent's state is objects in a space, so the process holds nothing (b1, b2, b7), and (b) its code runs in a wasm cage with one logged door and the log replays (b3 to b6). The check question is about (b). Split: U22a "The agent holds nothing; the space does" (b1, b2, b7, with triggers and election as the payoff) and U22b "One door out of the cage, and every step logged" (b3 to b6). Each is a clean 60-second unit.

    Every beat serves it? Under the split, yes. b4 "Changing ten documents is one cell, not ten calls" is an inference (finding 35) and serves the one-tool point; keep only if the author stands behind it.

    Metaphor. The shared language says "a small figure inside a glass box with one door"; the script says "cage" throughout and the screen says "wasm box". Pick one word and use it in script, card and screen.

    Assumes? U19 (the door) and U13 (devices, for the election). "wasm" and "fuel budget" are undefined; "a budget of steps" is plain. "Python compiled to wasm" is a technical term that is the thing being taught, so it may stay if defined.

    Misconception. "An AI agent is a cloud service with your data copied to it" is only half addressed: b1 to b2 say where state lives; nothing says the model call is the only thing that leaves. U23 does that job better. Change this unit's misconception to "the agent's code can do anything on your machine", which b3 and b5 answer directly.

    Style. b3 is six fragments; b1 four. "Why did bao do that? Replay it and watch" is good.

    Density. About 86 s for two ideas; split.

U23: Your model, your choice

    One idea? As a policy unit, yes: "AI is optional and the model is yours; the alpha was not the design." b3 (space-scoped access) is a separate claim and is unsupported (finding 36).

    Every beat serves it? b3 does not, and should be cut unless the author can cite and explain the mechanism. b4 and b5 are evidence and belong.

    Metaphor. A switch and a picker. Holds.

    Assumes? U22. "GPU" and "config file" are fine for the audience.

    Misconception. "The agent means your notes go to a model provider" is addressed at b2 and b4, and b5 honestly admits the alpha did exactly that. The honesty is right; make sure b5 says what the current build does, or the viewer leaves not knowing.

    Style. "One honest caveat", "The bet is stated plainly", and "Everything in this series is built so that bet can be taken" are flourish; the guide forbids them. b6 "Local models on powerful devices, paired with local-first software, is the future" is ungrammatical aloud ("models ... is"). b6's screen "the closing line" names nothing the narration says. b4 and b5 exceed three sentences.

    Density. About 80 s. Fine, but see findings 36 to 40: most of this unit is unverifiable from what the curriculum recorded.

Part 2: factual accuracy

Each finding gives the unit and beat, what the script says, and what the source says. Severity: wrong (the claim is false against the source), overstated (true in a narrower form), unsupported (nothing in the listed sources or recorded paragraphs says it), inconsistent (two units disagree).

    U1 b1, unsupported. "Seven years old." Not in the "What the initiative is" or "Sources" paragraphs.

    U1 b2, unsupported. "A six-year-old editor built on its own block graph. A middleware layer that blocked fixes and bred regressions." Not in the recorded paragraphs. If it is in the 11 Sep post, record it there.

    U1 b3, unsupported. "which has carried millions of spaces." Not recorded.

    U1 b3 and b7, inconsistent. "four clean layers" and "the four layers again" against U2 "Anytwo is five layers" and the initiative paragraph's five components (any-store, any-sync, any-sync-sdk, any, anyrt). architecture.md "The stack" also lists five.

    U1 b4, unsupported. "A Lexical editor with real Markdown. A new database. A rebuilt file node. Search across all spaces. Integrations. An agent you can turn off." The recorded paragraph names only the five components; none of these six features is recorded. "Agent you can turn off" is also the basis of U23 b1.

    U1 b5, unsupported. "from source-available." The paragraph says only "moves to MIT."

    U1 b6, unsupported. "no backwards compatibility", "a bridge the team is still building", "First testers came in September", "A public first release is planned for the end of the year." The idea map says "migration is hard, with a bridge" but that is the author's own line, not a recorded source statement; the dates are recorded nowhere.

    U2 b1, unsupported. "Old Anytype had one middleware. Storage, sync, data model, API, all in one." Not in the listed sources or recorded paragraphs.

    U2 b5, unsupported and misleading. "No gRPC. No protobufs." architecture.md says the server speaks "HTTP/JSON + SSE"; it says nothing about gRPC or protobuf, and the protocol layer below is defined in protobuf (treechange.proto, aclrecord.proto). A viewer will hear "the stack has no protobufs," which is false.

    U3 b2, unsupported. "a contact book" as an object in a shared space. tech-space.md ("What it holds") puts identities, which is the contact directory, in the account's tech space, not in a shared space; spaces-and-trees.md "Anatomy of a space" lists "chat, page, type, spaceIndex". Say "pages, chats, types".

    U3 b3, overstated. "Its hash is the space id." spaces-and-trees.md "Anatomy": "space (id = CID of the signed header + "." + replication key)". The id carries the replication key that U7 b6 then hashes; that is worth one clause.

    U4 b7 against U14 b4, inconsistent. U4: "Some envelopes are snapshots. They hold the whole state." U14: "Nobody ever sends state." tech-docs/any-sync/overview.md "Snapshots" confirms snapshot changes exist in any-sync; architecture.md says "Devices exchange changes; nobody exchanges 'state'" in the sense of materialized rows. Either cut U4 b7 (recommended; no later unit needs it) or soften U14 b4 to "nobody sends rows."

    U4 b4, overstated. "Nothing is resolved by a server. The shape of the chain does it." crdt-and-consistency.md "Merging: per-path LWW": the chain gives DAG order; which value survives is the per-path gate in the SDK, and for the same path "one winner by DAG order, the other value is gone." The chain shape alone decides nothing about values. Say "the chain merges the histories; which value wins is a later rule."

    U5 b5, overstated. "A new envelope is streamed at once to every connected peer." spaces-and-trees.md "The life of a change" step 4: streamed "to connected sync nodes and LAN peers". 30-global-p2p.md "Cost": "While a sync node stream is up, global peers receive nothing: head updates go through the nodes." Say "to its post office and to peers on the same network."

    U6 b2, omission that breaks a later unit. The outside fields listed are "previous ids, list head, key id, author, signature". encryption.md "What a change looks like on the wire" and treechange.proto (timestamp = 6) show the author's timestamp is also cleartext, and encryption.md's table says nodes see "timing". U17 b3 later has the handler read "Its timestamp" from the envelope, which the viewer was never shown. Add "when it was written" to b2 and to U6's screen in place of one other item.

    U6 b5, overstated. "Who the members are." encryption.md "What nodes see": "which account public keys are members, with what permission", and cannot see "Members' names or profiles". The viewer will hear "names". Say "which keys are members."

    U6 b5 against U20 b6, inconsistent. U6: "It never knows a name, a field, a message, or a file name." U20: "What the network reads: the root hash, the size, the receipt." spaces-and-trees.md "Coordinator versus sync nodes": nodes can read "never a field value beyond the cleartext custody fields of file rows." Say "never a field of yours" in U6, or "with one exception, which comes later."

    U7 b6, overstated as a correction. "Which nodes serve a space is not negotiated. It is computed." True, but the script omits that the device first asks the coordinator for the node list: architecture.md "What a network is": "A device asks the coordinator for the current configuration, computes the same answer, and connects to those nodes"; the roles table says the coordinator "tells clients which sync nodes serve a space"; tech-docs/any-sync/overview.md "Global networks": "It requests a coordinator node for the address of the sync node." The check question's correct answer includes that step, and the stated misconception ("a central server assigns storage") is only half wrong. Also, the hashing is two-step (consistent hashing of partitions to nodes, modular hashing of a space to a partition, per the "Load distribution" section); "hash it onto a ring" is an acceptable simplification if the card notes it.

    U8 b2, overstated. "The slips are simple. An invite. A request to join... An accept..." aclrecord.proto AclContentValue has sixteen kinds plus the root, including invites that need no accept (AclAccountInvite.encryptedReadKey with AclInviteType.AnyoneCanJoin, AclAccountInviteJoin) and direct adds (AclAccountsAdd). Say "Three of the slips" and the simplification is honest.

    U8 b6, wrong. "The roles as a ladder: reader, guest, writer, admin, owner." models.go: AclPermissionsGuest is "like reader, but can't request removal and can't be upgraded to another permission"; IsLessOrEqual has no Guest case at all. Guest is a restricted reader, not a rung above reader. "Only the owner can hand the space over" is verified (validator.go ValidateOwnershipChange requires IsOwner()), and "Admins manage the list" is verified (CanManageAccounts), though admins cannot grant or change admin rank (validator.go lines 126, 287, 298).

    U8 b4, unsupported. "and its author tries again." tech-docs/any-sync/overview.md "Spaces": "otherwise, the sync node rejects the change." Nothing says the client retries. Harmless but unsourced.

    U10 b3, unsupported by the recorded paragraphs. "The third is new in Anytwo." local-first.md "What sync is" documents global sync as present; tech-docs/any-sync/overview.md "Next steps" lists it as a planned feature of any-sync. Neither says it arrived with Anytwo. If the 30 Sep infrastructure post says so, record it.

    U11 b2, overstated. "Leave out the timestamp and the seed. Sign only the inputs." spaces-and-trees.md "Derived ids": a derived space header is "still signed, but with no timestamp or random seed"; a derived object's root carries "only (spaceId, changeType, payload, parentId), no identity, signature or timestamp" (treechange.proto RootChange.isDerived). b4 uses both a derived space and a derived object as examples, so "sign only the inputs" is false for the second.

    U12 b4, overstated. "No invite. No accept. No referee needed." At the guest-list level this is right (one-to-one-spaces.md: "The ACL is immutable: a root with two writers and no invite/request/accept records", and derive, materialize and approve need "no coordinator and no sync nodes"). But the same doc's Layer 2 is an optional invite message through the coordinator inbox that tells Bob a request exists and carries Alice's profile key, and the script never says how Bob's device learns there is something to approve. Say "No invite slip on the list" and add "Bob only has to be told."

    U13 b6, overstated. "no server that knows which devices are yours." 30-global-p2p.md "Relays": the pkarr relay "holds one small signed, encrypted record per account... That record is how this account's own devices find each other"; the host "sees an opaque key, an opaque blob and the address that published it." Say "no server that can read which devices are yours."

    U13 b5, note. "Restore a new phone from your recovery phrase." Verified by tech-space.md "Why account-only" and encryption.md "The key hierarchy", but the series never teaches that the account key comes from a phrase. Not a source error; a missing-unit error (series notes).

    U15 b1 to b2, misleading by omission. "The sticker is the version of the last envelope that wrote it." record-crdt.md "Versions and _ver": the versionId is "an opaque string that sorts lexicographically in DAG order for that peer's view of that tree. It is peer-local: two peers may spell the same change differently." crdt.md: "Comparison happens only within one peer's Controller, never across peers." After U4's "sort by hash", the viewer will take the sticker to be the envelope's hash, which is false and would make "two devices compare stickers" plausible. One sentence fixes it: "The sticker is this device's position number for that envelope. Two devices write different numbers but agree on the order."

    U16, verified. Composing ops ($inc, $addToSet, $pull), sticky tombstone, local-writer rejection, and the invariant limit all match crdt-and-consistency.md "Merging" and "Versus transactions" and record-crdt.md "Merge rules by op". No finding. One nuance the card may note: $addToSet and $pull lose to a newer whole-field $set.

    U17 b4, overstated. "A refused edit is dropped. The rest of the envelope still applies." That is the reader side. crdt-and-consistency.md final Note: a handler "rejects a change before it enters the DAG on the writer, and drops the offending op after delivery on readers"; record-crdt.md "Handlers": "the writer's own pre-check is the only place a whole change is refused," and "a failed BeforeCreate or BeforeDelete drops that record's change." So on the writing device the envelope is never written, and some refusals drop a whole record, not one op. Say "On the writer it is refused before the envelope exists. On every reader the edit is dropped and the rest applies."

    U18, verified. Wipe and replay, lazy per object plus background sweep, crash safety, and "no window in which nobody writes" all match versioning-and-reindex.md. No finding.

    U20 b4 and title, unsupported. "In the old design, bytes passed through the file node. Now they go straight to storage. The node signs a receipt when the bytes are there." 17-files.md "Model" and "Durability states" say large files are "backed up to the network's fileV2 broker in the background" and read from "the network's public read base"; durable means "a verified network-custody receipt (networkSign) is recorded on the row." Nothing in the listed sources describes the old path or says bytes bypass the node; the initiative paragraph says only "a rebuilt file node." The receipt mechanism is supported; the bypass claim and the unit title are not. Quote the 30 Sep post or retitle around the receipt.

    U21 b6 and card, unsupported attribution. "One shape serves every door. Export, import, the API, and what the agent edits." PRINCIPLES.md TL;DR: "AnyBlock JSON is the one document shape for an Anytype object: what export writes, what import reads, what a bundle ships, what API v2 serves and accepts"; "Non-goals": "Not a sync or wire format. The CRDT protocol is unchanged." The any website docs describe a markdown bridge and editor block endpoints (zen-of-any.md rules 2 and 3), and the anybao README describes bao editing through any@v1 cells; neither mentions AnyBlock. The listed sources therefore place AnyBlock v2 in Anytype's API v2, not in the Anytwo stack. The unit must say which product it belongs to, from the 22 Sep post, or it does not belong in this series.

    U21 b4, overstated. "Values are names, not ids." PRINCIPLES.md rule 6: "Objects are the exception, and they are ids only, because nothing else about an object is unique." Say "Options and types are names."

    U21 b5, omission. "Would a seven-billion-parameter model emit this correctly?" PRINCIPLES.md rule 4: "would a 3–7B model under a grammar emit this correctly?" The grammar (constrained decoding) is the mechanism, and README.md decision 1 gives it as the reason blocks are flat ("a recursive schema cannot be used with constrained decoding... took a 7B model from 0% to 75%"). Without "under a grammar", b2's flatness has no stated reason.

    U22 b4, unsupported inference. "Changing ten documents is one cell, not ten calls." The anybao README says the model "writes Python cells in a persistent kernel against the database"; the ten-documents claim is the author's inference. Plausible; mark it as such or cut.

    U23 b3, unsupported and in tension with the sources. "You choose which spaces it may enter. It follows the same permission rules as a human collaborator." Not in the recorded paragraphs. The listed sources say the opposite about the mechanism: anyrt "talks to the same HTTP API as any other client" (architecture.md "Clients and anyrt"); the server "does not authenticate callers" (zen-of-any.md rule 1); "the local any server trusts every process on your machine" (anybao README warning); anyrt serve "creates your bao working space" under the account the server holds. Any space-scoping would have to be an anyrt capability rule, and no listed source describes one. Cut, or cite the mechanism.

    U23 b4, overstated and unverifiable. "Nothing left the machine." The tester report is listed in "Sources" but nothing from it is recorded. encryption.md opening: the default index.embedder: auto "carries readable content to that provider" once an OpenAI key is set; 30-global-p2p.md describes relay and pkarr sessions that run by default. "Nothing left" is true only under settings the script does not name.

    U23 b5, unverifiable. "The first alpha ran on the team's own infrastructure, on a cloud model. Those conversations were reviewed by the team." The 28 May post is listed but none of its content is recorded in the curriculum. Record the exact wording before this is animated.

    U23 b6, unverifiable. "Local models on powerful devices, paired with local-first software, is the future." Attributed to nobody; not recorded.

    U23 b1, unsupported elaboration. "Turn it off and nothing about the rest changes." The paragraph says only "an agent you can turn off" (and that itself is only in U1 b4, see finding 5).

Count: 34 findings with a problem (items 1 to 27, 29, 31 to 40; items 28 and 30 are verifications, and item 26 points to a missing unit rather than a source error). Of those, 1 is wrong (20), 12 are overstated, 15 are unsupported or unverifiable, 3 are inconsistencies between units, and 3 are omissions that lead to a wrong model.

Verified without finding, for the record: U5's hashed-range diff, 30 s period and "nothing but heads to compare" (spaces-and-trees.md "Heads and head-sync", local-first.md); U6's envelope verification (signature, author in ACL at that head, links resolvable) and "every query runs on a device"; U7's four roles and "same code paths"; U9's rotation sealed per remaining member, forward-only encryption, and the old key sealed under the new one (aclrecord.proto AclReadKeyChange.encryptedOldReadKey, encryption.md "Removing a member rotates the key"); U10's relay stores nothing, ticket carries endpoint id and home relay only, bridging for LAN and for global peers without a node stream (any-sync-sdk/docs/global-p2p.md "Head updates and head-sync"), and "fully synced with networkPeers: 0"; U11's permanence; U12's ECDH derivation, two sorted writers, immutable root, local gate; U13's one-member list that the network refuses to extend, pull-first on restore, same CRDT; U14's record id from base58(xxh3-64(changeId)); U19's loopback-only, no auth, query/subscribe, write reply shape, terminal close; U20's 4096-byte inline cutoff and cleartext/sealed split; U22's wasm CPython, no sockets or filesystem, virtual clock, fuel budget, single run_cell tool, named effects, bit-exact replay, triggers as records, device election.

Part 3: series-level notes

Order. Three changes.

    U10 (transports) sits after the ACL pair (U8, U9) and breaks the sync thread. It depends only on U5 and the post office of U6. Order 5, 6, 7, 10, 8, 9 keeps the network story together and then the membership story.

    U11 cites the account's private space as its first example two units before U13 teaches it. Order 11, 13, 12 fixes the forward reference and lets U12 (which needs 11 and 8) still follow.

    U7's placement fact (b6) belongs with how a device finds its post office; if U7 is split as recommended, the computed-placement beat goes into U10 or becomes a short unit between U7 and U10.

An idea the series needs and lacks: the account. U4 says "signed by whoever wrote it"; U9 seals keys "with their own public key"; U12 opens with "a public identity and a private key" as if known; U13 says "the account key" and "recovery phrase". No unit says: an account is a key pair made from a phrase; the public key is your name; the private key signs every envelope and every slip; nodes check signatures against it. That is one clean unit, with the key as its metaphor (the shared language already has one), and it belongs before U4 or at least before U8. Without it the series has no answer to "who is the author on the envelope?"

Terms never defined that several units use. "CRDT" (U2 and the section heading); "dataset" (U14, U17, U19); "content-addressed" (U17, U20); "named by its hash" (planned for U4, never said). Each needs one sentence at first use, and the fix for "named by its hash" unblocks the other two.

Parked topics the scripts still use. Space deletion appears in U3 b5 (the settings object records deletions) and U7 b5 (the deletion log); either cut both mentions or unpark deletion. The Lexical editor appears in U1 b4; cut. The search index and embedders are parked, but U23's privacy claims depend on them (finding 37); one sentence in U23 saying what else can leave the machine is required for honesty, or the claim must be narrowed. Nothing else parked is required.

Ideas in the sources the series could use and does not. Two are worth adding; the rest are rightly parked.

    The local trust boundary: anyone with a shell, and every process including the agent, can call the API; the data directory is plaintext on disk (encryption.md "The local boundary", anybao README warning). U19 b2 says "the trust boundary is the machine" but U22 and U23 then promise more than that boundary gives. One beat in U19 or U22 would make the cage claim honest: the cage confines the code, the door opens onto everything your account holds.

    Writes never fail because of another writer, only because of validation (crdt-and-consistency.md "Versus transactions"). This is the one-sentence summary of U15 to U17 and would make a strong check question or closing beat for U16.

    Not needed now: the DataVersion gate and parking (schema before data), conditional writes, trace ids, $incGated, the creation marker and stable creation order, local and account scopes, invites and join flow, resharding.

Unit count. Twenty-three is the right order of magnitude; the shape is wrong in five places. Add one (the account). Split two (U7 roles from placement, or fold placement into U10; U22 into state-in-the-space and cage-and-log). Cut one beat each from U1, U3, U4, U8, U18, U19 (listed above), which brings every unit to one idea without new units. Merge none; U16's tombstone could move into U15 but does not have to. Decide U21's fate on the attribution question (finding 32) before investing in it. Net: 24 to 26 units.

Does the shared visual language hold? Mostly, with these violations.

    Three cards name a metaphor the script never uses: U11 (recipe and cake), U17 (clerk), U21 (form a stranger fills in). Either the script says it or the card drops it; a unit with no physical metaphor fails the guide.

    U6's planned break line ("a real post office does not verify signatures") is missing from the script.

    U4 never says "named by its hash"; U3 uses "hash" first.

    U22 says "cage" and "wasm box" where the language says "glass box with one door". One word.

    U12's screen shows "a synthetic owner" the narration never names.

    U9 uses "keeps the old key" in two senses.

    U19's "window" is a second building part next to the door.

    Screens over four things: U1 b4 (six), U6 b2 (five), U20 b6 (six).

    U7 shows the referee one unit before U8 introduces the referee's job; fine, as long as U7 b4 shrinks to one sentence.

Script style across the series. No sentence exceeds twenty words, which is good. But about 52 of 142 beats exceed the guide's three sentences, most often by stacking fragments ("A query. A model call. A web request."). Fragments read well aloud and the timing estimates all land inside target, so this is a rule the guide may want to relax for lists; if not, the author should expect to cut roughly a fifth of the sentences. Two cross-references the viewer cannot use: U14 b6 "is the next idea", and the forward examples in U11 b4. Flourish to cut: U15 b6 "So the design rule is simple", U23 b5 "One honest caveat", U23 b6 "The bet is stated plainly" and "Everything in this series is built so that bet can be taken."

Timing. Estimates per unit, in seconds, against the card's target: U1 101 (85 to 100), U2 91 (75 to 90), U3 77, U4 89, U5 71, U6 81, U7 80, U8 83, U9 70, U10 81, U11 68 (60 to 75), U12 79, U13 72, U14 72, U15 75, U16 69, U17 80, U18 86, U19 86, U20 77, U21 70, U22 86, U23 80. Only U1 and U2 touch the top of their targets, and both lose beats under this review. Nothing is thin except U11, which the missing metaphor would fill.

Check questions that do not match their unit's idea. U3 (asks about the header, idea is the room), U10 (asks about the ticket, idea is three roads), and to a lesser degree U14 (asks about record ids, idea is batches of edits). Each is a sign the unit has two ideas; fix the idea or the question, not the script alone.

What must happen before Phase 2. In order of cost to ignore: resolve finding 32 (U21 attribution) and finding 31 (U20's title claim) with the posts; cut or source finding 36 (U23 b3); add the account unit; fix the wrong ladder (finding 20) and the five overstatements that produce a wrong model (findings 13, 15, 23, 27, 29); split U7 and U22; then the per-unit cuts. The rest is wording.

Do you like what you are reading? Subscribe to receive updates.

Unsubscribe anytime

Comments