Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
2349 commits
Select commit Hold shift + click to select a range
3104ff0
add mattstack-window implementation plan
m4ttheweric Sep 15, 2026
90e5a88
mattstack-window: top tab bar replaces the left rail (approved redesign)
m4ttheweric Sep 15, 2026
a594bcd
mattstack-window spec: splash, deck label, in-shell launcher hiding, …
m4ttheweric Sep 15, 2026
4385c43
mattstack-window spec: reconcile splash, external-link policy, rail l…
m4ttheweric Sep 15, 2026
74d4a2a
mattstack-window spec: fragments in deep links; notification clicks r…
m4ttheweric Sep 15, 2026
b72955e
mattstack-window spec: dock-first tray menu and quit interception
m4ttheweric Sep 15, 2026
8754278
shellHandoff middleware + in-shell launcher hiding (#72)
m4ttheweric Sep 15, 2026
a718e8d
mattstack-window spec: dock-always policy, Window menu, quit with no …
m4ttheweric Sep 16, 2026
093a507
BOARD-31: board gates converge onto daemon gate:ask; gate-kit onto rt…
m4ttheweric Sep 16, 2026
03b76d3
BOARD-32: wrapper skills point shared gate ceremony at gate-protocol …
m4ttheweric Sep 16, 2026
a47e1e2
board+deck test preloads: adopt rt-client guardTestDaemonEnv (RT-135 …
m4ttheweric Sep 16, 2026
112bf3d
console: open-in-editor links honor the default-editor preference (#76)
m4ttheweric Sep 16, 2026
0a182b8
committing pen files
m4ttheweric Sep 16, 2026
d127f12
Merge branch 'main' of https://github.com/m4ttstack/apps
m4ttheweric Sep 16, 2026
d3a3d88
BOARD-CLEANUP: gate-form fallback, gate-kit lint bans, wrapper skill …
m4ttheweric Sep 16, 2026
028e77a
board: give discussion-drawer code blocks a top margin to match bottom
m4ttheweric Sep 16, 2026
1ff583d
BOARD-36: GateForm renders option description and question context (#78)
m4ttheweric Sep 16, 2026
ad7d526
board: a finished doctor speaks for two hours, not forever
m4ttheweric Sep 16, 2026
3125e1a
deps: bump @mattstack/rt-client to 0.26.0
m4ttheweric Sep 16, 2026
9721558
deps: bump @mattstack/rt-client to 0.27.0 (0.26.0 on npm predates the…
m4ttheweric Sep 16, 2026
9a8ca4f
deps: lock rt-client 0.27.0 (exact pin restored)
m4ttheweric Sep 16, 2026
6bc1ecb
deps: restore catalog: reference for rt-client
m4ttheweric Sep 16, 2026
6f0ef13
deps: repair rt-client catalog entry (definition pins 0.27.0, dep ref…
m4ttheweric Sep 17, 2026
d4e4d4f
console: add Agent Defaults settings page (rt agent codex provider) (…
m4ttheweric Sep 17, 2026
91c9ead
BOARD-37: thread sessionId into gate wait payload (#80)
m4ttheweric Sep 17, 2026
56b6d5f
board: re-read recent slack messages so edits land in the index (#81)
m4ttheweric Sep 17, 2026
56569e9
board skills: gate questions carry their own context (#82)
m4ttheweric Sep 17, 2026
1249b78
board: replies-posted line offers respond again when the reviewer com…
m4ttheweric Sep 17, 2026
b8a56cd
board: a fully approved reviewer roster buckets as approved
m4ttheweric Sep 17, 2026
4d7b8f5
board: orphan join prefers the executor owning the row's in-flight lane
m4ttheweric Sep 17, 2026
2c4685f
board: request a first review from a peer over the switchboard (#83)
m4ttheweric Sep 18, 2026
24e59aa
board: request a response from the author over the switchboard (#84)
m4ttheweric Sep 18, 2026
0e62f3f
board: ask pickers offer only enrolled peers (#85)
m4ttheweric Sep 18, 2026
b570dcb
board: relay Dockerfile and deploy docs use monorepo paths (#86)
m4ttheweric Sep 18, 2026
168d18e
board: operator remove for a peered board (#87)
m4ttheweric Sep 18, 2026
2f90fbf
board: version 0.1.4 (#88)
m4ttheweric Sep 18, 2026
d6eda5f
chat 0.1.1, console 0.1.1, deck 1.0.2: version bumps for the bundle r…
m4ttheweric Sep 18, 2026
27c4987
Merge pull request #89 from m4ttstack/app-version-bumps
m4ttheweric Sep 18, 2026
7e1ac09
deck 1.0.3: serve logs its own stdout and stderr to ~/.mattstack/deck…
m4ttheweric Sep 18, 2026
880a2d5
Merge pull request #90 from m4ttstack/deck-agent-log
m4ttheweric Sep 18, 2026
3ff6477
deck: prettier pass on agent-log files
m4ttheweric Sep 18, 2026
fe37a36
test comment: no em dashes
m4ttheweric Sep 18, 2026
30de19f
deck board: on-card ink roles for the card-grounded page
m4ttheweric Sep 18, 2026
3c061ab
Merge pull request #91 from m4ttstack/deck-agent-log-format
m4ttheweric Sep 18, 2026
7715a8f
deck: regenerate board bundle with bun 1.3.13 to match the CI pin
m4ttheweric Sep 18, 2026
7789053
deck 1.0.4: a failed bind names the port holder and always exits for …
m4ttheweric Sep 18, 2026
5f6afbd
Merge pull request #92 from m4ttstack/deck-dark-contrast
m4ttheweric Sep 18, 2026
0ed1b96
Merge pull request #93 from m4ttstack/deck-name-the-holder
m4ttheweric Sep 18, 2026
8e4e9f1
tokens: darken dark --card, restore separation from --panel
m4ttheweric Sep 18, 2026
919b04c
deck: canvas ground + card panels, matching board's surface structure
m4ttheweric Sep 18, 2026
167ea44
docs: add deck dark-mode mocks to board's pen design file
m4ttheweric Sep 18, 2026
0b1e4ec
deck: hide last row's border, keep every apps table's header for colu…
m4ttheweric Sep 18, 2026
7bf0ada
deck: show a dev-mode badge on the mattstack section
m4ttheweric Sep 18, 2026
0aa881a
deck: fix dev-mode badge's vertical alignment on the mattstack heading
m4ttheweric Sep 18, 2026
a04a096
deck update: resolve releases from the apps monorepo by tag prefix (#94)
m4ttheweric Sep 18, 2026
bcdc047
deck: version 1.0.5 (#95)
m4ttheweric Sep 18, 2026
096cc8a
board: keep a question's context on live gate/opened frames (#96)
m4ttheweric Sep 18, 2026
2263901
board: keep a question's context on live gate/opened frames (#96)
m4ttheweric Sep 18, 2026
6fbf6ce
Merge branch 'main' of https://github.com/m4ttstack/apps
m4ttheweric Sep 19, 2026
7683978
Review gates: per-finding picking, full-screen sheet, locked palette …
m4ttheweric Sep 20, 2026
7d5ca87
Dark surface retune, review sheet polish, text and surface ramps spec…
m4ttheweric Sep 21, 2026
70f53a6
Radix colour system: four ramps, seven hues, a contrast gate, and all…
m4ttheweric Sep 21, 2026
13efd53
board: auto-doctor stand-down skips the whole stack
m4ttheweric Sep 21, 2026
32eab0f
board: add sendPaneText, a live-pane nudge for stand-down
m4ttheweric Sep 21, 2026
e9a89b7
board: POST /triage/stand-down clears the row when muting an MR
m4ttheweric Sep 21, 2026
188601c
board: surface standDown on the toggled MR's row payload
m4ttheweric Sep 21, 2026
fe5c045
board: row-menu toggle and status line for auto-doctor stand-down
m4ttheweric Sep 21, 2026
9c2bc52
board: stand-down copy says MR vs stack based on real cascade
m4ttheweric Sep 21, 2026
adf0f40
board: prettier formatting fix (CI format:check)
m4ttheweric Sep 21, 2026
4598c82
tokens: text-4 shares slate 11 with text-2/text-3, not text-1's slate 12
m4ttheweric Sep 21, 2026
1efb984
ripple from text-4: retire no-dimmed-xs, fix one full-ink consumer
m4ttheweric Sep 21, 2026
44bf11c
spec: record the text-4 revision (issue 103)
m4ttheweric Sep 21, 2026
d59e9f1
spec: the body describes the new text ramp, not just the appendix
m4ttheweric Sep 21, 2026
8cf9fd8
text-4 moves off the high-contrast step so small text reads as secondary
m4ttheweric Sep 21, 2026
820aa1e
board: address CodeRabbit findings on stand-down (auth, race, descend…
m4ttheweric Sep 21, 2026
e86aac5
board: the slack filter drops its check overlay
m4ttheweric Sep 21, 2026
d62080f
board: one writer per state root (#105)
m4ttheweric Sep 21, 2026
37473a5
chat: two sidebar labels take their artboard size, not Mantine's default
m4ttheweric Sep 21, 2026
fef1523
chat: one type ladder, merged at the root
m4ttheweric Sep 21, 2026
f3995a8
board: merge verb on my approved, mergeable MR's status line
m4ttheweric Sep 21, 2026
b8be069
board: merge verb takes the strongest gray at rest
m4ttheweric Sep 22, 2026
8f89532
board: unwrap noted gate answers before joining the status line
m4ttheweric Sep 21, 2026
74d0eb1
board: add a show/hide drafts filter, fix header toolbar wrap
m4ttheweric Sep 21, 2026
1bd3c08
board: show an auto-doctor-off flag for stood-down MRs
m4ttheweric Sep 21, 2026
79bcc29
chat: the tall fold stands down on an unfolded read row
m4ttheweric Sep 21, 2026
38f374f
board: trim header toolbar padding so it fits without scrolling
m4ttheweric Sep 21, 2026
5e105f4
board: use Slack's official brand icon instead of the hand-rolled one
m4ttheweric Sep 21, 2026
53daa74
Revert "board: trim header toolbar padding so it fits without scrolling"
m4ttheweric Sep 21, 2026
eea393b
board: move the theme picker to the header corner, fix the drafts chi…
m4ttheweric Sep 21, 2026
2181ecd
board: prettier on Board.tsx and view.test.ts
m4ttheweric Sep 22, 2026
0fa4af3
docs: the UI authoring guide, linked from every app
m4ttheweric Sep 22, 2026
c07c8ca
docs: chat and console AGENTS.md stop describing the pre-fold-in world
m4ttheweric Sep 22, 2026
78c0db3
docs: ui-authoring counters what the validation reps actually did
m4ttheweric Sep 22, 2026
a4d5260
docs: existing fw=600 is a straggler, not precedent
m4ttheweric Sep 22, 2026
cc704b1
spec: respond gates carry structured context the board can render
m4ttheweric Sep 22, 2026
1f044f8
spec: round 1 of pearl's review applied
m4ttheweric Sep 22, 2026
bcc6aac
spec: round 2, five editorial residuals
m4ttheweric Sep 22, 2026
102c639
spec: test list matches the normative parse rule
m4ttheweric Sep 22, 2026
2e34323
plan: respond gate structured context, board side
m4ttheweric Sep 22, 2026
8cd089e
board: parseGateCtx, the gate-ctx@1 parser
m4ttheweric Sep 22, 2026
862c546
board: retire the context floor; question context and option subtitle…
m4ttheweric Sep 22, 2026
d70e56c
board: respond-plan questions with thread@1 context render as thread …
m4ttheweric Sep 22, 2026
8c19ced
board: fix thread-card verdict-key color and a cross-file react-dom i…
m4ttheweric Sep 22, 2026
3d20d78
board: respond-post replies question renders each reply in full on it…
m4ttheweric Sep 22, 2026
56d0929
board: respond gates with plan@1/post@1 context head the queue with a…
m4ttheweric Sep 22, 2026
bf91ce0
board: fixture respond gates with gate-ctx, queueplan and queuepost c…
m4ttheweric Sep 22, 2026
a6803da
board: fix respond header MR ref to use accent text at 13px
m4ttheweric Sep 22, 2026
21f0e65
board: keep the fix pill's sha lowercase under the uppercase verb
m4ttheweric Sep 22, 2026
aa30303
board: let the form span the body under the respond header card
m4ttheweric Sep 22, 2026
247cbe9
board: re-baseline queueplan/queuepost/reviewmodal from this machine
m4ttheweric Sep 22, 2026
1b86936
board: drop as-any casts from gate-ctx fixture tests
m4ttheweric Sep 22, 2026
847c08f
board: render reply choice text as a div, not a span, for block markdown
m4ttheweric Sep 22, 2026
e07cee8
board: pin prose-question-context and prose-parked-chip behaviour und…
m4ttheweric Sep 22, 2026
cffa57c
board: rewrite the queue-shot comment to state loop behaviour, not fi…
m4ttheweric Sep 22, 2026
934ad68
spec: fold in the execution-time rulings
m4ttheweric Sep 22, 2026
cc4dadd
board: add a held count so gate-held replies finish the respond run (…
m4ttheweric Sep 22, 2026
c347f38
board:respond: add open-gate.sh (open a gate from a fitted gate-ctx f…
m4ttheweric Sep 22, 2026
afc4ccd
board:respond: open handed-back gate-ctx files, pass the round, form …
m4ttheweric Sep 22, 2026
76f19ee
Merge branch 'respond-gate-adopt' into integrate-respond-adopt
m4ttheweric Sep 22, 2026
da85b0f
respond-state: record the round on RespondState
m4ttheweric Sep 22, 2026
6632f21
respond-status: add --round flag, following --held's pattern
m4ttheweric Sep 22, 2026
ce711b0
herdr, server: thread --round through a respond resume dispatch
m4ttheweric Sep 22, 2026
e94b090
board:respond SKILL: record and recover the round across a resume
m4ttheweric Sep 22, 2026
9569177
board: act on the selection from the row menu (#107)
m4ttheweric Sep 22, 2026
1f2738c
design cpaures
m4ttheweric Sep 22, 2026
b14f5c3
respond-state: add respondFreshDispatchFields for cross-run round rec…
m4ttheweric Sep 22, 2026
82a97e0
herdr: thread LaunchPaneOpts.round through launchRespond's dispatch
m4ttheweric Sep 22, 2026
39e1761
server: dispatch a fresh /respond launch with the next round
m4ttheweric Sep 22, 2026
9074449
board:respond SKILL: a fresh launch can carry --round too, cross-run
m4ttheweric Sep 22, 2026
681ea55
?gate= deep link opens the decision modal for pending gates (#108)
m4ttheweric Sep 22, 2026
0ff1515
console: run: bridge rule keeps herd-owned worker gates silent (#109)
m4ttheweric Sep 22, 2026
73f9a33
board drawer: reply to and resolve threads, cap long notes, stop righ…
m4ttheweric Sep 22, 2026
f1db033
board: stop tests writing the real settings store; guard a bare root …
m4ttheweric Sep 22, 2026
8b5fe3f
board: loud freshness banner that names rt's GitLab sync failure (#112)
m4ttheweric Sep 23, 2026
d2b2c1d
board: hold a fired merge at merging… until the MR leaves the board (…
m4ttheweric Sep 23, 2026
dcd5963
board: structured review gates and one full-screen decision queue (#113)
m4ttheweric Sep 23, 2026
dab6d15
board: a finished lane's closed pane is teardown, not an orphan (#115)
m4ttheweric Sep 23, 2026
368b59f
board: respond post gate asks post or hold, and resolve, per thread (…
m4ttheweric Sep 23, 2026
84fb3a9
app-server + deck: stop localhost urls leaking into synced gate bridg…
m4ttheweric Sep 23, 2026
b63707f
Local-only gates: one shared locality check that fails closed (#118)
m4ttheweric Sep 23, 2026
3881ef2
board: edit a drafted reply before it posts; the finished queue recap…
m4ttheweric Sep 23, 2026
fa95fc1
console: run bands and search results sit on one card panel (#121)
m4ttheweric Sep 23, 2026
a45a86d
board: say how many drafts the drafts chip hid under a non-empty list
m4ttheweric Sep 23, 2026
eab0815
board: fold the slack filter's hidden count into the same note line
m4ttheweric Sep 23, 2026
c5db7dd
board: answer notes mute by text role, not opacity (#124)
m4ttheweric Sep 23, 2026
22a652a
deck: the bundle helper owns deck; a losing boot writes nothing (#122)
m4ttheweric Sep 23, 2026
9bad89a
console: one grouped, filterable settings page on settings-kit 0.2.0 …
m4ttheweric Sep 23, 2026
1f31e67
deck: helper-owned machines get the right hints, restart label and se…
m4ttheweric Sep 23, 2026
e047303
deck: version 1.0.6 (#127)
m4ttheweric Sep 23, 2026
51adec1
board: leaf edits write onto the target layer's own object, not the m…
m4ttheweric Sep 23, 2026
3a7aac3
console: settings page polish (scroll-spy index, provider labels, inl…
m4ttheweric Sep 23, 2026
7a38073
board: config rows save to the layer their value comes from (#129)
m4ttheweric Sep 23, 2026
9c537eb
bump @mattstack/glance to 0.27.0: thread blocker follows GitLab's dis…
m4ttheweric Sep 23, 2026
b22d938
console: explain opens as a modal over the page (#131)
m4ttheweric Sep 23, 2026
f579918
board: keep every test run's temp files in a run dir removed after th…
m4ttheweric Sep 23, 2026
934d58d
board: the respond post step asks only about replies not yet seen (#133)
m4ttheweric Sep 23, 2026
3714451
board: generic review and respond paths look up the writing style first
m4ttheweric Sep 23, 2026
493eb2a
board: parked-gate resume runs the writing-style lookup on the generi…
m4ttheweric Sep 23, 2026
da0e2e2
board: every gate opens the two-column gate sheet (#134)
m4ttheweric Sep 23, 2026
296a9b7
Merge pull request #135 from m4ttstack/board-writing-style-lookup
m4ttheweric Sep 23, 2026
e2cf2b3
board: gate sheets fit narrow windows (#136)
m4ttheweric Sep 23, 2026
feb6390
board: Storybook gallery of every decision-queue gate face (#138)
m4ttheweric Sep 24, 2026
cb320b8
board: pipeline run gates show on the MR their run recorded (#137)
m4ttheweric Sep 24, 2026
a3a2da0
SKILLS-75: board-respond fallback pushes before Fixed (#139)
m4ttheweric Sep 24, 2026
dbe6ff5
docs: board AGENTS.md covers the gate sheet frame, run gates, the Sto…
m4ttheweric Sep 24, 2026
07ff879
BOARD-48: read wait-style gate context and pane from meta (#140)
m4ttheweric Sep 24, 2026
8b220c9
SKILLS-76: board-respond generic path never re-posts on a resume; BOA…
m4ttheweric Sep 24, 2026
a7dca30
RT-264: AGENTS.md is the agent contract; CLAUDE.md imports it (#143)
m4ttheweric Sep 24, 2026
cda01af
App badges: board and console count decisions waiting on Matt; deck c…
m4ttheweric Sep 24, 2026
809f38f
deck: ingest the manifest for dev-shape and managed records, so badge…
m4ttheweric Sep 24, 2026
854bace
deck: deploy restarts a source-run deck in the dev app (DECK-63) (#145)
m4ttheweric Sep 24, 2026
0eccef4
deck: deck's own deploy survives the restart it causes (#146)
m4ttheweric Sep 24, 2026
45cf828
board: armed merge lapses on a timer and arms to a neutral gray wash
m4ttheweric Sep 24, 2026
482d3bd
deck: the running bundle decides dev mode (RT-266) (#147)
m4ttheweric Sep 24, 2026
2fd5ddd
Merge branch 'main' of https://github.com/m4ttstack/apps
m4ttheweric Sep 24, 2026
a3e1e29
deck: version 1.0.7 (#148)
m4ttheweric Sep 24, 2026
36d547b
ci: fail when bun install would rewrite bun.lock; resync it for deck …
m4ttheweric Sep 24, 2026
86f8569
board: say why a merge was refused (#149)
m4ttheweric Sep 24, 2026
f5ad35c
board: a merge that landed but could not be read back counts as merged
m4ttheweric Sep 24, 2026
7126751
deps: @mattstack/rt-client 0.31.0 (#150)
m4ttheweric Sep 24, 2026
bcc4baf
console: settings-kit 0.3.0 (member_joined notification toggle)
m4ttheweric Sep 24, 2026
3024121
rt-client 0.31.1: notification defaults (#152)
m4ttheweric Sep 24, 2026
ad639ba
board 0.1.5, console 0.1.2, chat 0.1.2: version bumps for the rt rele…
m4ttheweric Sep 24, 2026
83e70a7
deck 1.1.0: the boot sweep serves the bundle catalog (#154)
m4ttheweric Sep 25, 2026
f13f792
deck: serve bundled app identity for unlinked rows (#155)
m4ttheweric Sep 25, 2026
032ef9e
boxscore: bundle-ready (build:binary, recipe, license, binary gate) (…
m4ttheweric Sep 25, 2026
fd1590c
board 0.1.7: serve a setup page until board settings exist (#156)
m4ttheweric Sep 25, 2026
13c739b
deck 1.1.1: Add app registers from the app's manifest (#157)
m4ttheweric Sep 25, 2026
417e700
ci: run on main pushes and PRs only, cancel superseded PR runs (#158)
m4ttheweric Sep 25, 2026
0807c67
ui: drive TimedRingProgress test with fake timers (#159)
m4ttheweric Sep 25, 2026
d023e4c
board: approved means GitLab says approved (#160)
m4ttheweric Sep 25, 2026
7c86ad5
deck 1.1.2: removing a route-only row clears its routes; board shows …
m4ttheweric Sep 25, 2026
ce734b9
board: a respond gate's row counts its threads; the status word clamps
m4ttheweric Sep 25, 2026
8e7f1ee
board: an answered gate leaves the decision queue right away (#162)
m4ttheweric Sep 25, 2026
ecff4b1
board: notifications link to the MR's row and read in plain words (#163)
m4ttheweric Sep 25, 2026
0abe8dd
badges report gate ids; board counts its queue's run gates (#164)
m4ttheweric Sep 25, 2026
1da36b5
board + deck: one decision-gate helper (RT-317); deck's own row shows…
m4ttheweric Sep 25, 2026
ec70ffe
MANKIT-4: run every gate through turbo, affected-only on PRs (#166)
m4ttheweric Sep 25, 2026
3a5bc09
doctor: retry and rebase through rt MR tools (RT-315) (#167)
m4ttheweric Sep 25, 2026
b566f69
turbo: board's tests wait for the chromium install
m4ttheweric Sep 25, 2026
4df6af8
platform packages: mark private so the no-publish rule is enforced
m4ttheweric Sep 25, 2026
97e1aa0
spec: mattstack monorepo, rt absorbs apps, glance and gitq
m4ttheweric Sep 26, 2026
6ca13df
plan: mattstack monorepo, three stages in one plan
m4ttheweric Sep 26, 2026
1a6c2cb
plan: refresh the apps import before the Stage A PR
m4ttheweric Sep 26, 2026
e067fbc
monorepo: import m4ttstack/apps main with history
m4ttheweric Sep 26, 2026
b897c17
apps: scope the imported AGENTS.md and add the CLAUDE.md pointer
m4ttheweric Sep 26, 2026
e2b2ee9
monorepo: one workspace, one lockfile, apps' catalog and scripts at t…
m4ttheweric Sep 26, 2026
ae39386
monorepo: scope the unit suite and typecheck to rt's own trees
m4ttheweric Sep 26, 2026
173f025
plan: machine-state migration checklist at each cutover
m4ttheweric Sep 26, 2026
b11ce38
monorepo: narrow the turbo test lookups so rt's typecheck is clean
m4ttheweric Sep 26, 2026
e9ca902
monorepo: keep the CI dirs= scoped and settings-kit on the react catalog
m4ttheweric Sep 26, 2026
a525a4b
monorepo: rt-client and settings-kit are private workspace packages
m4ttheweric Sep 26, 2026
ebab27e
turbo: rt's static gates are root tasks beside the apps' gates
m4ttheweric Sep 26, 2026
840bc28
ci: apps trees skip the shards; turbo check in static; deck on macOS;…
m4ttheweric Sep 26, 2026
0b5745b
ci: cover apps globs with a turbo:test root task, tighten purity comm…
m4ttheweric Sep 26, 2026
c5d600d
plan: scrub the imported commit messages the purity gate rejects
m4ttheweric Sep 26, 2026
e1470f5
deps.lock: tree rows are built from this checkout, never fetched
m4ttheweric Sep 26, 2026
36f471e
merge origin/main into monorepo-spec
m4ttheweric Sep 26, 2026
f5f625a
build-apps: build deps.lock tree rows from this checkout into rt-tray…
m4ttheweric Sep 26, 2026
6eb7f08
build-apps: isolate the smoke-test HOME from a built binary's real one
m4ttheweric Sep 26, 2026
6be9e62
release: build the bundled apps in-tree in a job that holds no signin…
m4ttheweric Sep 26, 2026
11090c8
release: fix round 1 for the build-apps split
m4ttheweric Sep 26, 2026
bded0c0
release preflight: classify the gate by path; apps and rt-client have…
m4ttheweric Sep 26, 2026
2fcb67d
release-workflow test: repin the two-job shape and the tree-rows step
m4ttheweric Sep 26, 2026
3aa3d6b
release app: qualify by path, notes, tag, verify; no bump, bundle or …
m4ttheweric Sep 26, 2026
2730874
release app e2e: rewrite for qualify/notes/tag/verify, no bump or bot PR
m4ttheweric Sep 26, 2026
45e6a70
release app fix round 2: restore ff-only notes commits and fix resolv…
m4ttheweric Sep 26, 2026
4b7d548
release app fix round 3: qualify always checks the newest tag's verif…
m4ttheweric Sep 26, 2026
4dd737d
console: JSON editors, per-repo view and fix flow for settings (#169)
m4ttheweric Sep 26, 2026
39fc994
update-machine: sync the shared rt checkout, re-register deck apps, v…
m4ttheweric Sep 26, 2026
320ba86
docs: the release skill and AGENTS.md describe the in-tree apps
m4ttheweric Sep 26, 2026
87726f6
monorepo: refresh the apps import
m4ttheweric Sep 26, 2026
1cb62ae
monorepo: lockfile after the apps refresh
m4ttheweric Sep 26, 2026
e2d8e94
deck: regenerate the committed board bundle
m4ttheweric Sep 26, 2026
382c932
docs: fix round 1, gitq stays standalone and dev-app checkout is repo…
m4ttheweric Sep 26, 2026
06a62fa
boxscore: pin jsdom with the workspace and update the bundle recipe test
m4ttheweric Sep 26, 2026
0470047
merge origin/main into monorepo-spec
m4ttheweric Sep 26, 2026
f885a21
plan: never squash the apps import merge
m4ttheweric Sep 26, 2026
7eb1090
release-app: fetch the API-made notes commit before tagging
m4ttheweric Sep 26, 2026
028138b
release.yml: no third-party install scripts in the signing job
m4ttheweric Sep 26, 2026
dfe4efa
postinstall: build tui-kit too
m4ttheweric Sep 26, 2026
c46c953
dev-app-stage: --local build must build the tree rows
m4ttheweric Sep 26, 2026
2ddfe2c
docs: agent-facing docs describe the in-tree apps, not the pre-fold-i…
m4ttheweric Sep 26, 2026
16eb6d3
comment sweep: drop history narration and publishConfig on private pa…
m4ttheweric Sep 26, 2026
b1d1b7d
tsconfig: exclude storybook-static, rt-tray/deps, rt-tray/*.app, esli…
m4ttheweric Sep 26, 2026
810a066
stale-name sweep: bundle-apps, the apps checkout and published rt-client
m4ttheweric Sep 26, 2026
b0d50d4
e2e.yml: pin bun and freeze the lockfile on install
m4ttheweric Sep 26, 2026
ad4fc1e
move validate-manifest.ts under scripts/lib
m4ttheweric Sep 26, 2026
e0eed62
residual pass: notes-step failure coverage and tighten three comments
m4ttheweric Sep 26, 2026
634f1f4
residual pass: dead doc pointers and consumer-linking claims
m4ttheweric Sep 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 1 addition & 2 deletions .github/renovate-global.json5
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
// bumped in the consumers below. A repo that no longer exists fails the whole
// run (platform-unknown-error), so this list must follow renames and
// consolidations: deck, board, console, chat, tui-kit and app-kit all live in
// m4ttstack/apps now. rt's own extensions/vscode/rt-context is excluded on
// this repo now. rt's own extensions/vscode/rt-context is excluded on
// purpose: its rt-client dep is bumped by hand alongside the package it
// ships next to, never by a PR against this repo.
{
Expand All @@ -15,7 +15,6 @@
autodiscover: false,
repositories: [
"m4ttstack/rt",
"m4ttstack/apps",
"m4ttstack/gitq",
"m4ttstack/fast-browser",
],
Expand Down
503 changes: 0 additions & 503 deletions .github/workflows/bundle-apps.yml

This file was deleted.

83 changes: 61 additions & 22 deletions .github/workflows/checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,11 @@ jobs:
# moves to a static-macos job that runs on every PR, never into unit.
static:
runs-on: ubuntu-latest
timeout-minutes: 15
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: oven-sh/setup-bun@v2
with:
bun-version: 1.4.2
Expand All @@ -53,40 +55,46 @@ jobs:
- name: Lockfile in sync
run: bun install && git diff --exit-code -- bun.lock

- name: Typecheck
run: bunx tsc --noEmit

# A schema change that would invalidate stored settings needs a
# storeVersion bump and a matching migrateFrom entry (a never-shipped
# key may instead be acknowledged); the committed lock is the record.
- name: Settings schema lock is in sync
run: bun run cli.ts settings schema lock && git diff --exit-code -- packages/rt-client/src/settings/schema.lock.json

# The checkout is shallow and on a PR holds only the merge commit, so
# origin/main has to be fetched explicitly into its tracking ref. The
# v* tags are fetched too: the latest release's lock says which keys
# have shipped, and only a key that has not may skip a migration.
# The checkout has full history but only names the ref it checked out,
# so origin/main still needs an explicit fetch into its tracking ref.
# The v* tags are fetched too: the latest release's lock says which
# keys have shipped, and only a key that has not may skip a migration.
- name: Settings schema changes are classified
run: git fetch --no-tags --depth=1 origin +refs/heads/main:refs/remotes/origin/main '+refs/tags/v*:refs/tags/v*' && bun run cli.ts settings schema diff --against-ref origin/main
run: git fetch --no-tags origin +refs/heads/main:refs/remotes/origin/main '+refs/tags/v*:refs/tags/v*' && bun run cli.ts settings schema diff --against-ref origin/main

# release.yml is grandfathered out of the lint: it carries pre-existing
# shellcheck findings whose quoting is tangled with the release flow.
# Lint it the day it is next edited, not from this gate.
- name: Workflow lint
run: |
bash <(curl -fsSL https://raw.githubusercontent.com/rhysd/actionlint/v1.7.12/scripts/download-actionlint.bash) 1.7.12 "$RUNNER_TEMP"
"$RUNNER_TEMP/actionlint" .github/workflows/bundle-apps.yml .github/workflows/checks.yml .github/workflows/e2e.yml .github/workflows/purity.yml .github/workflows/renovate.yml .github/workflows/timings.yml
"$RUNNER_TEMP/actionlint" .github/workflows/checks.yml .github/workflows/e2e.yml .github/workflows/purity.yml .github/workflows/renovate.yml .github/workflows/timings.yml

# Drift here is invisible until someone runs it by hand, which is how
# two commands reached main with no reference page.
- name: Command reference is in sync
run: bun run docs:check

# Every leaf that requires a positional must declare how it behaves when
# the arg is omitted (picker/list/prompt or an explicit exempt). A new
# command that just errors on a missing arg fails here, not in review.
- name: Picker convention is enforced
run: bun run picker:check
# A PR restores main's newest cache; main restores its own previous one.
# Entries older than a week are dropped first or compiled binaries pile up.
- uses: actions/cache@v4
with:
path: .git/turbo-cache
key: turbo-${{ runner.os }}-${{ github.sha }}
restore-keys: turbo-${{ runner.os }}-
- run: find .git/turbo-cache -type f -mtime +7 -delete 2>/dev/null || true
- name: Apps and packages, plus rt's static gates (turbo)
if: github.event_name == 'pull_request'
env:
TURBO_TELEMETRY_DISABLED: "1"
TURBO_SCM_BASE: ${{ github.event.pull_request.base.sha }}
run: scripts/turbo.sh check --affected --concurrency=4 --output-logs=errors-only
- name: Apps and packages, plus rt's static gates (turbo, main)
if: github.event_name != 'pull_request'
env:
TURBO_TELEMETRY_DISABLED: "1"
run: scripts/turbo.sh check --concurrency=4 --output-logs=errors-only

# The Go helper's own vet + tests, plus the shared protocol fixtures both
# languages golden-test (lib/ui/__tests__/protocol.test.ts runs in the unit
Expand All @@ -106,6 +114,35 @@ jobs:
- name: rt-ui vet and tests
run: bun run ui:test

# deck supervises launchd and shells to plutil, both macOS-only, so its suite
# runs here and nowhere else (scripts/turbo.sh drops it off macOS).
deck-macos:
runs-on: macos-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: oven-sh/setup-bun@v2
with:
bun-version: 1.4.2
- run: bun install --frozen-lockfile
- uses: actions/cache@v4
with:
path: .git/turbo-cache
key: turbo-${{ runner.os }}-${{ github.sha }}
restore-keys: turbo-${{ runner.os }}-
- run: find .git/turbo-cache -type f -mtime +7 -delete 2>/dev/null || true
- if: github.event_name == 'pull_request'
env:
TURBO_TELEMETRY_DISABLED: "1"
TURBO_SCM_BASE: ${{ github.event.pull_request.base.sha }}
run: scripts/turbo.sh test --filter=deck --affected --output-logs=errors-only
- if: github.event_name != 'pull_request'
env:
TURBO_TELEMETRY_DISABLED: "1"
run: scripts/turbo.sh test --filter=deck --output-logs=errors-only

# macos-latest, matching e2e.yml: much of the tree is macOS-specific (launchd
# labels, TCC, codesign, ~/Library paths) and the bunfig preload that isolates
# HOME for tests is exercised the same way developers run it locally.
Expand Down Expand Up @@ -163,7 +200,7 @@ jobs:
# would skip unit and this job too, and a skipped required check reads as
# passing on GitHub.
checks:
needs: [scope, static, go, unit]
needs: [scope, static, go, deck-macos, unit]
if: always()
runs-on: ubuntu-latest
timeout-minutes: 5
Expand All @@ -173,13 +210,15 @@ jobs:
SCOPE: ${{ needs.scope.result }}
STATIC: ${{ needs.static.result }}
GO: ${{ needs.go.result }}
DECK: ${{ needs.deck-macos.result }}
UNIT: ${{ needs.unit.result }}
MODE: ${{ needs.scope.outputs.mode }}
run: |
echo "scope=$SCOPE static=$STATIC go=$GO unit=$UNIT mode=$MODE"
echo "scope=$SCOPE static=$STATIC go=$GO deck=$DECK unit=$UNIT mode=$MODE"
[ "$SCOPE" = success ] || { echo "scope did not succeed"; exit 1; }
[ "$STATIC" = success ] || { echo "static did not succeed"; exit 1; }
[ "$GO" = success ] || { echo "go did not succeed"; exit 1; }
[ "$DECK" = success ] || { echo "deck-macos did not succeed"; exit 1; }
[ "$UNIT" = success ] && exit 0
[ "$UNIT" = skipped ] && [ "$MODE" = skip ] && exit 0
echo "unit was $UNIT with mode $MODE"
Expand Down
8 changes: 6 additions & 2 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,12 @@ jobs:
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v2
with:
bun-version: 1.4.2

- name: Install dependencies
run: |
bun install
bun install --frozen-lockfile

- name: Cache Cargo
uses: actions/cache@v4
Expand Down Expand Up @@ -105,14 +107,16 @@ jobs:
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v2
with:
bun-version: 1.4.2

- uses: actions/setup-go@v5
with:
go-version-file: ui/go.mod
cache-dependency-path: ui/go.sum

- name: Install dependencies
run: bun install
run: bun install --frozen-lockfile

- name: Cache Cargo
uses: actions/cache@v4
Expand Down
45 changes: 41 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,35 @@ concurrency:
cancel-in-progress: false

jobs:
# App code runs here and only here. The release job below imports the
# Developer ID key and never runs a recipe; it receives these bytes as an
# artifact and signs them like any fetched helper.
build-apps:
runs-on: macos-15
timeout-minutes: 30
permissions:
contents: read
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: oven-sh/setup-bun@v2
with:
bun-version: 1.4.2
- run: bun install --frozen-lockfile
- name: Build the tree rows
run: bun scripts/build-apps.ts --arch arm64
# upload-artifact strips executable bits and dereferences symlinks;
# tar keeps the binaries runnable.
- name: Pack the handoff
run: tar czf apps-handoff.tgz -C rt-tray/deps/arm64 .
- uses: actions/upload-artifact@v4
with:
name: apps-handoff
path: apps-handoff.tgz

release:
needs: build-apps
runs-on: macos-15
permissions:
contents: write
Expand Down Expand Up @@ -57,7 +85,9 @@ jobs:
with:
bun-version: 1.4.2
- name: Install dependencies
run: bun install --frozen-lockfile
run: |
bun install --frozen-lockfile --ignore-scripts
bun run postinstall

# `plugins.install` adds this marketplace on every machine rt sets up, so
# it has to be live before the release shipping that installer is. It
Expand Down Expand Up @@ -157,13 +187,20 @@ jobs:
restore-keys: mattstack-deps-${{ runner.os }}-

- name: Fetch bundled dependencies
# GH_TOKEN: console and chat are private repos, so their release
# assets refuse bare curl; fetch-deps falls back to gh, which needs
# a token that can read the m4ttstack app repos.
env:
GH_TOKEN: ${{ secrets.MATTSTACK_RELEASE_TOKEN }}
run: scripts/fetch-deps.sh arm64

- name: Land the tree rows
uses: actions/download-artifact@v4
with:
name: apps-handoff
path: handoff
- run: |
mkdir -p rt-tray/deps/arm64
tar xzf handoff/apps-handoff.tgz -C rt-tray/deps/arm64
ls rt-tray/deps/arm64

# Saved straight after the fetch, so a run that fails later (notarize,
# clean room) still keeps its downloads. Files deps.lock no longer pins
# are dropped first, or a restore-keys hit would carry them forever.
Expand Down
14 changes: 14 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,17 @@ rt-tray/.build-xcode/
.lane-b-status.md

ui/dist/

# apps and packages (imported from the apps repo)
dist-ssr
*.local
storybook-static
*storybook.log
.turbo
FEEDBACK-*.md
packages/ui/scripts/treeshake-probe/dist
probe/src/server/embedded/manifest.ts
probe/dist-bin
probe/vendor
probe/bun.lock
docs/apps/design/gate-triage-modal/gate-triage-modal.html
36 changes: 36 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
node_modules
dist
storybook-static
docs
bun.lock
packages/ui/scripts/treeshake-probe/dist
packages/tui-kit
apps/*/design
apps/board/skills/*/SKILL.md
apps/deck/core/generated
apps/deck/src/registry/__fixtures__/deps-lock-serve.fixture.json
packages/tokens/src/radix.ts
packages/tokyo/src/ramps.ts
apps/*/state
apps/*/state.*
apps/*/src/server/embedded/manifest.ts
# rt's own code keeps rt's style (double quotes); prettier is the apps' tool
/cli.ts
/test-setup.ts
/test-timings.json
/tsconfig.json
/lib
/commands
/e2e
/scripts
/skills
/marketplace
/extensions
/website
/rt-tray
/ui
/packages/rt-client
/packages/settings-kit
/packages/git-core
/.github
/*.md
17 changes: 17 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"endOfLine": "lf",
"semi": true,
"singleQuote": true,
"arrowParens": "avoid",
"tabWidth": 2,
"trailingComma": "es5",
"plugins": ["@ianvs/prettier-plugin-sort-imports"],
"importOrder": [
"^(react/(.*)$)|^(react$)",
"<THIRD_PARTY_MODULES>",
"",
"^@mattstack/(.*)$",
"^[./]"
],
"importOrderParserPlugins": ["typescript", "jsx"]
}
19 changes: 19 additions & 0 deletions .storybook/main.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import type { StorybookConfig } from '@storybook/react-vite';

const config: StorybookConfig = {
stories: [
'../stories/**/*.mdx',
'../stories/**/*.stories.@(ts|tsx)',
'../packages/ui/src/**/*.mdx',
'../packages/ui/src/**/*.stories.@(js|jsx|mjs|ts|tsx)',
'../apps/console/src/**/*.stories.@(ts|tsx)',
'../apps/board/src/**/*.stories.@(ts|tsx)',
],
addons: [
'@chromatic-com/storybook',
'@storybook/addon-a11y',
'@storybook/addon-docs',
],
framework: '@storybook/react-vite',
};
export default config;
Loading
Loading