diff --git a/AGENTS.md b/AGENTS.md index acce7a2109..45af3cafd7 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -247,7 +247,7 @@ Read the nearest `AGENTS.md` and the linked deep-dive before making a non-trivia ## File placement & repo-root hygiene - **Test files**: ALL unit tests, integration tests, ecosystem tests, or Vitest files MUST strictly be placed within the `tests/` directory (e.g., `tests/unit/`, `tests/integration/`). NEVER create test files in the project root (`/`). -- **Scripts and utilities**: ALL maintenance, debugging, generation, or experimental scripts (`.cjs`, `.mjs`, `.js`, `.ts`) MUST be placed strictly inside one of the `scripts/` subfolders (`build/`, `dev/`, `check/`, `docs/`, `i18n/`, `ad-hoc/`). One-shot or experimental code goes under `scripts/ad-hoc/`. NEVER dump loose scripts in the project root (`/`) or the top-level `scripts/` folder. +- **Scripts and utilities**: ALL maintenance, debugging, generation, or experimental scripts (`.cjs`, `.mjs`, `.js`, `.ts`) MUST be placed strictly inside one of the `scripts/` subfolders (`build/`, `dev/`, `check/`, `docs/`, `i18n/`, `ad-hoc/`, `quality/`, `release/`, `ci/`, `ops/`, `perf/`, `research/`, `sre/`, `vps/`, `homolog/`, `raycast/`, `skills/`, `test/`, `cli/`, `compression/`, `compression-eval/`, `devin-bridge/`, `docker/`, `features/`, `router-eval/`). One-shot or experimental code goes under `scripts/ad-hoc/`. NEVER dump loose scripts in the project root (`/`) or the top-level `scripts/` folder. **The project root MUST ONLY contain:** @@ -662,6 +662,18 @@ the stale-enforcement added in Fase 6A.3. 22. **Cross-session safety — this repo is worked by MANY parallel sessions/agents at once; never step on another's in-flight work.** Two absolute bans, both recurring incidents (this rule exists because they keep happening): - **(a) Never `git stash` / `git stash pop` — ANYWHERE in this repo, including inside an isolated worktree, and including inside any subagent you dispatch.** `git stash` operates on the **shared repository object store**, not the per-worktree working tree — so a stash pushed or popped in one session can silently clobber or resurrect another parallel session's uncommitted changes. This is not hypothetical: 2026-07-02 a `#5923` quotaCache change leaked into the unrelated `#2296` worktree via a global `stash pop`, and the same class reincided through a **subagent**. To compare working changes against a base ref **without** stashing, use `git show :` or `git diff -- `; to confirm a typecheck/lint error is pre-existing on the base, inspect the base ref directly (`git show origin/release/vX.Y.Z:`) — never stash your tree away to "get it clean". **Put this ban verbatim in the prompt of every subagent that touches git** (agents don't inherit this file's context — the recurrence was a subagent). - **(b) Never merge, push, rebase, or force-push a PR / branch / worktree that another session is actively working.** An open PR whose head is a live fix worktree in `.claude/worktrees/` you did **not** create (e.g. `fix-5852`/`fix-5923` carrying fresh commits, even when they share your `diegosouzapw` identity), or any branch another session owns, is **off-limits — HOLD**, and let the owning session merge it. **Before** merging or pushing to any PR you did not create _this_ session, run `git worktree list` to check for a matching in-flight worktree and re-check `gh pr view --json state,headRefOid`. Only the owning session merges its own in-flight PR; mid-flight merges race the owner and re-trigger the exact commit/CHANGELOG races Rule #19 and Rule #21 guard against. (Reinforces Rule #19.) +23. **`_tasks/` é INTOCÁVEL como estrutura — append/edit-only.** É um repositório git SEPARADO + (remote privado `diegosouzapw/_tasks_omniroute`) montado como diretório real na raiz do + checkout principal. Regras absolutas: (a) NUNCA mover, renomear, deletar, esvaziar ou + transformar `_tasks` em symlink; sessões só podem CRIAR ou EDITAR arquivos dentro dele; + (b) NUNCA rastrear `_tasks` (nem como symlink) no repo principal — o blob rastreado foi a + causa-raiz de DOIS wipes (2026-08-08 e 2026-08-10: `git reset --hard` materializou o + symlink rastreado por cima do diretório real e o git apagou todo o conteúdo ignorado sem + aviso); (c) após qualquer escrita relevante, `git -C _tasks add -A && git -C _tasks commit + && git -C _tasks push` — o push frequente é o backup real; (d) repetir esta proibição + VERBATIM no prompt de todo subagente que toque git; (e) se `_tasks` aparecer como symlink + quebrado, NÃO commitar nada — restaurar do remote e avisar o operador. O gate + `check:tracked-artifacts` (pre-commit + CI) bloqueia `_tasks` rastreado em qualquer forma. --- diff --git a/CLAUDE.md b/CLAUDE.md index 102ecd1378..0e02a4aa1f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -3,7 +3,7 @@ @AGENTS.md **All project rules live in [`AGENTS.md`](AGENTS.md)** — the single source of truth for every AI -assistant (architecture, conventions, testing, quality gates, git workflow, the 22 Hard Rules, +assistant (architecture, conventions, testing, quality gates, git workflow, the 23 Hard Rules, PII learnings). Read it in full; do not re-add project rules here. Everything below applies ONLY to Claude Code — operational refinements of rules already defined in `AGENTS.md`. diff --git a/GEMINI.md b/GEMINI.md index 7c33fee37b..1653d5ce88 100644 --- a/GEMINI.md +++ b/GEMINI.md @@ -1,7 +1,7 @@ # GEMINI.md > **Single source of truth:** all project rules for AI assistants live in -> [`AGENTS.md`](AGENTS.md). Read it in full before any change — it contains the 22 Hard Rules, +> [`AGENTS.md`](AGENTS.md). Read it in full before any change — it contains the 23 Hard Rules, > quality gates, code conventions, file-placement / repo-root hygiene rules, the repository map > and the local development access notes that used to live in this file. diff --git a/scripts/codex-ws.sh b/scripts/dev/codex-ws.sh similarity index 100% rename from scripts/codex-ws.sh rename to scripts/dev/codex-ws.sh