chore(release): promote main to release - #107
Open
github-actions[bot] wants to merge 11 commits into
Open
Conversation
- backends (hono/elysia) expose read-only GET /health-check; with an ORM selected it runs a DB query and returns rows to confirm wiring - default backend PORT 8000 (was 3001) - success screen shows web/api localhost URLs - add clean.sh dev helper to remove scaffolded folder Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…lean.sh feedback - hono dev:server uses tsx --env-file-if-exists=.env so DATABASE_URL loads on Node (Bun/drizzle-kit/prisma already auto-load .env) - success screen shows a dedicated 'Local URLs:' section instead of an inline comment on the dev command - clean.sh reports what it removed (or that nothing existed) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- AGENTS.md is now stack-aware: real commands, dev URLs, monorepo map, ORM/DB workflow (incl. db:seed), and /health-check for the chosen combo - add .claude/settings.json permission allowlist (package manager, docker compose for server DBs, wrangler for Cloudflare, read-only git) - add .claude/commands: /verify, /format-fix, /new-component - add db:seed script + seed fixtures for drizzle and prisma (guards D1); bundles tsx as the seed runner - fix: drizzle sqlite client stripped the file: URL scheme so better-sqlite3 opens the right path — the same DATABASE_URL now works for drizzle-kit and the runtime (previously /health-check and db:seed failed on sqlite) Verified end-to-end on a live sqlite project: install → db:generate → db:migrate → db:seed → GET /health-check returns the seeded rows. Closes #108 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…skill (#109) 1. CI scaffold-smoke job: create → install → db setup → seed → boot API → curl /health-check, for sqlite drizzle & prisma (no Docker). Catches runtime breakage go test can't — the class of bug that shipped as the sqlite file: URL issue. 2. Render/invariant test (pkg/render_test.go): scaffolds combos in-process and asserts no unrendered template residue, valid JSON, and targeted content (sqlite file: strip, /health-check, db:seed, .mcp.json presence). 3. .mcp.json (Playwright MCP) scaffolded at project root when --test playwright, so agents can drive the running app. 4. contrib/osbr-devtools/scaffold-advisor: portable SKILL.md mapping a plain-English brief to a bungkus-cli create command (for osbr devtools; not a live skill here). Also: AGENTS.md now warns that prisma's db:migrate is interactive and shows the non-interactive alternatives, so agents don't hang. Verified both sqlite loops end-to-end (drizzle + prisma): seed inserts rows and /health-check returns them. Closes #109 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Redundant with the bungkus-scaffold skill in osbrjp/DevTools (the single home), which reads flags live from `--help` instead of hardcoding them. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Every project generated with --audit lhci inherited a workflow that ran a
full audit twice per change, with no concurrency guard and three repeated
audits per run. Measured on a real repo built from this template:
Lighthouse was 65 of ~82 Actions minutes across 100 runs, and per-step
timings put 62 of 89 seconds inside `lhci autorun` itself.
- pull_request only. GitHub runs it against the merge result rather than
the branch head, so the post-merge run on main re-audited a tree that
had already passed. That duplicate was half the spend.
- concurrency group with cancel-in-progress, so several pushes in quick
succession no longer each run a full audit to completion.
- paths-ignore for markdown, LICENSE and .github — kept deliberately
conservative, since a generated project's layout is unknown here.
- numberOfRuns 3 -> 1. The generated gate is performance >= 0.5, far too
loose for run-to-run variance to flip, so the median of three was paying
~45s per run for precision nothing consumed.
- Added an accessibility assertion, since Lighthouse computes that
category anyway and the template was discarding it. `warn`, not
`error`: a new blocking gate at an unknown score would fail the first
PR of every freshly scaffolded project.
- Dropped branches dev/staging/test, which the template created but never
scaffolds.
workflow_dispatch keeps a manual trigger for any ref. No schedule — a
cron in a scaffold would silently spend minutes in repos that may never
look at it.
Verified by building the CLI and scaffolding for real, not by reading the
template: pnpm and bun variants both render valid YAML, `${{ github.ref }}`
and the secrets expression survive Go templating intact, and no
unrendered `{{ . }}` tags remain in either output.
ci(templates): stop scaffolding a Lighthouse workflow that burns minutes
…#114) A PR that only touches static page files cannot change any other route's Lighthouse score, so the scaffolded workflow now diffs the PR against its base and passes just those routes to lhci autorun via --collect.url. Shared files, dynamic routes, underscore partials, and non-HTML endpoints fall back to the full lighthouserc URL list; Vite bases (single-URL SPAs) keep the plain autorun. Closes #113 Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
* feat: add command — apply preset templates to an existing repo `bungkus-cli add <option>` renders a registry option's templates into an existing project without ever overwriting a file, and additively merges its deps/scripts into package.json via an order- and byte-preserving JSON merge. PM is detected from packageManager/lockfiles (walking up to the repo root), base from package.json dependency signatures; --pm/--base/--deploy override. Closes #116 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * feat: relocate .github/** to the git root and detect deploy target in add Workflow templates rendered by `add` are redirected to the nearest ancestor with .git — GitHub only reads workflows at the repo root, so running add inside apps/web no longer produces dead workflow files. DetectProject also infers the deploy target from an existing wrangler config so `add cloudflare-pages` followed by `add github-actions` needs no flags. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix: harden add against data loss and wrong-package injection Adversarial review findings on the add command: - package.json is replaced atomically (temp + rename); a crash or full disk can no longer truncate it - the merge is validated before any template file is rendered, so a malformed package.json aborts cleanly instead of half-applying - duplicate JSON keys are refused instead of silently dropping a value - rewrites reuse the file's own indent unit and newline style - cross-cutting rules only contribute the delta the added option causes (no more stray vite devDep on every pnpm+astro add) - add github-actions ships the deploy target's wrangler/deploy packages - deploy detection requires a positive marker instead of guessing workers - the git-root walk (workflow relocation + lockfile search) stops at unrelated ancestor repos and never leaves dir without a usable root Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
New registry-driven "desktop" category exposed as --desktop tauri on create and a Desktop panel in the TUI. Scaffolds src-tauri/ (Cargo.toml, tauri.conf.json wired to the base's dev server and dist output, capabilities, neutral RGBA icon set) around any of the 7 bases; nuxt switches to SSG (ssr: false + generate). bump now scans the desktop category so the @tauri-apps/cli pin stays fresh. Closes #117 Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…121) * fix: generated eslint config only imports what package.json installs The eslint.config.mjs template imported globals, typescript-eslint, and the react plugins unconditionally while the registry entry shipped only eslint + @eslint/js — the react-plugin dep rule fired for vite-react alone, so every other base failed its first pre-push lint with missing packages. - globals + typescript-eslint move into the registry eslint entry (unconditional import -> unconditional dependency) - react plugin imports are now conditional on the base's react integration, and the dep rule tracks the same condition (astro-react included) - the files glob drops vue/astro extensions no shipped parser can handle TestGeneratedConfigImportsAreInstalled guards the whole class: for every representative combo, each package imported by a generated top-level config file must be installed by the generated package.json. Closes #118 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix: repair inverted GetIntegration nil check and IsVueInt comparison GetIntegration returned an error whenever the registry WAS loaded (and would nil-deref when it wasn't), so IsReactInt/IsVueInt always returned false — the eslint template's react branch could never fire, and IsVueInt additionally compared against "react". Fixed both, guarded the nil entry, and pinned every base's IsReactInt/IsVueInt plus the positive react-plugin wiring (config imports AND installed deps) in tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Automated promotion PR. Merge with a merge commit (do NOT squash) so the
feat:/fix:commits reachreleaseintact — semantic-release reads them to cut the stable version + tag. Squashing collapses them into one non-conventional commit and no release is cut.