Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

## Unreleased

- The Claude Code rules now ask for `pnpm run typecheck` next to lint and tests,
and rule out getting checks green by suppressing them (`@ts-ignore`, `as any`,
`eslint-disable`, skipped tests, `--no-verify`). `security.md` adds that nothing
secret goes under `runtimeConfig.public` and that user content is never rendered
with `v-html`. Existing projects get this via `battlestack pull`.
- The generated Dockerfile pins the latest `node:24-alpine` image.
- The project name recorded in `.battlestack/manifest.json` now always wins over
the directory name. Before, any project command in a clone, CI checkout or
Expand Down
2 changes: 1 addition & 1 deletion packages/preset-nuxt4/src/features/ai-tool-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ const SUPPORTED: AiTool[] = ['claude-code', 'gemini-cli', 'cursor', 'codex']
/** AI coding tool rules + MCP server scaffolding. Selection via `state.aiTool` (default: `claude-code`). */
export const aiToolConfigFeature: Feature = {
id: 'shared:ai-tool-config',
version: '1.2.0',
version: '1.2.1',
label: 'AI coding tool config',
stage: STAGE.AI_TOOL_CONFIG,

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
## Project Conventions

- Default package manager is **pnpm**. `bun`, `npm`, `yarn` also work; match the project's `packageManager` field. Use `pnpm add`, `pnpm dlx`, `pnpm run`.
- Always run `pnpm run lint` and `pnpm test` before considering work complete.
- Always run `pnpm run lint`, `pnpm run typecheck` and `pnpm test` before considering work complete. Fix the cause of a failure; never get green with `@ts-ignore`, `as any`, `eslint-disable`, a skipped or deleted test, or `git commit --no-verify`.
- The workflows in `.claude/skills/` only load when invoked, so reach for them yourself: `task-arbiter` before a task, `brainstorming` before a new feature, `test-driven-development` while coding, `systematic-debugging` for a bug, `verification-before-completion` before calling it done.

## Pending upstream merges: `.battlestack/pull/`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ const body = await readValidatedBody(event, schema.parse)
- Secrets in `.env`; never hardcode API keys, passwords, or tokens
- `.env` is in `.gitignore`; `.env.example` is committed (with placeholder values)
- Use `useRuntimeConfig()` in server routes for Nuxt env access
- Nothing secret goes under `runtimeConfig.public`: it is serialized into every page
- AI gateway key, admin password, session secret: all from `.env`

## Headers and Cookies
Expand All @@ -69,4 +70,5 @@ const body = await readValidatedBody(event, schema.parse)
- Don't log passwords or sensitive data (seed script is silent)
- Don't disable ESLint security rules
- Don't use unsafe code execution patterns
- Don't render user-controlled content with `v-html`; `{{ }}` escapes it, `v-html` does not, and nothing on the server strips HTML
- Don't store sessions in localStorage; use httpOnly cookies
Loading