#Consistency sweep — cross-document contradictions and their resolutions
Produced by the editor pass over docs/02–docs/08 and docs/research/canon.md on 2026-08-18. Every issue below has been applied to the documents; this file is the audit trail of what was changed and why.
#Readiness assessment (as written before the fixes were applied)
Close, but not yet decision-ready — and the reason is structural, not editorial. The seven docs are unusually disciplined against the canon: phase names, the nine effort domains, the stack table, the invariants, the terminology and the assumption IDs (A1–A24) are used consistently, cross-references are dense and mostly accurate, and where a writer disagreed with canon (03 §2.1 on the Sunmi price, 05 §3.2 on the 52% capture, 06 §3.1 on the A16 margin gate) they said so explicitly instead of quietly diverging — that is exactly the behaviour you want and it is what makes the remaining conflicts findable. On substance, a founder can already read this and make the two decisions that matter: (a) the shape is right — own the POS, sell CRM-first, Czechia only, counter-service, and (b) the brief's S1 (3 engineers, 24 months, EUR 900k) is dead, replaced by 5 engineers, 36 months, EUR 1.8–2.4M, with two pre-code kill gates (A1 deposits, A2 payments term sheet) that cost under EUR 40k to test. That is a defensible go/no-go. What blocks a clean sign-off is that the single document holding the verdict (01-feasibility-verdict.md) does not exist despite six inbound links, and that three headline numbers still disagree across files: v1 identity capture (30–38% vs 52%), Y3 ARR (EUR 475k modelled vs EUR 550–750k canonical), and blended ARPU (EUR 110–130 canonical vs EUR 180 in the P&L). Fix those four plus the P3 capacity hole and this is investor-grade.
#Biggest gap identified
The P3 arithmetic hole, and it is the phase the whole business case rests on. 07 §2 scopes P3 as the full v2 tier (+85→+95 eng-months per canon §5.1) plus two country entries, but 07 §5.1 budgets only 65 eng-months of capacity in M32–M46 — a ~30 eng-month, ~46% overrun that neither canon nor any doc reconciles. That matters more than any single number because P3 is where the payments residual (the entire margin thesis: 60–90 bps, EUR 1,200–1,620/Site/yr, the reason A2 is a stop-gate) is supposed to turn on, and where Sites go 40–60 → 150–250. If P3 can only deliver ~two thirds of v2, the founder needs to know now which two thirds — T2 LAN multi-station and table service are what unlock the sites that generate the card volume, while QR PWA ordering and Wallet passes are what move identity capture from ~35% to ~52% and make the CRM renewal argument work. You cannot cut either half without breaking a thesis that is stated as proven elsewhere in the deliverable. Second-order but related: nobody has modelled FY5, which 07 §13 concedes is still burning ~EUR 500k/yr on the mid case against a claimed peak capital of EUR 2.4M.
#Issues
#1. [HIGH] docs/04-payments-fiscal-compliance.md (lines 12, 346, 376), docs/05-crm-and-product-scope.md (line 5), docs/06-integrations.md (line 12), docs/07-roadmap-team-budget.md (line 502), docs/08-risks-tradeoffs-difficulties.md (line 12)
Conflict. Six links point to docs/01-feasibility-verdict.md, which does not exist. It is described as holding "the verdict itself" / "the go/no-go" — i.e. the one document the founder actually needs. There is also no index/README anywhere in the repo.
Resolution applied. Write docs/01-feasibility-verdict.md (go/no-go, the two P0 stop-gates A1/A2, the recommended shape from canon §1) before shipping. Until it exists, the deliverable has no entry point and no verdict. Do not fix by deleting the links.
#2. [HIGH] docs/07-roadmap-team-budget.md (§2 P3, §5.1), docs/research/canon.md (§2 phase table, §5.1)
Conflict. P3 is scoped as the full v2 tier (table service, handheld, T2 LAN, guest ordering + QR PWA + Wallet, HubRise module, card-linked identity, Brand Vouchers, WhatsApp/Viber, segmentation, Apps-on-Devices) plus UA and PL fiscal — canon prices that at +85→+95 eng-months. But 07 §5.1 budgets only 65 eng-months in M32–M46 (125 cumulative → 190 cumulative). A ~30 eng-month hole, ~46% over the available capacity, in the phase that carries the payments-revenue thesis.
Resolution applied. Canon's 190 cumulative eng-months at P3 exit wins. 07 must name which v2 items are actually cut to fit 65 eng-months (T2 LAN + table service + handheld alone is ~+27 in Domains A/C/D) and state explicitly that P3 ships a v2 subset, or move the P3 exit month.
#3. [HIGH] docs/05-crm-and-product-scope.md (§3.2, §10), docs/06-integrations.md (§1.1, §1.4), docs/08-risks-tradeoffs-difficulties.md (case-for #4, R11), docs/04-payments-fiscal-compliance.md (§6.2, §9), docs/research/canon.md (§1, A4)
Conflict. Identity capture. 05 computes v1 blended capture at 30–38% (A4 true) / 22–28% (A4 false) and states in two places that quoting ~52% at v1 is "a churn generator". 06 §1.4 uses "Yes, ~52% of Checks" as the v1 demo answer, 06 §1.1 lists ~52% as the canon path's identity coverage, 08 uses 52% unqualified, and canon A4 / 04 both frame the downside as "52% → 24–35%" as if 52% were the base case today.
Resolution applied. 05's tiering wins because it is the only doc that did the arithmetic: v1 sellable = 30–38% (A4 true) / 22–28% (A4 false); ~52% is the v2 figure once QR PWA ordering and Wallet passes ship. Amend canon §1 and A4 to carry the "(v2)" qualifier and restate A4's downside as 30–38% → 22–28% at v1. Strike bare "52%" from 06 §1.4 and 08.
#4. [HIGH] docs/07-roadmap-team-budget.md (§7.1, §7.4, §13 row 4), docs/research/canon.md (§5.2)
Conflict. Canon's S1 Y3 exit ARR is EUR 550–750k. 07's own mid case produces EUR 475k exit ARR at M47 with 220 Sites; only the high case (250 Sites, EUR 205/Site/mo) reaches EUR 615k. 07 resolves it by redefining canon's "Y3" as "third year of revenue" landing M44–M48 — a redefinition canon does not make.
Resolution applied. Keep canon's EUR 550–750k as the label but bind it explicitly to "third year of revenue = M44–M48" in canon §5.2 itself, and label 07's mid case (EUR 475k) as the modelled base with canon's band as the stretch. One of the two documents must stop presenting EUR 550–750k as the expected outcome.
#5. [HIGH] docs/07-roadmap-team-budget.md (§7.1, §7.3, §7.4), docs/research/canon.md (§5.4)
Conflict. Canon sets target blended ARPU at EUR 110–130/Site/mo (downside EUR 95). 07's P&L runs FY3 at EUR 125, FY4 at EUR 180, and the §7.4 sensitivity at EUR 155–205 — 38–58% above canon's ceiling. 07 justifies the delta as "KDS attach, messaging and payments residual", but canon's own term is blended ARPU, and canon §5.4 already lists the payments residual separately (Poland EUR 1,620/yr etc.).
Resolution applied. Canon must state one thing: whether EUR 110–130 is SaaS+CRM only or all-in. Recommend defining canon's EUR 110–130 as subscription-only (POS+CRM+KDS) and having 07 label its EUR 180 line "total recurring revenue per Site incl. payments residual and messaging" — not "blended ARPU". Otherwise the whole FY4 revenue line reads as canon-violating.
#6. [HIGH] docs/03-hardware-and-devices.md (§2.1, §3.1, §11 H1), docs/research/canon.md (§5.5)
Conflict. Canon's Tier A BOM fixes the Sunmi D3 Mini GMS at EUR 465 and the total at EUR 1,260–1,650. 03 §2.1 verifies the GMS SKU at EUR 579 (the EUR 465 anchor was the non-GMS SKU, which rule R3 forbids) and then tells the reader to "budget every Tier A BOM at the top of its stated range" — but at EUR 579 the true range is EUR 1,374–1,764, i.e. above canon's stated ceiling. The canonical total is arithmetically unreachable with a compliant SKU.
Resolution applied. 03's verified EUR 579 wins on the SKU price; canon §5.5 Tier A total must be restated as EUR 1,374–1,764 pending distributor quotes (H1, P0 exit). Do not leave a canonical BOM total that no compliant configuration can hit.
#7. [HIGH] docs/04-payments-fiscal-compliance.md (§8 recurring cash-cost table), docs/research/canon.md (§5.1 Domain E)
Conflict. 04 budgets "Our PCI, years 1–2 (SAQ D-SP): EUR 20–40k one-off + ~0.3 eng-months/month ongoing". 0.3 eng-months/month is 3.6 eng-months/year — 8.6% of S1's entire 42 eng-month annual capacity, and over 36 months it exceeds the whole of canon's Domain E (11.0 eng-months for the S1 cut, which also has to cover the terminal port, Stripe adapter, splits, refunds, reconciliation and tips).
Resolution applied. Almost certainly a unit error. Restate as ~0.3 eng-months per quarter (≈1.2/yr) and confirm it sits inside Domain E's 11.0, or raise Domain E in canon §5.1. As written the number silently blows the effort plan.
#8. [MEDIUM] docs/08-risks-tradeoffs-difficulties.md (R4), docs/07-roadmap-team-budget.md (§7.1)
Conflict. R4's impact reads "70–95 Sites lost off a 620-Site Y3 path". No other document contains a 620-Site path: 07's ramp is 20 / 75 / 220 Sites at FY2/FY3/FY4 exit, and canon's P3 gate is 150–250 Sites. The 620 figure appears once, unlabelled, and inflates the stated churn impact ~3×.
Resolution applied. 07's ramp wins: restate R4 as "~25–35 Sites lost off a 220-Site path at M47". Delete 620.
#9. [MEDIUM] docs/08-risks-tradeoffs-difficulties.md (case-against #2, non-technical #3), docs/07-roadmap-team-budget.md (§11), docs/research/canon.md (§5.1 Domain H)
Conflict. 08 twice sizes the AI tier-0 support agent at "3 eng-months". 07 §11 calls it "an 8-eng-month domain-H investment that also carries billing and onboarding tooling" — i.e. the whole of Domain H. Canon gives no sub-line. A founder reading 08 will price the single largest support-cost lever at 3 eng-months.
Resolution applied. Canon Domain H = 8.0 eng-months (S1 cut) covering billing + payments-partner integration + onboarding tool + AI tier-0 + contracts. Add a canonical sub-split (recommend AI tier-0 ≈ 2.5–3.0 of the 8.0) and have both docs quote it identically.
#10. [MEDIUM] docs/06-integrations.md (§2.2, §10 row 5), docs/07-roadmap-team-budget.md (§2 P3), docs/research/canon.md (§4)
Conflict. Canon §4 places the HubRise-resold delivery module in v2 only; the "Full only" deferral list does not contain it. 06 §2.2 books it as 1.50 eng-months inside "v1 sellable, Full (S2)" (needed to reach canon's Domain I Full total of 8.5) and §10 labels it "Full / v2". 07 correctly puts it in P3/v2. Same item, three tier assignments.
Resolution applied. Canon wins: HubRise delivery module is v2. 06 must move the 1.50 into the v2 column and rebalance Domain I Full (8.5) with the mapping-UI framework / observability lines, or canon §4 must be amended to list HubRise under Full. Pick one and make both docs match.
#11. [MEDIUM] docs/02-architecture.md (§4 data model, invariant 2), docs/04-payments-fiscal-compliance.md (§5), docs/research/canon.md (§3.1 invariant 2, §6)
Conflict. Canon invariant 2 and 04 name the snapshotted field menu_version_id. 02's schema and invariant table use menu_snapshot_id. Canon §6 simultaneously bans "menu version" outside prose and makes Menu Snapshot the canonical entity — so the canon invariant uses a banned term as a schema field name.
Resolution applied. menu_snapshot_id wins (02). Correct canon §3.1 invariant 2 and 04 §5 to match. This is a schema-level name that will end up in migrations.
#12. [MEDIUM] docs/03-hardware-and-devices.md (TL;DR, §7), docs/07-roadmap-team-budget.md (§11)
Conflict. 03 says hardware causes 45% of support tickets and builds the entire EUR 25–43/Site/month hardware-ops model on that share. 07 §11 says "60% of tickets are printing" — printing is a subset of hardware, so 07's figure is strictly larger than 03's superset.
Resolution applied. Pick one and put it in canon §5.4 next to the 1.4 tickets/Site/month line. Recommend 03's 45% hardware-caused (of which printing is ~60%, i.e. ~27% of all tickets) since 03 owns the domain; 07 must restate as "60% of hardware tickets are printing".
#13. [MEDIUM] docs/08-risks-tradeoffs-difficulties.md (non-technical #4), docs/06-integrations.md (§2.2, §10), docs/research/canon.md (§5.1 Domain I)
Conflict. 08 prices the Dotypos migration importer at "~1.5–2.5 eng-months". 06 — the owning document — prices it at 1.00 eng-months, and that 1.00 is load-bearing for Domain I's canonical 4.0 S1-cut total (1.00 runtime + 1.25 GBP + 1.00 Dotypos + 0.75 CSV = 4.00 exactly).
Resolution applied. 06's 1.00 eng-months wins; correct 08. If the real number is 1.5–2.5, canon's Domain I S1-cut total of 4.0 has to move.
#14. [MEDIUM] docs/08-risks-tradeoffs-difficulties.md (non-technical #5 table, case-against #6), docs/04-payments-fiscal-compliance.md (header, §8)
Conflict. 04 declares itself "the single place compliance numbers live" and requires every other doc to match it. 08 introduces three compliance figures that appear nowhere in 04: ES producer fine "~EUR 150,000 per product per exercise" [known], DE Kassennachschau "EUR 25,000 per violation" [known], FR "EUR 7,500 per non-compliant software" [known]. All three are precise, all three are unsourced against 04's statute-level table, and the ES figure is the number that justifies the permanent Spain exclusion.
Resolution applied. Move all three into 04 §4.2 with a legal-confidence grade (H/M/L) and a counsel-verification owner, then have 08 cite 04. Any figure that cannot survive that move should be dropped to [estimate] or deleted — a fine amount quoted as [known] in the risk register will end up in an investor deck.
#15. [MEDIUM] docs/07-roadmap-team-budget.md (§7.2), docs/03-hardware-and-devices.md (§3.1, §7), docs/research/canon.md (§5.5)
Conflict. Hardware gross margin. Canon and 03 say "sell at cost + 15%, 15–25% gross margin after freight, spares and DOA" — but cost + 15% is a 13.0% margin on revenue before freight/spares/DOA, and 03 §7 concedes it "compresses toward 10%". 07's P&L books hardware COGS at "18% blended GM", which is above the arithmetic ceiling of the stated pricing rule.
Resolution applied. The pricing rule (cost + 15%) wins. Restate the achievable margin as 10–13% after freight, spares and DOA, correct canon §5.5's "15–25%", and re-run 07 §7.2 hardware COGS at 12% — it moves FY4 gross profit down ~EUR 19k, small but the current number is not derivable from the rule.
#16. [MEDIUM] docs/06-integrations.md (§3.1, §10 row 5, §11 A16), docs/research/canon.md (A16)
Conflict. Canon A16 requires HubRise to clear >50% gross margin at EUR 27–35/Site before the v2 delivery module ships. 06 §3.1 computes the actual margin at 0–39% and says the gate is only met at a EUR 59+ module price — then hands the contradiction back to the owner rather than resolving it. Three documents currently plan around a module whose own numbers fail its own gate.
Resolution applied. 06 is right about the arithmetic; the founder needs one decision recorded now, not at partner-agreement review. Recommend: reprice the delivery module at EUR 59 and restate A16 as ">50% GM at EUR 27–35 COGS against a EUR 59 module price", or explicitly reclassify the module as a closing concession with a 0% margin target.
#17. [LOW] docs/03-hardware-and-devices.md (TL;DR vs §3.3)
Conflict. TL;DR quotes the 120-seat multi-station BOM as "EUR 12,000–16,000"; §3.3 computes EUR 11,800–13,400 v1-shippable and EUR 14,300–15,900 with handhelds. Neither table range matches the headline, and the headline blurs the v1/v2 split the section is specifically trying to make.
Resolution applied. §3.3's two figures win: TL;DR should read "EUR 11,800–13,400 (v1-shippable) / EUR 14,300–15,900 with v2 handhelds".
#18. [LOW] docs/02-architecture.md (ADR-003), docs/03-hardware-and-devices.md (§2), docs/research/canon.md (§5.5)
Conflict. 02 ADR-003 says "the beachhead's hardware is EUR 465–688 Android AIOs". EUR 688 appears in no other document; canon and 03 price the D3 Pro GMS at EUR 639 and the D3 Mini GMS at 465 (verified 579).
Resolution applied. Use 03's verified pair: EUR 579–639. Delete 688.
#19. [LOW] docs/04-payments-fiscal-compliance.md (§1.3 Tip row)
Conflict. The Tip row attributes tip pooling's exclusion to canon: "(canon: out of scope until a UK or US customer pays for it)". Canon §4's out-of-scope table contains no such row; it only lists "Tip capture and per-employee attribution" as in-scope for v1. The parenthetical invents a canonical trigger.
Resolution applied. Either add the row to canon §4 ("Tip pooling / distribution — trigger: a paying UK or US customer, plus a German Steuerberater opinion") or drop the canon attribution and label it a proposal. Given 04's own §5 argument that pooling in DE is a payroll-tax event, adding it to canon is the better fix.
#20. [LOW] docs/07-roadmap-team-budget.md (§6.1), docs/research/canon.md (§5.2)
Conflict. Canon's S1 team is "founder + 3 engineers rising to 5 by M13". 07 §6.1 starts P0 at 2→3 engineers and reaches 5 during P1. Minor, but P0's 14 eng-months are computed off the lower figure.
Resolution applied. 07's 2→3 in P0 is the more realistic hiring ramp and its capacity table is self-consistent; amend canon §5.2 to "2 engineers at M0 rising to 3 by P0 exit and 5 by M13".
#21. [LOW] docs/05-crm-and-product-scope.md (TL;DR vs §9)
Conflict. TL;DR says "Storyous starts at 690 CZK/mo"; the §9 competitor table lists 390 / 690 / 890 / 2,990 CZK by tier. The entry price is 390 CZK (~EUR 16), which materially weakens the "a POS without the CRM is a EUR 79 commodity" framing it is used to support.
Resolution applied. §9's 390 CZK entry tier wins; restate the TL;DR as "Storyous starts at 390 CZK/mo (~EUR 16)".
#22. [LOW] docs/06-integrations.md (§10 row 4)
Conflict. The Storyous importer is tiered as "Full (S2) / S1 fast-follow". "S1 fast-follow" is not one of canon's four tiers (MVP / v1 S1 cut / v1 Full / v2), and canon §4 states there is no implicit inclusion.
Resolution applied. Use canon's tier name: "v1 Full", with the documented swap trigger (≥25% of the 40 P0 discovery Sites on Storyous → swaps into the S1 cut against a named 1.0-eng-month Full item). Delete the invented tier label.
#23. [LOW] docs/02-architecture.md (§1 stack table)
Conflict. "Ktor 3.5.0, released 4 Aug 2026 [verified]" — a precise version and release date two weeks before the writing date, labelled verified, appearing in no other document and load-bearing on nothing. It reads as the kind of detail that gets invented to look current.
Resolution applied. Either attach the source URL or drop to "Ktor 3.x [known]". Same treatment for 08's Toast "USD 511M S&M / ~30,000 net adds / USD 17.0k per Site [verified]" if no URL was actually loaded.
#24. [MEDIUM] docs/05-crm-and-product-scope.md (§6), docs/07-roadmap-team-budget.md (§10), docs/08-risks-tradeoffs-difficulties.md (case-against #3)
Conflict. Three items are identified as real, costed and outside every canonical tier, with no decision recorded: detractor routing + service-recovery Voucher (1.0), minimal waitlist + walk-in SMS (1.5), in-app staff self-onboarding (~1.5, which 08 calls "the only real mitigation" for 60–100%/yr front-of-house churn — one of the top-3 stated killers). 08 presents the last as a cost; 07 says it is explicitly unfunded.
Resolution applied. The founder needs a written yes/no on staff self-onboarding specifically before P1, because A20 (ticket rate ≤1.4) depends on it. Recommend adding it to canon §4 v1-Full at 1.5 eng-months with an S1-cut deferral, and adding the other two to canon's out-of-scope table with named triggers so they stop floating.