Skip to content

feat: phase 0 — hello world scaffold#1

Merged
srid merged 36 commits intomasterfrom
claude/jovial-benz
Mar 19, 2026
Merged

feat: phase 0 — hello world scaffold#1
srid merged 36 commits intomasterfrom
claude/jovial-benz

Conversation

@srid
Copy link
Copy Markdown
Member

@srid srid commented Mar 19, 2026

Hello world Leptos app.

image

srid added 29 commits March 19, 2026 15:16
Three-crate Cargo workspace (common/server/client), Leptos CSR page
rendering "kolu" served by Axum, Nix build with crane WASM pipeline,
process-compose dev workflow, Playwright e2e smoke tests.
- GitHub Actions CI with vira (build) + Playwright e2e tests
- Move code-review skill to directory format (SKILL.md)
- AGENTS.md instructs auto-run of /code-review after changes
- CLAUDE.md symlink to AGENTS.md
- CI uses self-hosted runners (x86_64-linux, aarch64-darwin) with vira
- justfile auto-detects nix devshell via nix_shell variable
- e2e test recipe uses nix_shell for all tool invocations
- Add nix-justfile skill documenting these conventions
Nix devshell already provides browsers via PLAYWRIGHT_BROWSERS_PATH.
The install command tries to run `su` which fails on CI runners.
- Add --no-sandbox and --disable-gpu for Chromium on headless NixOS CI
- Hash-rename JS/WASM/CSS in nix clientDist for cache busting
- Add invalid-states and dead-code sections to code-review skill
- Replace hand-written style.css with Tailwind CSS (standalone CLI)
- Trunk dev uses `data-trunk rel="tailwind-css"` for hot reload
- Nix prod runs tailwindcss CLI to generate minified CSS
- Add --host and --port CLI args to kolu-server via clap
- Add concise README with dev/prod/architecture sections
- Add --disable-setuid-sandbox and --disable-dev-shm-usage flags for
  Playwright Chromium on NixOS CI runners
- Comment out aarch64-darwin CI build (too slow), keep matrix structure
- Fix deprecated env_var_or_default -> env in justfile
- Update skills (code-review: tailwind rule, nix-justfile: env fix)
- Minor README wording tweak
Use ubuntu-latest + setup-node for e2e instead of NixOS self-hosted
runner. Playwright downloads its own browsers natively. Nix is still
available for `nix run` (webServer in playwright config).
- Add vira.hs pipeline config with cache.nixos.asia/oss on master
- Pre-build with `nix build` before e2e tests so `nix run` is instant
  (was timing out at 120s building from scratch on ubuntu-latest)
Add nixConfig with extra-substituters in flake.nix and
--accept-flake-config in e2e CI step to pull cached derivations.
Keep only e2e tests on ubuntu-latest. Nix build + cache is handled
by self-hosted Vira runners.
Poll commit statuses for signoff/vira/* before running e2e tests.
On push to master, e2e runs immediately (wait-for-vira is skipped).
Replace hand-rolled polling script with purpose-built action that
waits for commit statuses by name.
The JS glue code from wasm-bindgen references kolu-client_bg.wasm by
its original name. Hash-renaming the WASM file without updating the
JS reference caused a 404 in production builds.
`playwright install --with-deps` was for CI only; locally the devshell
provides browsers via PLAYWRIGHT_BROWSERS_PATH. Kept in CI workflow.
Disable GitHub Actions e2e workflow (too slow). Instead, `just ci`
runs e2e tests locally and posts signoff/e2e commit status via gh CLI.
@srid srid marked this pull request as ready for review March 19, 2026 20:32
@srid srid merged commit bedd2c6 into master Mar 19, 2026
5 checks passed
@srid srid deleted the claude/jovial-benz branch March 19, 2026 21:25
srid added a commit that referenced this pull request Mar 23, 2026
Add pnpm override to force serialize-javascript >=7.0.3, resolving
Dependabot alert #1 (CVE via RegExp.flags and Date.prototype.toISOString).
srid added a commit that referenced this pull request Mar 23, 2026
## Summary
- Adds pnpm override for `serialize-javascript@^7.0.3` to resolve
[Dependabot alert
#1](https://github.com/juspay/kolu/security/dependabot/1)
- The vulnerable `[email protected]` was a transitive dep via
`@rollup/plugin-terser`
- Updated `fetchPnpmDeps` hash in `nix/modules/typescript.nix`

## Test plan
- [x] `nix build` passes
@srid srid mentioned this pull request Mar 27, 2026
srid added a commit that referenced this pull request Apr 14, 2026
Ralph iteration #1 (issue #440).

**Flake class addressed**: After-hook TypeError cascade — when a scenario
fails from ECONNRESET (or any other browser/server crash during the run),
the After hook's unguarded `this.page.screenshot()` throws
`TypeError: Cannot read properties of undefined (reading 'screenshot')`,
turning one flake into two. Same shape applies to `context.close()` on an
already-torn-down context. Documented in #320, commit bec1500.

**Fix (test-only, per #440 constraint)**: wrap the screenshot path in a
`this.page`-presence check + try/catch, and wrap `context.close()` in a
try/catch. Cleanup failures no longer mask the original scenario failure
in Cucumber's report.

**Measurements (iteration #1)**:
- baseline: 0 CI runs (starting point — full `just ci e2e` loop deferred
  to subsequent iterations due to single-session time budget)
- fix type: defensive guard in `packages/tests/support/hooks.ts`
- lines changed: 1 file, +22 / -4
- no server/client/common code touched
- no timeout bumps
srid added a commit that referenced this pull request Apr 18, 2026
Per Lowy review: canvasMaximized was bundling three independent volatilities
(client UI signal + server module-level state + SavedSession) into one
propagation chain — but no consumer actually needed cross-client awareness.
It's a per-tab view preference, like minimap-expanded.

- Move signal to makePersisted (localStorage) in useViewState
- Drop the createEffect server mirror + maxHydrated ordering hack
  (Hickey #1: temporal coupling between effect and useSessionRestore)
- Drop the field from SavedSessionSchema, SetCanvasMaximizedInputSchema,
  contract, router, server terminals.ts, session.ts, session.test.ts
- Drop hydrate-on-mount + restore-on-button from useSessionRestore
- Revert state.ts to SCHEMA_VERSION 1.15.0 (1.16.0 never shipped)
srid added a commit that referenced this pull request May 6, 2026
…a renderer factory

Hickey #1: the virtualization-mode predicate was decided at the
constructor site (vanilla vs. virtualized class) and re-checked at the
render site (containerWrapper vs. fileContainer), with nothing enforcing
that the two branches stay in sync. Extract the pairing into a
`createDiffRenderer` / `createFileRenderer` factory so a future
render-option addition can't be applied to one arm and missed on the
other. Also addresses Hickey #2 (collapsed ternary) and Lowy #3 (the
branch point is now named and commented inside the factory).
srid added a commit that referenced this pull request May 6, 2026
…low constraint

Lowy #1: the `class` prop is forwarded to the host element regardless of
virtualization mode, but in the virtualized branch that element IS
Pierre's file container (which lives inside the <Virtualizer>'s scroll
surface). Applying `overflow-*` there silently breaks the
intersection-observer math that drives windowing. Document the
constraint at the prop boundary so a future caller can't ship the
broken combination without seeing the contract first.
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