24 Commits

Author SHA1 Message Date
baozaotumao fb8761a546 feat: 项目级 /coauthor 斜杠命令切换 Claude 署名开关
docs-check / docs-sync (push) Has been cancelled
- template/.claude/commands/coauthor.md.jinja:生成项目自带 /coauthor on|off|status,
  薄包装调用 ./scripts/claude-attribution.sh,Claude Code 里打 / 即可发现
- 仅本项目生效,不装全局、不影响用户其它项目(install-skill.sh 未改)
- 两个脚本不变(开关 + 门禁);终端/CI 仍可直接用脚本
- README 署名章节补 /coauthor 用法 + 文件树补 coauthor.md.jinja

验证:仅后端/全栈两配置均生成 coauthor.md + 两脚本;命令体动作 off/on/status
读写 git config 正确;~/.claude/commands 未受影响;check-docs 通过。
2026-06-02 03:22:00 -07:00
baozaotumao fb91556832 fix: 署名门禁正则锚定行首,避免误删正文中提到该短语的行
之前正则匹配行内任意位置,导致提交正文里描述性提到署名短语的整行被误删。
改为只匹配行首的真尾注(^\s*co-authored-by:...claude)。
scaffold 本地钩子与 template 门禁脚本同步修正。
已测:正文描述行保留、真尾注剥除。
2026-06-02 02:57:32 -07:00
baozaotumao f42633bbd2 feat: Claude 署名开关 + commit-msg 门禁(生成项目自带)
- template/scripts/claude-attribution.sh:一条命令切换本项目是否含 Claude 署名
  (on|off|status,存于 git config scaffold.includeClaude,默认 off)
