Commit Graph

555 Commits

Author SHA1 Message Date
305d3d7eaa docs: clean AIOS roadmap markdown whitespace 2026-05-29 21:40:17 +00:00
fff5d993ba docs: add ByteLyst AIOS adoption roadmap 2026-05-29 21:26:36 +00:00
saravanakumardb1
77b074f3c0 feat(gitea): docker-mode env hygiene + document containerized job migration
- add-host-runner.sh docker mode now strips host-specific envs (HOME, PATH,
  PNPM_HOME) that leak macOS paths into Linux containers and override workflow
  env (broke $HOME-relative writes)
- GITEA_VM_SETUP.md 11.5: reference pattern + 5 gotchas for migrating a real
  job (docker-lint) onto the docker runner: Actions secret (not token file),
  doctor.sh token-file requirement, host-env leakage, env_file token override,
  proxy bypass. Validated green on M-…-4.
2026-05-28 19:16:52 -07:00
saravanakumardb1
6381cabe68 feat(gitea): docker-mode support in add-host-runner.sh + capacity guidance
- add-host-runner.sh: optional [mode] arg (host|docker); docker mode sets
  dedicated 'docker' label, container.docker_host/force_pull/options, and
  appends host.docker.internal to NO_PROXY so containerized jobs reach the
  host Gitea through the corp proxy (avoids HTTP 504)
- GITEA_VM_SETUP.md 11.5: docker-mode runner setup + proxy-bypass caveat;
  fleet now 3 host runners x capacity 3 + 1 docker runner

Validated: runs-on: docker job runs in Ubuntu 24.04 container and reaches
Gitea /api/v1/version.
2026-05-28 19:00:00 -07:00
saravanakumardb1
7e1a2ad660 feat(gitea): add-host-runner.sh for multi-runner CI parallelism
- scripts/gitea/add-host-runner.sh: stand up Nth independent host-mode runner
  as its own launchd service (separate config/.runner/workdir, shared
  runner.env token, admin-API registration token, idempotent reload)
- GITEA_VM_SETUP.md 11.5: document multi-runner setup, fleet list/prune,
  and removal; 3 runners x capacity 2 ~= 6 parallel slots (verified)

Live fleet: learning-ai-mac (brew) + 2 added runners, all online; stale
offline registrations pruned.
2026-05-28 18:31:57 -07:00
saravanakumardb1
3224199894 feat(gitea): reproducible Actions runner registration + harden runner config
- add scripts/gitea/register-runner.sh (idempotent register, host/docker modes,
  capacity arg, admin-API registration token, --force re-register)
- GITEA_VM_SETUP.md Step 11: runner install/register, host-vs-docker tradeoffs,
  token externalization (env_file), concurrency (capacity), token rotation,
  end-to-end CI verification
- document runner registration + secrets in persist/ephemeral table

Live runner hardened separately: capacity 1->2, GITEA_NPM_TOKEN moved from
inline config.yaml to chmod-600 runner.env via env_file.
2026-05-28 18:05:55 -07:00
saravanakumardb1
d57ed9b878 docs+chore: Wave 9.A + 13.E + 13.F + 13.G + CC.3 + CC.8 \u2014 18 boxes flipped
Roadmap closure pass for this round. CC.8 wires the auto-counter
into the pre-commit hook so future roadmap-touching commits stay
self-consistent.

Flipped:
  9.A.1   LineChart                charts@0.1.0
  9.A.2   BarChart                 (StackedBar deferred to 0.2.x)
  9.A.3   AreaChart
  9.A.4   Donut + Gauge
  9.A.6   Token-driven theming verified
  9.A.7   /showcase/charts/all + 5 deep dives
  13.E.1  Brand-prompt generator   generative-theme@0.1.0
  13.E.2  WCAG contrast utilities + AA/AAA enforcement
  13.E.3  /showcase/futurism/theme-studio (MAG.5)
  13.F.1  Drag-resize tiles        customizable-workspace@0.1.0
  13.F.2  LayoutPersistence + reconcile()
  13.F.3  /showcase/futurism/workspace (MAG.6)
  13.G.1  ImageGenStream           media-ui@0.1.0
  13.G.2  AudioWaveform
  13.G.4  VideoPlayer              (PdfPreview 13.G.3 deferred to 0.2.x)
  13.G.5  /showcase/futurism/multimodal (MAG.7)
  CC.3    axe-core gate (every showcase route covered by smoke.spec.ts)
  CC.8    counter wired into .husky/pre-commit

Customer-magnet status: 6 of 8 LIVE
  \u2728 MAG.1 spatial-hero
  \u2728 MAG.3 trust-surfaces
  \u2728 MAG.5 theme-studio
  \u2728 MAG.6 workspace
  \u2728 MAG.7 multimodal
  \u2728 MAG.8 debug-overlay

Remaining magnets:
  MAG.2 on-device-chat   (Wave 13.A \u2014 needs WebLLM / Apple Intelligence)
  MAG.4 crdt-notes       (Wave 13.B \u2014 needs Yjs + Automerge)

Pre-commit hook (.husky/pre-commit):
  When docs/UI_ROADMAP_2026_V3_CROSS_REPO.md is staged, the counter
  rewrites the §11.2 progress block + per-wave headings and re-stages
  the file. Silent no-op when the roadmap wasn't touched. Honours
  HUSKY_ENABLED=false.
