clckernel 1.2.19 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/clckernel_cli/SKILL.md +23 -6
- package/.agents/skills/clckernel_cli/reference/audit.md +13 -3
- package/.agents/skills/clckernel_cli/reference/commit.md +1 -1
- package/.agents/skills/clckernel_cli/reference/doctor.md +5 -3
- package/.agents/skills/clckernel_cli/reference/feature.md +3 -3
- package/.agents/skills/clckernel_cli/reference/guard.md +48 -12
- package/.agents/skills/clckernel_cli/reference/phase.md +6 -3
- package/.agents/skills/clckernel_cli/reference/start.md +14 -4
- package/.agents/skills/clckernel_cli/reference/test.md +1 -1
- package/.agents/skills/clckernel_cli/reference/update.md +19 -19
- package/CHANGELOG.md +250 -0
- package/LICENSE +21 -0
- package/README.es.md +280 -51
- package/README.md +274 -50
- package/bin/deprecated.js +13 -0
- package/package.json +14 -4
- package/src/adapters/agent-os.js +161 -84
- package/src/adapters/astro.js +8 -6
- package/src/adapters/base.js +23 -38
- package/src/adapters/django.js +14 -13
- package/src/adapters/fastapi.js +16 -15
- package/src/adapters/go.js +11 -9
- package/src/adapters/laravel.js +12 -10
- package/src/adapters/nextjs.js +7 -5
- package/src/adapters/rails.js +13 -11
- package/src/adapters/rust.js +11 -9
- package/src/catalog.js +58 -49
- package/src/config.js +38 -240
- package/src/detector.js +243 -44
- package/src/doctor.js +18 -9
- package/src/generator.js +734 -302
- package/src/gitignore.js +60 -14
- package/src/index.js +257 -18
- package/src/io.js +409 -0
- package/src/known-hashes.json +309 -0
- package/src/onboarding.js +15 -0
- package/src/technologies/detector.js +1 -1
- package/src/technologies/guards/_shared.js +1 -1
- package/src/ui.js +233 -40
- package/src/updater.js +271 -38
- package/tools/_changes.js +279 -0
- package/tools/_changes.py +233 -0
- package/tools/_config.js +294 -0
- package/tools/_config.py +271 -0
- package/tools/_yaml.py +489 -0
- package/tools/audit.js +511 -111
- package/tools/audit.py +506 -128
- package/tools/celery_guard.py +13 -35
- package/tools/check_a11y.js +8 -28
- package/tools/check_api_contracts.js +13 -39
- package/tools/check_architecture.js +35 -44
- package/tools/check_architecture.py +172 -105
- package/tools/check_custom.js +108 -61
- package/tools/check_custom.py +108 -271
- package/tools/check_data_files.js +88 -0
- package/tools/check_db_efficiency.py +80 -65
- package/tools/check_hitl.js +112 -69
- package/tools/check_links.js +138 -0
- package/tools/check_migrations.py +143 -94
- package/tools/check_performance.js +35 -44
- package/tools/check_placeholders.js +104 -0
- package/tools/check_responsive.js +8 -28
- package/tools/check_scope.py +40 -31
- package/tools/check_seo.js +8 -28
- package/tools/check_skills.js +158 -0
- package/tools/check_storybook.js +8 -21
- package/tools/check_symlinks.js +40 -22
- package/tools/check_ui_reuse.js +17 -29
- package/tools/docker_guard.py +19 -41
- package/tools/postgres_guard.py +15 -36
- package/tools/redis_guard.py +13 -35
- package/tools/scan_secrets.js +134 -67
- package/tools/scan_secrets.py +163 -72
- package/tools/verify_tdd.js +867 -0
- package/tools/verify_tdd.py +407 -165
- package/tools/yaml.js +404 -132
- package/tools/check_domain_data.js +0 -100
- package/tools/check_test_calendar_sync.js +0 -111
|
@@ -5,7 +5,9 @@ description: >-
|
|
|
5
5
|
Use when the user issues a clckernel command (e.g. clckernel feature, clckernel fix,
|
|
6
6
|
clckernel audit, clckernel doctor, clckernel commit, clckernel update, clckernel start)
|
|
7
7
|
or /clckernel, or asks to initiate a feature, fix a bug, audit architecture, run tests,
|
|
8
|
-
diagnose health, or commit changes in a project governed by CLC Kernel.
|
|
8
|
+
diagnose health, or commit changes in a project governed by CLC Kernel. Also use in the
|
|
9
|
+
first session after install (tools/.clckernel-managed.json present, no .clckernel.yaml) to
|
|
10
|
+
orient the user and offer the start playbook.
|
|
9
11
|
---
|
|
10
12
|
|
|
11
13
|
# 🤖 CLC Kernel — Agent Governance Engine
|
|
@@ -21,12 +23,12 @@ When the developer issues a \`clckernel <command>\` or \`/clckernel <command>\`
|
|
|
21
23
|
| `feature` | Lifecycle | Execute full AIUP cycle for a new feature (Spec -> HIT -> TDD -> Clean Code -> Audit) | [reference/feature.md](reference/feature.md) |
|
|
22
24
|
| `fix` | Lifecycle | Reproduce root cause with failing test, execute surgical fix, and audit | [reference/fix.md](reference/fix.md) |
|
|
23
25
|
| `test` | Verification | Run stack test runner and verify clean green exit code | [reference/test.md](reference/test.md) |
|
|
24
|
-
| `audit` | Verification | Run mandatory educational audit gate &
|
|
25
|
-
| `doctor` | Diagnostics | Check configuration health, hook parity, symlinks &
|
|
26
|
+
| `audit` | Verification | Run mandatory educational audit gate & guard checks | [reference/audit.md](reference/audit.md) |
|
|
27
|
+
| `doctor` | Diagnostics | Check configuration health, hook parity, symlinks & guard scripts | [reference/doctor.md](reference/doctor.md) |
|
|
26
28
|
| `commit` | Version Control | Pre-flight audit, verify SDD scope, and commit with Conventional Commits | [reference/commit.md](reference/commit.md) |
|
|
27
29
|
| `update` | Maintenance | Non-destructive update: refresh core tools, playbooks & symlinks (preserves SDDs & custom guards) | [reference/update.md](reference/update.md) |
|
|
28
|
-
| `start` | Setup | Discover tech stack &
|
|
29
|
-
| `create_guard` | Safeguards | Scaffold a new
|
|
30
|
+
| `start` | Setup | Discover tech stack, install the harness if missing (`npx clckernel . --yes`) & propose an optional `.clckernel.yaml` | [reference/start.md](reference/start.md) |
|
|
31
|
+
| `create_guard` | Safeguards | Scaffold a new pattern-based/linter guard in native stack language | [reference/guard.md](reference/guard.md) |
|
|
30
32
|
| `remove_guard` | Safeguards | Safely remove an existing guard and clean up config | [reference/guard.md](reference/guard.md) |
|
|
31
33
|
| `phase` | Lifecycle | Add or remove pipeline execution phases | [reference/phase.md](reference/phase.md) |
|
|
32
34
|
|
|
@@ -43,4 +45,19 @@ When the developer issues a \`clckernel <command>\` or \`/clckernel <command>\`
|
|
|
43
45
|
- *"Auditar / verificar arquitectura"* -> Route to `audit` ([reference/audit.md](reference/audit.md))
|
|
44
46
|
- *"Revisar estado / diagnóstico"* -> Route to `doctor` ([reference/doctor.md](reference/doctor.md))
|
|
45
47
|
- *"Commitear / guardar cambios"* -> Route to `commit` ([reference/commit.md](reference/commit.md))
|
|
46
|
-
4. **
|
|
48
|
+
4. **First session after install** (`tools/.clckernel-managed.json` exists, `.clckernel.yaml` does not):
|
|
49
|
+
follow the "First session after install" section of AGENTS.md. The user's own request comes first;
|
|
50
|
+
otherwise explain briefly what is installed, ask ONE question (run [reference/start.md](reference/start.md)
|
|
51
|
+
or keep the defaults) and STOP.
|
|
52
|
+
5. **Mandatory Audit Gate:** Never declare success on code changes without running the audit gate and outputting the summary.
|
|
53
|
+
|
|
54
|
+
## Human checkpoint
|
|
55
|
+
|
|
56
|
+
The user's explicit approval is required before any step that changes shared state or cannot be undone. At each checkpoint, show what will happen, stop, and wait for a clear "yes"; silence, an earlier approval, or approval of a different step does not count.
|
|
57
|
+
|
|
58
|
+
- **Spec before code:** after writing the spec for `feature` (or the root-cause plan for `fix`), present it and wait for approval before writing tests or code.
|
|
59
|
+
- **Before committing:** show the staged files, the audit result and the commit message, and wait for approval before running `git commit`.
|
|
60
|
+
- **Before publishing:** never push, open a pull request, tag or release without the user's explicit request.
|
|
61
|
+
- **Before destructive actions:** removing a guard or phase, deleting files, or overwriting files the project edited locally requires approval of the exact list of paths.
|
|
62
|
+
|
|
63
|
+
If the user declines, stop and report the current state; do not retry or look for a workaround.
|
|
@@ -4,13 +4,23 @@ Use this playbook when auditing code quality, architecture compliance, or execut
|
|
|
4
4
|
|
|
5
5
|
## Execution
|
|
6
6
|
|
|
7
|
-
1. **Locate Audit Tool:**
|
|
7
|
+
1. **Locate Audit Tool:** `npx clckernel audit [dir] [--change <name>]` runs every installed orchestrator for you. Or check the available audit scripts:
|
|
8
8
|
- `node tools/audit.js` (JavaScript / Node environment)
|
|
9
9
|
- `python tools/audit.py` (Python / Backend environment)
|
|
10
|
-
2. **Execute Audit:** Run the tool within project workspace.
|
|
10
|
+
2. **Execute Audit:** Run the tool within the project workspace. CLI (both scripts):
|
|
11
|
+
`audit.(js|py) [targetDir] [--change <name>] [--staged]`.
|
|
12
|
+
- Working on an SDD change (`sdds/<name>/`): pass `--change <name>`. Only then are the report
|
|
13
|
+
(`05-audit-report.md`) and the receipt (`audit-receipt.json`) written, in `sdds/<name>/`.
|
|
14
|
+
On a mixed stack (both `tools/audit.js` and `tools/audit.py` installed) each orchestrator
|
|
15
|
+
writes its own pair: `05-audit-report.js.md` + `audit-receipt.js.json` and
|
|
16
|
+
`05-audit-report.py.md` + `audit-receipt.py.json`. Read both.
|
|
17
|
+
- Without `--change` nothing is written: read the summary from stdout.
|
|
18
|
+
- `--staged` is the default snapshot (staged changes, or the last commit when nothing is staged).
|
|
19
|
+
- An unknown flag exits 2 with the usage line: fix the command, do not report it as a guard failure.
|
|
11
20
|
3. **Educational Summary:** Output the educational audit summary highlighting:
|
|
12
|
-
-
|
|
21
|
+
- Architectural conformance (layer-boundary guards)
|
|
13
22
|
- TDD compliance & test coverage
|
|
14
23
|
- Security & Secrets scan results
|
|
15
24
|
- Performance / DB efficiency checks
|
|
16
25
|
4. **Actionable Feedback:** If any guard fails, explain the exact violation, why it breaches architectural invariants, and how to remediate it.
|
|
26
|
+
5. **Warnings:** A guard marked `WARN` / ⚠️ (level `warning`, from the guard or `severities` in `.clckernel.yaml`) failed but does not block: the verdict is `PASSED_WITH_WARNINGS`. Report it and propose the fix; do not hide it. A guard that crashed always blocks.
|
|
@@ -4,7 +4,7 @@ Safely commit changes after verifying all pre-flight quality and architecture ga
|
|
|
4
4
|
|
|
5
5
|
## Mandatory Execution Protocol
|
|
6
6
|
|
|
7
|
-
### Step 1: Pre-Flight
|
|
7
|
+
### Step 1: Pre-Flight Guard Audit
|
|
8
8
|
1. Run \`node tools/audit.js\` or \`python tools/audit.py\`.
|
|
9
9
|
2. Ensure 100% of discovered guards pass with 0 errors and 0 secret leaks.
|
|
10
10
|
|
|
@@ -4,7 +4,9 @@ Use this playbook to diagnose environment health, detect hook drift, or verify c
|
|
|
4
4
|
|
|
5
5
|
## Checks
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
Start with `npx clckernel doctor [dir]`: it checks `AGENTS.md`, `sdds/`, `docs/Journal/`, `tools/`, the pre-commit hook, that each `tools/check_*` guard loads (JS) or parses (Python), and the orchestrators' imports. Then:
|
|
8
|
+
|
|
9
|
+
1. **Config Integrity:** When `.clckernel.yaml` exists, check its keys against the README "Configuration" table (`rules`, `exclude_paths`, `mirrors`, `hitl`, `update`, `tdd`, `severities`); report any invalid value or deprecated key the guards warn about.
|
|
10
|
+
2. **Hook Parity:** Check that the hook git runs (`.githooks/pre-commit` with `core.hooksPath=.githooks`, or `.husky/pre-commit` when Husky owns `core.hooksPath`) is executable and calls `node tools/audit.js --hook` and/or `python3 tools/audit.py --hook`.
|
|
11
|
+
3. **Tools & Guards Health:** Run `npx clckernel audit`: it runs every guard the hook runs (kernel guards and project guards in `tools/guards/`).
|
|
10
12
|
4. **Drift Remediation:** If drift is detected, offer automatic fix or report clear steps.
|
|
@@ -32,7 +32,7 @@ Guide the developer through implementing a new feature strictly governed by the
|
|
|
32
32
|
2. Maintain strict Clean Architecture boundaries (Domain -> Use Case -> Infrastructure).
|
|
33
33
|
3. Re-run tests to confirm 100% green pass.
|
|
34
34
|
|
|
35
|
-
### Step 6: Mandatory
|
|
36
|
-
1. Execute \`node tools/audit.js
|
|
35
|
+
### Step 6: Mandatory Audit Gate
|
|
36
|
+
1. Execute \`node tools/audit.js --change <name>\` or \`python tools/audit.py --change <name>\` (writes the report and receipt to \`sdds/<name>/\`).
|
|
37
37
|
2. Output the Educational Summary table to stdout.
|
|
38
|
-
3. Verify zero
|
|
38
|
+
3. Verify zero secret findings, zero layer violations, and zero N+1 heuristic findings.
|
|
@@ -1,23 +1,59 @@
|
|
|
1
1
|
# Playbook: Safeguards Management (Create & Remove)
|
|
2
2
|
|
|
3
|
-
Use this playbook when the user wants to add, modify, or delete
|
|
3
|
+
Use this playbook when the user wants to add, modify, or delete a project guard (via `/clc create_guard`, `/clc remove_guard`, or natural language like *"creá un guard para bloquear imports prohibidos"*).
|
|
4
|
+
|
|
5
|
+
Project guards hold the rules of this project's domain; the kernel ships none. They are project code: never listed in `tools/.clckernel-managed.json`, preserved by `clckernel update`, and evaluated by the other guards like any other file. Put them in `tools/guards/` (any `*.js` / `*.py` name). A guard file at the top of `tools/` whose name starts with `check_`, `scan_` or `verify_` (or ends with `_guard`) and that the registry does not list is a project guard too — for example a kernel guard the kernel no longer ships, which `clckernel update` leaves in place.
|
|
6
|
+
|
|
7
|
+
## How project guards run
|
|
8
|
+
|
|
9
|
+
- **One discovery, two entry points:** the pre-commit hook calls `node tools/audit.js --hook` and `python3 tools/audit.py --hook` (each when installed); `clckernel audit` runs the same orchestrators without `--hook`. Both run exactly the same guards — the kernel guards and every project guard — each once, from the repository root. Adding a guard needs no `clckernel update`.
|
|
10
|
+
- **Which orchestrator runs which guard:** `audit.js` runs the `.js` guards and `audit.py` the `.py` ones. When a project has only one orchestrator (e.g. a Node stack without `tools/audit.py`), that one also runs the other language's guards (`python3` / `node`).
|
|
11
|
+
- **Audit:** the report lists them (architecture lens unless the JSON result names another). `--hook` writes no report: it prints one line per guard and the details of each failure.
|
|
12
|
+
- **Contract:** a non-zero exit code blocks the commit and fails the audit. Printing the standard JSON result is optional; when present the audit uses it for the report: `{ "exitCode": 0, "skipped": false, "name": "check_x", "data": { "message": "...", "violations": [{ "file": "...", "message": "..." }] } }` (optional `"lens"`: `correctness`, `security`, `architecture` or `performance`). Plain output is reported by its last line.
|
|
13
|
+
- **Snapshot helpers:** evaluate the commit being made, not the working copy. A JS guard imports `require('../_changes')`; a Python guard imports `_changes` after adding the parent directory to `sys.path`. Each helper exists only when the harness installed it (`tools/_changes.js` with JS guards, `tools/_changes.py` with Python guards).
|
|
4
14
|
|
|
5
15
|
## 🛠️ Create Guard
|
|
6
16
|
|
|
7
|
-
1. **Clarify Objective:** If not specified, ask what
|
|
8
|
-
2. **
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
17
|
+
1. **Clarify Objective:** If not specified, ask what pattern, rule, or risk to intercept. **STOP.** Wait for details.
|
|
18
|
+
2. **Write the guard** in `tools/guards/<name>.js` (Node) or `tools/guards/<name>.py` (Python). Only these two extensions run; use the one whose snapshot helper the project has. Minimal working examples:
|
|
19
|
+
|
|
20
|
+
```js
|
|
21
|
+
// tools/guards/check_no_draft_json.js
|
|
22
|
+
const { changedFiles, readFile } = require('../_changes');
|
|
23
|
+
|
|
24
|
+
const { mode, files } = changedFiles(process.cwd(), { extensions: ['.json'] });
|
|
25
|
+
const violations = files
|
|
26
|
+
.filter((file) => (readFile(process.cwd(), file, mode) || '').includes('"draft": true'))
|
|
27
|
+
.map((file) => ({ file, message: 'draft data must not be committed' }));
|
|
28
|
+
const exitCode = violations.length > 0 ? 1 : 0;
|
|
29
|
+
console.log(JSON.stringify({ exitCode, skipped: false, name: 'check_no_draft_json', data: { message: `${violations.length} violation(s)`, violations } }));
|
|
30
|
+
process.exit(exitCode);
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```python
|
|
34
|
+
# tools/guards/check_no_draft_json.py
|
|
35
|
+
import json, pathlib, sys
|
|
36
|
+
sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent.parent))
|
|
37
|
+
from _changes import changed_files, read_file
|
|
38
|
+
|
|
39
|
+
snapshot = changed_files(".", extensions=[".json"])
|
|
40
|
+
violations = [
|
|
41
|
+
{"file": f, "message": "draft data must not be committed"}
|
|
42
|
+
for f in snapshot["files"]
|
|
43
|
+
if '"draft": true' in (read_file(".", f, snapshot["mode"]) or "")
|
|
44
|
+
]
|
|
45
|
+
exit_code = 1 if violations else 0
|
|
46
|
+
print(json.dumps({"exitCode": exit_code, "skipped": False, "name": "check_no_draft_json",
|
|
47
|
+
"data": {"message": f"{len(violations)} violation(s)", "violations": violations}}))
|
|
48
|
+
sys.exit(exit_code)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
3. **Validation:** stage a violating file and run `node tools/guards/<name>.js` (or `python3 tools/guards/<name>.py`): it must exit 1. Stage a compliant one: it must exit 0. Then run `node tools/audit.js` to see it reported.
|
|
15
52
|
|
|
16
53
|
---
|
|
17
54
|
|
|
18
55
|
## 🗑️ Remove Guard
|
|
19
56
|
|
|
20
57
|
1. Identify the target guard from user request or ask for confirmation.
|
|
21
|
-
2.
|
|
22
|
-
3.
|
|
23
|
-
4. Confirm removal cleanly.
|
|
58
|
+
2. Delete the corresponding file from `tools/guards/` (or the top of `tools/`): the hook and the audit stop running it; nothing else to update. A kernel guard listed in `tools/.clckernel-managed.json` cannot be removed by deleting it (the hook fails on a missing kernel guard); exclude it with `update.exclude` in `.clckernel.yaml` instead.
|
|
59
|
+
3. Confirm removal cleanly.
|
|
@@ -7,12 +7,15 @@ Use this playbook when adding, modifying, or removing lifecycle phases in the AI
|
|
|
7
7
|
1. **Understand Phase Purpose:**
|
|
8
8
|
- Pre-implementation (e.g. Research, SDD spec, RFC alignment)
|
|
9
9
|
- Implementation (e.g. TDD Red/Green, Layer Check)
|
|
10
|
-
- Verification / Audit (e.g.
|
|
10
|
+
- Verification / Audit (e.g. Guard Audit, E2E, Smoke test)
|
|
11
11
|
- Delivery (e.g. Git pre-commit, PR generation)
|
|
12
12
|
|
|
13
|
-
2. **Update
|
|
13
|
+
2. **Update `AGENTS.md`:**
|
|
14
|
+
- Phases are agent instructions: record the new order in the Loop section of `AGENTS.md`, never in
|
|
15
|
+
`.clckernel.yaml` (its `phases` key is deprecated and has no effect).
|
|
14
16
|
- Preserve execution order and dependencies.
|
|
15
|
-
-
|
|
17
|
+
- Say whether the phase is blocking or advisory; a blocking check belongs in a guard under
|
|
18
|
+
`tools/guards/`, which the pre-commit hook runs.
|
|
16
19
|
|
|
17
20
|
3. **Confirm & Validate:**
|
|
18
21
|
- Present the updated pipeline flow to the user.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Playbook: Start / Initialize CLC Kernel
|
|
2
2
|
|
|
3
3
|
Use this playbook when the user wants to initialize, start, or set up governance in a project (via `/clc start`, `/clckernel start`, or conversational request like *"inicializar el proyecto con clc"*).
|
|
4
|
+
It is also the playbook offered in the first session after install (AGENTS.md, "First session after install").
|
|
4
5
|
|
|
5
6
|
## Sequence
|
|
6
7
|
|
|
@@ -17,12 +18,21 @@ Use this playbook when the user wants to initialize, start, or set up governance
|
|
|
17
18
|
|
|
18
19
|
### Phase 2: Interactive Alignment
|
|
19
20
|
Present detected stack and proposal clearly:
|
|
20
|
-
1. Summarize detected architecture and auto-provisioned safeguards (e.g., TDD
|
|
21
|
+
1. Summarize detected architecture and auto-provisioned safeguards (e.g., Red→Green TDD verifier on FastAPI/Django, architecture guard, N+1 heuristic, secrets scan, tech-specific guards).
|
|
21
22
|
2. Ask one clear question:
|
|
22
23
|
- *"¿Activamos estas fases y salvaguardas estándar, o querés personalizar alguna regla o fase?"*
|
|
23
24
|
3. **STOP.** Wait for the user's response.
|
|
24
25
|
|
|
25
26
|
### Phase 3: Materialization
|
|
26
|
-
1.
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
1. If the harness is not installed (no `AGENTS.md` / `tools/audit.js` / `tools/audit.py`), run
|
|
28
|
+
`npx clckernel . --yes` (`--dry-run` first to show the plan). The CLI writes the guards, the
|
|
29
|
+
pre-commit hook (`.githooks/pre-commit`, or `.husky/pre-commit` when Husky already runs the
|
|
30
|
+
repository's hooks), the playbooks and the IDE mirrors. Never write the hook by hand.
|
|
31
|
+
2. `.clckernel.yaml` is optional: without it every default applies. Write keys only when the user
|
|
32
|
+
chose a customization, only with the keys the README "Configuration" table lists (`rules`,
|
|
33
|
+
`exclude_paths`, `mirrors`, `hitl`, `update`, `tdd`, `severities`) and only what differs from the
|
|
34
|
+
defaults.
|
|
35
|
+
3. If the user keeps the defaults, write a `.clckernel.yaml` that holds only a comment (for example
|
|
36
|
+
`# CLC Kernel: defaults accepted. Add keys only for settings that differ.`). It parses to the
|
|
37
|
+
defaults and ends the first-session onboarding, so the question is not asked again.
|
|
38
|
+
4. Confirm completion with a concise summary.
|
|
@@ -5,7 +5,7 @@ Execute the repository test suite within the native environment runner.
|
|
|
5
5
|
## Mandatory Execution Protocol
|
|
6
6
|
|
|
7
7
|
### Step 1: Detect Test Runner
|
|
8
|
-
1. Inspect
|
|
8
|
+
1. Inspect the project files to identify the test runner:
|
|
9
9
|
- Node: \`npm test\` / \`vitest\` / \`jest\`
|
|
10
10
|
- Python: \`pytest\`
|
|
11
11
|
- Go: \`go test ./...\`
|
|
@@ -5,29 +5,29 @@ Use this playbook when the user wants to update an existing project to the lates
|
|
|
5
5
|
## Invariants: The Non-Destructive Update Contract
|
|
6
6
|
|
|
7
7
|
1. **NEVER DELETE OR OVERWRITE `sdds/`:** All local specifications (`sdds/*/spec.md`, `plan.md`) must stay 100% intact.
|
|
8
|
-
2. **NEVER TOUCH
|
|
9
|
-
3. **NEVER OVERWRITE CONFIGURATION:** Existing `.clckernel.yaml` or
|
|
10
|
-
4. **NEVER
|
|
8
|
+
2. **NEVER TOUCH PROJECT GUARDS:** Scripts under `tools/guards/` and unmanaged guard files at the top of `tools/` are preserved without alteration. A kernel guard the new release no longer ships stays where it is and keeps running as a project guard; nothing is moved or deleted.
|
|
9
|
+
3. **NEVER OVERWRITE CONFIGURATION:** Existing `.clckernel.yaml` settings (or a config under an older name) remain intact.
|
|
10
|
+
4. **NEVER OVERWRITE EDITED KERNEL FILES:** A kernel file the project edited is kept; the new version is written next to it as `<file>.clckernel-new`.
|
|
11
|
+
5. **NEVER MODIFY APPLICATION CODE:** Source files, domain layers, and application tests are never touched.
|
|
11
12
|
|
|
12
13
|
## Update Sequence
|
|
13
14
|
|
|
14
|
-
### Phase 1: Inspection &
|
|
15
|
-
1. Verify the project is already governed by checking for `AGENTS.md`,
|
|
16
|
-
2.
|
|
15
|
+
### Phase 1: Inspection & Plan
|
|
16
|
+
1. Verify the project is already governed by checking for `AGENTS.md`, `tools/.clckernel-managed.json`, `.githooks/pre-commit` or `.husky/pre-commit`.
|
|
17
|
+
2. Run `npx clckernel update [dir] --dry-run` and show the plan (written, kept, excluded by `update.exclude`). Nothing is written.
|
|
18
|
+
3. **STOP.** Wait for the user's approval of the plan.
|
|
17
19
|
|
|
18
|
-
### Phase 2:
|
|
19
|
-
1.
|
|
20
|
-
- `tools
|
|
21
|
-
-
|
|
22
|
-
|
|
23
|
-
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
4. Refresh Pre-commit Hook:
|
|
27
|
-
- Ensure the git pre-commit hook runs the latest standard guards while preserving any custom checks.
|
|
20
|
+
### Phase 2: Run the Update
|
|
21
|
+
1. Run `npx clckernel update [dir]`. It refreshes, in one pass:
|
|
22
|
+
- the kernel tools the project already has in `tools/` (`audit.js` / `audit.py`, guards, helpers) — update never adds a guard the project did not choose;
|
|
23
|
+
- the skill and playbooks in `.agents/skills/clckernel_cli/`;
|
|
24
|
+
- the IDE mirrors that link to `AGENTS.md`;
|
|
25
|
+
- the pre-commit hook, which calls `node tools/audit.js --hook` and/or `python3 tools/audit.py --hook` (every kernel and project guard, once) and then the stack's external tools when they are available.
|
|
26
|
+
2. To install additional guards, add `--add-guards <a,b|all>` (e.g. `npx clckernel update . --add-guards check_skills`), only with the user's approval.
|
|
27
|
+
3. Never copy or edit kernel files by hand to "refresh" them.
|
|
28
28
|
|
|
29
29
|
### Phase 3: Verification & Reporting
|
|
30
|
-
1. Run `node tools/audit.js`
|
|
30
|
+
1. Run `npx clckernel audit` (or `node tools/audit.js` / `python3 tools/audit.py`) to verify harness health.
|
|
31
31
|
2. Output a transparent Educational Summary highlighting:
|
|
32
|
-
- What was updated (core tools, playbooks, symlinks)
|
|
33
|
-
- What was preserved (SDDs,
|
|
32
|
+
- What was updated (core tools, hook, playbooks, symlinks)
|
|
33
|
+
- What was preserved (SDDs, project guards, edited files kept with a `.clckernel-new` copy, YAML configuration)
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to
|
|
6
|
+
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- `npx clckernel` no longer prints the `clc-forge` deprecation notice. The legacy `clc-forge` and
|
|
13
|
+
`create-clc-forge` binaries now point to `bin/deprecated.js`, so npx runs the bin named like the package
|
|
14
|
+
instead of the first (alphabetically sorted) one.
|
|
15
|
+
|
|
16
|
+
## [2.0.0] - 2026-10-26
|
|
17
|
+
|
|
18
|
+
### ⚠ BREAKING CHANGES
|
|
19
|
+
|
|
20
|
+
- **Strict YAML subset for `.clckernel.yaml`.** `check_custom` (JS and Python) now parses a documented YAML
|
|
21
|
+
subset and fails closed: a config that relied on lenient parsing, or that contains invalid rules or invalid
|
|
22
|
+
regexes, now fails the pre-commit hook instead of being silently skipped.
|
|
23
|
+
- **Frontend hook location.** On Next.js and Astro projects the pre-commit hook is written to `.husky/` only
|
|
24
|
+
when Husky is active; otherwise it goes to `.githooks/` with `core.hooksPath`. Re-running `update` may move
|
|
25
|
+
your hook.
|
|
26
|
+
- **Legacy `clc-forge` artifacts.** Installs no longer create the `clc_forge_cli` skill, the
|
|
27
|
+
`clc_forge_context.mdc` Cursor rule or `.clc-forge.resolved.json`, and `clckernel update` removes them when
|
|
28
|
+
they are provably harness-generated (it reports anything it keeps).
|
|
29
|
+
- **`check_hitl` requires an explicit marker.** A changed skill or playbook must contain a `HITL:` line or a
|
|
30
|
+
`## Human checkpoint` / `## HITL` section; words such as "review" or "confirm" no longer pass. The guard now
|
|
31
|
+
also covers `playbooks/` and evaluates the files changed in the commit. Existing Agent-OS repositories may
|
|
32
|
+
start failing when they touch a skill or playbook without a marker.
|
|
33
|
+
- **Domain guards leave the kernel.** `check_domain_data` and `check_test_calendar_sync` are no longer shipped
|
|
34
|
+
or installed, and Agent-OS detection no longer reacts to the `marketing-os` / `laila-mos` names or a
|
|
35
|
+
"marketing operating system" description (`agent-os` and `ai-agents` still work). `clckernel update` leaves
|
|
36
|
+
copies installed by earlier releases exactly where they are in `tools/` (never moves or deletes them), takes
|
|
37
|
+
them out of the registry and reports them as retired kernel guards, so they keep running as project guards.
|
|
38
|
+
- **The pre-commit hook and `clckernel audit` run the same guards (sdds/unified-discovery).** The generated hook
|
|
39
|
+
no longer lists one line per guard plus a `tools/guards/` loop: it calls `node tools/audit.js --hook` and
|
|
40
|
+
`python3 tools/audit.py --hook` (each when installed; with neither the commit fails), then the external tools.
|
|
41
|
+
The orchestrators discover every guard — kernel guards and project guards, both `tools/guards/*` and
|
|
42
|
+
unmanaged `check_*` / `scan_*` / `verify_*` / `*_guard` files at the top of `tools/` — and run each exactly
|
|
43
|
+
once (`.js` via `audit.js`, `.py` via `audit.py`; a lone orchestrator runs both languages). A project guard
|
|
44
|
+
placed at the top of `tools/`, previously run only by `clckernel audit`, now also blocks commits. A guard the
|
|
45
|
+
registry lists but that is missing on disk now fails the hook and the audit. `--hook` writes no report or
|
|
46
|
+
receipt and prints one line per guard. Re-run `clckernel update` to get the new hook.
|
|
47
|
+
- **Retired kernel guards stay in place.** A guard in the registry that the current kernel no longer ships is
|
|
48
|
+
kept where it is (no move to `tools/guards/`, which broke guards that `require` a sibling such as
|
|
49
|
+
`./_changes`), leaves the registry, and `update` reports it as "retired kernel guard kept as project guard".
|
|
50
|
+
`updateHarness()` returns `retiredGuards` instead of `guardMigration`.
|
|
51
|
+
- **`.clckernel.yaml` is read by install, update and the guards; keys without an effect are gone
|
|
52
|
+
(sdds/config-foundation).** `active_guards`, `phases`, `gate_mode`, `layers` and `scope` never
|
|
53
|
+
changed anything: they now print a deprecation warning and are ignored (`severities` got a real effect in
|
|
54
|
+
sdds/audit-cli, below). The config-driven metadata path (`.clckernel.resolved.json`, `CLCKERNEL_SEVERITIES`) is
|
|
55
|
+
removed. An invalid value now stops install, update and every guard with
|
|
56
|
+
`Invalid .clckernel.yaml: key "<key>" — <reason>`.
|
|
57
|
+
- **The audit writes a report only when told where (sdds/audit-cli).** `node tools/audit.js`,
|
|
58
|
+
`python3 tools/audit.py` and `clckernel audit` used to write `05-audit-report.md` and `audit-receipt.json`
|
|
59
|
+
into a guessed folder (the first directory under `sdds/`, or `sdds/audit-run/`), i.e. into an unrelated spec.
|
|
60
|
+
Now a plain run only prints the summary; `--change <name>` (also `clckernel audit [dir] --change <name>`)
|
|
61
|
+
writes both files to `sdds/<name>/`, creating that folder only then. `<name>` must be one path segment.
|
|
62
|
+
The orchestrators take `[targetDir] [--hook] [--change <name>] [--staged]`; any other flag, a second
|
|
63
|
+
positional or `--hook` with `--change` exits 2 with the usage (unknown flags used to be ignored). The Python
|
|
64
|
+
orchestrator now resolves `sdds/` against the target directory, like the JS one. Agents that need the report
|
|
65
|
+
must pass `--change <sdd name>`: re-run `clckernel update` to get the AGENTS.md and playbook wording.
|
|
66
|
+
|
|
67
|
+
### Added
|
|
68
|
+
|
|
69
|
+
- **Onboarding after install (sdds/onboarding).** A real install ends with a "Next steps" block true to that
|
|
70
|
+
install: commit the harness (or the exact command that activates the hook when it is not active), the AI
|
|
71
|
+
harnesses whose mirrors were written, `clckernel start`, `npx clckernel audit`, `tools/guards/` and
|
|
72
|
+
`npx clckernel update --dry-run`. An update prints a short one only when protected `*.clckernel-new` files or
|
|
73
|
+
available guards need attention. Every generated AGENTS.md gains a "First session after install" section, and
|
|
74
|
+
the skill triggers on it: the user's request comes first; otherwise the agent explains what is installed, asks
|
|
75
|
+
one question (run the `start` playbook or keep the defaults) and stops.
|
|
76
|
+
- **Red→Green TDD verification for Go, Rust, Ruby and PHP (sdds/tdd-other-stacks).** `tools/verify_tdd.js`
|
|
77
|
+
gains language profiles (`go test`, `cargo test --test`, RSpec / Minitest through bundler, Pest / PHPUnit),
|
|
78
|
+
grouped by the nearest `go.mod` / `Cargo.toml` / `Gemfile` / `composer.json`, and is installed for the Go,
|
|
79
|
+
Rust, Rails and Laravel stacks: their commits now fail when production code changes without a test that
|
|
80
|
+
fails on `HEAD` and passes on the staged code. A missing toolchain fails closed with an install hint. Rust
|
|
81
|
+
unit tests inside `src/` cannot be separated for the red run: a `src/` change needs an integration test.
|
|
82
|
+
- **Wider secret coverage in `scan_secrets` (sdds/secret-patterns).** New labels: `Anthropic API Key`,
|
|
83
|
+
`OpenAI Project Key` (project, service-account and admin keys), `Google API Key`, `Slack Token`, `GitHub Token`
|
|
84
|
+
(OAuth, user, server and refresh prefixes) and `GitHub Fine-Grained PAT`. `Quoted Key Secret` flags a quoted
|
|
85
|
+
JSON/YAML key (`"api_key": "…"`) whose value holds a letter and a digit. `Dotenv Secret` flags a committed
|
|
86
|
+
`.env`, `.env.*` or `*.env` file (unquoted values included) when a secret-looking variable has a real value;
|
|
87
|
+
`.env.example`, `.env.sample` and `.env.template` are left alone. Both generic rules skip placeholders (`${VAR}`,
|
|
88
|
+
`<…>`, `changeme`, `your-…`, `xxx`, one repeated character, …). Existing labels are unchanged. The pure matcher
|
|
89
|
+
is exported as `findSecrets(text, filename)` (JS) and `find_secrets(text, filename)` (Python).
|
|
90
|
+
|
|
91
|
+
- **Non-blocking warnings in the audit and the pre-commit hook (sdds/audit-cli).** A guard result may carry
|
|
92
|
+
`level: 'warning'`, and `.clckernel.yaml` `severities: { <guard name>: warning | error }` sets it per guard
|
|
93
|
+
(overriding the guard; values are validated — the key is no longer deprecated). A failing guard at `warning`
|
|
94
|
+
prints `WARN`, does not change the exit code, and is listed separately in the report and in the receipt's
|
|
95
|
+
`warnings`; the verdict is `PASSED_WITH_WARNINGS` when only warnings failed. A guard that crashes (throws,
|
|
96
|
+
returns no result, cannot run, or is missing) always blocks, whatever its severity. `--staged` is accepted as
|
|
97
|
+
an explicit name for the default snapshot (staged changes, else the last commit).
|
|
98
|
+
|
|
99
|
+
- **Configuration keys with a real effect (sdds/config-foundation).** `exclude_paths` (paths no diff-based guard
|
|
100
|
+
evaluates), `mirrors.list` / `mirrors.required` (mirrors install creates and `check_symlinks` verifies),
|
|
101
|
+
`hitl.markers` / `hitl.paths` / `hitl.optOut` (`check_hitl`), `update.exclude` (paths install/update never
|
|
102
|
+
write; reported as *excluded by config*) and `tdd.code` / `tdd.ignore` (what `verify_tdd.js/.py` count as
|
|
103
|
+
production code, e.g. Python tools tested by JS tests). Defaults keep the earlier behaviour. One schema in
|
|
104
|
+
`tools/_config.js` and its twin `tools/_config.py` (the Python YAML fallback parser moved to `tools/_yaml.py`),
|
|
105
|
+
installed next to `_changes.js/.py`. README "Configuration" lists every key.
|
|
106
|
+
|
|
107
|
+
- **Safe `update` and `--dry-run` (sdds/safe-update).** `clckernel update` and a reinstall with `--yes` never
|
|
108
|
+
overwrite a kernel file (`tools/*`, the pre-commit hook, the `clckernel_cli` skill) they cannot prove is
|
|
109
|
+
theirs and intact: a locally edited file, or a project file that only shares a kernel file's name, is kept
|
|
110
|
+
and the new version is written as `<file>.clckernel-new` (added to the consumer `.gitignore`). An older
|
|
111
|
+
intact install without hashes still updates silently: `src/known-hashes.json` holds the sha256 of every
|
|
112
|
+
version the kernel published (built from the git history by `scripts/build-known-hashes.js`).
|
|
113
|
+
`--dry-run` (`clckernel update [dir] --dry-run`, `clckernel [dir] --yes --dry-run`) prints the plan and
|
|
114
|
+
writes nothing — no files, directories, `.gitignore` or `git config`.
|
|
115
|
+
|
|
116
|
+
- **Full-stack and monorepo support.** The detector finds code parts at the root, in declared workspaces
|
|
117
|
+
(`package.json#workspaces`, `pnpm-workspace.yaml`) and in conventional directories (`frontend`, `backend`,
|
|
118
|
+
`web`, `api`, `server`, `client`, `apps/*`, `services/*`, `packages/*`). Several parts install the union of
|
|
119
|
+
their guards once, run each part's external tools inside its directory, list the parts in AGENTS.md and in
|
|
120
|
+
the install summary, and `update` re-detects them. `verify_tdd.py` and `verify_tdd.js` group the changed
|
|
121
|
+
files by their nearest project root and verify red→green per group; code changed in a part without a test
|
|
122
|
+
in that part fails. A repository with a single part at its root is installed exactly as before.
|
|
123
|
+
- `tools/verify_tdd.py` now runs the changed tests with pytest and requires them to fail on the base tree and
|
|
124
|
+
pass on the staged tree; it is installed for FastAPI and Django.
|
|
125
|
+
- `tools/verify_tdd.js`, its twin for vitest, jest and node:test, installed for Next.js, Astro and Agent-OS.
|
|
126
|
+
- `tools/_changes.js` / `tools/_changes.py`: guards read the staged snapshot (or `HEAD` when nothing is staged)
|
|
127
|
+
instead of the working copy.
|
|
128
|
+
- `clckernel audit [dir]` runs every installed audit orchestrator.
|
|
129
|
+
- `tools/.clckernel-managed.json` registry, so guards and both TDD verifiers skip the harness's own files and
|
|
130
|
+
the first commit after an install passes the real hook.
|
|
131
|
+
- `scan_secrets` detects Stripe `sk_`/`rk_` live and test keys.
|
|
132
|
+
- Generic Agent-OS detection: `SKILL.md` in `skills/<name>/`, `.agents/skills/<name>/` or
|
|
133
|
+
`.claude/skills/<name>/`, or a `playbooks/` / `rules/` folder with Markdown (the `package.json` keywords
|
|
134
|
+
still work). The harness's own skill is ignored, and a code stack in the same repository wins.
|
|
135
|
+
- Agent-OS guards `check_skills` (SKILL.md frontmatter: `name`, `description`, unique names),
|
|
136
|
+
`check_links` (relative Markdown links resolve in the commit) and `check_placeholders` (forgotten draft
|
|
137
|
+
markers outside `templates/`); `check_custom` is now installed for Agent-OS.
|
|
138
|
+
- `listFiles` / `list_files` in `tools/_changes.*`: every file of the snapshot being verified.
|
|
139
|
+
- **Project guards run.** Every generated pre-commit hook ends with a generic block that runs each
|
|
140
|
+
`tools/guards/*.js` with `node` and `tools/guards/*.py` with `python3` (alphabetical, after the kernel guards;
|
|
141
|
+
no-op without `tools/guards/`), and `audit.js` / `audit.py` report them. A non-zero exit blocks; the standard
|
|
142
|
+
JSON result is used when printed. Guards can import the snapshot helpers (`require('../_changes')`).
|
|
143
|
+
- Agent-OS guard `check_data_files`: every changed `.json` file must parse (snapshot content, any folder).
|
|
144
|
+
- CI on Node 18/20/22 and Python 3.9/3.13 (without PyYAML), plus a shared YAML conformance suite and
|
|
145
|
+
regression tests for documentation claims and repository hygiene.
|
|
146
|
+
|
|
147
|
+
### Changed
|
|
148
|
+
|
|
149
|
+
- **Mixed stacks keep both audit reports (sdds/residual-fixes).** When `tools/audit.js` and `tools/audit.py`
|
|
150
|
+
are both installed, `--change <name>` makes each orchestrator write its own pair:
|
|
151
|
+
`05-audit-report.js.md` + `audit-receipt.js.json` and `05-audit-report.py.md` + `audit-receipt.py.json`
|
|
152
|
+
(before, `clckernel audit --change` ran both and the second overwrote the first). Single-orchestrator
|
|
153
|
+
projects keep `05-audit-report.md` and `audit-receipt.json`.
|
|
154
|
+
- **`update` never adds what the project did not choose.** It refreshes only the guards the project has (in
|
|
155
|
+
the registry or present in `tools/`) and runs only those in the hook; the stack's other guards are listed
|
|
156
|
+
as *available, not installed* and opted in with the new `clckernel update --add-guards <name,...|all>`
|
|
157
|
+
(an unknown name exits 1 without writing). It no longer recreates IDE mirrors the project deleted (*not
|
|
158
|
+
present (skipped)*), and neither install nor update adds a `.gitignore` entry for a path git tracks
|
|
159
|
+
(*tracked, not ignored*). `--dry-run` shows the three new sections. A part added to a monorepo gets its
|
|
160
|
+
external tools on update; its guards are offered as available.
|
|
161
|
+
- **The kernel skill obeys `check_hitl`.** `check_hitl` no longer exempts `clckernel_cli` (it also reads
|
|
162
|
+
registry-listed files, via the new `includeManaged` option of `_changes.js`); the skill gains a
|
|
163
|
+
`## Human checkpoint` section: approval before code after a spec, before committing, before destructive
|
|
164
|
+
steps, and no publishing without an explicit request. The retired `clc_forge_cli` and vendored plugin
|
|
165
|
+
skills (`impeccable`) stay exempt.
|
|
166
|
+
- **Hashed registry.** `tools/.clckernel-managed.json` is now `{ "kernelVersion", "files": [{ "path",
|
|
167
|
+
"sha256" }] }` and also covers the hook and the skill; `_changes.js`/`_changes.py` read both this and the
|
|
168
|
+
older list format, and `update` migrates it. Protected files are left out of it.
|
|
169
|
+
- **Every install/update write goes through `src/io.js`**, one write point that applies the ownership rule and
|
|
170
|
+
records the plan. The `update` summary now lists written, unchanged, protected, moved, removed, `.gitignore`
|
|
171
|
+
and `git config` changes, and exits 0 with a visible warning when files were protected. `update` rejects
|
|
172
|
+
unknown flags.
|
|
173
|
+
- **Old domain guards are moved only when intact.** A locally modified `tools/check_domain_data.js` or
|
|
174
|
+
`tools/check_test_calendar_sync.js` stays in `tools/` with a warning instead of being moved.
|
|
175
|
+
|
|
176
|
+
- Generated hooks run under `set -e` without `|| true`; audit orchestrators report a crashing guard as
|
|
177
|
+
FAILED.
|
|
178
|
+
- Hooks run each stack's external tools (ruff, pytest, rubocop, rspec, phpstan, golangci-lint, go test, cargo)
|
|
179
|
+
when available and print "not available, skipped" otherwise; Rails, Go, Laravel and Rust run the secret scan.
|
|
180
|
+
- Choosing another stack in the prompt selects a real adapter instead of only changing the project type.
|
|
181
|
+
- Agent-OS: the kernel installs only guards that hold for any Agent-OS (domain rules belong in the project's
|
|
182
|
+
`tools/guards/`); `check_symlinks` also fails a rule mirror that does not point to `AGENTS.md` (symlink or
|
|
183
|
+
identical copy); the generated `AGENTS.md` describes only the folders the repository has, and its Clean
|
|
184
|
+
Creation State rule is domain-neutral (a field without a real value stays empty or `null`).
|
|
185
|
+
- The CLI refuses missing targets and reserved words as directories, sets `core.hooksPath` only at the
|
|
186
|
+
repository root when unset or already `.githooks`, and `doctor` exits 1 when a check fails.
|
|
187
|
+
- `scan_secrets` redacts detected secrets in its output.
|
|
188
|
+
- Documentation, the website and generated `AGENTS.md` describe guards by what they check and drop claims the
|
|
189
|
+
code does not support.
|
|
190
|
+
|
|
191
|
+
### Fixed
|
|
192
|
+
|
|
193
|
+
- A fresh install no longer adds `.agents/skills/clc_forge_cli/`, `.clckernel.resolved.json` or
|
|
194
|
+
`.clc-forge.resolved.json` to `.gitignore`; each is added only when that artifact exists in the project.
|
|
195
|
+
- `check_scope.py` reads paths that start with a dot (`.agents/...`, `.clckernel.yaml`,
|
|
196
|
+
`.github/workflows/ci.yml`; extension-less dotfiles such as `` `.gitignore` `` in backticks) and no longer
|
|
197
|
+
truncates table cells (`| src/foo.js |` was read as `oo.js`) (sdds/final-sweep).
|
|
198
|
+
- Docs and website describe the real hook (`.githooks/pre-commit` calling `tools/audit.js --hook` /
|
|
199
|
+
`tools/audit.py --hook`, `.husky/pre-commit` only when Husky already runs the hooks), the real install
|
|
200
|
+
command (`npx clckernel` / `npx clckernel . --yes`; `start` is an agent command) and only real
|
|
201
|
+
`.clckernel.yaml` keys. The AGENTS.md command tables and the playbooks name the CLI options (`--change`,
|
|
202
|
+
`--dry-run`, `--add-guards`) and no longer say `start` materializes `.clckernel.yaml`; the READMEs gained
|
|
203
|
+
a "Known limitations" section (sdds/final-sweep).
|
|
204
|
+
- Install/update decide from the repository's own (`--local`) `core.hooksPath`: a global or system value
|
|
205
|
+
(a user-wide hooks dir) no longer blocks setting `.githooks` nor makes a frontend project look like Husky.
|
|
206
|
+
The local value is set and a note says a global `core.hooksPath` is configured (sdds/residual-fixes).
|
|
207
|
+
- `check_architecture.py` decides Django vs Clean Architecture per changed file, from its nearest project root
|
|
208
|
+
(`manage.py`, `pyproject.toml`, `setup.cfg`, `requirements*.txt`), so a Django app in `backend/` or
|
|
209
|
+
`apps/api/` gets the Django rules and a FastAPI part next to it keeps the layer rules (sdds/residual-fixes).
|
|
210
|
+
- `verify_tdd`: a file native to one verifier that matches `tdd.code` is handed to the other-language verifier
|
|
211
|
+
when both are installed (`.py` to `verify_tdd.js`, JS/TS to `verify_tdd.py`), so "Python tools tested by JS
|
|
212
|
+
tests" no longer fails `verify_tdd.py` for lack of a pytest test. With one verifier nothing changes
|
|
213
|
+
(sdds/residual-fixes).
|
|
214
|
+
- Website: no "100% Verified Code" claim; the file-tree hook example is the generated `.githooks/pre-commit`
|
|
215
|
+
(`audit.js --hook` / `audit.py --hook`, then external tools; `.husky/` only when Husky is active)
|
|
216
|
+
(sdds/residual-fixes).
|
|
217
|
+
- `scan_secrets.py` matches the assignment rules case-insensitively, as the JS guard always did, and splits
|
|
218
|
+
lines the same way, so both report identical findings.
|
|
219
|
+
- `check_custom`: Python glob translation, JS/Python glob parity and an infinite loop on empty regex matches.
|
|
220
|
+
- `check_architecture`: classifies layers by path segment and checks every imported name, including relative
|
|
221
|
+
imports.
|
|
222
|
+
- `check_migrations`: compares upgrade and downgrade to check that destructive upgrades are reversed.
|
|
223
|
+
- `check_db_efficiency`: flags only ORM-like calls inside loops, not `dict.get` or `requests.get`.
|
|
224
|
+
- `postgres_guard`: detects unsafe SQL passed to `execute()`.
|
|
225
|
+
- `check_ui_reuse`: skips test files and harness-owned `tools/` sources.
|
|
226
|
+
- `check_test_calendar_sync` reports drift instead of writing files from the hook (`--fix` keeps the old
|
|
227
|
+
behavior).
|
|
228
|
+
- Technology guards are run by the generated hook and discovered by `audit`.
|
|
229
|
+
- `update` prints success lines with a defined color.
|
|
230
|
+
|
|
231
|
+
### Deprecated
|
|
232
|
+
|
|
233
|
+
- The `clc-forge` and `create-clc-forge` binaries print a deprecation notice and will be removed in the next
|
|
234
|
+
major release; use `clckernel`.
|
|
235
|
+
- `.clc-forge.yml` / `.clc-forge.yaml` still load with a warning; rename them to `.clckernel.yaml`.
|
|
236
|
+
|
|
237
|
+
### Upgrade notes
|
|
238
|
+
|
|
239
|
+
- Run `clckernel update` in each existing project to refresh guards, the hook and the managed-files registry,
|
|
240
|
+
then review any `.clckernel.yaml` that now fails to parse.
|
|
241
|
+
- After pulling this repository on another machine, regenerate the local IDE mirrors (they are no longer
|
|
242
|
+
tracked) with `clckernel update`.
|
|
243
|
+
|
|
244
|
+
## [1.2.19]
|
|
245
|
+
|
|
246
|
+
- Previous release.
|
|
247
|
+
|
|
248
|
+
[Unreleased]: https://github.com/CarlosLeonCode/clc_forge/compare/v2.0.0...HEAD
|
|
249
|
+
[2.0.0]: https://github.com/CarlosLeonCode/clc_forge/compare/v1.2.19...v2.0.0
|
|
250
|
+
[1.2.19]: https://github.com/CarlosLeonCode/clc_forge/releases/tag/v1.2.19
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Carlos Leon Code
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|