#1. Evidence classes and boundaries
| Evidence class | What this study contains | What it does not establish |
|---|---|---|
| Repository requirements | TalkCo's current research, architecture issue, master inventory and documentation conventions | A newly accepted protocol, stack ADR or completed deniability construction |
| Fresh primary-source inspection | P2P Matrix website, MLS documents and selected pinned Neutrino/Neutrino-Iroh source | The behavior/configuration of an unexamined installed application |
| Inherited executable evidence | Existing Tachyon archive's synthetic-broker room/admission/message/rename/replay/removal experiments | A rerun in this study, ordinary-homeserver/federation interoperability or arbitrary membership-fork convergence |
| New executed analytical model | Three-event revocation schedule enumeration and parameterized recipient-fanout arithmetic | An implementation exploit, empirical bandwidth measurement, probability distribution or formal proof of either application |
| Documentation validation | Markdown/link/build/source-sync checks when recorded by the associated workflow run | Cryptographic security, mobile radio correctness, peer privacy or production readiness |
| Proposed integration and adversarial tests | The fixtures and pass/fail observations below | Executed results; each remains NOT RUN in this study |
| Independent review | Not performed | A completed security audit or approval to deploy on hostile networks |
The live Aurora site could not be freshly retrieved in this session. The app-specific findings therefore refer to the 2026-09-23 archive, not an assumed unchanged live deployment. The archive's limitations are retained: exact custom Rust source revisions/source maps were not recovered; real credentials, real room traffic and federation were not used.
#2. Primary source ledger
Retrieval/inspection date for this study: 2026-09-24. Mutable web pages retain that observation date. Immutable repository links identify the inspected revision; they do not identify an installed mobile artifact unless its build provenance separately matches.
| ID | Source | Role and qualification |
|---|---|---|
| TC-BASE | TalkCo baseline | Repository state at the start of this evaluation |
| TC-PROFILES | A0/A1/conditional profiles | Modern provisional baseline, not an accepted complete construction |
| TC-MASTER | Master research table | Existing technology candidates and original evidence dates |
| TC-ARCH | Architecture issue #1 | Explicitly requires reconciliation of legacy Session/TACo/Signal commitments; mutable issue, inspected not closed |
| TC-LANES | Lane map at baseline | Ownership of the resulting decisions and test work |
| TA-BASE | Tachyon archive | Captured 2026-09-23; inherited evidence, not freshly downloaded app assets |
| TA-WIRE | Wire/lifecycle chapter | Observed Matrix APIs, key packages, invitation/Welcome/message schemas and metadata |
| TA-DAG | Room-DAG chapter | Identifier reconstructions, state/event distinctions and bounded authorization tests |
| TA-CRYPTO | DMLS chapter | Epoch graph, policy coupling, retention setting and untested fork cases |
| P2P-STATUS | Are We P2P Yet | Historical/current research overview; displayed update date and later body entries are inconsistent |
| P2P-SLIDES | Linked 2026 P2P Matrix presentation | Architecture illustrations and research intentions; filename/title dating differs; not a deployment conformance specification |
| N-README | Neutrino README | Experimental scope/security warning; signature-absence statement is incomplete relative to source |
| N-SIGN | Neutrino event signing | Signed/trusted modes, key binding, canonical signature coverage and no rotation mechanics |
| N-CONFIG | Neutrino control configuration | Defaults, receipt semantics, soft-failure visibility, storage/log and retry configuration |
| N-START | Neutrino startup | Inspected search excerpts show signed-mode resolver requirement; not a complete startup audit |
| N-TEST | Signed federation test source | Positive/negative test implementation exists; not executed here |
| NI-README | Neutrino-Iroh README | Datagrams, BLE advertisement identity, bindings, artifact pinning and license composition |
| NI-START | Iroh/BLE composition source | Injected transport, key resolver, @n:{node_id} convention and explicit delivery-receipt enablement |
| MLS-PROTOCOL | RFC 9420 | Standard MLS protocol, not a specification of the custom deployed DMLS/room dialect |
| MLS-ARCH | RFC 9750 | Authentication/delivery-service separation and both consistent/eventually-consistent commit sequencing |
| DMLS-DRAFT | DMLS datatracker entry | Draft-03 remains an expired Internet-Draft at inspection; proposal is not a completed RFC or binary conformance certificate |
| MATRIX-CS | Matrix client-server specification v1.16 | Versioned comparator also used by the Tachyon archive; not a claim that v1.16 is the newest release |
The supplied image is a user-provided historical diagram, not newly discovered source code. It was inspected as an image; no OCR-derived claims are required. No upstream source or artifact is relicensed by this study. Existing third-party provenance remains in the Tachyon archive rather than being duplicated wholesale into TalkCo.
#Source discrepancy register
| Discrepancy | Resolution used here | Remaining check |
|---|---|---|
| Neutrino README says signatures absent; current source implements signed mode | Report code path and base trusted-mode default separately; retain experimental warning | Match exact Android artifact, upstream lockfile and runtime config |
| Generic delivery receipts default off; Iroh composition sets them on | Inspect the composition root, not only the default struct | Trace how the actual client labels and emits these signals |
| Presentation describes strong metadata protection; archive exposes invitation/routing fields | Prefer observed packet schemas for the captured deployment | Fresh capture after any invitation/envelope redesign |
| Message-DAG convergence can be mistaken for DMLS fork resolution | Report only the graph actually branched in the lab | Execute concurrent membership forks with three or more devices |
| Familiar room-version/event names suggest standard compatibility | Pin experimental hash/auth behavior rather than infer equivalence from names | Independent conformance vectors and real-server interoperability |
| Soft-failure harness can change client visibility | Separate accepted-state convergence from displayed-timeline equality | Run both configurations under the same delivery schedule |
| Website/PDF dating is internally inconsistent | Record retrieval date and immutable code pins where available | Obtain release/build manifests for version-specific claims |
#3. Executed analytical model
The companion Python model uses only the standard library and performs no network calls. The stored results are machine-readable. It was executed locally in this research session and checked against its deterministic output.
python3 docs/research/2026-09-24/matrix-p2p-model.py \
--check docs/research/2026-09-24/matrix-p2p-model-results.json
The success message explicitly says no implementation was tested. Re-running the script establishes reproducibility of these calculations, not a pass for the future integration tests.
#3.1 Fanout is counted in devices, not people
Let U be users, d devices per user, D = U*d total devices, M application messages per group per day, and E assumed bytes per delivered envelope. Under unicast delivery to every device except the originating device:
recipient deliveries per application message = D - 1
recipient deliveries per group day = M * (D - 1)
aggregate delivered bytes per group day = M * (D - 1) * E
This includes another device belonging to the sender's user. A server can perform fanout after one sender upload, so aggregate recipient bytes must not be described as the author's uplink cost. A different distribution tree, batching policy or relay design changes where work occurs, not the need for intended recipients to obtain relevant content.
The illustrative parameters are two devices per person, 500 total application messages per group per day and 1,280 bytes per delivered envelope. They are deliberately stated assumptions, not measured Tachyon message sizes or a forecast of TalkCo use.
| People | Devices | Recipient deliveries per group/day | Aggregate delivered MB/day, decimal |
|---|---|---|---|
| 10 | 20 | 9,500 | 12.16 |
| 50 | 100 | 49,500 | 63.36 |
| 100 | 200 | 99,500 | 127.36 |
| 1,000 | 2,000 | 999,500 | 1,279.36 |
The model excludes retry/control traffic, additional framing, compression, attachments, custody replicas and repair. Those must be measured. It also records balanced binary-tree height only as an asymptotic comparator; a logarithmic key-tree path is not evidence of logarithmic total network distribution.
If instead every device emits r messages in the same interval, then M = r*D and aggregate recipient deliveries become r*D*(D-1). That quadratic group-wide workload is a workload assumption, not proof that the implementation performs quadratic work per one message.
#3.2 The revocation schedule model
The abstract model has three events: removal accepted at Alice, Bob learning that removal, and Bob attempting a release. It imposes only the causal requirement that Alice's removal precedes Bob learning it. Bob releases if his current local view still contains Carol.
| Valid schedule | Modeled outcome |
|---|---|
| Remove, learn, send | Bob blocks release after learning removal |
| Remove, send, learn | Bob releases after remote removal but before receiving it |
| Send, remove, learn | Release precedes remote removal |
All three schedules are enumerated. They are not equally likely outcomes and their counts are not probabilities. The model establishes the simple information boundary: preventing the middle schedule requires a different release precondition or a weaker global revocation promise, not merely a later deterministic merge.
The model does not implement MLS, DMLS, Matrix state resolution, cryptographic keys or a hostile client. It must not be cited as a demonstrated Tachyon vulnerability. Its role is to prevent an impossible acceptance criterion from entering TalkCo's integration plan.
#3.3 Cost dimensions not measured here
A future benchmark must separate initial download size, compiled/runtime memory, per-device group state, event ancestry storage, retained epoch secrets, key-package churn, state resolution, application fanout, attachment transfer, recovery and mobile energy use. The archive's WebAssembly file size is an artifact size, not browser peak memory or actual compressed transfer size.
For a sequential epoch history, a simple planning model of retired epochs scales with membership-change rate times retention window, subject to implementation retirement rules. Forks add branch-dependent state; convergence, puncturing, persistence and cleanup may change the result. No exact DMLS memory bound is inferred here.
Similarly, an event graph's size alone does not establish the cost of repeated state resolution. Missing dependency requests, adversarial branches, cache behavior and settlement scheduling can dominate. Benchmark accepted work and rejected work independently, including how a peer applies backpressure.
#4. Shared implementation fixture
Use the fixture already required by TalkCo's profiles rather than a chat-only demonstration. Alice, Bob and Carol have distinct authenticated devices; at least one user also has a second device. Two profile contexts must remain unrevealed to one another. Include a private conversation, a consented publication, a shared record/grid, a document checkpoint, a private attachment, a late reader, a non-reading custodian and a replaceable relay.
Run the same logical workload against the smaller A0 core, a bounded client-owned Matrix/DMLS group path and the existing integrated-workspace countercandidate. Do not force every candidate to use the same internal representation. Compare the same externally meaningful acceptance, disclosure, evidence, custody and failure outcomes.
Record exact source/dependency revisions, build flags, platform, configuration, deterministic seeds, delivery schedule, input objects, expected results, actual traces and limitations. Distinguish imported source tests from tests actually run. Preserve failures and unsupported operations rather than turning successful process exit into a universal pass.
#Observation vector after each operation
accepted object/state revision
accepted membership and per-device authority
cryptographic epoch/extremities and decryptable audience
locally durable state and outstanding outbox operations
displayable content and local attention/filtering state
retained custody copies, leases and repair obligations
exportable authentication/consent evidence
observer-visible identifiers, routes, timing and sizes
An implementation passes only the dimensions relevant to its declared profile. A matching debug JSON export is neither necessary nor sufficient when local trust annotations or legitimate local filters differ.
#5. Proposed protocol and adversarial tests
Status of every test below: NOT RUN in this study. These are assignment-ready research gates, not asserted results. Existing archived Tachyon tests are separately identified in section 1 and are narrower than these cases.
| ID | Experiment | Required observation or falsification condition | Lane |
|---|---|---|---|
| MP-01 | Create/admit/send through two real selected homeserver implementations | Custom key algorithms, to-device types and chosen sync API behave as expected; unsupported behavior is explicit | #9, #13 |
| MP-02 | Cross-homeserver delivery with duplicate/lost responses | Application deduplication and outbox state remain correct; HTTP success is not misreported as durable recipient acceptance | #9, #10 |
| MP-03 | Concurrent additions on partitioned branches | Honest peers converge on admissible membership and keys; no unauthorized leaf receives later secrets | #3, #5 |
| MP-04 | Concurrent add/remove and remove/re-add of the same user/device | Exact precedence, invitation consent, key-package use and history access are declared and observed | #3–#5 |
| MP-05 | Merge of membership merges, with a member present in only one branch | No hidden central sequencer, unauthorized union of audiences or unbounded retained branch state | #3, #5 |
| MP-06 | Malicious current member submits validly signed but unauthorized Commit/state change | Cryptographic validity does not bypass room/object authority | #3, #5 |
| MP-07 | Forged, replayed, wrong-context and stale invitation acceptance | Consent is bound to target, action, invitation, context and relevant current authority | #2–#5 |
| MP-08 | Missing, contradictory or oversized authorization ancestry | Unknown authority remains pending/rejected within bounds; no force-accept fallback grants power | #5, #13 |
| MP-09 | Compare normal and harness soft-failure visibility settings | State, graph and client presentation results are separately reported | #5, #10 |
| MP-10 | Resume after epoch retirement with delayed ordinary/control messages | Document which messages can decrypt, which need recovery, and what old secrets remain | #3, #4 |
| MP-11 | Restart after each crypto/state/outbox persistence boundary | No accepted unauthorized state, consumed key reuse, lost acknowledged work or duplicated disclosure | #4, #10 |
| MP-12 | Restore old backup and clone one device state onto two devices | Current authority is not silently restored from history; fork/recovery behavior is explicit | #3, #4 |
| MP-13 | Introduce a new device via a malicious or reset account/key service | Cross-context grants do not follow automatically from an untrusted device list | #3, #4 |
| MP-14 | Export all recipient-visible authentication artifacts | Evaluate the complete private evidence profile, not ciphertext alone | #3 |
| MP-15 | Send the same object over two different carriers | Object identity, deduplication, authorization and consent remain stable | #2, #9 |
| MP-16 | Repeat two unrevealed contexts through the same carrier/provider | Quantify linkage by IDs, device proofs, connections, timing, topic and lookup behavior | #4, #9 |
| MP-17 | Observe BLE discovery without joining a room | Capture only controlled test-device broadcasts; identify node/name/proximity correlation | #4, #9 |
| MP-18 | Trace Neutrino delivery receipt from remote 2xx to client display | No false claim of human reading or unsolicited attention disclosure in the TalkCo profile | #10 |
| MP-19 | Ordinary Matrix bridge/export with narrower source audience | No automatic disclosure, private-history import or unsupported privacy claim | #2, #3, #12 |
| MP-20 | Shared-grid/doc update from removed writer with valid old keys | CRDT merge does not override current acceptance rules; dependencies and rejected edits are inspectable | #5 |
| MP-21 | Late reader receives selected history/checkpoint | Original authorship, current endorsement and reported history remain distinguishable | #2, #3, #5 |
| MP-22 | Store/repair encrypted attachment at a non-reading custodian | Host lacks application keys; leases, byte integrity, expiry and repair are correctly enforced | #6–#8 |
| MP-23 | Remove retention authority while an offline repair job is pending | Repair does not resurrect expired custody; already disclosed copies are not falsely claimed erased | #7, #12 |
| MP-24 | Exhaust KeyPackages, queue space, storage, dependency budget and epoch budget | Bounded failure and backpressure; no unsafe fallback or permanent false device removal | #4, #8–#10 |
| MP-25 | Screen lock, process kill, OS suspension and multi-day offline mobile use | Correct local durability and declared delivery limits, with measured energy/resource use | #10, #13 |
| MP-26 | Browser reload, service-worker update, storage eviction and origin compromise model | Explicit endpoint trust boundary; no assumption that a PWA cache is durable secret custody | #4, #10 |
| MP-27 | Unknown room version, unsupported crypto suite/profile and downgrade attempts | Fail closed for critical semantics; compatibility labels accurately describe what works | #2, #3, #13 |
| MP-28 | Independent canonicalization/hash/auth vectors including delimiter and numeric edges | Exact interoperable bytes and authorization, with no speculative exploit claim from encoding alone | #2, #5, #13 |
| MP-29 | Match built Android artifact to upstream/source/configuration | Pin .aar, dependency lock, feature flags and effective receipt/signing policy | #10, #13 |
| MP-30 | Export/import and replace the selected engine or carrier | Preserve intended object meaning and current authority without unintended historical disclosure | #1, #2, #4 |
#Resource and safety limits for the laboratory
Use synthetic identities, consented test devices and controlled rooms only. Do not send malformed traffic to unrelated production rooms or enumerate real accounts. Bound event count, object size, epoch/fork count, concurrent requests, wall-clock runtime and captured trace retention. Raw captures can contain keys or plaintext even when the external protocol is encrypted; store them with appropriate access and avoid publishing real participants' data.
For source execution, pin repositories and dependencies, record licenses, and isolate third-party test execution from write credentials. Documentation CI should not be treated as the place to run arbitrary upstream code with repository-write authority.
#6. Decision gates and stop conditions
#Gate A: precise source and compatibility baseline
Obtain exact custom Tachyon source/lockfile/build flags, the archived artifact hash, and the intended room/DMLS profile. Reproduce its basic synthetic behavior and then establish real-server behavior separately. Do not spend an integration budget on a binary-only dependency whose protocol may be changing without a migration contract.
#Gate B: context and evidence feasibility
Before broad UI integration, demonstrate two unrevealed contexts and the selected private evidence profile through the full invitation/device/recovery path. An adapter that requires replacing most authentication machinery must be estimated as new protocol work. Failure here can narrow Matrix to explicit interoperability or opaque transport rather than disqualifying all Matrix research.
#Gate C: authority and partition correctness
Run concurrent membership and object-authority fixtures with delayed/duplicate/maliciously scheduled traffic. Require agreement on authorized effects, not just total event ordering. Document the revocation freshness policy and the set of operations intentionally unavailable during partitions.
#Gate D: platform and custody operation
Measure crash recovery, background constraints, bounded storage/CPU and independent opaque custody. Confirm that the desired receipt/attention semantics and transport privacy profile survive the actual composition root and platform build.
#Gate E: total maintained complexity and reversibility
Compare code that TalkCo must maintain after identity, evidence, custody and object adapters are included. A smaller custom core is not inherently preferable; an integrated engine is not inherently cheaper. Select the implementation that satisfies the declared contract with a sustainable maintenance and export path. Record the choice in an ADR, including the evidence that would reverse it.
If these gates show that the Matrix-derived path needs most of its authority and crypto integration replaced, retain the useful protocol lessons and use Matrix only at a narrower seam. If it removes substantial work while passing the relevant tests, adopt that responsibility rather than duplicating it solely to maintain a conceptual layer diagram.
#7. Highest-value additional inputs
Exact Tachyon source and build provenance: custom Rust crates/branches, OpenMLS/DMLS fork revisions, Cargo lockfile, build flags, deployment bundle hash, protocol notes and intended compatibility guarantees. The archive identifies these as missing; source symbols and reconstructed hashes cannot substitute for a maintainable source baseline.
Controlled runtime access: disposable accounts on selected Matrix homeservers, a separate federation test pair, synthetic multi-device users, and permission to capture only those test sessions. This would separate broker permissiveness from real-server behavior.
Neutrino platform evidence: the actual Android .aar/APK provenance, embedded upstream commit, feature flags, effective signing/trusted-network configuration, receipt rendering and transport settings. Source trees from different repositories must not be combined into an imaginary installed version.
TalkCo threat-model decisions: the observers against whom contexts must be unlinked, acceptable direct-link metadata, maximum tolerated stale disclosure, private authentication/evidence target, history/recovery promises and initial supported platform. Without these, testing can measure behavior but cannot determine acceptability.
Resource and custody assumptions: expected group/device counts, traffic distribution, attachment sizes, offline duration, host redundancy/leases, repair budget and energy/storage targets. The illustrative model parameters are not requirements.
Independent review scope: the coupled authorization/epoch construction, private evidence profile, key lifecycle, rollback behavior, bounded parsing/ancestry and relevant dependency/license/supply-chain review. These are separable investigations; a passing UI or documentation build does not close them.
#8. Agent handoff
The durable research starts at research-matrix-p2p.md. Detailed Matrix observations belong in the protocol chapter; integration arguments belong in the composition chapter; new empirical results belong here or in a linked dated experiment with exact commands and artifacts. Keep the comprehensive package disposition in the existing master table.
Do not silently close architecture issue #1, replace the canonical Session/TACo/Signal commitments, claim an independent audit, infer all old README statements describe current code, or relabel modeled/inherited results as fresh application execution. Update the relevant lane and owning source only when its stated evidence exists.
The user requested technical research and documentation, not product implementation. The companion script is a bounded analytical model, and the report-generation workflow is documentation infrastructure. No application, homeserver or cryptographic implementation is introduced by this evaluation.