make the app-dir (.coily) configurable so the framework owns no consumer's filesystem layout #50
Labels
No labels
burndown-2026-06
sunday-sprint
coherence-core
consult
headless
interactive
P0
P1
P2
P3
P4
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
coilyco-flight-deck/cli-guard#50
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem (split out of #49)
cli-guard hardcodes the consumer
coily's directory name.coilyas a functional default in several places, so the framework owns a specific consumer's filesystem layout:config/paths.go:GlobalDirName = ".coily",LocalDirName = ".coily"(config dir + filename).stscache/stscache.go,scope/scope.go,ghidcache/ghidcache.go:filepath.Join(home, ".coily", "cache").dispatch/interactive.go:/tmp/coily-dispatch-queue.This is a real leak, not cosmetics:
~/.coily/cache, so ward's cache state lands in coily's dir.~/.coily.Ask
Make the app-dir (and the derived config/cache/queue paths) configurable. The consumer supplies its own name; cli-guard carries no default tied to one consumer.
paths.Namespacethe packages take), e.g. coily passes.coily, ward passes.ward.config/paths.go, the three*cachepackages, and the dispatch queue dir through it..coily(no behavior change for coily), ward passes.ward.Blast radius
cli-guard API change + coordinated coily and ward updates. Land cli-guard first (consumers pin a commit), then bump each consumer.
Cross-ref
Split from #49 (cosmetic scrub). #49 covers comments/prose/issue-refs/test-fixtures/docs; this covers the functional defaults.
Additional functional sites surfaced during the Part A scrub (#49)
The cosmetic scrub deliberately left these functional consumer-specific defaults for this refactor. Full list to genericize when making the app-namespace configurable:
config/paths.go:GlobalDirName/LocalDirName = ".coily"+ the derived~/.coily/...paths.stscache/,scope/,ghidcache/:filepath.Join(home, ".coily", "cache").dispatch/interactive.go:defaultDispatchQueueDir = "/tmp/coily-dispatch-queue".dispatch/cascade.go:COILY_DISPATCH_CASCADE_DEPTHenv var (parent->child cross-process contract).lockdown/user_hook.go: the_coilysettings.json marker key (consumer's hook-entry identity, matched on re-read).lockdown/defaults.yaml: shipsBash(coily:*)allow +coily pkg/ops/...deny rules and coily-named comments (a consumer-specific default config baked into the framework).lockdown/*_test.gostill assertsBash(coily:*)against this unchanged file.workdir/:SourceCoilysirenconst,coilysirenRepo(),COILY_PRIMARY_DIRenv, and the~/projects/coilysiren/workspace detection (+ matching test assertions).All are consumer identity/layout the framework should not own. Consumer supplies its namespace; coily passes
.coily/COILY_/coily, ward passes its own.