Skip to content

docs: add an interactive plain-English tour of how Firstmate works - #2534

Open
MikeyB03 wants to merge 2 commits into
kunchenguid:mainfrom
MikeyB03:fm/firstmate-architecture-html
Open

docs: add an interactive plain-English tour of how Firstmate works#2534
MikeyB03 wants to merge 2 commits into
kunchenguid:mainfrom
MikeyB03:fm/firstmate-architecture-html

Conversation

@MikeyB03

Copy link
Copy Markdown

Intent

Create a comprehensive, plain-English interactive HTML explanation of the current Firstmate implementation at docs/how-firstmate-works.html, with a short tracked evidence note. Inspect and accurately trace material claims to current scripts, authoritative docs, tests, and hooks. Cover the mental model, component map, session start and supervision loop, task and Second Mate lifecycles, hooks and safety controls, durable state and recovery, captain-facing experience, worked scenarios, glossary, and FAQ. Include an at-a-glance system map, session and supervision sequence, task state machine, and filesystem and state hierarchy, with progressive disclosure, responsive keyboard-accessible print-friendly layout, no horizontal overflow, and sanitised examples containing no credentials, private messages, sensitive paths, or machine-specific details. Distinguish current behaviour, verified limitations, and proposed enhancements. Explain HMS Surprise display identities over mechanical task IDs; harness versus model versus backend versus Herdr Space; turn-end guard, heartbeat, wake, stale and open-decision semantics; durable authority versus notification history; no-mistakes versus direct-PR versus local-only with explicit merge authority; the current Codex no-supported-tool-row-filter limitation versus Pi Calm; and label a clean Captain View only as a future possibility. Keep tracked Markdown one sentence per physical line and use plain dashes. Validate local links, HTML, accessibility, desktop and narrow rendering, print behaviour, and repository documentation checks. Preserve the private Lavish review surface, never publish it, push only through no-mistakes, open a PR, drive CI green, and never merge. The existing README banner palette is the selected design source, Mermaid is used for the routed diagrams, and the completed decision inventory found no genuine unresolved captain choices.

What Changed

  • Adds docs/how-firstmate-works.html, a self-contained interactive explainer of the current Firstmate implementation: mental model, component map, session start and supervision loop, task and Second Mate lifecycles, hooks and safety controls, durable state and recovery, captain-facing experience, worked scenarios, glossary, and FAQ, with Mermaid system-map, sequence, state-machine, and filesystem diagrams behind progressive-disclosure expanders.
  • Adds docs/how-firstmate-works-evidence.md recording the principal tracked sources behind the page's claims and the validation run against it (documentation-audience check, audience test, HTML/link/anchor audit, desktop and narrow browser rendering, keyboard and accessibility checks, print output).
  • Links the new page from the README documentation list and classifies the evidence note as maintainer-verification in docs/documentation-audiences.json.

Risk Assessment

✅ Low: Fix round is a 3-line CSS/label change in one docs HTML file; both prior findings are correctly addressed and existing width, wrapping, and scroll-region safeguards cover overflow without the removed clamp.

Testing

Ran the repo's documentation-audience test and doc-audience checker (both pass), then drove the page in a real browser to gather visual evidence: desktop and 390px screenshots, all three diagram captures, the captain-view section showing the labelled Codex limitation and not-implemented Captain View, plus a printed A4 PDF with page images. Accessibility, keyboard, overflow, print, and link checks all pass; no failures or flakiness found.

Evidence: Print output (35 A4 pages)

Source: Print output (35 A4 pages)

%PDF-1.4
%

... [1209398 bytes truncated] ...

