chore: initialize project scaffold (init-project) - #8
Conversation
Sets up flabel to follow the 7-stage pipeline. No application logic yet. - Python 3.12 (pinned, uv-provisioned) + pytest + ruff; hatchling build - flabel console-script stub with 3 passing smoke tests - uv-based CI: ruff check, ruff format --check, pytest - .claude/ agents (eng-reviewer, tester) and format/test hooks - docs/status.yaml tracking 7 stage issues (#1-#7) - docs/prep-n-research.md: original design brief, GCP project ID scrubbed to ${GCP_PROJECT} (real value in local gitignored .env) since this repo is public - .gitignore excludes archive/ (GCP IAM/network manifests), capture data, and .env Refs #1
|
Closing unmerged — superseded by a branch rename. The repo was created empty, so Content review still stands: CI was green here ( |
|
Reopening. The branch-rename workaround failed — the org ruleset also blocks renames without org-admin role ( So we merge this PR as originally intended. |
Bootstraps
flabelto follow the 7-stage pipeline. No application logic — scaffolding, guardrails, and tracking only.What changed
Toolchain — Python 3.12 pinned via
.python-versionand provisioned byuv; pytest + ruff; hatchling build backend.pyproject.tomlexposes aflabelconsole script.Code —
src/flabel/cli.pyis a deliberate stub: an argparse parser with--versionand a "not implemented yet" message. Enough to make the console script and smoke tests real, nothing more.CI —
.github/workflows/ci.ymlruns uv-basedruff check,ruff format --check, andpyteston every push and PR.Agents + hooks —
.claude/agents/eng-reviewer.mdandtester.md(fresh-eyes review; the author never grades its own homework)..claude/settings.jsonformats and lints Python on edit, runs tests on stop.Tracking —
docs/status.yamlrecords the 7 stage issues (#1–#7) and the Notion tracker row.docs/prep-n-research.mdis the original design brief, preserved with its{RESEARCH}and{GRILL}markers; each marker has been seeded into the relevant stage issue so nothing gets lost between stages.Public-repo hygiene
This repo is public, which drove three decisions:
archive/(GCP teardown manifests — IAM policy, service accounts, network topology) is gitignored and stays local only.${GCP_PROJECT}. The real value lives in a gitignored.env;.env.exampleis the committed template..gitignorealso excludes*.pcap/*.pcapng/*.cap,*.log, andzeek/— capture data and tool output must never enter git.Staged content was grepped for private keys, credential assignments, AWS/GitHub token patterns, and internal identifiers before committing. Clean.
How it was tested
Locally, all green:
uv syncuv run pytest -quv run ruff check .uv run ruff format --check .uv run flabel --help/--versionflabel 0.0.0CI passed on
chore/init-scaffold(run 31530958760, 14s).Note on the merge commit
The repo was created empty, so
maindid not exist and the first pushed branch became the default.mainwas bootstrapped with a root commit (README.md+.gitignore) and merged in here with--allow-unrelated-historiesso this scaffold could go through a PR rather than landing onmainunreviewed. That's the sole reason for the merge commit.Action needed after merge: the repo default branch is still
chore/init-scaffold— the API rejected changing it (You don't have permission to change the default branch), so it needs flipping tomainin repo settings by an org owner.Closes #5 is not claimed here — the Scaffold stage issue stays open until CI is confirmed green on
mainand the remaining items in that issue (LICENSE, pcap fixture strategy, hook-under-uv check) are settled.🤖 Generated with Claude Code