<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kukuri.git/gradle, branch main</title>
<subtitle>kukuri: Kotlin Multiplatform app (desktop / wasm / native / Android) for the orgflow UI</subtitle>
<link rel='alternate' type='text/html' href='https://openpgpkey.dangofactory.net/cgit/cgit.cgi/kukuri.git/'/>
<entry>
<title>UI: implement the five-frame FSMP shell (2.22) with a month calendar, and add the Calendar CMP library</title>
<updated>2026-09-23T21:33:39+00:00</updated>
<author>
<name>Charlie Root</name>
<email>root@dangofactory.local</email>
</author>
<published>2026-09-23T21:33:39+00:00</published>
<link rel='alternate' type='text/html' href='https://openpgpkey.dangofactory.net/cgit/cgit.cgi/kukuri.git/commit/?id=1ccf22fc6eaee764fc179c8d491073441af3f5b3'/>
<id>1ccf22fc6eaee764fc179c8d491073441af3f5b3</id>
<content type='text'>
The UI module previously held a single welcome card. It now implements the fixed
skeleton from the FSMP front-end design (section 2.22, decided 2026-09-24) as
Compose Multiplatform code shared by every target:

  Home      now: TODO chips + today (timetable / same-day notices / deadlines)
  Timeline  flow: posts with answer/confirm badges and contact bubbles
  Calendar  when: month grid -&gt; tap a day -&gt; day timeline (hour-axis rows mixing
            timetable and auto-source events, per 2.21)
  Note      what remains: notes / tasks / documents / artefacts with WorkType
            filters and the unsubmitted view
  Live      now-connect: live / scheduled / recordings, teacher start button

Chrome follows the decided responsive rules rather than invented layout: the wide
form gets the left rail (title + date/period, search, the five frames in the
fixed order Home/Timeline/Calendar/Note/Live, spacer, [+][gear][D/L] at the
bottom), the narrow form gets a search field on top and a bottom tab bar with the
gear at its right end. The pie sits bottom-right on both forms (centre W, four
quadrants) and the [+] sits at its left as a pair, swapping under the
left-handed flip setting; the contact input bar appears only on wide Timeline and
carries no destination chip, because the pie itself shows scope and destination.
Frame bodies intentionally hold sample values - the design leaves in-frame
placement and visual tuning to this prototype, so only the skeleton is asserted.

Calendar dependency: kizitonwose/Calendar (MIT), artifact
com.kizitonwose.calendar:compose-multiplatform, which supports Android/iOS/js/
WasmJs/Desktop like the rest of the build. Pinned to 2.7.0 because that is the
release whose required Kotlin (2.1.21) matches this project; 2.8.0 needs Kotlin
2.2 and 2.10.x needs Kotlin 2.3 plus Compose 1.10, so either would force a
toolchain upgrade well beyond this change.

One trap worth recording: the library carries its OWN YearMonth
(com.kizitonwose.calendar.core.YearMonth, with its own now()/plusMonths()/
minusMonths() extensions) because kotlinx-datetime 0.6.2 - the version the
library declares - has no YearMonth at all. That type only landed in
kotlinx-datetime 0.7.0, which is what this project uses. Importing
kotlinx.datetime.YearMonth therefore compiles to a type mismatch inside
rememberCalendarState; the code must use the library's type. Do not "fix" this by
forcing kotlinx-datetime upward - the library's binary is bound to the 0.6.2
shape.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The UI module previously held a single welcome card. It now implements the fixed
skeleton from the FSMP front-end design (section 2.22, decided 2026-09-24) as
Compose Multiplatform code shared by every target:

  Home      now: TODO chips + today (timetable / same-day notices / deadlines)
  Timeline  flow: posts with answer/confirm badges and contact bubbles
  Calendar  when: month grid -&gt; tap a day -&gt; day timeline (hour-axis rows mixing
            timetable and auto-source events, per 2.21)
  Note      what remains: notes / tasks / documents / artefacts with WorkType
            filters and the unsubmitted view
  Live      now-connect: live / scheduled / recordings, teacher start button