- template/scripts/check-claude-attribution.sh:commit-msg 门禁逻辑,off 时自动
- .pre-commit-config 增加 commit-msg 阶段 local 钩子调用门禁
- copier.yml _tasks 默认 git config scaffold.includeClaude false
- 修复:template/scripts/*.sh 补可执行位(否则生成项目直接运行报 permission denied)
- README 加「Claude 署名策略」章节 + 文件树补 template/scripts/

验证:开关 on/off/status、门禁直接调用、经 pre-commit(language:system) 调用均生效,
off 剥除 / on 保留,copier 生成 rc=0、脚本可执行、门禁已挂载。
scaffold 仓库自身亦已装本地 commit-msg 钩子,保证本仓库今后不含 Claude 署名。
2026-06-02 02:56:02 -07:00
baozaotumao 0e9c862ade fix: 仅前端配置 vite-env.d.ts 空接口导致 lint 失败
- include_backend=false 时 ImportMetaEnv 渲染为空接口,触发 eslint
  no-empty-object-type;改为整个接口块仅在有 VITE 变量时生成
- 回归测试发现:6 配置矩阵中唯一失败项,其余全绿

全面回归通过:6 种服务/数据库/LLM 配置生成 rc=0,各服务 ruff/mypy/import
与前端 build/lint/tsc 全过,0 PPT 残留,完整 _tasks 端到端 OK,
skill 本地+远程安装 OK,生成项目 verify.sh 零失败,check-docs 一致。
2026-06-02 01:15:37 -07:00
baozaotumao 871e0589cd refactor: skill 改为自包含(符合工业惯例),install 简化为整目录拷贝
- .claude/skills/new-project/ 自带 scripts/verify.sh:拷了即用、可移植,
  不再依赖 install 时从根 scripts/ 组装
- install-skill.sh 简化:本地整目录 cp -R / 远程按清单拉取
- check-docs.sh 增加一致性校验:根 scripts/verify.sh 与 skill 内副本必须相同
  (改了根副本需同步,CI/本地都会报漂移)
- README 更新 skill 自包含说明 + 文件树

取舍:接受 verify.sh 两份小重复,换 skill 自包含可移植——符合 Anthropic skills 惯例,
比'安装时组装'更专业、更好维护;漂移由 CI 兜底。
2026-06-02 01:07:04 -07:00
baozaotumao e07d57eea1 ci: scaffold 自身文档同步检查(防 README 与 template 漂移)
- scripts/check-docs.sh:校验 template/{backend,agent,frontend}/src 各层目录
  及 .vscode/.claude-commands/.copier-answers/pnpm-workspace 都在 README 有记录
- .github/workflows/docs-check.yml:scaffold 仓库根级 CI(区别于 template/.github,
  那是生成项目用的),改 template/ 或 README 时触发
- 仅作用于 scaffold 自身,不进生成项目、不属 skill
- README scripts 树补 check-docs.sh + docs-check.yml
2026-06-02 00:57:29 -07:00
baozaotumao d7a9a06a9f docs: README 跟进架构基座
- 新增「架构基座」章节:三服务预生成的分层结构 + 横切层一览
- /new-feature 分工说明从「core/ plumbing」更正为「完整架构基座」
- 文件树展开 backend/agent/frontend 的 src/ 分层结构
- 说明确定性横切层(copier 预生成) vs 运行时目录(代码建,不入库)
2026-06-02 00:53:24 -07:00
baozaotumao 008ffc4889 feat: frontend 架构基座(横切层 + 接通 tailwind)
- 横切层:utils/logger(统一日志,禁 console.log)、services/wsClient(通用 WS 客户端)、
  components/ErrorBoundary(错误边界);main.tsx 接 ErrorBoundary + Toaster
- 接通 tailwind:补 tailwind.config.js + postcss.config.js + @tailwind 指令
  (此前 tailwindcss/postcss/autoprefixer 是悬空依赖,无配置)
- vite-env.d.ts:VITE_ 环境变量类型(按 include_backend 渲染)
- App.tsx 改用 tailwind utility class(规则禁自定义 CSS)
- 验证:build/lint/typecheck 三门禁全过

至此三服务架构基座完成:copier 预生成横切层,每个生成项目第一天即结构完整、能跑、过门禁。
2026-06-02 00:46:47 -07:00
baozaotumao 5da86b9c6e feat: agent 架构基座(copier 预生成横切层)
- 空层包:domain / dag / llm / providers / export / storage(待功能填)
- domain/exceptions.py:AgentException + 中性化错误类(LLM_/EXTERNAL_SERVICE_)
- utils:ids / files(work_dir/会话目录/防穿越) / concurrency(会话信号量) / ansi(PTY 清洗)
- core/logging:文件 sink 到 {WORK_DIR}/logs/agent.log
- main.py:/health /ready + WS 接入点骨架 + 接线
- 验证:gemini-cli/openai-api 两 provider,ruff+mypy 全过,import + /ws 就位
2026-06-02 00:40:36 -07:00
baozaotumao 434a4683ea feat: backend 架构基座(copier 预生成,与功能无关的横切层)
每个生成的 backend 第一天即有完整分层结构 + 能跑的横切基础设施:
- 空层包:domain / application/services / infrastructure/db(待功能填)
- routers:health(存活/就绪) + ws(WebSocket 代理骨架)
- middleware:request_id(注入+loguru 上下文)+ access_log
- exceptions:AppException 基类 + 统一 handler(标准错误响应)
- infrastructure/db/base:engine/session/Base(SQLite WAL+busy_timeout / PG 连接池)+ get_db
- utils:ids + files(work_dir/会话目录/防穿越)
- core/logging:加文件 sink 到 {WORK_DIR}/logs(运行时建,gitignore)
- main.py:装配中间件/异常/路由
- 运行时目录(logs、{uuid} 临时)由代码创建,不入库

验证:sqlite/postgresql 两配置 ruff+mypy 全过,import 成功,7 条路由就位。
2026-06-02 00:37:51 -07:00
baozaotumao 48bacdbed6 feat: 生成项目自带 /new-feature 命令(AI 引导,纯结构+契约)
- template/.claude/commands/new-feature.md.jinja:项目内 Claude Code 命令
- 模式为纯结构+契约:只生成目录/文件/端口/方法签名/依赖注入/错误码登记,
  方法体留 NotImplementedError,不猜业务逻辑、不写假断言测试
- 自检只跑 ruff+mypy(验证结构编译/类型自洽),不跑 pytest
- 按 include_backend/agent/frontend 裁剪生成的层
- 末尾给出待填充 TODO 清单;业务逻辑由开发者按 testing-tdd 自填
- README 加 /new-feature 章节 + 文件树补 .claude/commands/
2026-06-01 23:38:14 -07:00
baozaotumao c09c754983 fix: 补全前端最小可运行入口 + 修前端配置缺陷
- 新增 index.html / src/main.tsx / src/App.tsx / src/index.css 最小入口
- 补 tsconfig.node.json(tsconfig 引用却缺失,导致 tsc 失败)
- package.json 加 type:module + 缺失的 eslint 依赖
  (@eslint/js / globals / typescript-eslint),eslint.config.js 此前 import 即崩
- 验证:pnpm build / lint / typecheck 三门禁全过,dist 正常产出

至此 backend / agent / frontend 三服务最小骨架均可运行。
2026-06-01 23:21:57 -07:00
baozaotumao df48c36422 refactor: 规则中性化——剥离 PPT 业务,统一为订单示范域
把规则从原 ppt-gen 项目泛化为通用脚手架,覆盖 19 个文件:
- ddd/architecture/design-discipline/error-codes/communication-* 等:
  领域术语、错误码、消息示例、扩展点、状态流统一为「订单」示范域
- agent-dag/agent.md/agent-concurrency/agent-llm-*:DAG 节点、配置、并发、
  LLM 适配从「对话→预览→生成→截图→合成」改为「intake→process→validate→finalize」
- backend-db:Session 实体/状态机/ORM/仓储/checkpoint 对齐新流水线
- 移除幻灯片专属依赖与产物:agent 去 playwright/python-pptx,
  Dockerfile 去 Chromium 系统库,.gitignore 去 *.pptx
- 保留合法通用项:ANSI(PTY 处理)、Playwright(E2E 测试工具)、Gemini CLI(真实 provider)

验证:gemini-cli/openai-api 两变体生成退出 0,生成项目零 PPT 残留,
backend/agent 骨架均可 import 运行。
2026-06-01 23:15:05 -07:00
baozaotumao bb6503c3f8 fix: 补全最小可运行骨架(core/config + core/logging)
- main.py 此前 import 不存在的 .core.config/.core.logging,生成项目一 import 即崩
- 补 backend/agent 的 core/config.py(pydantic-settings)+ core/logging.py(loguru)
  + 各级 __init__.py,按服务/数据库/LLM 选型渲染配置字段
- 路线 A:仅补可运行的 plumbing,业务分层仍由 Claude 按规则现写
- 验证:生成 backend 后 uv sync + import app 成功,/health 路由就位
2026-06-01 22:48:08 -07:00
baozaotumao 074ddeedde docs: README 补四层护栏说明 + 更新文件树
- 新增「四层质量护栏」章节:LSP/watch/pre-commit/CI + .vscode 行为说明
- 文件树补 .copier-answers.yml.jinja / .vscode/ / pnpm-workspace.yaml
- pre-commit 标注含 gitleaks
2026-06-01 21:59:54 -07:00
baozaotumao 9acadc4cc9 change: .vscode/* 移出 _skip_if_exists,改为随 scaffold 演进
- settings/extensions/tasks 是团队级规则(个人偏好在 VSCode 全局,不受影响)
- copier update 走 3-way 合并:持续推送 scaffold 改进,本地非冲突改动保留
- 测试:全新生成拿到配置 / 旧项目级配置重复生成被更新
2026-06-01 21:57:29 -07:00
baozaotumao a8f0dd94b7 fix: .vscode 配置加入 _skip_if_exists,不覆盖用户已有编辑器配置
- settings.json / extensions.json / tasks.json 已存在则保留用户的
- 新项目仍会生成完整配置;retrofit/copier update 不破坏已有个人配置
- 测试:全新生成拿到配置 / 自定义配置重复生成被保留 / 删除后可补回
2026-06-01 21:51:32 -07:00
baozaotumao 4a25ab3049 feat: 模板自带 .vscode/settings.json + extensions.json(编辑器实时护栏)
- settings.json:formatOnSave + ruff(保存修复/整理import) + eslint onType;
  Pylance basic 即时反馈,权威 strict 交 mypy 扩展读 pyproject,与 pre-commit 同源
- extensions.json:按服务推荐 ruff/pylance/mypy/eslint/prettier 扩展
- 始终生成(不挂 vscode_auto_watch 开关),按 include_backend/agent/frontend 裁剪
- 测试覆盖 全栈/仅后端/仅前端 三配置,条件填充正确、JSON 合法
2026-06-01 21:49:51 -07:00
baozaotumao f927bd4b7a feat: 新增 vscode_auto_watch 开关,打开项目自动起 watch 任务
- copier.yml 加 vscode_auto_watch 问题(默认 false)+ 条件排除 .vscode/tasks.json
- template/.vscode/tasks.json.jinja:按服务生成 watch 任务,runOn folderOpen
  前端 tsc --watch、后端/agent ruff --watch,均为工具自带 watch,无新依赖
- frontend 加 typecheck:watch 脚本
- README 问卷表补该项
2026-06-01 21:46:27 -07:00
baozaotumao 4c7dbb56eb fix: pre-commit 任务容错 + gitleaks 钩子 + pnpm 构建门禁
- _tasks 的 pre-commit install 改为容错:未装时跳过而非让 copier 失败
- .pre-commit-config 增加 gitleaks 钩子(git-workflow/security 规则均已声明)
- 新增 frontend/pnpm-workspace.yaml 的 allowBuilds: esbuild,解决 pnpm 11
  ERR_PNPM_IGNORED_BUILDS 致 install 非零退出而中断生成的问题

端到端验证:copier 退出 0,git/uv.lock/pnpm-lock/node_modules 齐全,
verify.sh 零失败。
2026-06-01 21:38:12 -07:00
baozaotumao 2a959f2e61 fix: 修复 copier 生成的三个致命 bug,端到端跑通
- copier.yml 补 _subdirectory: template(此前把整个仓库当模板,
  生成项目里混入 template/、scripts/、README、.claude/skills)
- _exclude 去掉 .jinja 后缀(copier 按渲染后路径匹配,原 agent.md.jinja
  等条件排除从未生效,agent=false 仍会带入 agent 规则)
- 新增 template/.copier-answers.yml.jinja(此前缺失,导致 copier update
  无法追踪、verify.sh 读不到 llm_provider/database 而误判)
2026-06-01 21:27:01 -07:00
baozaotumao 39fe248f9f feat: 重组为标准 skill 包结构 + 修复 verify.sh bash 3.2 兼容
- 新增 .claude/skills/new-project/SKILL.md(标准 skill 格式)
- install-skill.sh 安装时组装 SKILL.md + verify.sh,单一源无重复
- verify.sh 改用索引数组替代 declare -A,兼容 macOS bash 3.2
- log_pass/log_skip 显式 return 0,避免 set -e 下非 verbose 误退出
- README 改为 skill 优先;补全 copier.yml/scripts/template 入库
2026-06-01 21:19:45 -07:00
baozaotumao 167fa10dde feat: add new-project Claude Code command 2026-06-01 20:40:34 -07:00
baozaotumao 29d60fbd0a first commit 2026-06-01 20:28:07 -07:00