aboutsummaryrefslogtreecommitdiff
path: root/scripts/tests/sweep-gitignore-tooling.bats
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-07-20 07:53:05 -0500
committerCraig Jennings <c@cjennings.net>2026-07-20 07:53:05 -0500
commitf625cf5c6e38c1abb98491b4e1b8ce63c57b8712 (patch)
tree607dcc6ac35be78d5092ea720bd68c849547471a /scripts/tests/sweep-gitignore-tooling.bats
parent067ed55b6bf6276f9e5203cc521a2785716d0ece (diff)
downloadrulesets-f625cf5c6e38c1abb98491b4e1b8ce63c57b8712.tar.gz
rulesets-f625cf5c6e38c1abb98491b4e1b8ce63c57b8712.zip
feat: track working/ from creation, gitignore temp/ in both modes
working/ is the tracked home of in-progress work, version-controlled from creation rather than staged locally until it graduates. Filing on completion reorganizes durable artifacts into permanent homes. It doesn't mark when they became durable. Ephemeral, disposable artifacts go in a gitignored temp/ (or /tmp), never working/. install-ai.sh emits a temp/ ignore in both track and gitignore modes. Ephemerality is independent of whether a project tracks its .ai/ tooling, so temp/ rides neither the track .gitkeep step nor the gitignore-only tooling block. working/ is never ignored, on purpose. sweep-gitignore-tooling.sh backfills temp/ as a separate mode-independent pass, not an IGNORE_SET member: folding it into that set would skip every track-mode project, the set that most needs it. While implementing I confirmed the canonical machinery never ignored working/ (the tooling set is only .ai/ .claude/ CLAUDE.md AGENTS.md), so a project that ignored working/ did so as a local deviation. Documents the convention in working-files.md and mirrors it in protocols.org. 7 new bats cover temp/ in both modes, never working/, and idempotency.
Diffstat (limited to 'scripts/tests/sweep-gitignore-tooling.bats')
-rw-r--r--scripts/tests/sweep-gitignore-tooling.bats41
1 files changed, 41 insertions, 0 deletions
diff --git a/scripts/tests/sweep-gitignore-tooling.bats b/scripts/tests/sweep-gitignore-tooling.bats
index f18eac5..240c3be 100644
--- a/scripts/tests/sweep-gitignore-tooling.bats
+++ b/scripts/tests/sweep-gitignore-tooling.bats
@@ -190,3 +190,44 @@ make_project() {
[ "$status" -eq 0 ]
[[ "$output" != *"publicly reachable"* ]]
}
+
+# --- temp/ ephemeral-artifacts backfill (mode-independent) ---
+
+@test "sweep: adds temp/ to a gitignore-mode project" {
+ make_project gimode $'.ai/\n'
+
+ run bash "$SWEEP" "$ROOT"
+
+ [ "$status" -eq 0 ]
+ grep -qFx "temp/" "$ROOT/gimode/.gitignore"
+}
+
+@test "sweep: adds temp/ to a TRACK-mode project too (temp/ is mode-independent)" {
+ make_project trackmode $'# build\nout/\n'
+
+ run bash "$SWEEP" "$ROOT"
+
+ [ "$status" -eq 0 ]
+ # The tooling set is skipped in track mode, but temp/ is not.
+ grep -qFx "temp/" "$ROOT/trackmode/.gitignore"
+ ! grep -qFx ".ai/" "$ROOT/trackmode/.gitignore"
+}
+
+@test "sweep: never adds working/" {
+ make_project gimode $'.ai/\n'
+
+ run bash "$SWEEP" "$ROOT"
+
+ [ "$status" -eq 0 ]
+ ! grep -qEx "/?working/?" "$ROOT/gimode/.gitignore"
+}
+
+@test "sweep: temp/ backfill is idempotent" {
+ make_project gimode $'.ai/\ntemp/\n'
+ bash "$SWEEP" "$ROOT" >/dev/null
+
+ run bash "$SWEEP" "$ROOT"
+
+ [ "$status" -eq 0 ]
+ [ "$(grep -cFx 'temp/' "$ROOT/gimode/.gitignore")" -eq 1 ]
+}