00937315 00000 n 
0000937681 00000 n 
0000938070 00000 n 
0000938919 00000 n 
0000939259 00000 n 
0000941395 00000 n 
0000941609 00000 n 
0000942272 00000 n 
0000942868 00000 n 
0000943460 00000 n 
0000944063 00000 n 
0000944722 00000 n 
0000945501 00000 n 
0000945859 00000 n 
0000946133 00000 n 
0000946552 00000 n 
0000946757 00000 n 
0000949162 00000 n 
0000949376 00000 n 
0000949476 00000 n 
0000950092 00000 n 
0000950430 00000 n 
0000951016 00000 n 
0000951632 00000 n 
0000951954 00000 n 
0000952750 00000 n 
0000953062 00000 n 
0000953454 00000 n 
0000953639 00000 n 
0000953974 00000 n 
0000956015 00000 n 
0000956222 00000 n 
0000956372 00000 n 
0000956726 00000 n 
0000956909 00000 n 
0000957075 00000 n 
0000957395 00000 n 
0000958416 00000 n 
0000958623 00000 n 
0000959256 00000 n 
0000959823 00000 n 
0000960372 00000 n 
0000960934 00000 n 
0000961539 00000 n 
0000961855 00000 n 
0000962596 00000 n 
0000962928 00000 n 
0000963202 00000 n 
0000963583 00000 n 
0000963782 00000 n 
0000966198 00000 n 
0000966405 00000 n 
0000966473 00000 n 
0000966663 00000 n 
0000967230 00000 n 
0000967799 00000 n 
0000968175 00000 n 
0000968338 00000 n 
0000968493 00000 n 
0000969119 00000 n 
0000969277 00000 n 
0000969377 00000 n 
0000969574 00000 n 
0000969716 00000 n 
0000969906 00000 n 
0000970426 00000 n 
0000970771 00000 n 
0000971135 00000 n 
0000971926 00000 n 
0000974425 00000 n 
0000974632 00000 n 
0000974732 00000 n 
0000975301 00000 n 
0000975621 00000 n 
0000976106 00000 n 
0000976677 00000 n 
0000977239 00000 n 
0000977553 00000 n 
0000978271 00000 n 
0000978570 00000 n 
0000978939 00000 n 
0000979093 00000 n 
0000979276 00000 n 
0000979456 00000 n 
0000979779 00000 n 
0000981890 00000 n 
0000982097 00000 n 
0000982197 00000 n 
0000982337 00000 n 
0000982470 00000 n 
0000982712 00000 n 
0000982981 00000 n 
0000984754 00000 n 
0000984961 00000 n 
0000985283 00000 n 
0000985584 00000 n 
0000987525 00000 n 
0000996731 00000 n 
0000996980 00000 n 
0000997459 00000 n 
0000997980 00000 n 
0000998187 00000 n 
0000998370 00000 n 
0000998670 00000 n 
0000999500 00000 n 
0000999707 00000 n 
0000999807 00000 n 
0001000376 00000 n 
0001000696 00000 n 
0001001181 00000 n 
0001001752 00000 n 
0001002314 00000 n 
0001002628 00000 n 
0001003346 00000 n 
0001003645 00000 n 
0001004014 00000 n 
0001004168 00000 n 
0001004351 00000 n 
0001004531 00000 n 
0001004854 00000 n 
0001006965 00000 n 
0001007172 00000 n 
0001007805 00000 n 
0001008372 00000 n 
0001008921 00000 n 
0001009483 00000 n 
0001010088 00000 n 
0001010404 00000 n 
0001011145 00000 n 
0001011477 00000 n 
0001011751 00000 n 
0001011950 00000 n 
0001014343 00000 n 
0001014550 00000 n 
0001014618 00000 n 
0001015187 00000 n 
0001015563 00000 n 
0001015718 00000 n 
0001015876 00000 n 
0001016667 00000 n 
0001018916 00000 n 
0001019123 00000 n 
0001019275 00000 n 
0001019426 00000 n 
0001019526 00000 n 
0001019659 00000 n 
0001021386 00000 n 
0001021593 00000 n 
0001021743 00000 n 
0001022414 00000 n 
0001022621 00000 n 
0001022944 00000 n 
0001024197 00000 n 
0001024411 00000 n 
0001024561 00000 n 
0001024935 00000 n 
0001025095 00000 n 
0001025285 00000 n 
0001026295 00000 n 
0001026502 00000 n 
0001026602 00000 n 
0001027171 00000 n 
0001027491 00000 n 
0001027976 00000 n 
0001028547 00000 n 
0001028861 00000 n 
0001029579 00000 n 
0001029878 00000 n 
0001030247 00000 n 
0001030401 00000 n 
0001030584 00000 n 
0001030764 00000 n 
0001031087 00000 n 
0001031454 00000 n 
0001033374 00000 n 
0001033581 00000 n 
0001034214 00000 n 
0001034781 00000 n 
0001035330 00000 n 
0001035892 00000 n 
0001036497 00000 n 
0001036813 00000 n 
0001037554 00000 n 
0001037886 00000 n 
0001038160 00000 n 
0001038541 00000 n 
0001038740 00000 n 
0001041156 00000 n 
0001041363 00000 n 
0001041463 00000 n 
0001041596 00000 n 
0001043272 00000 n 
0001043479 00000 n 
0001043547 00000 n 
0001043892 00000 n 
0001044256 00000 n 
0001046369 00000 n 
0001049727 00000 n 
0001049979 00000 n 
0001050214 00000 n 
0001050695 00000 n 
0001050909 00000 n 
0001051011 00000 n 
0001052408 00000 n 
0001052615 00000 n 
0001052989 00000 n 
0001053708 00000 n 
0001055605 00000 n 
0001055839 00000 n 
0001056741 00000 n 
0001056899 00000 n 
0001058588 00000 n 
0001058802 00000 n 
0001058952 00000 n 
0001059326 00000 n 
0001059516 00000 n 
0001060500 00000 n 
0001066217 00000 n 
0001066466 00000 n 
0001066698 00000 n 
0001067196 00000 n 
0001067416 00000 n 
0001067484 00000 n 
0001067690 00000 n 
0001068327 00000 n 
0001068987 00000 n 
0001069416 00000 n 
0001069587 00000 n 
0001069751 00000 n 
0001070482 00000 n 
0001070646 00000 n 
0001070748 00000 n 
0001071157 00000 n 
0001071369 00000 n 
0001071517 00000 n 
0001071720 00000 n 
0001071910 00000 n 
0001072506 00000 n 
0001072899 00000 n 
0001073313 00000 n 
0001074229 00000 n 
0001074624 00000 n 
0001077029 00000 n 
0001077249 00000 n 
0001077401 00000 n 
0001077804 00000 n 
0001077969 00000 n 
0001078166 00000 n 
0001078337 00000 n 
0001079439 00000 n 
0001079659 00000 n 
0001079767 00000 n 
0001081165 00000 n 
0001081372 00000 n 
0001081772 00000 n 
0001082539 00000 n 
0001082746 00000 n 
0001082896 00000 n 
0001083196 00000 n 
0001083767 00000 n 
0001083974 00000 n 
0001084074 00000 n 
0001084643 00000 n 
0001084963 00000 n 
0001085448 00000 n 
0001086019 00000 n 
0001086581 00000 n 
0001086895 00000 n 
0001087613 00000 n 
0001087912 00000 n 
0001088281 00000 n 
0001088435 00000 n 
0001088618 00000 n 
0001088941 00000 n 
0001091028 00000 n 
0001091235 00000 n 
0001091303 00000 n 
0001091823 00000 n 
0001092168 00000 n 
0001092532 00000 n 
0001094671 00000 n 
0001094878 00000 n 
0001095511 00000 n 
0001096078 00000 n 
0001096627 00000 n 
0001097189 00000 n 
0001097794 00000 n 
0001098110 00000 n 
0001098851 00000 n 
0001099183 00000 n 
0001099457 00000 n 
0001099656 00000 n 
0001102049 00000 n 
0001102256 00000 n 
0001102389 00000 n 
0001102631 00000 n 
0001104312 00000 n 
0001104381 00000 n 
0001104541 00000 n 
0001104841 00000 n 
0001105814 00000 n 
0001106034 00000 n 
0001106102 00000 n 
0001106739 00000 n 
0001107168 00000 n 
0001107332 00000 n 
0001107496 00000 n 
0001107699 00000 n 
0001108092 00000 n 
0001108506 00000 n 
0001109422 00000 n 
0001109772 00000 n 
0001111983 00000 n 
0001112203 00000 n 
0001112945 00000 n 
0001113574 00000 n 
0001114234 00000 n 
0001114944 00000 n 
0001115310 00000 n 
0001115600 00000 n 
0001116046 00000 n 
0001116261 00000 n 
0001118620 00000 n 
0001118840 00000 n 
0001118940 00000 n 
0001119609 00000 n 
0001119949 00000 n 
0001120558 00000 n 
0001121231 00000 n 
0001121585 00000 n 
0001122447 00000 n 
0001122784 00000 n 
0001123202 00000 n 
0001123363 00000 n 
0001123558 00000 n 
0001123927 00000 n 
0001126013 00000 n 
0001126233 00000 n 
0001126385 00000 n 
0001126582 00000 n 
0001126753 00000 n 
0001127799 00000 n 
0001128019 00000 n 
0001128127 00000 n 
0001129525 00000 n 
0001129739 00000 n 
0001129807 00000 n 
0001129973 00000 n 
0001130281 00000 n 
0001131261 00000 n 
0001131475 00000 n 
0001131813 00000 n 
0001132399 00000 n 
0001132721 00000 n 
0001133113 00000 n 
0001133270 00000 n 
0001133605 00000 n 
0001135526 00000 n 
0001135740 00000 n 
0001136403 00000 n 
0001136999 00000 n 
0001137591 00000 n 
0001138194 00000 n 
0001138853 00000 n 
0001139127 00000 n 
0001141273 00000 n 
0001141487 00000 n 
0001141829 00000 n 
0001143495 00000 n 
0001143702 00000 n 
0001143770 00000 n 
0001143933 00000 n 
0001144088 00000 n 
0001144879 00000 n 
0001145201 00000 n 
0001147281 00000 n 
0001147488 00000 n 
0001147588 00000 n 
0001148157 00000 n 
0001148477 00000 n 
0001148962 00000 n 
0001149533 00000 n 
0001149847 00000 n 
0001150565 00000 n 
0001150864 00000 n 
0001151233 00000 n 
0001151387 00000 n 
0001151570 00000 n 
0001151750 00000 n 
0001152073 00000 n 
0001154160 00000 n 
0001154367 00000 n 
0001155000 00000 n 
0001155549 00000 n 
0001156111 00000 n 
0001156716 00000 n 
0001157032 00000 n 
0001157773 00000 n 
0001158105 00000 n 
0001158379 00000 n 
0001158578 00000 n 
0001160945 00000 n 
0001161152 00000 n 
0001161252 00000 n 
0001161385 00000 n 
0001161627 00000 n 
trailer
<</Size 2709
/Root 1787 0 R
/Info 1 0 R>>
startxref
1163334
%%EOF
- Evidence: [Print page 1 render](https://github.com/MikeyB03/firstmate/blob/bf3f09745b429324c7171bbac00f1f6e086b6d3b/.no-mistakes/evidence/fm/firstmate-architecture-html/print-page-01.png) - Evidence: [Print page 2 render](https://github.com/MikeyB03/firstmate/blob/bf3f09745b429324c7171bbac00f1f6e086b6d3b/.no-mistakes/evidence/fm/firstmate-architecture-html/print-page-02.png)
Evidence: Lighthouse and geometry summary
Accessibility: 100 Best Practices: 100 SEO: 100 (58 passed, 0 failed)
mermaid svgs=3 titles=[Firstmate system map, Session start and supervision sequence, Task operational state machine]
docOverflow=0 at 1440x900 and 390x844; details total=22 open=22 after "Open technical evidence", 0 after "Close expanders"
print: Pages: 35 Page size: 594.96 x 841.92 pts (A4)
fm-doc-audience-check: ok surfaces=69 local_links=278

Pipeline

Updates from git push no-mistakes

✅ **intent** - passed

✅ No issues found.

✅ **Rebase** - passed

✅ No issues found.

⚠️ **Review** - 1 info
  • ⚠️ docs/how-firstmate-works.html:39 - overflow-x: hidden on both html and body hides horizontal overflow instead of preventing it, so the evidence note's "no document-level horizontal overflow" check passes by construction and can never detect a genuinely too-wide child. It also makes body a scroll container in browsers that resolve overflow-y: visible to auto, which can break the sticky topbar (line 116) and sticky sidebar (line 193). Prefer removing the clamp and relying on the existing min-width: 0 / overflow-wrap rules plus the labelled .table-shell scroll regions.
  • ℹ️ docs/how-firstmate-works.html:1651 - The filesystem hierarchy nests data/, state/, config/, and projects/ under a node labelled "Firstmate code root/" described as tracked scripts and docs. Per docs/configuration.md:194-195 those are the operational home's directories and only coincide with the code root when FM_HOME is unset; the page itself distinguishes "Private operational home" at line 1148. Relabelling the root as the effective Firstmate home would keep the diagram accurate under a set FM_HOME.
  • ℹ️ docs/how-firstmate-works.html:2052 - Mermaid is loaded from a jsDelivr CDN, so the three routed diagrams degrade to raw source text when the page is opened offline or from an air-gapped checkout; the print path inherits the same dependency. Intent selected Mermaid, so this is an accepted tradeoff worth noting rather than a defect.

🔧 Fix: drop overflow clamp and relabel filesystem tree root
1 info still open:

  • ℹ️ docs/how-firstmate-works-evidence.md:31 - The evidence note's line "Browser geometry checks found no document-level horizontal overflow at either viewport" was recorded while html/body still carried overflow-x: hidden; that clamp is now removed, so the geometry claim is no longer backed by a run against the current CSS. The remaining safeguards look sound (min-width: 0 on layout containers, overflow-wrap: anywhere on text nodes, minmax(0, 1fr) tracks, .table-shell/.mermaid-wrap scroll regions, .tree-row collapsing to 1fr in the narrow media query), so this is a note to re-run the 1440x900 and 390x844 geometry check rather than a suspected defect.
✅ **Test** - passed

✅ No issues found.

  • bash tests/fm-documentation-audiences.test.sh (4 checks pass)
  • bash bin/fm-doc-audience-check.sh — ok surfaces=69 local_links=278
  • Browser render of docs/how-firstmate-works.html over a local static server: 3 Mermaid SVGs with titles, 0 console errors
  • Overflow geometry check at 1440x900 and 390x844: documentElement.scrollWidth - clientWidth = 0; all 4 wide tables in role=&#34;region&#34; aria-labelled overflow-x: auto shells
  • Keyboard: first Tab focuses .skip-link; Open technical evidence opens 22/22 details, Close expanders closes all
  • chrome-devtools-axi lighthouse — Accessibility 100, Best Practices 100, 58 audits passed, 0 failed
  • Headless Chrome --print-to-pdf + pdfinfo/pdftotext: 35 A4 pages, collapsed evidence text present, screen-only control labels absent
  • Link audit script over the HTML: 69 unique hrefs, all local files and anchors resolve
✅ **Document** - passed

✅ No issues found.

⚠️ **Lint** - 1 warning
  • ⚠️ linter found issues (exit code 127)
✅ **Push** - passed

✅ No issues found.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant