docs: fix outdated references to old implementation
Remove QUICK-REFERENCE.md from .ai/ — it contained kube-log project-specific content (hardcoded paths, OpenShift/ArgoCD config) that was leaking into all projects via the symlink. Update docs to match the actual apply.sh implementation: - apply.md: rewrite to reflect curl-only invocation, bootstrap/local phases, factory-reset marker behaviour; remove .ai-instructions.conf and interactive checklist references - architecture.md: remove scripts/ subdirectory and .ai-instructions.conf that were never implemented - apply-usecases.md: remove INSTALL subgraph (rm -rf + cp -r was never done), fix symlink targets to SCRIPT_DIR/.ai - apply-requirements.md: NFR-1 corrected (TTY-gated prompt exists), NFR-4 updated to <150 lines, .ai-instructions.conf removed from out-of-scope list
This commit is contained in:
parent
cd6f8b5c81
commit
172bfa78e9
@ -1,313 +0,0 @@
|
||||
# AI Quick Reference - kube-log Project
|
||||
|
||||
## 🚫 Cluster Access Restrictions
|
||||
|
||||
**AI Assistant does NOT have direct access to Kubernetes clusters:**
|
||||
|
||||
- ❌ **CANNOT run:** `kubectl` commands against live clusters
|
||||
- ❌ **CANNOT run:** `helm install/upgrade` to live clusters
|
||||
- ✅ **CAN run:** `helm template` (renders manifests locally)
|
||||
- ✅ **CAN run:** `helm show values` (inspects charts)
|
||||
- ✅ **CAN run:** `helm dependency` commands (manages chart dependencies)
|
||||
|
||||
**Why:**
|
||||
- User manages cluster access and credentials
|
||||
- Prevents accidental changes to production clusters
|
||||
- User controls when and how deployments happen
|
||||
|
||||
**What AI can do:**
|
||||
1. Generate manifests with `helm template`
|
||||
2. Show what would be deployed
|
||||
3. Analyze chart configurations
|
||||
4. Suggest kubectl/helm commands for user to run
|
||||
|
||||
**What user does:**
|
||||
1. Run kubectl/helm commands themselves
|
||||
2. Verify changes before applying
|
||||
3. Control deployment timing
|
||||
4. Manage cluster credentials
|
||||
|
||||
---
|
||||
|
||||
## 🏢 OpenShift Deployments
|
||||
|
||||
**OpenShift installations are done via ArgoCD from the IaC repository:**
|
||||
|
||||
- **Local dev repo:** `~/koodi/niko-dev/kube-log/`
|
||||
- **IaC repo:** `~/koodi/niko-dev/IaC/kube-log/`
|
||||
- **Deployment method:** ArgoCD points to IaC repo
|
||||
|
||||
**Customer-specific file:**
|
||||
- `values.storage.openshift.dev.yaml` exists in IaC repo (customer side)
|
||||
- Contains: volume sizes and storageClass settings
|
||||
- Example: `storageClass: "ocs-storagecluster-cephfs"`
|
||||
- This file is NOT synced from local dev repo (customer maintains it)
|
||||
|
||||
**When debugging OpenShift issues:**
|
||||
1. Check ArgoCD sync status
|
||||
2. Verify customer's `values.storage.openshift.dev.yaml` exists
|
||||
3. Ensure `values.openshift.yaml` is in IaC repo
|
||||
4. Remember: OpenShift uses SCC (Security Context Constraints), not PSP
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Syncing to IaC Repository
|
||||
|
||||
**When requested to sync changes to the IaC repository:**
|
||||
|
||||
```bash
|
||||
# Siirry projektin juureen
|
||||
cd /Users/moilanik/koodi/niko-dev
|
||||
|
||||
# Kopioi kaikki paitsi .ai kansio, CLAUDE.md ja IaC-spesifiset tiedostot
|
||||
rsync -av --delete \
|
||||
--exclude='.ai/' \
|
||||
--exclude='.github/' \
|
||||
--exclude='CLAUDE.md' \
|
||||
--exclude='.git/' \
|
||||
--exclude='tmp/' \
|
||||
--exclude='values.storage.openshift.dev.yaml' \
|
||||
kube-log/ IaC/kube-log/
|
||||
|
||||
# Tarkista muutokset
|
||||
cd IaC/kube-log && git status
|
||||
```
|
||||
|
||||
**What this does:**
|
||||
- Syncs all kube-log changes to separate IaC git repository
|
||||
- Excludes `.ai/` (AI guidelines - not needed in production repo)
|
||||
- Excludes `CLAUDE.md` (AI guidelines - kept local only)
|
||||
- Excludes `.git/` (each repo has its own git history)
|
||||
- Excludes `tmp/` (temporary files)
|
||||
- Excludes `values.storage.openshift.dev.yaml` (IaC-only file, customer specific)
|
||||
- `--delete` removes files from IaC that were deleted from kube-log
|
||||
|
||||
**When to sync:**
|
||||
- After significant changes to templates, values files, or documentation
|
||||
- Before committing to IaC repository
|
||||
- When owner requests: "synkkaa IaC" or similar
|
||||
|
||||
**IMPORTANT:** User will commit and push in IaC repo themselves!
|
||||
|
||||
---
|
||||
|
||||
## 🚨 Git Commands - DO NOT RUN
|
||||
|
||||
**These commands are FORBIDDEN without explicit permission:**
|
||||
|
||||
```bash
|
||||
# ❌ DO NOT RUN THESE:
|
||||
git add .
|
||||
git commit -m "..."
|
||||
git push
|
||||
git push --force
|
||||
git reset --hard
|
||||
```
|
||||
|
||||
**Instead, SHOW the command and wait:**
|
||||
|
||||
```bash
|
||||
# ✅ Show this to user:
|
||||
echo "Run this command:"
|
||||
echo "git add ."
|
||||
echo "git commit -m 'your message'"
|
||||
echo "git push"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Common Tasks
|
||||
|
||||
### Check What Changed
|
||||
|
||||
```bash
|
||||
git status
|
||||
git diff
|
||||
git diff values.yaml
|
||||
```
|
||||
|
||||
### Restore File from Git
|
||||
|
||||
```bash
|
||||
# Show command, don't run:
|
||||
git checkout <commit-hash> -- <file-path>
|
||||
```
|
||||
|
||||
### View Git History
|
||||
|
||||
```bash
|
||||
git log --oneline -20
|
||||
git log --oneline --graph --all
|
||||
```
|
||||
|
||||
### Test Helm Template
|
||||
|
||||
```bash
|
||||
# K8s
|
||||
helm template . --name-template monitoring --namespace kube-log \
|
||||
-f values.yaml -f values.storage.dev.yaml
|
||||
|
||||
# OpenShift
|
||||
helm template . --name-template monitoring --namespace kube-log \
|
||||
-f values.yaml -f values.storage.dev.yaml -f values.openshift.yaml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 Installation Commands
|
||||
|
||||
### Standard Kubernetes (K3s, etc.)
|
||||
|
||||
```bash
|
||||
# Dev environment
|
||||
helm upgrade --install kube-log . --namespace kube-log --create-namespace \
|
||||
-f values.yaml -f values.storage.dev.yaml
|
||||
|
||||
# Production
|
||||
helm upgrade --install kube-log . --namespace kube-log --create-namespace \
|
||||
-f values.yaml -f values.storage.prod.yaml
|
||||
```
|
||||
|
||||
### OpenShift
|
||||
|
||||
**OpenShift deployments are managed via ArgoCD from IaC repo:**
|
||||
- ArgoCD points to: `~/koodi/niko-dev/IaC/kube-log/`
|
||||
- Uses: `values.yaml`, `values.storage.openshift.dev.yaml`, `values.openshift.yaml`
|
||||
|
||||
**Manual installation (for testing only):**
|
||||
```bash
|
||||
# Dev environment
|
||||
helm upgrade --install kube-log . --namespace kube-log --create-namespace \
|
||||
-f values.yaml -f values.storage.openshift.dev.yaml -f values.openshift.yaml
|
||||
|
||||
# Production
|
||||
helm upgrade --install kube-log . --namespace kube-log --create-namespace \
|
||||
-f values.yaml -f values.storage.openshift.prod.yaml -f values.openshift.yaml
|
||||
```
|
||||
|
||||
### Known Issue: First Installation
|
||||
|
||||
First installation may fail with ConfigMap/ServiceAccount error.
|
||||
Just run the same command **twice**:
|
||||
|
||||
```bash
|
||||
# First run (may fail)
|
||||
helm upgrade --install kube-log . --namespace kube-log -f values.yaml -f values.storage.dev.yaml
|
||||
|
||||
# Second run (works)
|
||||
helm upgrade --install kube-log . --namespace kube-log -f values.yaml -f values.storage.dev.yaml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Debugging
|
||||
|
||||
### Check Pod Status
|
||||
|
||||
```bash
|
||||
kubectl get pods -n kube-log
|
||||
kubectl get pods -n kube-log -w # Watch mode
|
||||
```
|
||||
|
||||
### View Logs
|
||||
|
||||
```bash
|
||||
kubectl logs -n kube-log deployment/kube-log-minio
|
||||
kubectl logs -n kube-log deployment/kube-log-minio --tail=50
|
||||
kubectl logs -n kube-log kube-log-loki-0
|
||||
```
|
||||
|
||||
### Check PVCs
|
||||
|
||||
```bash
|
||||
kubectl get pvc -n kube-log
|
||||
kubectl describe pvc -n kube-log kube-log-minio
|
||||
```
|
||||
|
||||
### Port Forwarding
|
||||
|
||||
```bash
|
||||
# MinIO
|
||||
kubectl port-forward -n kube-log svc/kube-log-minio 9000:9000
|
||||
|
||||
# Grafana
|
||||
kubectl port-forward -n kube-log svc/kube-log-grafana 3000:80
|
||||
|
||||
# Prometheus
|
||||
kubectl port-forward -n kube-log svc/kube-log-prometheus-server 9090:80
|
||||
|
||||
# Loki
|
||||
kubectl port-forward -n kube-log svc/kube-log-loki 3100:3100
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🗂️ File Structure
|
||||
|
||||
```
|
||||
kube-log/
|
||||
├── .ai/ # AI guidelines (not in git)
|
||||
│ ├── README.md # Main collaboration rules
|
||||
│ └── QUICK-REFERENCE.md # This file
|
||||
├── charts/ # Helm dependencies (tgz)
|
||||
├── templates/ # Kubernetes manifests
|
||||
├── files/ # Config files, dashboards
|
||||
│ ├── dashboards/ # Grafana dashboards
|
||||
│ └── grafana-alloy-config.river
|
||||
├── values.yaml # K8s baseline config
|
||||
├── values.openshift.yaml # OpenShift overrides (if exists)
|
||||
├── values.storage.dev.yaml # Dev storage config
|
||||
├── values.storage.prod.yaml # Prod storage config
|
||||
└── README.md # Main documentation
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 MinIO Buckets
|
||||
|
||||
Default buckets (created automatically):
|
||||
- `loki-storage` - Loki chunks and indexes
|
||||
- `prometheus-metrics` - Prometheus long-term storage (Thanos)
|
||||
- `tempo-traces` - Tempo distributed tracing
|
||||
|
||||
Credentials (POC):
|
||||
- Username: `admin`
|
||||
- Password: `password123`
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Security Context Patterns
|
||||
|
||||
### Kubernetes (values.yaml)
|
||||
|
||||
```yaml
|
||||
securityContext:
|
||||
enabled: true
|
||||
runAsUser: 1000
|
||||
runAsGroup: 1000
|
||||
fsGroup: 1000
|
||||
runAsNonRoot: true
|
||||
```
|
||||
|
||||
### OpenShift (values.openshift.yaml)
|
||||
|
||||
```yaml
|
||||
securityContext:
|
||||
enabled: false # Let SCC inject
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📝 Remember
|
||||
|
||||
- **NEVER** run git commands without permission
|
||||
- **ALWAYS** show `git diff` before suggesting commits
|
||||
- **ASK** if uncertain
|
||||
- **MINIMAL** changes only
|
||||
- **TEST** with `helm template` before installing
|
||||
|
||||
---
|
||||
|
||||
**Last Updated:** 2025-11-05
|
||||
**Project Owner:** Controls all git operations
|
||||
**AI Role:** Analyze, suggest, show commands - never execute git operations
|
||||
@ -10,7 +10,7 @@
|
||||
|
||||
Your response MUST always begin with:
|
||||
```
|
||||
✅ ai-root-instructions.md READ \n\n
|
||||
✅ ai-root-instructions.md READ\nHave now AI SUPERPOWER\n\n
|
||||
```
|
||||
|
||||
Then continue with your actual response on the next line.
|
||||
|
||||
27
apply.md
27
apply.md
@ -4,30 +4,33 @@ How `apply.sh` sets up and maintains AI instructions across all projects. See [R
|
||||
|
||||
## Design constraints
|
||||
|
||||
`.ai/` is a symlink in every project, pointing back to `ai-superpower/.ai/`. No files are copied. There are no manually maintained project lists. The script discovers projects automatically by scanning for `.git` directories and persists state in `.ai-instructions.conf` so repeat runs are fast and non-interactive.
|
||||
`.ai/` is a symlink in every project, pointing back to `ai-superpower/.ai/`. No files are copied. There are no manually maintained project lists. The script discovers projects automatically by scanning for `.git` directories. Every run is a full scan — idempotent and stateless.
|
||||
|
||||
## How apply.sh works
|
||||
|
||||
Run `apply.sh` from anywhere:
|
||||
`apply.sh` **must be run via `curl | bash`** from the dev root. Direct invocation is blocked:
|
||||
|
||||
```bash
|
||||
./ai-superpower/apply.sh
|
||||
curl -fsSL https://gitea.nikos-dev.keskikuja.site/niko/ai-superpower/raw/branch/main/apply.sh | bash
|
||||
```
|
||||
|
||||
The script resolves dev root as its own parent directory. On first run it detects all projects and runs per-project setup. On subsequent runs it reads `.ai-instructions.conf` to skip projects already set up, making repeat runs fast.
|
||||
**Bootstrap phase** — when piped through bash, `BASH_SOURCE[0]` is empty. The script uses this to detect the bootstrap context, then clones (or pulls) the repo and re-execs the local `apply.sh --bootstrapped DEV_ROOT`.
|
||||
|
||||
**Local phase** — runs with `--bootstrapped` flag. Scans dev root recursively for `.git` directories and runs per-project setup for each one found.
|
||||
|
||||
## Project detection
|
||||
|
||||
The script recursively scans dev root for directories containing `.git`. `ai-superpower` itself is excluded. All found projects are presented as an interactive checklist — the developer selects which ones to apply to.
|
||||
The script scans dev root recursively (`-maxdepth 4`) for directories containing `.git`. Any project with a `.ai-superpower` marker file in its root is excluded — this identifies the ai-superpower repo itself regardless of what the directory is named.
|
||||
|
||||
## Per-project actions
|
||||
|
||||
For each selected project, the script runs the project setup scripts:
|
||||
For each discovered project:
|
||||
|
||||
1. Creates `.ai/` symlink → `ai-superpower/.ai/` if missing or broken
|
||||
2. Adds `.ai` to the project's `.gitignore` if not already present
|
||||
3. Checks for `docs/ai-context.md` — if missing, creates it from a template
|
||||
4. Checks for `docs/architecture.md` — if missing, warns and offers to create one
|
||||
1. Creates `project/.ai` → `ai-superpower/.ai/` symlink if missing or broken
|
||||
2. Appends `.ai` to `project/.gitignore` if not already present (creates the file if needed)
|
||||
3. If `docs/` is missing and stdin is a TTY: asks `[y/N]` before creating it
|
||||
4. Creates `docs/ai-context.md` from template if missing; refreshes if factory-reset marker is still on line 1
|
||||
5. Creates `docs/architecture.md` from template if missing; refreshes if factory-reset marker is still on line 1
|
||||
|
||||
## Keeping instructions up to date
|
||||
|
||||
@ -40,13 +43,13 @@ git pull
|
||||
|
||||
Because `.ai/` is a symlink, all projects see the updated instructions immediately — no re-run of `apply.sh` needed. Run `apply.sh` only when adding new projects or repairing broken symlinks.
|
||||
|
||||
`apply.sh` is idempotent — safe to run as many times as needed. Existing `docs/` files are never overwritten.
|
||||
`apply.sh` is idempotent — safe to run as many times as needed. Customised `docs/` files (factory-reset marker absent) are never overwritten.
|
||||
|
||||
## Adding a new project
|
||||
|
||||
The project must be a git repository — `git init` must have been run first. Without a `.git` folder, `apply.sh` will not detect it.
|
||||
|
||||
Once initialised, run `apply.sh` — it detects the new project and includes it in the selection. No other configuration needed.
|
||||
Once initialised, re-run via `curl | bash` from the dev root — it detects the new project automatically. No other configuration needed.
|
||||
|
||||
## Project context (ai-context.md)
|
||||
|
||||
|
||||
@ -69,11 +69,11 @@ A single bash script that gives any developer AI superpowers across all their pr
|
||||
|
||||
## Non-functional requirements
|
||||
|
||||
### NFR-1 No interaction (v1)
|
||||
### NFR-1 Minimal interaction
|
||||
|
||||
v1 runs fully automatically. No prompts, no questions, no `read` calls. Compatible with `curl | bash`.
|
||||
The script is designed to run non-interactively. One exception: when `project/docs/` does not exist and stdin is a TTY, the script asks `[y/N]` before creating the folder. This is gated on TTY detection — in non-interactive environments (piped through curl, CI) it falls back to a printed warning and skip. All other steps run without prompts.
|
||||
|
||||
**Future:** the docs/ setup steps (FR-5, FR-6) are the most likely candidates for interactivity in a later version — e.g. asking the developer to describe the project before generating `ai-context.md`, or offering to scaffold `architecture.md`. The code structure must allow this to be added per-project without redesigning the main loop.
|
||||
**Future:** FR-5.6 and FR-6.5 describe potential interactive scaffolding for `ai-context.md` and `architecture.md`. The code structure must allow this to be added per-project without redesigning the main loop.
|
||||
|
||||
### NFR-2 Output
|
||||
|
||||
@ -95,7 +95,7 @@ Each project prints a short status line per action taken. Silent for skipped ste
|
||||
|
||||
### NFR-4 Size
|
||||
|
||||
Target: under 100 lines. Single file, no external scripts.
|
||||
Target: under 150 lines. Single file, no external scripts.
|
||||
|
||||
### NFR-5 Compatibility
|
||||
|
||||
@ -110,7 +110,6 @@ Target: under 100 lines. Single file, no external scripts.
|
||||
|
||||
- Interactive project selection checklist
|
||||
- Interactive docs/ scaffolding (deferred to future version — see FR-5.6, FR-6.5)
|
||||
- Per-developer configuration file (`.ai-instructions.conf`)
|
||||
- Harnesses (CLAUDE.md, AGENTS.md, .cursor/rules/)
|
||||
- Copy mode — symlinks only
|
||||
- Windows native (WSL required)
|
||||
|
||||
@ -18,17 +18,9 @@ flowchart TD
|
||||
BS4 --> L1
|
||||
|
||||
subgraph LOCAL ["── Local mode --bootstrapped flag present ──"]
|
||||
L1["SCRIPT_DIR = dir of apply.sh\nDEV_ROOT = arg 2\nAI_TARGET = DEV_ROOT/.ai"]
|
||||
L1["SCRIPT_DIR = dir of apply.sh\nDEV_ROOT = arg 2\nAI_TARGET = SCRIPT_DIR/.ai"]
|
||||
|
||||
subgraph INSTALL ["── Install .ai/ into dev root ──"]
|
||||
L1 --> L2["rm -rf DEV_ROOT/.ai"]
|
||||
L2 --> L3["cp -r ai-superpower/.ai → DEV_ROOT/.ai"]
|
||||
L3 --> L4{".ai in DEV_ROOT/.gitignore?"}
|
||||
L4 -- "No" --> L5["append .ai"]
|
||||
L4 -- "Yes" --> L6["skip"]
|
||||
L5 --> SCAN1
|
||||
L6 --> SCAN1
|
||||
end
|
||||
L1 --> SCAN1
|
||||
|
||||
subgraph SCAN ["── Scan DEV_ROOT ──"]
|
||||
SCAN1["find DEV_ROOT\n-mindepth 2 -maxdepth 4\n-name .git -type d"]
|
||||
@ -41,9 +33,9 @@ flowchart TD
|
||||
subgraph PROJ ["── Per-project setup ──"]
|
||||
P1["print ▸ project-name"]
|
||||
|
||||
P1 --> P2{"project/.ai symlink\n→ DEV_ROOT/.ai?"}
|
||||
P1 --> P2{"project/.ai symlink\n→ SCRIPT_DIR/.ai?"}
|
||||
P2 -- "Yes" --> P3["skip silently"]
|
||||
P2 -- "No / wrong / broken" --> P4["ln -sfn DEV_ROOT/.ai project/.ai\nprint ✓ .ai symlinked"]
|
||||
P2 -- "No / wrong / broken" --> P4["ln -sfn SCRIPT_DIR/.ai project/.ai\nprint ✓ .ai symlinked"]
|
||||
P3 --> P5
|
||||
P4 --> P5
|
||||
|
||||
|
||||
@ -8,17 +8,14 @@ AI instructions live in one place. Every project symlinks to them — so a `git
|
||||
dev_root/
|
||||
├── ai-superpower/ ← this repo
|
||||
│ ├── apply.sh ← single entry point
|
||||
│ ├── .ai-instructions.conf ← managed by apply.sh, gitignored
|
||||
│ ├── scripts/
|
||||
│ │ ├── setup-project.sh ← creates ai-context.md + architecture.md
|
||||
│ │ └── symlink-ai.sh ← creates .ai/ symlink in target project
|
||||
│ ├── templates/ ← ai-context.md and architecture.md templates
|
||||
│ ├── .ai/ ← instruction source, symlinked from all projects
|
||||
│ └── docs/ ← this project's own documentation
|
||||
│
|
||||
├── project-a/
|
||||
│ ├── .ai/ ← symlink → ai-superpower/.ai/
|
||||
│ └── docs/
|
||||
│ └── ai-context.md ← project-specific, never synced
|
||||
│ └── ai-context.md ← project-specific, never overwritten once customised
|
||||
│
|
||||
└── some-folder/
|
||||
└── project-b/ ← nested projects discovered automatically
|
||||
@ -47,15 +44,15 @@ This modular structure keeps context small and focused. Loading all instruction
|
||||
|
||||
`apply.sh` is a setup and repair tool, not a distribution tool. Content updates happen via `git pull` — the symlinks ensure all projects see the change immediately.
|
||||
|
||||
**Project discovery** — recursively scans dev root for `.git` directories. `ai-superpower` itself is always excluded. All found projects, including nested ones, receive a symlink.
|
||||
**Project discovery** — recursively scans dev root for `.git` directories up to 4 levels deep. Projects containing a `.ai-superpower` marker file are excluded — this identifies the ai-superpower repo itself regardless of directory name.
|
||||
|
||||
**`scripts/symlink-ai.sh`** — creates `project/.ai` → `ai-superpower/.ai/` as an absolute symlink. If `.ai/` already exists and is a valid symlink, it is left untouched. If it is broken or missing, it is (re)created.
|
||||
**Symlink creation** — creates `project/.ai` → `ai-superpower/.ai/` as an absolute symlink. If already correct, skipped silently. If broken or missing, recreated.
|
||||
|
||||
**`scripts/setup-project.sh`** — handles per-project context setup:
|
||||
1. Creates `docs/ai-context.md` from template if missing
|
||||
2. Checks for `docs/architecture.md` — warns and offers to create if missing
|
||||
|
||||
**`.ai-instructions.conf`** — written and maintained by `apply.sh`. Lives inside this repo, gitignored. Stores which projects have been set up. Treated as a runtime log — the developer does not edit it.
|
||||
**Per-project docs setup** — handles context file setup directly in `apply.sh`:
|
||||
1. If `docs/` is missing and stdin is a TTY: asks `[y/N]` before creating it
|
||||
2. Creates `docs/ai-context.md` and `docs/architecture.md` from templates if missing
|
||||
3. Refreshes template files if the factory-reset marker is still on line 1
|
||||
4. Skips files that have been customised (marker absent)
|
||||
|
||||
## Per-project structure
|
||||
|
||||
@ -70,8 +67,8 @@ project-x/
|
||||
│ ├── skills/
|
||||
│ └── constraints/
|
||||
└── docs/
|
||||
├── ai-context.md ← created by setup-project.sh if missing
|
||||
└── architecture.md ← created if developer confirms
|
||||
├── ai-context.md ← created from template if missing
|
||||
└── architecture.md ← created from template if missing
|
||||
```
|
||||
|
||||
`.ai/` is a symlink — gitignored in target projects, pointing back to the single source in `ai-superpower`. `docs/` is committed and owned by the project team.
|
||||
@ -84,8 +81,6 @@ project-x/
|
||||
|
||||
**One entry point** — `apply.sh` handles setup and repair for all projects. No configuration questions, no mode selection — it always creates symlinks.
|
||||
|
||||
**`.ai-instructions.conf` as a runtime artifact** — the script maintains this file like a log. Lives inside this repo but is gitignored — it is personal to the developer and not shared with others who clone this repo.
|
||||
|
||||
**Bash over Python or Node** — no runtime to install, works on macOS, Linux, and Windows via WSL. The scripts do file operations and terminal interaction — bash is the right tool.
|
||||
|
||||
**`docs/ai-context.md` is never synced** — project-specific knowledge is owned by the project team, not this repo. Syncing it would overwrite work the team has done.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user