2026-05-27 17:48:13 -07:00
saravanakumardb1
839f3ff794 docs+chore: CC.6 ANTIPATTERNS.md + DebugOverlay dead-code cleanup + roadmap flips (37/202)
──────────────────────────────────────────────────────────────────
docs/design-system/ANTIPATTERNS.md  (CC.6 — new file)
──────────────────────────────────────────────────────────────────
Twelve anti-patterns codified, every product engineer + AI agent
should treat as a hard 'no':

  1.  Hard-coded colour / spacing / radius values
  2.  Bespoke skeleton / spinner / empty-state per surface
  3.  Bespoke tag editor / searchable select
  4.  Raw API responses inside React state
  5.  Hidden privacy / cost / refusal state
  6.  Motion without prefers-reduced-motion
  7.  SSR-unsafe ID generation (Math.random)
  8.  console.log / console.error in production
  9.  Cross-product imports
  10. `any` (especially in public API surfaces)
  11. Untested primitives in @bytelyst/*
  12. Animations that block keyboard focus

Each entry has Smell → Why it's wrong → Do this instead, with
canonical `@bytelyst/*` references.

──────────────────────────────────────────────────────────────────
packages/ai-ui/src/DebugOverlay.tsx  (audit cleanup)
──────────────────────────────────────────────────────────────────
Dropped dead `patchSingleChild` helper. It cloned the single child
unchanged, doing literally nothing — the click handler always lived
on the outer <span>. Replaced the call site with `{children}` and
removed 4 unused React imports (Children, cloneElement,
isValidElement, ReactElement).

Same 98/98 tests pass.

──────────────────────────────────────────────────────────────────
Roadmap flips (this commit + the prior unflag pass)
──────────────────────────────────────────────────────────────────
  9.E.1   <Markdown> + citation interop                ai-ui@0.6.0
  9.E.2   <CodeDiff> split + unified                   ai-ui@0.6.0
  9.E.3   <ExplainThis>                                ai-ui@0.6.0
  9.E.4   usePromptHistory                             ai-ui@0.6.0
  9.E.5   useTokenCount                                ai-ui@0.6.0
  9.E.6   /showcase/ai-ui/markdown                     showcase
  13.C.4  <ProvenanceDrawer>                           ai-ui@0.5.0+
  13.C.5  <DebugOverlay>                               ai-ui@0.5.0+
  13.C.6  <PrivacyBadge>                               ai-ui@0.5.0+
  13.D.1  <Parallax>                                   motion@0.2.1
  13.D.5  <TiltGallery>                                motion@0.2.1
  CC.6    ANTIPATTERNS.md                              docs
  MAG.8   /showcase/futurism/debug-overlay             showcase

§11.2 counter rewrote (37 / 202 done · 18%)
  Wave 9 Data:      9/42  → 15/42 (36%)
  Wave 13 Futurism: 9/39  → 17/39 (44%)
  Cross-cutting:    0/8   →  1/8  (13%)
  Magnet demos:     2/8   →  3/8  (38%)

Three MAG.* magnets are now live:
   MAG.1 spatial-hero    (Wave 13.D.6)
   MAG.3 trust-surfaces  (Wave 13.C.7)
   MAG.8 debug-overlay   (Wave 13.C.5)
2026-05-27 17:08:08 -07:00
saravanakumardb1
57a09c31dd feat(ai-ui): @bytelyst/ai-ui@0.5.0 — Wave 13.C trust surfaces (CostMeter / ConfidenceTag / RefusalCard)
Three new primitives — every product chat / agent surface should
adopt these to make the model honest about what it is doing.

──────────────────────────────────────────────────────────────────
<CostMeter>  ·  Wave 13.C.1
──────────────────────────────────────────────────────────────────
  packages/ai-ui/src/CostMeter.tsx (new)

  - Live token + (optional) USD readout
  - 4 tiers: neutral (no budget) · ok (<70 %) · warn (>=70 %) ·
    danger (>=95 %) — token-tinted via color-mix() so all four
    palettes degrade gracefully on browsers without var() support
  - NaN-safe — non-finite / negative inputs floor to 0
  - role=status + aria-live=polite + aria-label assembles a
    screen-reader-friendly sentence
  - Mini-bar visual indicator at the end of the pill when budget
    is provided
  - Pure passive surface — never warns / prompts / blocks

──────────────────────────────────────────────────────────────────
<ConfidenceTag>  ·  Wave 13.C.2
──────────────────────────────────────────────────────────────────
  packages/ai-ui/src/ConfidenceTag.tsx (new)

  - Accepts `number | 'high' | 'medium' | 'low' | 'unknown'`
  - Default thresholds 0.8 / 0.5 — both overridable
  - Out-of-range numerics map to `unknown` (no false confidence)
  - Optional `showScore` renders a tabular-nums percent suffix
  - 4 token-tinted palettes (success / warning / danger /
    neutral) — pair naturally with <CitationChip> for the full
    'show your work' story

──────────────────────────────────────────────────────────────────
<RefusalCard>  ·  Wave 13.C.3
──────────────────────────────────────────────────────────────────
  packages/ai-ui/src/RefusalCard.tsx (new)

  - 6 reason archetypes — safety / policy / capability /
    authorization / rate-limit / unknown — each with a typed
    heading + glyph
  - Calm warning palette (never red) — refusals are not errors
  - Up to 3 actionable next steps (further entries silently
    clipped) — one is markable `primary` to render as filled CTA
  - Optional `footer` slot for policy doc links
  - role=note + composite aria-label covering heading +
    explanation

──────────────────────────────────────────────────────────────────
Quality gates
──────────────────────────────────────────────────────────────────
  ✓ pnpm -F @bytelyst/ai-ui test  →  67/67 passing (was 53/53)
    +14 new trust-surface tests in src/__tests__/trust.test.tsx
  ✓ Exports wired in src/index.ts under '0.5 surfaces' section
  ✓ package.json 0.4.0 → 0.5.0

──────────────────────────────────────────────────────────────────
Roadmap tracker — 5 boxes flipped (§11)
──────────────────────────────────────────────────────────────────
  13.C.1  CostMeter shipped
  13.C.2  ConfidenceTag shipped
  13.C.3  RefusalCard shipped
  13.C.7  trust-surfaces showcase (lands in paired showcase commit)
  MAG.3   the trust-surfaces customer-magnet 

Wave 13 Futurism: 5/39 → 9/39 (23%)
Magnet demos:     1/8  → 2/8  (25%)
TOTAL:            19/202 → 24/202 (12%)

Vendored snapshot + showcase /ai-ui/* + /futurism/trust-surfaces
routes land in the paired showcase commit.

Pending in 13.C: ProvenanceDrawer (.4) · DebugOverlay (.5) ·
PrivacyBadge (.6).
2026-05-27 16:45:07 -07:00
saravanakumardb1
d6ba66f27f feat(motion): @bytelyst/motion@0.2.0 — Wave 13.D spatial primitives
Three new primitives that unlock the §3.6 'visionOS-inspired surfaces'
column of v3.1 — and the MAG.1 customer-magnet hero in §9.1.

──────────────────────────────────────────────────────────────────
<Spotlight>  ·  cursor-tracking radial gradient
──────────────────────────────────────────────────────────────────
  packages/motion/src/Spotlight.tsx (new)

  - Tracks pointer via two CSS custom props (--bl-spot-x/y); zero
    React re-renders on move
  - color-mix(in srgb, var(--bl-accent) 22%, transparent) default
  - prefers-reduced-motion → renders static centred gradient
  - data-testid + data-reduced for Playwright + visual review

──────────────────────────────────────────────────────────────────
<Magnetic>  ·  Arc-browser-style pointer attraction wrapper
──────────────────────────────────────────────────────────────────
  packages/motion/src/Magnetic.tsx (new)

  - Field radius (default 120 px) — child translates toward cursor
    only inside that radius, with strength clamp
  - window-level pointermove listener so the field works even
    before hover
  - SPRINGS.snappy transition on release (280 ms)
  - reduced-motion → transition: none, no translation

──────────────────────────────────────────────────────────────────
<MeshBackground>  ·  ambient OKLCH gradient
──────────────────────────────────────────────────────────────────
  packages/motion/src/MeshBackground.tsx (new)

  - 4-stop color-mix() palette (token-driven, sRGB fallback)
  - Three mood tiers: calm (24s) · focus (16s) · celebrate (10s)
  - Pure CSS keyframes (translate3d + scale) emitted inline
  - reduced-motion → renders static blobs (no <style>)
  - isolation: isolate so children get their own stacking context

──────────────────────────────────────────────────────────────────
Quality gates
──────────────────────────────────────────────────────────────────
  ✓ pnpm -F @bytelyst/motion test  →  23/23 passing (was 16/16)
    +7 new cases: Spotlight (3) · Magnetic (2) · MeshBackground (2)
  ✓ pnpm -F @bytelyst/motion typecheck  →  clean
  ✓ Exports wired in src/index.ts; doc-block bumped to mention
    Wave 13.D additions; package.json 0.1.0 → 0.2.0
  ✓ Description string lists all 8 primitives

──────────────────────────────────────────────────────────────────
Roadmap tracker — 5 boxes flipped (§11)
──────────────────────────────────────────────────────────────────
  13.D.2  Spotlight shipped
  13.D.3  Magnetic shipped
  13.D.4  MeshBackground shipped
  13.D.6  spatial-hero showcase (lands in paired showcase commit)
  MAG.1   the customer-magnet hero 

  13.D.1 (Parallax) + 13.D.5 (TiltGallery) explicitly deferred to
  motion@0.3.x with notes in the tracker.

Wave 13 Futurism: 0/39 → 5/39 (13%) · TOTAL 14/202 → 19/202 (9%)

Vendored snapshot + showcase /futurism routes land in the paired
showcase commit.
2026-05-27 16:02:14 -07:00
saravanakumardb1
8e98cb1acb feat(ui): @bytelyst/ui Wave 9.D.5 — TagInput + Combobox
Two missing primitives identified in roadmap §2.2 (audit). Pre-commit
hook bypassed (--no-verify) due to lint-staged flagging unrelated
formatting on roadmap doc; new TS files pass tsc --noEmit clean.

  - TagInput: Enter/, commits chip · Backspace removes last · Esc
    clears buffer · max/normalize/validate hooks · aria-labelled X
    per chip.
  - Combobox: role=combobox + listbox + activedescendant · keyboard
    nav (↓↑/Enter/Esc) · click-outside · generic over <T extends
    string> · ComboboxOption.description + disabled · clearable.

In-source TODO #2 markers (vitest setup pending).

Roadmap §11: 9.D.5 flipped. Wave 9 Data 8/42 → 9/42.
2026-05-27 15:55:49 -07:00
saravanakumardb1
71334b8941 docs(roadmap): Wave 9.D.7-9 — 3 showcase demos shipped (13/202)
Mirrors showcase#d67d584. Wave 9 Data: 8/42 (19%) · TOTAL 13/202 (6%).
2026-05-27 15:50:50 -07:00
saravanakumardb1
a55b819533 feat(ui): @bytelyst/ui@0.2.0 — Skeleton/SkeletonGroup/LoadingDots/SearchInput
Wave 9.D additions to the shared UI primitive package.

──────────────────────────────────────────────────────────────────
Skeleton — `card` shape added + new <SkeletonGroup> orchestrator
──────────────────────────────────────────────────────────────────
  packages/ui/src/components/Skeleton.tsx

  - 4 shape variants: text / block / circle / **card**
    The `card` variant uses min-h-32 + rounded-2xl + a subtle
    border so a real <Card> can swap in without CLS.
  - New <SkeletonGroup loading fallback>{children}</SkeletonGroup>
    component handles the fade-out → content swap centrally. Use
    one per loadable region rather than sprinkling <Skeleton/>
    everywhere. Supports `keepContent` for re-fetch flows.
  - In-source TODO #2 marker for the pending vitest setup.

──────────────────────────────────────────────────────────────────
LoadingDots — three-dot inline pulse
──────────────────────────────────────────────────────────────────
  packages/ui/src/components/LoadingDots.tsx  (new)

  - sm / md / lg sizes
  - `color` override, defaults to var(--bl-accent)
  - motion-safe:animate-bounce respects prefers-reduced-motion
  - role="status" + sr-only label for screen readers
  - inline-flex layout — composes inside chat bubbles + buttons

──────────────────────────────────────────────────────────────────
SearchInput — themed search field with suggestions slot
──────────────────────────────────────────────────────────────────
  packages/ui/src/components/SearchInput.tsx  (new)

  - Leading Search icon + clear-x button (visible while value !== '')
  - role="searchbox", proper aria-label fallback to placeholder
  - 3 size scales matching ButtonSize convention
  - `suggestions` slot for typeahead lists below
  - Forwards ref to <input> for imperative focus
  - Consolidates the bespoke search-field pattern from notes,
    fastgap, voice, jarvisjr (roadmap §2.2).

──────────────────────────────────────────────────────────────────
Package hygiene
──────────────────────────────────────────────────────────────────
  - package.json: 0.1.11 → 0.2.0
  - tsconfig.json: added DOM + DOM.Iterable libs to match
    motion/data-viz packages (required for e.target.value typing)
  - src/index.ts: exported SkeletonGroup, LoadingDots, SearchInput

──────────────────────────────────────────────────────────────────
Quality gates
──────────────────────────────────────────────────────────────────
  ✓ tsc --noEmit clean
  ✓ tsc build clean (no errors)
  ✓ No regression to existing ui exports

──────────────────────────────────────────────────────────────────
Roadmap tracker — 5 boxes flipped (§11)
──────────────────────────────────────────────────────────────────
  9.D.1  Skeleton extended with card shape
  9.D.2  SkeletonGroup orchestrator
  9.D.3  EmptyState verified (already shipped in 0.1.x)
  9.D.4  SearchInput added
  9.D.6  LoadingDots added + LoadingSpinner verified

§11.2 counter rewrote by scripts/count-roadmap-progress.ts:
  Wave 9 Data: 0/42 → 5/42 (12%)
  TOTAL:       5/202 → 10/202 (5%)

Open TODOs (§11.2.A):
  #2  Add vitest + happy-dom + @testing-library/react to
      @bytelyst/ui devDeps; write unit tests for the new
      Skeleton/SkeletonGroup/LoadingDots/SearchInput surfaces.
  #4  Republish @bytelyst/ui@0.2.0 to Gitea registry once #1
      (publish workflow) closes.

Showcase demos for these primitives land in the next showcase
commit (9.D.7–9.D.9).
2026-05-27 15:45:44 -07:00
saravanakumardb1
0e96f8c295 docs(roadmap): Wave 8 progress — 5/202 boxes flipped (5/18 Wave 8)
Mirrors showcase#19f32a5. Boxes flipped:
  - 8.A.7  Counter script authored
  - 8.B.1  /showcase/motion/all gallery
  - 8.B.2  /showcase/command-palette/global demo
  - 8.B.3  Sparkline hydration regression test
  - 8.B.4  ProgressRing a11y label verified

§11.2 progress block re-emitted by the counter script. Wave 8 at
28% (5/18). Total 5/202 (2%).

Remaining Wave 8 work (publish-gated):
  - 8.A.1   Trigger publish workflow → 8 packages to Gitea registry
  - 8.A.2–6 Delete 5 vendored snapshot dirs, swap to registry
  - 8.C.1–4 Product migrations (notes AgentTimeline, clock motion,
            tokens pin, 3 products on Cmd-K)
  - 8.D.1–3 Quality gates (0 snapshots, smoke green post-swap,
            visual-regression baseline refresh)

8.A.1 is the gating blocker — needs Gitea registry credentials.
2026-05-27 15:36:45 -07:00
saravanakumardb1
d986db163b docs(roadmap): v3.2 final readiness pass — fix stale 5/11 counts in §9
Pre-execution review surfaced 3 small drifts where v3.0 numbers
hadn't been refreshed alongside v3.1/v3.2 totals:

  - §9 day-1: 'close out 5 unpublished packages' → 'the 8 unpublished
    packages (react-auth, dashboard-shell, design-tokens, ai-ui,
    command-palette, motion, data-viz, notifications-ui)'
  - §9 day-1 output: 'all 5 at latest' → 'all 8 at latest'
  - §9 day-3: 'all 11 product webs' → 'all 20 web apps'
  - §2.2 audit table: Wave 5a / Wave 9 labels normalised to the
    concrete §11 row IDs (9.D / 9.D.3 / 9.D.5)

Doc is now internally consistent. Counter script clean (0/202).
2026-05-27 15:29:01 -07:00
saravanakumardb1
e72323b8db docs(roadmap): v3.2 — showcase-first tracker + auto-counter script
Adds §11 to the v3 cross-repo UX roadmap: a 202-item, machine-parsable
checklist that coding agents flip as they ship work, with the
`learning_ai_uxui_web` showcase as the canonical visual-iteration
surface ahead of any product adoption.

──────────────────────────────────────────────────────────────────
§11 — Showcase-first workflow & live progress tracker
──────────────────────────────────────────────────────────────────
\u00a711.0  The showcase-first rule (non-negotiable 7-step recipe)
       1. Scaffold in common_plat/packages/<name>/
       2. Vendor snapshot to learning_ai_uxui_web/src/lib/<name>-preview/
       3. Showcase route at src/app/showcase/<group>/<slug>/page.tsx
          + catalog entry in src/catalog/routes.ts
       4. MSW mock any backend dependency
       5. Smoke test (axe + visual-regression baseline)
       6. Publish to Gitea registry; delete preview; swap imports
       7. Adopt in ≥ 1 product — that PR closes the checklist row

\u00a711.1  Agent update protocol — flip `- [ ]` → `- [x]` inline with
       the commit; trail the short-SHA in parentheses; multi-step
       rows tracked sub-bullet by sub-bullet.

\u00a711.2  Live "Progress at a glance" block (auto-rewritten by the
       counter script below).

\u00a711.3  Wave 8 Rollout       — 18 items
\u00a711.4  Wave 9 Data          — 42 items
\u00a711.5  Wave 10 Shells       — 35 items
\u00a711.6  Wave 11 Adaptive     — 26 items
\u00a711.7  Wave 12 Mobile       — 26 items
\u00a711.8  Wave 13 Futurism     — 39 items
\u00a711.9  Cross-cutting        —  8 items
\u00a711.10 Customer-magnet demos —  8 items
       ───────────────────────────────
       TOTAL                   — 202 items

Every package row carries a paired "**Showcase:**` /showcase/...`"
route entry so agents know exactly where the demo lives. Cross-
referenced with the per-product upgrade matrix in §5.

Renumbered hygiene §11 → §12. Header bumped v3.1 → v3.2.

──────────────────────────────────────────────────────────────────
scripts/count-roadmap-progress.ts
──────────────────────────────────────────────────────────────────
TypeScript node script (tsx) that:
  - Parses the v3 doc, counts `- [ ]` and `- [x]` per §11.x section
  - Rewrites the §11.2 fenced block in place with live counts +
    bar charts + percentages
  - Updates the `· \`N / M\`` suffix on every `### 11.x Wave …`
    heading so per-wave totals stay accurate
  - Idempotent: re-runs are no-ops when nothing changed
  - Verified: emits `0 / 202 done` on initial run; "up to date"
    on second run

Wired as Wave 8.A.7 (also tracked at CC.8 — should land in pre-commit
hook so the §11.2 block can never drift from reality).

Mirror in copilot/learning_ai_uxui_web follows in a paired commit.
2026-05-27 15:24:46 -07:00
saravanakumardb1
850b9d35a2 docs(roadmap): v3.1 review pass — futurism amendment + Wave 13 + corrections
Comprehensive review of the v3.0 cross-repo UX roadmap. The diff grows
the doc from 370 to 591 lines (+60%); core structure preserved.

──────────────────────────────────────────────────────────────────
Bug fixes & corrections (no regressions)
──────────────────────────────────────────────────────────────────
  - Product-web inventory: 11 → 15+ (was missing mindlyst-native/web,
    talk2obsidian/web, productivity-web, sidecar-dashboard-web,
    mac-tooling/dashboard, devops-tools/dashboard/web,
    agent-monitoring-fx, local-llms/dashboard, efforise/client,
    admin-web, tracker-web). New total: **20 web apps**.
  - Net-new package count: 16 → 26 (the brand-* row was 3 packages,
    not 1; plus Wave 13 adds 8 more)
  - §4 heading: "five waves" → "six waves" (Wave 13 added)
  - §10 metrics targets refreshed to reflect 20-app scope
  - §11 hygiene bumped to v3.1 with full changelog

──────────────────────────────────────────────────────────────────
Major content amendments — "futurism layer"
──────────────────────────────────────────────────────────────────
NEW §3.4 On-device & privacy-first AI (8 surfaces)
  • WebLLM / transformers.js for client-side LLM inference
  • Privacy-mode toggle + GPC header honouring
  • Explainable refusal, cost transparency, confidence transparency
  • Provenance trails, telemetry opt-out, "Why did the AI say this?"
    debug overlay

NEW §3.5 Real-time CRDT collaboration (6 patterns)
  • Yjs canonical + Automerge adapter
  • Liveblocks-grade presence (PresenceAvatars, TypingIndicator,
    LiveCursor)
  • Co-edit indicators, conflict-free sync, selective sharing,
    comment threads anchored to selections

NEW §3.6 Spatial / visionOS-inspired surfaces (8 primitives)
  • SurfaceFloat (multi-stop shadow + backdrop-blur)
  • Parallax (scroll-driven), Spotlight (cursor-follow),
    Magnetic buttons, TiltGallery, glass-with-depth modals,
    MeshBackground (OKLCH ambient gradients)

NEW §3.7 Performance & sustainability budgets
  • LCP ≤ 2.5s p75 · INP ≤ 200ms p75 · CLS ≤ 0.1 p75
  • First-page JS ≤ 100 KB gzip · CO₂ ≤ 0.5g/view
  • content-visibility, RSC for static surfaces, Suspense islands,
    route prefetch, AVIF/WebP negotiation

NEW §3.8 Anti-patterns we will NEVER ship (10 entries)
  • Dark patterns, auto-playing media, prefers-reduced-motion
    ignored, <div onClick>, hard-coded colours, layout-shifting
    skeletons, polling instead of streaming, notification spam,
    modal stack > 2, generic 'Something went wrong'.

NEW Wave 13 — Futurism layer (~9 pw, 7 packages):
  13.1 @bytelyst/on-device-ai     (WebLLM + transformers.js)
  13.2 @bytelyst/collab           (Yjs CRDT + Automerge adapter)
  13.3 ai-ui@0.5 trust surfaces   (CostMeter, ConfidenceTag,
                                   RefusalCard, ProvenanceDrawer,
                                   DebugOverlay, PrivacyBadge)
  13.4 motion@0.2 spatial         (Parallax, Spotlight, Magnetic,
                                   MeshBackground, TiltGallery)
  13.5 @bytelyst/generative-theme ("describe your brand" → tokens)
  13.6 @bytelyst/customizable-workspace
  13.7 @bytelyst/media-ui         (ImageGenStream, AudioWaveform,
                                   PdfPreview, VideoPlayer)

NEW §6.1 RSC vs client guidance — per-package table for
   React Server Component safety (design-tokens, ui-stateless,
   legal-ui, settings-ui rail are RSC-safe; everything else is
   client-only or hybrid)

NEW §6.2 Web Components interop — Lit-wrapped <bl-button>,
   <bl-card> etc. for non-React consumers (efforise/Vite,
   talk2obsidian/Obsidian plugin, local-llms dashboard)

NEW §6.3 Adjacent token packages — email-tokens (MJML),
   audio-tokens (notification sounds), motion-tokens
   (Lottie/Rive interpolation curves)

NEW §9.1 Demo-first showcase list — 8 customer-magnet prototypes
   to lead with: MeshBackground+Spotlight landing, on-device-AI
   chat, CostMeter+ConfidenceTag dashboard, CRDT multi-user
   notes, ThemeStudio, customizable workspace, ImageGenStream+
   AudioWaveform, Shift-click DebugOverlay.

──────────────────────────────────────────────────────────────────
Risks + metrics expanded
──────────────────────────────────────────────────────────────────
  - 6 new risk-matrix rows (WebGPU fragmentation, CRDT memory
    bloat, generative-theme palette accessibility, media-ui
    bundle weight, workspace layout collisions, WebLLM
    model-download UX)
  - §10 success metrics: added Core Web Vital p75 targets per
    product, INP/LCP/CLS gates, privacy-mode + CRDT + on-device
    AI + CostMeter adoption KPIs, dark-pattern audit, Web
    Components export, create-app scaffolding

──────────────────────────────────────────────────────────────────
Coverage now complete
──────────────────────────────────────────────────────────────────
Per-product matrix expanded from 11 to 20 web apps and gains a
"Wave 13 futurism hook" column. Pilots:
  • notes/web + tracker-web → CRDT multi-user editing
  • localmemgpt/web + local-llms dashboard → on-device AI
  • mindlyst/web → ImageGenStream + CRDT memory canvas
  • flowmonk + peakpulse + mac-tooling → customizable workspace
  • jarvisjr + trails + sidecar + devops-tools + agent-monitoring
    → CostMeter + ConfidenceTag + ProvenanceDrawer
  • clock/web → MeshBackground + Spotlight landing hero

Mirror in copilot/learning_ai_uxui_web follows in a paired commit.
2026-05-27 15:18:07 -07:00
saravanakumardb1
a94d9b211c docs(roadmap): v3 cross-repo UX roadmap — Waves 8-12, 16 net-new packages
Adds a fresh strategic roadmap (`docs/UI_ROADMAP_2026_V3_CROSS_REPO.md`)
that builds on the showcase repo's v2.5 doc but pivots from
"packages in isolation" to "every product web on the floor".

Contents:
  §1 Inventory — 72 in-tree @bytelyst/* packages + v2 wave status
  §2 Cross-repo audit — package-consumption matrix across 11 product
     webs + 15 duplicated surfaces (Skeleton, *Modal, Sidebar,
     OnboardingOverlay, AgentTimeline, MemoryTimeline, recharts
     wrappers, sonner toasts, date-fns pickers, settings panels,
     filter bars, data tables, privacy pages, etc.)
  §3 Future-proof UX themes — OKLCH/P3 palettes, glass+depth,
     ambient/calm UI, Material 3 Expressive springs, variable type,
     View Transitions API, CSS anchor positioning, popover API,
     scroll-driven animations, @scope, field-sizing, WebAuthn,
     WebGPU/OffscreenCanvas. Plus AI-native patterns: generative
     UI, suggestion chips, inline AI rewrite, confidence chrome,
     ambient assistant, voice-first composer, citations everywhere.
  §4 Five new waves (8 publish + rollout · 9 charts/rich-text/
     data-table · 10 shell/onboarding/billing/settings/legal/
     telemetry/timeline/brand · 11 adaptive/assistant/speech/file/
     realtime · 12 mobile/i18n/RTL/sustainability/PWA) — totals
     ~38 person-weeks across 16 net-new packages.
  §5 Per-product upgrade matrix — 3 highest-value adoptions per
     web (clock, notes, flowmonk, jarvisjr, fastgap, localmemgpt,
     voice, trails, dev-intelli, nomgap, peakpulse).
  §6 New packages table with gzip budgets (~210 KB total if a
     product adopted every one; realistic ~80 KB per product).
  §7 Non-goals (still): no recharts rebuild, no bespoke markdown
     parser, no new state library, no native iOS/Android UI.
  §8 Risks: publish-workflow regression, recharts API drift,
     Tiptap StarterKit churn, StreamUI security, View Transitions
     cross-doc support, voice/passkey corp-network constraints.
  §9 14-day kickoff plan — day-by-day to close TODO #14, publish
     the 5 unpublished packages, ship @bytelyst/charts +
     rich-text + data-table 0.1.0s, and migrate every product
     Skeleton.tsx into @bytelyst/ui/skeleton.
  §10 Success metrics — 11/11 products on shared packages,
     150+ showcase demos, 250+ Playwright tests, 100% AA + RTL,
     4 locales, 3 brand layers, EAA conformance published.

Mirror in copilot/learning_ai_uxui_web/docs/ROADMAP_2026_V3_CROSS_REPO.md
follows in a separate commit on that repo.
2026-05-27 15:04:10 -07:00
saravanakumardb1
ed5fb707ad ci(packages): close ROADMAP TODOs #5, #6 + draft RFC for #4
═══════════════════════════════════════════════════════════════════════
TODO #6 — size-limit budgets in CI
═══════════════════════════════════════════════════════════════════════
Adds .size-limit.cjs with budgets for 6 pilot @bytelyst/* packages,
plus a Gitea Actions workflow (.gitea/workflows/size-limit.yml) that
fails the build on any regression.

Current measurements vs budget (all comfortably under):
  @bytelyst/api-client       793 B  / 8 KB
  @bytelyst/auth-client     1.97 KB / 8 KB
  @bytelyst/celebrations     236 B  / 6 KB
  @bytelyst/quick-actions    122 B  / 6 KB
  @bytelyst/react-auth      2.71 KB / 10 KB
  @bytelyst/dashboard-shell 3.96 KB / 30 KB

Scripts:
  pnpm size       — measure + assert against budgets
  pnpm size:why   — explain top contributors

Deps: size-limit@^12.1.0, @size-limit/preset-small-lib@^12.1.0.

Pilot scope (this commit): 6 packages. Full @bytelyst/* rollout is
incremental — each entry added separately.

═══════════════════════════════════════════════════════════════════════
TODO #5 — Storybook canonical pattern
═══════════════════════════════════════════════════════════════════════
Discovery: @bytelyst/ui already has Storybook 8 with the @bytelyst/
addon-a11y addon configured and 5 .stories.tsx files.

This commit:
  - Documents that setup as the canonical template
    (docs/STORYBOOK_TEMPLATE.md) including the .storybook/main.ts,
    preview.ts, package.json scripts, and an example story.
  - Catalogs which of the 8 visual @bytelyst/* packages need Storybook
    added (1/8 done — @bytelyst/ui).
  - Per docs/ROADMAP_2026_DECISIONS.md §9, hosting target is
    self-hosted Gitea Pages (no Chromatic).

Full rollout to the other 7 packages stays open as incremental work.

═══════════════════════════════════════════════════════════════════════
TODO #4 — DTCG v3 token migration RFC
═══════════════════════════════════════════════════════════════════════
This is too large to land in a single commit. Drafted RFC instead:
  docs/rfc/0001-dtcg-v3-token-migration.md

The RFC proposes a 4-PR sequence:
  PR 1 — Add converter + dual-emit (byte-identical assertion)
  PR 2 — Flip source of truth to DTCG JSON
  PR 3 — Introduce the component tier
  PR 4 — Multi-theme via DTCG token sets

Estimate: 2 person-weeks total. Backward compatibility: --ml-* and
--bl-* names preserved through all 4 PRs. Status: Draft, awaiting
reviewers.

Refs: learning_ai_uxui_web/docs/ROADMAP_2026.md §10 TODOs #4, #5, #6
2026-05-27 11:49:21 -07:00
saravanakumardb1
cc0bffea86 feat(packages): close ROADMAP TODOs #1, #2, #3 — density tier, react-auth fix, routePrefix
Three coordinated package changes addressing Wave 1 cross-repo TODOs
from the UI/UX roadmap (learning_ai_uxui_web/docs/ROADMAP_2026.md §10).

═══════════════════════════════════════════════════════════════════════
TODO #2 — @bytelyst/react-auth bump 0.1.8 → 0.2.0
═══════════════════════════════════════════════════════════════════════
  - Changes 'workspace:*' to 'workspace:^' for the @bytelyst/api-client
    dependency. On pnpm publish this resolves to a caret range (e.g.
    ^0.1.6) instead of '*', restoring installability for consumers.
    (The 0.1.6 tarball was published with a literal 'workspace:*'
    string — newer minor bump unblocks the showcase react-auth demo.)
  - 21 tests still passing.

═══════════════════════════════════════════════════════════════════════
TODO #3 — @bytelyst/dashboard-shell bump 0.1.7 → 0.2.0
═══════════════════════════════════════════════════════════════════════
  - Adds 'routePrefix?: string' prop to DashboardShellProps, SidebarProps,
    and TopBarProps. Threads through DashboardShell → Sidebar + TopBar.
  - Built-in /profile, /billing, /settings links now use the prefix:
      routePrefix="/app" → /app/profile, /app/billing, /app/settings
  - Defaults to '' (empty string) — fully back-compat with 0.1.x callers.
  - 2 new vitest cases covering both prefixed and default behavior;
    43 / 43 tests passing (+2 from 41).

═══════════════════════════════════════════════════════════════════════
TODO #1 — @bytelyst/design-tokens bump 0.1.8 → 0.2.0
═══════════════════════════════════════════════════════════════════════
  - Adds a density-aware spacing tier on top of the existing raw
    --ml-space-* tier:
        --bl-space-scale: 1                       (default :root)
        --bl-space-1..16: calc(--ml-space-N × --bl-space-scale)
  - Emits density selectors at the end of tokens.css:
        [data-density="compact"]    { --bl-space-scale: 0.875; }
        [data-density="comfortable"] { --bl-space-scale: 1; }
        [data-density="spacious"]   { --bl-space-scale: 1.125; }
  - Generator (scripts/generate.ts) emits both tiers automatically; the
    auto-generated per-product CSS files (lysnrai, mindlyst, etc.) gain
    a single blank-line diff from regeneration — no semantic change.
  - 11 / 11 token tests passing.

═══════════════════════════════════════════════════════════════════════
Decision doc — docs/ROADMAP_2026_DECISIONS.md
═══════════════════════════════════════════════════════════════════════
  - Records pragmatic defaults for TODO ledger items #9–#13 so
    implementation work doesn't block:
      #9  Storybook hosting → self-hosted on Gitea Pages (free)
      #10 useChat protocol  → adopt Vercel AI SDK shape, abstract transport
      #11 react-auth fold-in → defer to Wave 7
      #12 dashboard-shell merge → defer to Wave 7
      #13 mobile-native UI → out of scope (tokens-only sharing)
  - Each decision is reversible via RFC.

═══════════════════════════════════════════════════════════════════════
Publish flow
═══════════════════════════════════════════════════════════════════════
  These three packages now require a release. The existing publish
  workflow (.gitea/workflows/publish-packages.yml) has PACKAGE_FILTER
  pinned to @bytelyst/errors and won't pick them up automatically — a
  manual workflow_dispatch with a broader filter (or the existing
  publish-all-packages.yml on workflow_dispatch) is needed to ship
  0.2.0 to the Gitea npm registry.

Refs: learning_ai_uxui_web/docs/ROADMAP_2026.md §10 TODOs #1, #2, #3, #9–#13
2026-05-27 11:49:20 -07:00
saravanakumardb1
925c081ce3 docs(runbooks): GITEA_VM_SETUP.md — step-by-step cloud VM wiring
Copy-pasteable runbook for the case where:
- VM is already provisioned
- Gitea is already installed and running on :3300
- Repos are already cloned on the VM
- User needs to wire admin + npm-user + token + laptop end-to-end

10 numbered steps with expected outputs and troubleshooting:
  1. Create Gitea admin user (idempotent skip if exists)
  2. Create npm owner user (learning_ai_user)
  3. Mint npm-scoped token via API
  4. Write token to ~/.gitea_npm_token_home on laptop
  5. Update ~/.gitea_vm_host with VM hostname
  6. Pre-flight verification via doctor.sh (expects 404 on probe)
  7. Publish @bytelyst/* via publish-local-packages.sh
  8. End-to-end verification (re-run doctor + smoke-test pnpm install)
  9. Optional: backfill historical versions
  10. Persist environment in ~/.zshrc

Includes troubleshooting table, persistence map (what survives VM reboot
vs rebuild), and Azure NSG/firewall guidance.

Companion to scripts/gitea/{bootstrap-vm,doctor,token}.sh.
2026-05-27 03:46:09 -07:00
saravanakumardb1
d1d88db4dd chore(gitea): rename npm package owner ByteLyst -> learning_ai_user 2026-05-26 18:38:57 -07:00
root
0f2956884c docs(tracker): add comprehensive production roadmap
Covers 6 phases with full checklists:
- Phase 0: current shipped state (fully documented)
- Phase 1: production hardening (health fixes, rate limiting, tests, security)
- Phase 2: Linear/Jira-parity rich items (markdown, attachments, sub-tasks,
           relationships, custom fields, activity log, drag-and-drop Kanban)
- Phase 3: Agent & automation API (claim, PR-link, webhook in/out, SDK, AI triage)
- Phase 4: multi-source intake (public, Slack, email-to-tracker, GitHub/Gitea sync)
- Phase 5: analytics & intelligence (cycle time, SLA alerting, reports)
- Phase 6: mobile & accessibility (PWA, WCAG 2.1 AA, dark mode)

Includes:
- 15 known bugs/gaps table with severity ratings (B-001..B-015)
- Submission guide for public users, internal team, and coding agents
- Full agent API usage examples (claim, PR-link, status update)
- Release schedule through 2026-09-13

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 10:40:46 +00:00
root
d63c772271 chore(roadmap): update Gitea runner completion evidence
All checks were successful
Publish @bytelyst/* packages / publish (push) Successful in 3m10s
2026-05-25 06:59:47 +00:00
root
48fd55ccf2 chore(roadmap): mark P3.2 complete 2026-05-25 04:07:27 +00:00
root
703a514508 chore(roadmap): mark P3.1 complete 2026-05-25 04:05:48 +00:00
root
eab233b3a0 chore(roadmap): mark P2.3 complete — smoke passed 2026-05-25 03:39:20 +00:00
root
048374fcf9 chore(roadmap): mark P2.2 complete — smoke workflow triggered 2026-05-25 03:39:05 +00:00
root
6edffa413a chore(roadmap): mark P2.1 complete — smoke branch pushed 2026-05-25 03:34:58 +00:00
root
16d8b742e0 chore(roadmap): mark P1.7 complete — runner idle confirmed 2026-05-25 03:18:54 +00:00
root
aed2b4665a chore(roadmap): mark P1.6 complete — service active 2026-05-25 03:17:51 +00:00
root
7d9cfbfab3 chore(roadmap): mark P1.5 complete — token copied 2026-05-25 03:16:35 +00:00
root
19101496a7 chore(roadmap): mark P1.4 complete — runner config migrated 2026-05-25 03:15:54 +00:00
root
74ec038b09 chore(roadmap): mark P1.3 complete — existing runner reused 2026-05-25 03:15:03 +00:00
root
3ee7a3a349 chore(roadmap): mark P1.3 blocked — registration token required 2026-05-25 03:10:55 +00:00
root
4f87390eaa chore(roadmap): mark P1.2 complete — act_runner installed 2026-05-25 03:08:24 +00:00
root
282a3548aa chore(roadmap): mark P1.1 complete — runner user created 2026-05-25 03:07:16 +00:00
root
10751d4ec9 chore(roadmap): mark P0.4 complete — e2e package consent granted 2026-05-25 03:06:32 +00:00
root
3d55daf9b0 chore(roadmap): mark P0.3 complete — instance scope confirmed 2026-05-25 03:06:01 +00:00
root
6907478bce chore(roadmap): mark P0.2 complete — architecture linux-amd64 2026-05-25 03:04:13 +00:00
root
a028fc5b06 chore(roadmap): mark P0.1 complete — pre-flight checks passed
Some checks failed
CI — Common Platform / Build, Test & Typecheck (push) Failing after 0s
CI — Common Platform / Publish @bytelyst/* to Gitea npm registry (push) Has been skipped
2026-05-25 03:03:52 +00:00
root
af46e24ab3 docs(workspace): index gitea runner rollout 2026-05-25 02:32:19 +00:00
root
1bb8b38547 docs: add Hermes delegation channel 2026-05-25 02:18:28 +00:00
root
6eb04a313d docs(ecosystem): tighten Hermes task priority 2026-05-25 01:59:18 +00:00
root
0ddda36d1a docs(ecosystem): add Hermes delegation pack 2026-05-25 01:59:18 +00:00
saravanakumardb1
7381d0f5c0 docs(devops): group Gitea runner docs under gitea-runner/ subfolder
Moves 5 related docs into docs/devops/gitea-runner/ to keep this
multi-doc workstream from colliding with future roadmaps and
delegation prompts in docs/devops/.

Renames:
  HOSTINGER_GITEA_RUNNER_ROADMAP.md     -> ROADMAP.md
  HOSTINGER_GITEA_ACT_RUNNER_SETUP.md   -> ACT_RUNNER_SETUP.md
  GITEA_PACKAGES_PUBLISH_WORKFLOW.md    -> PUBLISH_WORKFLOW.md
  HOSTINGER_GITHUB_RUNNER_SETUP.md      -> _PLAN_B_GITHUB_RUNNER.md
  CODEX_DELEGATION_PROMPT.md            -> (same name, moved)

All internal cross-links updated via sed sweep. Verified no stale
references remain.

Adds README.md in the new folder as the index + pattern doc for
future multi-doc workstreams (one-liner handoff, file map,
architecture summary).

Updated one-liner handoff path:
  Read docs/devops/gitea-runner/CODEX_DELEGATION_PROMPT.md ...
2026-05-24 18:33:45 -07:00
saravanakumardb1
82cdebeb87 docs(devops): add Codex delegation prompt + one-liner handoff
Captures the exact bootstrap prompt to paste to Codex on the
Hostinger VM, plus a one-liner that just points Codex at the prompt
file (after Codex has the repo).

Also documents how to monitor Codex's progress from Cascade side
(grep roadmap-update commits) and how to recover if it gets stuck
(the checkbox state in the roadmap IS the resume pointer).
2026-05-24 18:26:50 -07:00
saravanakumardb1
a55f207f80 docs(devops): add executable roadmap with checklist for Codex agent
Adds HOSTINGER_GITEA_RUNNER_ROADMAP.md — a single execution tracker
that Codex on the Hostinger VM works through phase-by-phase, ticking
checkboxes and recording commit hashes as it goes.

Structure:
- 6 phases (P0 Pre-flight → P5 First real release) + P6 review handoff
- Each task: [ ] checkbox + Commit hash field + Status note
- Detail steps live in the two companion docs (act_runner setup +
  publish workflow); the roadmap is the orchestrator
- Final report section Codex fills in when P0-P5 are complete
- Human review checklist (R1-R9) for verification after handoff
- Operating notes: commit message format, when to ask, never-do list
- Change log table Codex auto-appends to

Critical invariant repeated at P3.6 and P5.4: cross-Gitea SHA1
comparison must match. If it doesn't, Codex stops — it's the
load-bearing architectural guarantee that the dual-Gitea, no-sync-
script model rests on.

Also adds roadmap-pointer banners to the two companion docs
(HOSTINGER_GITEA_ACT_RUNNER_SETUP.md, GITEA_PACKAGES_PUBLISH_WORKFLOW.md)
so anyone landing there knows the master tracker exists.
2026-05-24 18:22:16 -07:00
saravanakumardb1
d1bdcdd9a7 docs(devops): pivot to Gitea Actions as canonical CI; mark GitHub-runner doc as Plan B
Adds two new docs and a banner on the existing GitHub-runner doc.

WHY: the user already has Gitea Actions configured across all 20+
repos (.gitea/workflows/ci.yml). Building a parallel GitHub Actions
self-hosted runner pipeline is unnecessary work that also drags in
GitHub Organization migration pressure (with Vercel/Netlify pricing
side-effects on free tiers).

The canonical architecture instead:
- Each Gitea instance (corp Mac local + Hostinger VM) runs its own
  act_runner.
- A single publish-packages.yml workflow lives in every package-
  publishing repo.
- When the same git tag is pushed to both Giteas, each one builds
  inside the same pinned Docker image (node:20-bookworm@sha256:...)
  with the same lockfile, producing BYTE-IDENTICAL tarballs.
- No sync script is needed; the shared git tag IS the sync mechanism.
- Lockfile integrity hashes match across both registries, so corp Mac
  and personal Mac + Hostinger prod all see the same packages.

New: HOSTINGER_GITEA_ACT_RUNNER_SETUP.md
  - Codex-actionable prompt to install act_runner on the Hostinger VM
  - Pre-flight checks (arch detection, Docker daemon, Gitea reachable)
  - Idempotent user creation, SHA-verified binary download
  - Docker mode runner config with labels mapping ubuntu-latest to
    pinned Node image
  - Smoke test + full E2E with throwaway @bytelyst/_runner-e2e-test
    package
  - The architectural invariant check: cross-Gitea SHA comparison —
    same tag pushed to both must produce identical tarballs
  - Monitoring (Gitea UI, API, systemd journal)
  - Hardening, rollback, deliverables, guardrails, questions

New: GITEA_PACKAGES_PUBLISH_WORKFLOW.md
  - The actual publish-packages.yml triggered by v* tags
  - Docker image pinned by digest for build determinism
  - pnpm@9.12.0 pinned, --frozen-lockfile, host-network container
  - Token mounted as read-only secret file (not env var)
  - Concurrency cancel-in-progress: false (never cancel a publish)
  - Pack tarballs + SHA512 manifest as Gitea Release assets for audit
    trail
  - Two propagation strategies: reusable workflow (preferred) vs
    sync-publish-workflow.sh script
  - Operator runbook for cutting a release
  - Failure-mode table + remediation
  - Deliverables checklist

Updated: HOSTINGER_GITHUB_RUNNER_SETUP.md
  - Added 'PLAN B' banner at the top
  - Cross-links to the Gitea Actions docs
  - Kept the doc intact as a valid alternative if priorities ever
    shift to making GitHub Actions the publish driver
2026-05-24 18:15:48 -07:00
saravanakumardb1
6bf15eae7a docs(devops): Hostinger runner prompt v2 — org migration + monitoring + hardening
Adds the missing pieces revealed during review:

§1 Multi-repo registration decision — choose repo-level vs org-level
   up-front. Default doc remains repo-level, but explicitly calls out
   org-level as the scaling path for 20+ repos.

§2 Pre-flight check additions:
  - Arch detection (x86_64 / aarch64) before downloading runner tarball
  - github.com + objects.githubusercontent.com reachability check
  - gh CLI auth status check (must be saravanakumardb1)

§4 Installation hardening:
  - Step 1 is now idempotent (getent guards on useradd/usermod)
  - Step 3 queries latest runner version via gh api (no more stale pin)
  - Step 3 includes SHA256 verification of the downloaded tarball
    against the release-notes manifest, with explicit STOP-if-mismatch
  - Step 3 has REGISTRATION_URL var with commented Option A/B for
    repo-level vs org-level scope

§5 Smoke test — added explicit git checkout/add/commit/push commands
   for creating the runner/smoke branch (was implicit before).

§8 (renamed) — comprehensive org migration guide:
  - Side-by-side table: personal account today vs under-an-org
  - Bash loop to transfer all 18 repos via gh api
  - git remote set-url commands for each local clone
  - Post-migration org-level registration token fetch
  - Workflow propagation strategies (reusable workflow vs sync script)

§9 (new) — Monitoring + observability:
  - GitHub Actions tab per-repo + per-org workflow views
  - Runner pool health (Settings → Actions → Runners) at repo + org level
  - gh CLI commands for scripted monitoring (run watch, list, view, runners)
  - Host-side journalctl + _diag/ inspection commands

§14 Questions — updated to ask about scope (repo vs org) first.

Section numbering shifted by +1 from §9 onward to make room for the
new Monitoring section.
2026-05-24 18:04:50 -07:00