Chrome follows the decided responsive rules rather than invented layout: the wide
form gets the left rail (title + date/period, search, the five frames in the
fixed order Home/Timeline/Calendar/Note/Live, spacer, [+][gear][D/L] at the
bottom), the narrow form gets a search field on top and a bottom tab bar with the
gear at its right end. The pie sits bottom-right on both forms (centre W, four
quadrants) and the [+] sits at its left as a pair, swapping under the
left-handed flip setting; the contact input bar appears only on wide Timeline and
carries no destination chip, because the pie itself shows scope and destination.
Frame bodies intentionally hold sample values - the design leaves in-frame
placement and visual tuning to this prototype, so only the skeleton is asserted.

Calendar dependency: kizitonwose/Calendar (MIT), artifact
com.kizitonwose.calendar:compose-multiplatform, which supports Android/iOS/js/
WasmJs/Desktop like the rest of the build. Pinned to 2.7.0 because that is the
release whose required Kotlin (2.1.21) matches this project; 2.8.0 needs Kotlin
2.2 and 2.10.x needs Kotlin 2.3 plus Compose 1.10, so either would force a
toolchain upgrade well beyond this change.

One trap worth recording: the library carries its OWN YearMonth
(com.kizitonwose.calendar.core.YearMonth, with its own now()/plusMonths()/
minusMonths() extensions) because kotlinx-datetime 0.6.2 - the version the
library declares - has no YearMonth at all. That type only landed in
kotlinx-datetime 0.7.0, which is what this project uses. Importing
kotlinx.datetime.YearMonth therefore compiles to a type mismatch inside
rememberCalendarState; the code must use the library's type. Do not "fix" this by
forcing kotlinx-datetime upward - the library's binary is bound to the 0.6.2
shape.
</pre>
</div>
</content>
</entry>
<entry>
<title>apps/android: request kotlin.android without version (already on classpath via KMP)</title>
<updated>2026-09-03T11:23:54+00:00</updated>
<author>
<name>ketsuban</name>
<email>ketsuban@kukuri.dev</email>
</author>
<published>2026-09-03T11:23:54+00:00</published>
<link rel='alternate' type='text/html' href='https://openpgpkey.dangofactory.net/cgit/cgit.cgi/kukuri.git/commit/?id=7cbd11e7b41b1518a0cab90c1c52c8df41df89f8'/>
<id>7cbd11e7b41b1518a0cab90c1c52c8df41df89f8</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>android app shell + bundleApk artifact (buildbot deploy); ui module gains androidTarget</title>
<updated>2026-09-03T11:23:05+00:00</updated>
<author>
<name>ketsuban</name>
<email>ketsuban@kukuri.dev</email>
</author>
<published>2026-09-03T11:23:05+00:00</published>
<link rel='alternate' type='text/html' href='https://openpgpkey.dangofactory.net/cgit/cgit.cgi/kukuri.git/commit/?id=17a5d5a7abce5e98d3d292e4b07b5b02756f0e52'/>
<id>17a5d5a7abce5e98d3d292e4b07b5b02756f0e52</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>kukuri reset: welcome-only app shell + bridge/vendor modules + CI infra</title>
<updated>2026-09-03T10:10:18+00:00</updated>
<author>
<name>ketsuban</name>
<email>ketsuban@kukuri.dev</email>
</author>
<published>2026-09-03T10:10:18+00:00</published>
<link rel='alternate' type='text/html' href='https://openpgpkey.dangofactory.net/cgit/cgit.cgi/kukuri.git/commit/?id=20fbdb7c15fd74efc62833d295373b0ce601e9e5'/>
<id>20fbdb7c15fd74efc62833d295373b0ce601e9e5</id>
<content type='text'>
Full pre-reset history preserved on branch backup/full-pre-reset (2ccab79).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Full pre-reset history preserved on branch backup/full-pre-reset (2ccab79).
</pre>
</div>
</content>
</entry>
</feed>
