Skip to content

web: converge shell visual language and emit ISO timestamps from core - #17

Merged
PerishCode merged 2 commits into
mainfrom
feat/mini-stim-product-detail-followup
Jun 11, 2026
Merged

web: converge shell visual language and emit ISO timestamps from core#17
PerishCode merged 2 commits into
mainfrom
feat/mini-stim-product-detail-followup

Conversation

@PerishCode

Copy link
Copy Markdown
Owner

Summary

Two commits from the product-detail followup round:

  • f6518e8 shell visual language convergence — quiet-by-default header chips (only sending/reconnecting render), de-capsed Conversations, computed shell-level theme variables (--ms-shell-padding/gap/radius/shadow), SectionStackLayout pattern for right-panel section ownership, TextArea autosize extracted to hooks with overscroll/box-model/bottom-anchor fixes, rail/header truncation polish.
  • c1578da ISO 8601 timestamps from coretimestamp_now() now emits RFC3339 UTC with fixed 3-digit millisecond precision via jiff (fixed width is load-bearing: timestamps are lexicographic sort keys in SQLite ORDER BY and browser localeCompare). New business-blind Timestamp atom (dayjs) renders relative time with absolute local time on hover; the web-local coreStamp.ts bypass is deleted. Contracts regeneration produces zero diff (the Timestamp = String alias is unchanged).

Test plan

  • Verified live via playwright: API returns ...Z timestamps, rail/transcript show relative time with absolute title, ordering consistent
  • Rust + web CI

🤖 Generated with Claude Code

PerishCode and others added 2 commits June 11, 2026 19:43
Continue the low-chroma tool-surface direction: tighten shell density,
hairline + whisper-shadow containment, denser rail rows with clearer
default/selected differentiation, compact badge/chip language, and
single-line truncation for long titles in constrained chrome.

Fix a real display bug: core emits `<unix-seconds>-<millis>` stamps, not
ISO dates, so `new Date(value)` fell through to printing the raw string
(e.g. `1781170545-087`) in both the rail and the transcript. Add a shared
`parseCoreStamp` helper in web — product-semantic knowledge of the core
contract belongs here, not in the business-blind component layer.

Quiet the header chip system: drop the always-on idle/open/new chips and
show only meaningful states (sending, reconnecting). Normalize the leftover
all-caps `CONVERSATIONS` rail label to match the calmer descriptor language.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Push the timestamp display problem back to its correct ownership layers
instead of patching it in web.

Source (santi-core): `timestamp_now` produced `<unix-seconds>-<millis>`
strings, not ISO dates. Switch to jiff with fixed millisecond precision
(`DateTimePrinter::precision(Some(3))`), emitting RFC3339 UTC like
`2026-06-11T12:06:58.539Z`. Fixed-width fractional digits keep the value
lexicographically sortable, which both the SQLite `ORDER BY` and the browser
projection `localeCompare` sort keys rely on. The `Timestamp = String` alias
is unchanged, so the generated OpenAPI contract is untouched — only the
runtime value's semantics change. This also aligns the server with the
optimistic projection in mqueue, which already emitted ISO via
`new Date().toISOString()`.

Component layer: add a business-blind `Timestamp` atom backed by dayjs
(relativeTime + utc + localizedFormat). It renders a semantic `<time>` with
a machine-readable `dateTime`, shows smart relative text by default
("a few seconds ago"), and always carries the absolute local time in `title`
on hover. dayjs is generic display capability, not business logic, so it
belongs in components. `Text` gains a `time` tag and a `dateTime` prop.

Web: drop the now-redundant `coreStamp.ts` bypass added last round and render
session/message stamps through the `Timestamp` atom.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@PerishCode
PerishCode merged commit d0692b9 into main Jun 11, 2026
4 checks passed
@PerishCode
PerishCode deleted the feat/mini-stim-product-detail-followup branch June 11, 2026 13:52
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