Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
289 commits
Select commit Hold shift + click to select a range
6e0fc04
feat(comet): in-app screenshot endpoint for the dev agent (/ui/screen…
davidortinau Jun 13, 2026
5c0bc60
feat(comet): Yoga reflow on reactive change + container padding
davidortinau Jun 13, 2026
d31cd7b
feat(comet): mirror Yoga layout switch to Compose (Android) — builds,…
davidortinau Jun 13, 2026
70aeede
feat(comet): Yoga text wrapping + stretch alignment + full-screen lau…
davidortinau Jun 13, 2026
6ecfe8c
fix(comet): Yoga reflow repositions the whole stack + background fill…
davidortinau Jun 13, 2026
cdeff84
fix(comet): Compose Yoga text wrapping + button positioning — verifie…
davidortinau Jun 13, 2026
c7dea30
fix(comet): Compose double-padding under Yoga (text was flush to the …
davidortinau Jun 13, 2026
215ce8d
test(comet): lock in Yoga breadth — weights, per-child alignment, exp…
davidortinau Jun 13, 2026
1f1d4b0
feat(comet): Image control on the node backend (iOS + Compose)
davidortinau Jun 13, 2026
608b1e6
feat(comet): Yoga-laid-out virtualized list rows + first Jetchat samp…
davidortinau Jun 13, 2026
a1f55d4
feat(comet): Material card surface styling (corner radius + elevation…
davidortinau Jun 13, 2026
7813ad9
feat(comet): vertical ScrollView with Yoga-laid-out content (Compose …
davidortinau Jun 13, 2026
5d3c9f5
feat(comet): faithful Jetchat conversation screen (gold standard: and…
davidortinau Jun 13, 2026
6907a22
feat(comet): real platform controls for Jetchat — Icon, Material them…
davidortinau Jun 13, 2026
4ec7d1c
feat(comet): Drawer control — Jetchat navigation drawer (channels/DMs…
davidortinau Jun 13, 2026
cc34fe1
feat(comet): Jetchat profile detail screen (wired; blocked on node-ba…
davidortinau Jun 13, 2026
14d0d43
fix(comet): Jetchat fidelity pass from side-by-side review (header, f…
davidortinau Jun 14, 2026
8c0540f
fix(comet): Jetchat review round 2 — line-height, edge-to-edge bars, …
davidortinau Jun 14, 2026
92b11a8
feat(comet): real OutlinedButton Send + centralized JetchatTheme (col…
davidortinau Jun 14, 2026
f83cc00
refactor(comet): bridge the styling system to the node backend (one v…
davidortinau Jun 14, 2026
1c703b4
feat(comet): custom fonts on the Compose backend — Jetchat renders Mo…
davidortinau Jun 14, 2026
ab4899e
feat(comet): rich text (formatted spans) in chat bubbles — @mention /…
davidortinau Jun 14, 2026
94c3d7e
feat(comet): custom fonts on the SwiftUI backend (iOS parity) — Monts…
davidortinau Jun 14, 2026
0dae799
feat(comet): real jetchat logo (bundled multicolor vector icon)
davidortinau Jun 14, 2026
5e99030
fix(comet): measure bold text at its weight (no clip) + drawer uses J…
davidortinau Jun 14, 2026
cc58307
feat(comet): exact Jetchat footer icons (tinted bundled vectors)
davidortinau Jun 14, 2026
6169261
fix(comet): drawer header uses the jetchat brand logo (matches Jetcha…
davidortinau Jun 14, 2026
3bef640
fix(comet): true-circle avatars (local images, native clip) + centere…
davidortinau Jun 14, 2026
5a85859
feat(comet): borderless BasicTextField + avatars via real Compose Ima…
davidortinau Jun 14, 2026
4f99768
feat(comet): drive the real Material ModalNavigationDrawer widget
davidortinau Jun 14, 2026
cb3b76f
feat(comet): message list as real LazyColumn + chat bubbles as Materi…
davidortinau Jun 14, 2026
f363380
fix(comet): keep avatars perfectly circular (FlexShrink 0)
davidortinau Jun 14, 2026
d9cacbc
fix(comet): baseline-align author name + timestamp
davidortinau Jun 14, 2026
8d92ec7
fix(comet): exact baseline for author name + timestamp
davidortinau Jun 14, 2026
debf8f2
docs: spec for baseline-alignment support in the layout engine
davidortinau Jun 14, 2026
faa1039
feat(comet): baseline alignment in the layout engine (.AlignBaseline)
davidortinau Jun 14, 2026
e94e43c
docs(baseline): the ~1px residual is the StaticLayout-measure / Compo…
davidortinau Jun 14, 2026
b6e6c03
feat(comet): exact baseline via Compose's own TextMeasurer (single en…
davidortinau Jun 14, 2026
dcd1698
docs(baseline): exact baseline landed via Compose TextMeasurer (no JN…
davidortinau Jun 14, 2026
9a725f1
test(jetchat): pad the message list to ~109 for scroll/virtualization…
davidortinau Jun 14, 2026
5521e55
perf(comet): cache materialized LazyColumn rows — fixes scroll jank
davidortinau Jun 14, 2026
ca09622
feat(jetchat): true stack navigation to the profile screen (Navigatio…
davidortinau Jun 14, 2026
9dc73b5
feat(comet): real ZStack z-overlay in node-backend layout engine; tru…
davidortinau Jun 14, 2026
5ae5833
feat(comet): implement baselineHeight modifier; fix Jetchat profile p…
davidortinau Jun 14, 2026
714b388
docs(agents): add Comet node-backend dev-loop runbook + gold-standard…
davidortinau Jun 14, 2026
d59cc92
docs(comet): add source-cited Jetchat → Comet parity backlog
davidortinau Jun 14, 2026
d274345
fix(comet): correct Jetchat theme values to match source (backlog §0)
davidortinau Jun 14, 2026
2a7e805
feat(comet): Material You dynamic color in Jetchat sample (backlog T1)
davidortinau Jun 14, 2026
8070df3
docs(comet): mark backlog §0 + T1 done
davidortinau Jun 14, 2026
3d7677e
feat(comet): explicit text line height from source (backlog T3)
davidortinau Jun 14, 2026
9e5ef60
docs(comet): mark T3 done; record C1 design + reactive-visibility sub…
davidortinau Jun 14, 2026
a0959c0
feat(comet): true up Jetchat drawer structure to source (backlog D1)
davidortinau Jun 14, 2026
1fdf7d2
docs(comet): mark D1 done; C1 facade verified/ready
davidortinau Jun 14, 2026
45d0345
feat(comet): scroll-state + reactive visibility (backlog C1)
davidortinau Jun 15, 2026
d98a1a3
feat(comet): node-backend AlertDialog (backlog I4)
davidortinau Jun 15, 2026
7080926
fix(comet): make Jetchat NotAvailable dialog text legibly dark
davidortinau Jun 15, 2026
f2c7333
feat(comet): register Jetchat fonts per weight (true Montserrat/Karla)
davidortinau Jun 15, 2026
1eaf5af
feat(comet): reactive Send + send-to-list (backlog I5 + C2)
davidortinau Jun 15, 2026
3c41f54
feat(comet): tint multicolor icons when a color is set (drawer logos)
davidortinau Jun 15, 2026
231c484
fix(comet): profile photo is a wide oval, not a circle (review)
davidortinau Jun 15, 2026
58eeda7
fix(comet): avatar ring 1.5dp to match source (review)
davidortinau Jun 15, 2026
4cc758a
feat(comet): profile app-bar logo opens the drawer (not back)
davidortinau Jun 15, 2026
d1b7883
feat(comet): drawer highlights the current destination (reactive)
davidortinau Jun 15, 2026
5ae38a7
feat(comet): real Material TextButton; dialog CLOSE uses it (native-c…
davidortinau Jun 15, 2026
7c66495
chore(comet): enforce native-control rule; expose FAB container/conte…
davidortinau Jun 15, 2026
f018ba4
feat(comet): real FloatingActionButton via the intrinsic-measure cont…
davidortinau Jun 15, 2026
f356d30
feat(comet): JumpToBottom as a real FloatingActionButton (reactive ov…
davidortinau Jun 15, 2026
a17bf0b
feat(comet): iOS native-control pass — .alert, bundle images, FAB icon
davidortinau Jun 15, 2026
9a97560
fix(comet): iOS layout — arrange nav screens + flex-start fallback al…
davidortinau Jun 15, 2026
50e0d65
fix(comet): iOS FAB positioning + bundle-image lookup (avatars)
davidortinau Jun 15, 2026
f25dc1c
fix(comet/ios): wire FAB tap via a real SwiftUI Button + stop label w…
davidortinau Jun 15, 2026
1eab3b2
feat(comet/ios): wire list ScrollToBottom via native ScrollViewReader
davidortinau Jun 15, 2026
b94cb55
feat(comet/sample): shared Material 3 dynamic-color generator (Phase …
davidortinau Jun 16, 2026
9c23167
feat(comet/sample): content-based seed for the M3 generator (Phase 2)
davidortinau Jun 16, 2026
fd1cce1
feat(comet/sample): dark mode parity for the M3 generator (Phase 3)
davidortinau Jun 16, 2026
7058032
fix(comet/ios): match the Android footer — borderless input + outline…
davidortinau Jun 16, 2026
07d296d
fix(comet/ios): pad the footer input content + roomier Send capsule
davidortinau Jun 16, 2026
2d2f06c
feat(comet/ios): keyboard avoidance + footer parity (mic, map-pin, SF…
davidortinau Jun 16, 2026
0cf5285
feat(comet): font-icon mode — Material Icons rendered identically on …
davidortinau Jun 16, 2026
5611746
fix(comet/sample): footer icons use onSurfaceVariant for proper contrast
davidortinau Jun 16, 2026
5f342af
fix(comet/ios): render FormattedText runs with per-run styling (white…
davidortinau Jun 16, 2026
1391a6f
fix(comet/ios): real jetchat brand logo (drawer/header) instead of th…
davidortinau Jun 16, 2026
db8650b
fix(comet): drawer layout to match the gold (logo 24dp, dividers, ali…
davidortinau Jun 16, 2026
b665d3e
fix(comet/ios): real per-weight fonts (Montserrat/Karla) instead of s…
davidortinau Jun 16, 2026
643c19d
fix(comet/sample): profile photo follows the photo aspect (circle for…
davidortinau Jun 16, 2026
7b82372
feat(comet): reactive ExtendedFAB + scroll-state signals
davidortinau Jun 17, 2026
4e2f019
fix(comet/sample): wire Jetchat FABs to AtTop/scroll signals
davidortinau Jun 17, 2026
5716684
feat(comet/sample): DevFlow in-app agent for CometComposeProbe (no Us…
davidortinau Jun 17, 2026
c5f268d
feat(comet): rich-text spans + clickable runs (Jetchat parity P1)
davidortinau Jun 17, 2026
3762ce8
feat(comet): open-at-newest + two day dividers + search popup (Jetcha…
davidortinau Jun 18, 2026
af17629
feat(comet): input selector + emoji table + not-available panels (Jet…
davidortinau Jun 18, 2026
f550edc
feat(comet): drawer brand (wordmark + tinted two-layer logo) + scroll…
davidortinau Jun 18, 2026
be66697
feat(comet): TextField ImeAction.Send + stable borderless field (Jetc…
davidortinau Jun 18, 2026
8d0a241
fix(comet/jetchat): dismiss the input-selector panel on field-focus +…
davidortinau Jun 18, 2026
12c1872
feat(comet/jetchat): P5 voice RecordButton — press-and-hold record ge…
davidortinau Jun 18, 2026
3cf961d
fix(comet/jetchat): keep the P5 record UI Android-only (fixes iOS foo…
davidortinau Jun 19, 2026
86343c6
fix(comet/ios): honor Opacity/IsVisible in the SwiftUI shim (revert t…
davidortinau Jun 19, 2026
599e069
fix(comet/ios): colour the JumpToBottom FAB label + icon explicitly (…
davidortinau Jun 19, 2026
dcfb9cd
feat(comet/ios): implement the SelectorPanel swap (panels now expand …
davidortinau Jun 19, 2026
e8992d7
feat(comet/ios): emit a Focused event from the SwiftUI TextField (#48)
davidortinau Jun 19, 2026
fc8549d
feat(comet/ios): baseline-height inset (#51) + scroll-driven profile …
davidortinau Jun 19, 2026
ba32504
fix(comet/ios): drawer brand header renders (mark + wordmark) instead…
davidortinau Jun 19, 2026
d37c551
fix(comet/ios): reset FAB slot opacity so the label isn't stuck invis…
davidortinau Jun 19, 2026
9cdcd65
fix(comet/ios): JumpToBottom FAB now hides/shows on scroll (was perma…
davidortinau Jun 19, 2026
6e8756e
fix(comet/ios): profile FAB now contracts on scroll (real scroll dete…
davidortinau Jun 19, 2026
c5e0f79
fix(comet/devflow): real focus action in the iOS agent (was a no-op)
davidortinau Jun 19, 2026
2bad5d1
feat(comet): hot reload on the node backend (node transfer through th…
davidortinau Jul 1, 2026
dc453fc
bench(comet): backend patch-stream benchmarks (signal patch 657ns, re…
davidortinau Jul 1, 2026
a8e0440
chore(comet): NativeAOT gate — iOS probe publishes AOT (7.2MB ipa) + …
davidortinau Jul 1, 2026
7c59291
feat(comet): IME insets on the node backend — composer lifts above th…
davidortinau Jul 2, 2026
210ede7
feat(comet): TextField caret/selection via TextFieldValue + InsertAtC…
davidortinau Jul 2, 2026
24f6ddc
feat(comet): animations on the node backend — Choreographer-driven vi…
davidortinau Jul 2, 2026
01192c9
feat(comet/ios): catch-up pass — seed-scroll-to-newest, UIFont baseli…
davidortinau Jul 2, 2026
1c06063
feat(comet)!: Phase 5 complete — legacy MAUI render path DELETED
davidortinau Jul 2, 2026
86c9358
docs(comet): backlog addendum — P4/P7/pulse/F3 done in the 2026-07-01…
davidortinau Jul 2, 2026
17a638b
fix(comet): hot-reload transfer preserves state; complete own-content…
davidortinau Jul 2, 2026
f91b6c6
fix(comet/ios): seed-scroll stops once landed, guards teardown [revie…
davidortinau Jul 2, 2026
7c94337
fix(comet/devflow): make the dev-agent port resolution observable [re…
davidortinau Jul 2, 2026
5d92e2c
fix(comet): repair Phase-5 build breaks — MauiReference + template [r…
davidortinau Jul 2, 2026
2405be4
feat(comet): node-backend single-project dotnet-new template (cometnode)
davidortinau Jul 2, 2026
c5dd6df
feat(comet): packageable node backend + package-based dotnet-new temp…
davidortinau Jul 2, 2026
16bc90a
Fix ACW 'no Java peer' trap: fast-dev APK missed libxamarin-app.so input
davidortinau Jul 3, 2026
a69f92b
DevProcess: per-sample workflow checklist + RESULTS.md sample template
davidortinau Jul 3, 2026
5315c78
Fix fastdev-APK workaround: missing ABI dependency + Directory.Build.…
davidortinau Jul 3, 2026
fc78515
feat(comet/devflow): Comet dev agent on Android + real drag injection
davidortinau Jul 3, 2026
d1c7a31
feat(devflow/cli): 'ui drag' verb — coordinate drag via the real inpu…
davidortinau Jul 3, 2026
7d82966
DevProcess: smoke-script harness + jetchat.android.sh (13/13 green)
davidortinau Jul 3, 2026
4e638c2
DevProcess: jetchat.ios.sh smoke (14/14 green) — P0-2 exit criteria met
davidortinau Jul 3, 2026
bf879a7
feat(comet): per-root reactive window metrics — the adaptive size-cla…
davidortinau Jul 3, 2026
39d42f5
M1(reply): gold screenshots from Kotlin Reply app (Pixel 9 Pro, 9 sta…
davidortinau Jul 6, 2026
da9bc4a
M1(reply): parity backlog + adaptive-primitives design note; README t…
davidortinau Jul 6, 2026
2be19e2
feat(comet): NavigationBar/NavigationRail controls on the real M3 wid…
davidortinau Jul 6, 2026
7e4edea
fix(comet): IconFont.Register merges same-family maps; document body-…
davidortinau Jul 6, 2026
8cb6eec
sample(reply): probe scaffold — chrome probe root, icons, screen switch
davidortinau Jul 6, 2026
9c55480
feat(comet): NavigationSuite adaptive chrome primitive (own-content n…
davidortinau Jul 7, 2026
d85eac0
sample(reply): probe on NavigationSuite; drawer header; spacer centering
davidortinau Jul 7, 2026
4e5c988
feat(comet): ListDetail adaptive two-pane primitive (own-content node)
davidortinau Jul 7, 2026
e6fe19b
sample(reply): probe inbox on ListDetail — fake rows, bound detail pane
davidortinau Jul 7, 2026
83fee49
feat(comet): reactive safe-area contract; NavigationSuite insets its …
davidortinau Jul 7, 2026
720cf8f
sample(reply): drop manual status-bar paddings; background on the suite
davidortinau Jul 7, 2026
db7ec44
fix(comet): leaf .Padding reaches Yoga and renders (was silently drop…
davidortinau Jul 7, 2026
40dde1d
sample(reply): full static ColorScheme from gold Color.kt; probe them…
davidortinau Jul 7, 2026
f891e6a
feat(comet): ContentSwitcher route host; ListView AnchorBottom + Scro…
davidortinau Jul 7, 2026
d5ecbef
sample(reply): real screens — data port, inbox list, detail, coming-soon
davidortinau Jul 7, 2026
c653989
smoke(reply): reply.android.sh — 14/14 green
davidortinau Jul 7, 2026
9f40b10
sample(reply): center thread-button labels and the detail back arrow
davidortinau Jul 7, 2026
e95e9f0
docs(reply): progress log — Android structural build-out complete
davidortinau Jul 7, 2026
b295246
feat(comet): SearchBar (real M3 docked pair); NavigationSuite modal d…
davidortinau Jul 7, 2026
e8f4d1e
sample(reply): real docked search bar + modal drawer from rail menu
davidortinau Jul 7, 2026
3ba2a25
feat(comet): Text.MaxLines with ellipsis (measure clamp + render over…
davidortinau Jul 7, 2026
a127d52
sample(reply): fidelity pass vs gold compact-01 — opened highlight, r…
davidortinau Jul 7, 2026
6d1f773
fix(comet): /code-review findings — node disposal unhooks static even…
davidortinau Jul 7, 2026
b0f1b1e
sample(reply): review fixes — single static hooks, reactive opened hi…
davidortinau Jul 7, 2026
fbe2625
docs(reply): review-skip tracking + size-snapshot note
davidortinau Jul 7, 2026
01da1d5
feat(comet): iOS gate — SwiftUI twins, MaxLines, ScrolledFromTop, sem…
davidortinau Jul 7, 2026
44ee709
sample(reply): iOS probe — Reply screen switch (COMET_SCREEN env), av…
davidortinau Jul 7, 2026
73951c1
docs(reply): iOS gate status — landed set + detail-swap blocker analysis
davidortinau Jul 7, 2026
56f5dea
fix(comet): depth-cap the environment parent walk (cycle hardening)
davidortinau Jul 7, 2026
26e3858
fix(reactive): non-reentrant FlushEntry — fixes the iOS detail-swap s…
davidortinau Jul 8, 2026
7e571d6
docs(reply): iOS gate closed — detail-swap root cause + fix recorded …
davidortinau Jul 8, 2026
199d95a
feat(comet): atomic hosted swaps, generation disposal, honest ReloadD…
davidortinau Jul 8, 2026
5ffa9b2
fix(comet): ReloadData invalidates the row-view cache — opened-highli…
davidortinau Jul 8, 2026
b12a7ab
feat(comet): SearchBar accepts agent fill — Android search drivable e…
davidortinau Jul 8, 2026
1348648
docs(reply): M1 RESULTS row (size/startup/jank vs gold) + post-gate p…
davidortinau Jul 8, 2026
815a28c
sample: standalone per-sample apps via -p:CometSample (side-by-side i…
davidortinau Jul 8, 2026
77922ba
fix(ios): Reply parity — FAB contracts, M3 chrome tokens, real app icons
davidortinau Jul 9, 2026
053e4c4
docs(reply): record iOS parity pass 2 (FAB contract, M3 chrome tokens…
davidortinau Jul 9, 2026
072c441
fix: Reply alignment pass — safe-area strip, search width, icon cente…
davidortinau Jul 9, 2026
233ea58
fix(ios): center the search pill's slots vertically (M3 input-field p…
davidortinau Jul 9, 2026
b6f1598
fix(ios): center nav item icons in their pills (bar + rail)
davidortinau Jul 9, 2026
3eb3333
docs(checklist): iOS gate gains a hand-composed-chrome side-by-side step
davidortinau Jul 9, 2026
4c79e0d
docs(reply): true-up the REMAINING-for-M1 list (selection mode + FAB …
davidortinau Jul 9, 2026
4bc7557
feat(comet): long-press gesture end-to-end + scroll-direction signal …
davidortinau Jul 9, 2026
c7c4919
docs(reply): selection mode + FAB re-expand shipped — M1 close-out it…
davidortinau Jul 9, 2026
b4fee0d
fix(android): registry hygiene — root reset, parented rows, pruned re…
davidortinau Jul 9, 2026
9d82795
docs(reply): track agent-back no-op + existence-based assert weakness
davidortinau Jul 9, 2026
0234e61
sample(jetchat): AnchorBottom opt-in on the message log (open at newest)
davidortinau Jul 9, 2026
123298f
docs(jetchat): track pre-existing Android bubble text overflow
davidortinau Jul 9, 2026
aa0cf63
fix: center icon glyphs in oversized frames (both backends)
davidortinau Jul 9, 2026
4d064e0
docs(jetnews): M2 kickoff — gold captures + parity backlog skeleton
davidortinau Jul 9, 2026
bd797be
feat(jetnews): M2 increment 1 — data + theme + Home screen (Android r…
davidortinau Jul 9, 2026
a3a21f6
feat(comet): Text.LineBreak wrap strategy — Compose LineBreak presets…
davidortinau Jul 9, 2026
fc44334
sample(jetnews): fidelity pass 2 — Montserrat everywhere, primary wor…
davidortinau Jul 9, 2026
5209727
sample(jetnews): surface-container tones — popular cards on SurfaceCo…
davidortinau Jul 9, 2026
fe8b680
feat(comet): FormattedText honors Text.LineBreak; shared break-strate…
davidortinau Jul 9, 2026
9d68a52
sample(jetnews): Article screen + Home↔Article navigation
davidortinau Jul 9, 2026
fc4cb12
feat(comet): TabBar control (real M3 PrimaryTabRow) + symmetric Drawe…
davidortinau Jul 9, 2026
efa3347
sample(jetnews): Interests screen + drawer-first chrome
davidortinau Jul 9, 2026
31e64d6
smoke(jetnews): Android smoke — Home, Article round-trip, drawer, Int…
davidortinau Jul 9, 2026
16ff3d9
docs(jetnews): backlog — compact core landed; deviations + remaining …
davidortinau Jul 9, 2026
ca09ce4
feat(comet): app-specific chrome policies — NavigationSuite None vari…
davidortinau Jul 10, 2026
0bd17d3
sample(jetnews): expanded chrome — rail + list-detail + search pane (…
davidortinau Jul 10, 2026
90864c7
sample(jetnews): standalone Android app — -p:CometSample=jetnews
davidortinau Jul 10, 2026
7954e66
feat(comet): Icon.IconFillFrame — non-square bundled vectors draw at …
davidortinau Jul 10, 2026
bf77560
sample(jetnews): gold vector assets — logo, wordmark, publication badge
davidortinau Jul 10, 2026
27ef788
docs(jetnews): backlog — expanded chrome + vectors landed; remaining …
davidortinau Jul 10, 2026
0122a85
feat(comet): iOS twins for the M2 primitives — suite None variant + m…
davidortinau Jul 10, 2026
1f6d129
sample(jetnews): iOS gate — brand PNGs, M3 tokens, jetnews.ios.sh (24…
davidortinau Jul 10, 2026
0822f82
docs(results): JetNews row — size 26.2 MiB single-RID, cold start 234…
davidortinau Jul 10, 2026
cd69df9
fix(comet): review round — iOS ListFraction, hosted-twin owner rebind…
davidortinau Jul 10, 2026
ee35663
fix(jetnews): review round — stale-article reset, list-generation lea…
davidortinau Jul 10, 2026
c089f93
docs(jetnews): review outcome — fixed set + backlogged findings
davidortinau Jul 10, 2026
4412942
feat(comet): real-widget promotions — clickable Card, IconToggleButto…
davidortinau Jul 10, 2026
2570013
sample(jetnews): drive the real widgets — Card, IconToggleButton, Out…
davidortinau Jul 10, 2026
a1db31d
docs(jetnews): mark real-widget promotions done
davidortinau Jul 10, 2026
96fc140
docs(jetsnack): M3 kickoff — golds captured + parity backlog skeleton
davidortinau Jul 10, 2026
a3e92c3
sample(jetsnack): M3 increment 1 — model/data + custom palette port
davidortinau Jul 10, 2026
be75621
docs(jetsnack): status — increment 1 landed; images are local in this…
davidortinau Jul 10, 2026
8aef7b3
feat(comet): BackgroundGradient — horizontal linear-gradient fills on…
davidortinau Jul 10, 2026
f9cd028
fix(comet): BrushBridges — retain the Java.Lang.Class objects behind …
davidortinau Jul 10, 2026
a4e6229
sample(jetsnack): Home feed + chrome (Android renders near-gold)
davidortinau Jul 10, 2026
1bfc491
docs(jetsnack): status — Home landed; deviations + remaining increments
davidortinau Jul 10, 2026
9308b37
feat(comet): italic text — FontSlant.Italic flows to both backends
davidortinau Jul 11, 2026
fa0ba84
sample(jetsnack): Snack detail screen (Android renders near-gold, int…
davidortinau Jul 11, 2026
27c0ff8
sample(jetsnack): Filters sheet — scrim overlay, sort rows, gradient …
davidortinau Jul 12, 2026
551d6d6
sample(jetsnack): Search + Cart screens (all four tabs real)
davidortinau Jul 12, 2026
3335eed
fix(comet): invisible containers compose nothing — hidden overlays in…
davidortinau Jul 12, 2026
545dc5b
smoke(jetsnack): Android smoke — feed, filters, detail, search, cart …
davidortinau Jul 12, 2026
65c7ec8
sample(jetsnack): iOS gate — snack photos, route, jetsnack.ios.sh (24…
davidortinau Jul 12, 2026
35171a5
sample(jetsnack): standalone Android app — -p:CometSample=jetsnack
davidortinau Jul 12, 2026
f3e8cf4
docs(results): Jetsnack row — 33.5 MiB (+7.3 = the photo jpgs), 678ms…
davidortinau Jul 12, 2026
06750c5
fix(comet): review round 2 — gradient invalidation + cache, card long…
davidortinau Jul 12, 2026
8a8f161
fix(jetsnack): review round 2 — live bottom-bar pill, overlay leak, p…
davidortinau Jul 12, 2026
2061e97
docs(jetsnack): M3 complete — review round 2 outcome + backlog
davidortinau Jul 12, 2026
5191cb6
sample(jetsnack): standalone iOS app — -p:CometSample=jetsnack icon set
davidortinau Jul 13, 2026
760d193
feat(comet): BorderGradient (diagonal gradient strokes) + custom-font…
davidortinau Jul 13, 2026
3fb988e
fix(jetsnack): fidelity feedback round — gold typography, gradient ch…
davidortinau Jul 13, 2026
d37e608
docs(jetsnack): feedback-round outcome — 8/8 fixed, verification matr…
davidortinau Jul 13, 2026
a633b83
docs(jetsnack): correct feedback-round note — host suite green (932),…
davidortinau Jul 15, 2026
417bdcc
docs(results): Pixel 5 batch B1 — Reply/JetNews/Jetsnack cold start +…
davidortinau Jul 15, 2026
1d2f9fe
fix(smoke): pin agent URL to 127.0.0.1 + 60s agent_wait; diagnose jet…
davidortinau Jul 15, 2026
b4a0fb3
feat(comet): GradientSpec — the single gradient wire shape (direction…
davidortinau Jul 15, 2026
20b14fb
docs(jetcaster): M4 parity backlog — source survey, fixture-first dat…
davidortinau Jul 15, 2026
b2dfcc4
docs(jetcaster): first gold captures — discover, podcast details pane…
davidortinau Jul 15, 2026
3023040
sample(jetcaster): fixture feed snapshot — 6 real feeds trimmed to 10…
davidortinau Jul 15, 2026
03f3ca5
sample(jetcaster): fixture-mode data layer — models, RSS+iTunes parse…
davidortinau Jul 15, 2026
a2772ff
docs(jetcaster): checklist — fixture pipeline landed
davidortinau Jul 15, 2026
a92229d
feat(comet): M4 widget wave — radial GradientSpec, LazyVerticalGrid +…
davidortinau Jul 15, 2026
0bdaef8
sample(jetcaster): Home screen — dark scheme + radial scrim, real Sea…
davidortinau Jul 15, 2026
58c5c88
docs(jetcaster): checklist — framework wave + Home landed
davidortinau Jul 15, 2026
022829a
fix(comet): review-round fixes — iOS FilterChip measure/refresh, list…
davidortinau Jul 16, 2026
f9919ac
fix(jetcaster): review-round fixes — lazy RobotoFlex, player duration…
davidortinau Jul 16, 2026
77e0ca4
docs(jetcaster): review round 1 outcome — 11/11 fixed, deferred clean…
davidortinau Jul 16, 2026
3e8d5f5
Merge main and upgrade Comet to .NET 11 Preview 7
davidortinau Sep 3, 2026
dbd18f3
fix(comet): secure preview restore sources
davidortinau Sep 4, 2026
0f07ff0
ci(comet): install SDK from global.json
davidortinau Sep 4, 2026
dd0fd40
fix(comet): narrow public package mapping
davidortinau Sep 4, 2026
a738503
ci(comet): pin preview 7 workload set
davidortinau Sep 4, 2026
aeac0cc
fix(comet): allow preview workload metadata
davidortinau Sep 4, 2026
a72a173
Merge branch 'main' into davidortinau/comet-net11p5
davidortinau Sep 4, 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
  •  
  •  
  •  
96 changes: 96 additions & 0 deletions .github/skills/maui-devflow-debug/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
---
name: maui-devflow-debug
description: >-
Run build, deploy, inspect, and fix loops for .NET MAUI apps that already have
MAUI DevFlow integrated. USE FOR: launching MAUI apps, selecting devices or
emulators, waiting for or recovering agent connections, broker/port/adb
connectivity issues, visual tree inspection, screenshots, UI interaction,
Blazor WebView CDP debugging, reading DevFlow logs, and iterative app
debugging. DO NOT USE FOR: first-time DevFlow package setup (use
maui-devflow-onboard), or generic desktop automation unrelated to MAUI. INVOKES:
maui devflow CLI, dotnet CLI, Android adb/android tools, and Apple simctl
tools.
---

# DevFlow Debug

Use this skill for the active debugging loop after a MAUI app has DevFlow
packages and `builder.AddMauiDevFlowAgent()` registered.

## When to Use

- Build and run a MAUI app on Android, iOS, Mac Catalyst, macOS, Windows, or GTK.
- Choose or create a simulator/emulator for a project.
- Wait for a DevFlow agent, inspect the visual tree, tap/fill UI, or capture screenshots.
- Recover from DevFlow connection failures after the app is integrated, including broker, port, and Android adb forwarding issues.
- Debug Blazor Hybrid content through DevFlow WebView/CDP commands.
- Read app logs, network captures, preferences, device info, or recordings through DevFlow.
- Iterate on an app bug with a build -> deploy -> inspect -> fix loop.

## Route Elsewhere

- If DevFlow packages or `MauiProgram.cs` registration are missing, use `maui-devflow-onboard`.
- If the failure is a generic build or SDK issue with no DevFlow angle, use normal .NET/MAUI diagnostics.

## Core Loop

1. Confirm the app is already integrated:

```bash
grep -rl "Microsoft.Maui.DevFlow" --include="*.csproj" .
```

If no project has DevFlow package references, stop and switch to `maui-devflow-onboard`.

2. Pick the target framework and launch target. Do not assume `net10.0`; inspect the project first.

```bash
grep -i "TargetFramework" *.csproj Directory.Build.props 2>/dev/null
```

3. Start or select the device/emulator. For Android and iOS, avoid reusing a simulator/emulator that is already running another app under investigation.

4. Launch the app and keep the launch process alive when required.

- iOS, Android, and Mac Catalyst `dotnet build -t:Run` usually block for the app lifetime.
- GTK `dotnet run` blocks for the app lifetime.
- macOS AppKit builds can exit after compiling; launch the `.app` separately.

5. Wait for the DevFlow agent before inspecting UI:

```bash
maui devflow wait
maui devflow ui tree --depth 3 --fields "id,type,text,automationId"
```

If `wait`, `list`, or `ui tree` cannot connect after the app is running, load `references/connectivity.md` and recover the broker/agent connection before continuing.

6. Inspect, interact, capture evidence, then edit the app and repeat from launch.

## Critical Anti-patterns

- Do not treat an empty `maui devflow list` as proof the project is not integrated. `list` is runtime state; project files are source of truth.
- Do not use arbitrary sleeps after launch. Use `maui devflow wait` to gate on the actual agent connection.
- Do not kill an async `dotnet build -t:Run` or `dotnet run` shell while you still need the app; that often kills the app.
- Do not reuse a busy simulator/emulator when multiple MAUI apps or agents may be running.
- Do not debug Blazor WebView DOM issues through the native visual tree alone; use the WebView/CDP commands.

## Stop Signals

- Stop and switch to `maui-devflow-onboard` when package references or `AddMauiDevFlowAgent()` are absent.
- Stop and ask which project, device, or agent to target when multiple candidates match.
- Stop rebuilding after two identical failures until you inspect the first meaningful build/runtime error.
- Stop using screenshots for exact property values; query the visual tree or properties instead.

## Reference Map

Load these only when needed:

- `references/setup.md` - detailed integration, package, entitlement, and update notes.
- `references/connectivity.md` - broker, agent, port, Android forwarding, and "no agents connected" recovery.
- `references/android.md` - Android SDK, emulator, adb, build, deploy, and port forwarding details.
- `references/ios-and-mac.md` - iOS simulator, Mac Catalyst, permissions, entitlements, and Apple tooling.
- `references/macos.md` - macOS AppKit project shape, launch model, and troubleshooting.
- `references/linux.md` - GTK/Linux launch, packages, and WebKitGTK notes.
- `references/batch.md` - batching multiple DevFlow UI/WebView operations.
- `references/troubleshooting.md` - build, connection, CDP, and platform-specific failure recovery.
213 changes: 213 additions & 0 deletions .github/skills/maui-devflow-debug/references/android.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
# Android Reference

## Table of Contents
- [Emulator Management](#emulator-management)
- [Building and Deploying](#building-and-deploying)
- [Android CLI Tool](#android-cli-tool)
- [ADB Reference](#adb-reference)
- [SDK Management](#sdk-management)
- [Troubleshooting](#troubleshooting)

## Emulator Management

### Avoiding multi-project conflicts

When multiple projects (or AI agents) may deploy to Android emulators simultaneously,
each project should use its own dedicated AVD. Two apps deployed to the same emulator
will coexist (unlike iOS), but `adb reverse`/`adb forward` port forwarding is per-device
and can cause confusion when multiple emulators are running.

**Before creating or starting an emulator, check what's already in use:**
```bash
maui devflow list # shows agents with platform + port
adb devices # shows connected emulators
```

If an emulator is already running another project's agent, create a new AVD:
```bash
android avd create --name "ProjectName-Pixel8" \
--sdk "system-images;android-35;google_apis;arm64-v8a" --device pixel_8
android avd start --name "ProjectName-Pixel8"
```

**When multiple emulators are running**, use `-s <serial>` to target a specific one:
```bash
adb -s emulator-5554 reverse tcp:19223 tcp:19223 # first emulator
adb -s emulator-5556 reverse tcp:19223 tcp:19223 # second emulator
```

**Naming convention:** Use `<ProjectName>-<DeviceType>` (e.g. `TodoApp-Pixel8`) so it's
clear which AVD belongs to which project.

### List and start AVDs
```bash
android avd list # list available AVDs
android avd start --name <avd-name> # start emulator
```

### Create AVD
```bash
# List available targets and device profiles
android avd targets # system images
android avd devices # device profiles (pixel, etc.)

android avd create --name "Pixel8API35" \
--sdk "system-images;android-35;google_apis;arm64-v8a" \
--device pixel_8
```

### Delete AVD
```bash
android avd delete --name <avd-name>
```

### Verify emulator is running
```bash
adb devices # should show "emulator-5554 device"
android device list # formatted list
```

## Building and Deploying

```bash
# Build and deploy to running emulator
dotnet build -f net10.0-android -t:Run

# Build only (no deploy)
dotnet build -f net10.0-android
```

**Critical: Port forwarding after deploy** — the Android emulator runs in its own network.
Forward the broker port and the agent port:
```bash
adb reverse tcp:19223 tcp:19223 # Broker (lets agent register)
adb forward tcp:<port> tcp:<port> # Agent (lets CLI reach agent)
```

The broker reverse is needed so the agent inside the emulator can connect to the host's
broker daemon. The agent forward uses the port shown in `maui devflow list` after the agent
registers (range 10223–10899).

If the broker isn't available (fallback mode), forward the port from `.mauidevflow` instead:
```bash
adb forward tcp:9223 tcp:9223 # Fallback: direct agent port
```

Then verify: `maui devflow ui status` and `maui devflow webview status`.

### Install APK manually
```bash
adb install -r path/to/app.apk # install/reinstall
android device install --package path/to/app.apk
```

## Android CLI Tool

The `android` command (from `androidsdk.tool` NuGet) wraps SDK tools.

### SDK management
```
android sdk list # all packages
android sdk list --installed # installed only
android sdk list --available # available for install
android sdk install --package "platforms;android-35"
android sdk install --package "system-images;android-35;google_apis;arm64-v8a"
android sdk install --package "emulator"
android sdk uninstall --package <package-name>
android sdk info # SDK location, tools versions
android sdk accept-licenses # accept all SDK licenses
android sdk download # download cmdline-tools
```

### AVD management
```
android avd list # available AVDs
android avd targets # available system images
android avd devices # available device profiles
android avd create --name <name> --sdk <system-image> --device <device>
android avd delete --name <name>
android avd start --name <name>
```

### Device/emulator operations
```
android device list # connected devices/emulators
android device info [--device <serial>] # device properties
android device install --package <apk> # install APK
android device uninstall --package <pkg-id> # uninstall by package name
```

### JDK management
```
android jdk list # available JDKs
android jdk info # current JDK info
```

## ADB Reference

### Device/emulator basics
```bash
adb devices # list connected devices
adb -s <serial> shell # shell into specific device
adb shell pm list packages | grep <name> # find installed packages
adb shell am start -n <pkg>/<activity> # launch activity
adb shell am force-stop <pkg> # kill app
```

### Port forwarding (critical for MAUI DevFlow)
```bash
adb reverse tcp:19223 tcp:19223 # Broker (agent → host)
adb forward tcp:<port> tcp:<port> # Agent (CLI → emulator, get port from `maui devflow list`)
adb reverse --list # verify forwarding
adb forward --list # verify forwarding
adb reverse --remove-all # clean up reverse
adb forward --remove-all # clean up forward
```

### File operations
```bash
adb push local/file /sdcard/path # push file to device
adb pull /sdcard/path local/file # pull file from device
```

### Logs
```bash
adb logcat -s "DOTNET" --format brief # .NET runtime logs
adb logcat -s "MauiDevFlow" # agent logs
adb logcat --pid=$(adb shell pidof <pkg>) # app-specific logs
adb logcat -c # clear log buffer
```

### Screenshots and screen recording
```bash
adb shell screencap /sdcard/screen.png && adb pull /sdcard/screen.png
adb shell screenrecord /sdcard/video.mp4 # Ctrl+C to stop
```

## SDK Management

### Typical setup for MAUI Android development
```bash
android sdk accept-licenses
android sdk install --package "platforms;android-35"
android sdk install --package "build-tools;35.0.0"
android sdk install --package "system-images;android-35;google_apis;arm64-v8a"
android sdk install --package "emulator"
android sdk install --package "platform-tools"
```

### Environment variables
```bash
export ANDROID_HOME=$HOME/Library/Android/sdk
export ANDROID_SDK_ROOT=$ANDROID_HOME
export PATH=$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator
```

## Troubleshooting

- **`adb devices` shows "unauthorized"**: Accept the USB debugging prompt on the device/emulator.
- **Agent not connecting on emulator**: Forgot `adb reverse tcp:19223 tcp:19223` for the broker. Run port forwarding, then check `maui devflow list`.
- **Emulator won't start**: Check available system images with `android avd targets`. May need
to install with `android sdk install --package "system-images;..."`.
- **Build error "No Android devices found"**: Ensure emulator is booted (`adb devices`).
- **Slow emulator**: Use hardware acceleration. Prefer `arm64-v8a` images on Apple Silicon Macs.
50 changes: 50 additions & 0 deletions .github/skills/maui-devflow-debug/references/batch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Batch Command Reference

Execute multiple MAUI/cdp commands in a single CLI invocation via stdin. Outputs JSONL
responses (one JSON object per line) to stdout — ideal for AI agents and scripting.

## Usage

```bash
# Pipe multiple commands (semicolons or newlines as separators)
echo "MAUI fill textUsername user; MAUI fill textPassword pwd123; MAUI tap buttonLogin" | maui devflow batch

# Multi-line input
printf "MAUI status\nMAUI tree\nMAUI screenshot --output screen.png" | maui devflow batch

# With options
echo "MAUI status; MAUI tree" | maui devflow batch --delay 500 --continue-on-error --agent-port 10224

# Human-readable output instead of JSONL
echo "MAUI status; MAUI tree" | maui devflow batch --human
```

## Options

| Option | Default | Description |
|--------|---------|-------------|
| `--delay <ms>` | 250 | Delay between commands (lets UI settle) |
| `--continue-on-error` | false | Continue after a command fails (default: stop) |
| `--human` | false | Human-readable output instead of JSONL |

## JSONL Response Format

One JSON object per command, streamed as each completes:
```json
{"command":"MAUI fill textUsername user","exit_code":0,"output":"Filled: textUsername"}
{"command":"MAUI tap buttonLogin","exit_code":1,"output":"Error: Element not found: buttonLogin"}
```

## Interactive Streaming

The batch command processes stdin line-by-line, so a caller can read each JSONL response
before sending the next command. This enables reactive workflows where the AI agent inspects
results and decides the next action.

## Input Rules

- Lines starting with `#` are comments (skipped)
- Empty lines are skipped
- Semicolons separate multiple commands on one line
- Quoted strings are preserved: `MAUI fill myEntry "hello world"`
- Only `MAUI` and `cdp` commands are allowed (broker/list/etc. are rejected)
Loading
Loading