diff --git a/.githooks/pre-push b/.githooks/pre-push deleted file mode 100755 index 80f5159..0000000 --- a/.githooks/pre-push +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh -# Pre-push: the docs pages under apps/docs/content are generated from work/1 -# by `bun run sync`, and deploy.yml publishes whatever main holds. Regenerate -# them now and refuse the push if the result differs from the tree, so a -# solution never lands without its page (or with a stale `## Solution`). -# -# Bypass for a deliberate partial push: git push --no-verify -set -eu - -cd "$(git rev-parse --show-toplevel)" -report=$(bun run --silent sync) - -changed=$(git status --porcelain -- apps/docs/content) -if [ -n "$changed" ]; then - printf '%s\n' "$report" | grep -v 'skipped (in sync)' >&2 - printf '\npre-push: apps/docs/content is out of sync with work/1 — commit the regenerated pages:\n%s\n' "$changed" >&2 - exit 1 -fi diff --git a/AGENTS.md b/AGENTS.md index cf2cc7c..e332586 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -47,7 +47,7 @@ flowchart LR | `apps/docs/` | Blume site (`blume.config.ts`, `content/`, `islands/`, `public/`). `content//-.mdx` plus one `meta.ts` per topic folder, all generated by sync: the folder is the README campaign topic slug (`tree-dfs/`, `heap-priority-queue/`) and a real route segment (`/tree-dfs/invert-binary-tree`), the `meta.ts` carries the exact label and topic number so the sidebar reads in curriculum order, and the page badge is the `work/` data-structure category. A hand-written `/index.mdx` (`hidden: true`) is that topic's landing page: Blume ≥ 1.7.3 links the sidebar group row to it (`sliding-window/index.mdx` → `/sliding-window`) and the hidden flag drops the duplicate row | | `apps/api/` | Cloudflare Worker workspace: `src/` modules, `data/schedule.json` (the plan: `date → { topics | problems | gate | sweep }`, human-edited, bundled at deploy), `migrations/` (append-only; `0002` is the +3/+7 ladder rebuild) | | `.github/workflows/` | deploy (docs → Pages, Worker → Cloudflare, on every main push), close-solved (issues + `/admin/solved` + Project `Set`/`Difficulty`, needs `SRS_ADMIN_KEY` and `PROJECT_PAT`), close-topics, sync-d1 (issue edits → `/admin/reconcile`), spaced-repetition (daily 06:00 ET cron → today's review issue; `GITHUB_TOKEN` only, no secrets) | -| `.githooks/` | Tracked git hooks; `bun install` points `core.hooksPath` here (root `prepare` script, no husky). `pre-push` runs `bun run sync` and refuses the push while `apps/docs/content` differs from the tree, so a solution never reaches `main` (and `deploy.yml`) without its page. `git push --no-verify` for a deliberate partial push | +| `.githooks/` | Tracked git hooks; `bun install` points `core.hooksPath` here (root `prepare` script, no husky). `pre-commit` runs `bun run sync` and stages only the pages sync changed, so a solution and its page land in one commit; it refuses to run while `work/1` has anything unstaged (sync reads the tree, so the page would not match the commit), and leaves pre-existing dirt under `apps/docs/content` (in-progress `## Approach` prose) unstaged. `git commit --no-verify` for a deliberate partial commit | ## Development Commands