gcf-harness-aif-ext 0.1.1 → 0.3.0
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/README.md +30 -3
- package/commands/harness.js +3 -3
- package/extension.json +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -6,17 +6,44 @@ The harness turns policy-as-text into an executable pipeline. It has **no memory
|
|
|
6
6
|
|
|
7
7
|
## Requirements
|
|
8
8
|
|
|
9
|
-
- [`gcf-aif-ext`](../gcf-aif-ext) `^0.2.0` installed, with a `gcf/` tree in the project — declared as a peer dependency, and `gcf-harness
|
|
9
|
+
- [`gcf-aif-ext`](../gcf-aif-ext) `^0.2.0` installed, with a `gcf/` tree in the project — declared as a peer dependency, and `gcf-harness init` refuses when the `gcf` command is not registered
|
|
10
10
|
- Claude Code 2.1.270+ (hooks, dynamic workflows)
|
|
11
11
|
- AI Factory 2.x, Node.js ≥ 22.14
|
|
12
12
|
|
|
13
13
|
## Install
|
|
14
14
|
|
|
15
|
+
Install into a project that already has the core, from npm or a local checkout:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
ai-factory extension add gcf-aif-ext # the core, if not yet installed
|
|
19
|
+
ai-factory extension add gcf-harness-aif-ext # npm
|
|
20
|
+
# ai-factory extension add ../GCF/packages/gcf-harness-aif-ext # local checkout
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
This installs the `gcf-run` and `gcf-run-ingest` skills and registers the `gcf-harness` command. Then initialize the harness in the project — like `gcf init`, once per project:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
ai-factory gcf-harness init # per project: .claude/settings.json + .gitignore
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
It is **per project**, not global — run it again in every game repository: it adds the readset-guard `PreToolUse` entry to the project's `.claude/settings.json` (never `~/.claude`) and `.gcf-session/` to `.gitignore`. It is idempotent, refuses when the `gcf` command is not registered, and refuses to rewrite a `settings.json` it cannot parse. It is a separate step for the same reason as `gcf hooks-install`: an AI Factory manifest cannot install Claude Code hooks.
|
|
30
|
+
|
|
31
|
+
## Upgrade
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
ai-factory extension update gcf-harness-aif-ext
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Updating keeps the hook entry valid — it points into the extension's install directory, which an update refreshes in place.
|
|
38
|
+
|
|
39
|
+
To remove the extension:
|
|
40
|
+
|
|
15
41
|
```bash
|
|
16
|
-
ai-factory extension
|
|
17
|
-
ai-factory gcf-harness install # registers the readset-guard hook
|
|
42
|
+
ai-factory extension remove gcf-harness-aif-ext
|
|
18
43
|
```
|
|
19
44
|
|
|
45
|
+
Removal does not touch `.claude/settings.json`: delete the `PreToolUse` entry whose command ends in `# gcf-readset-guard` by hand, or every Read, Grep and Glob will report a hook error.
|
|
46
|
+
|
|
20
47
|
## What it adds
|
|
21
48
|
|
|
22
49
|
**`/gcf-run <card-id…>`** — drives a card from the backlog to `built`, with every gate checked *before* the tokens are spent: the audit ritual, collapsed dependencies, the tune limit, the WIP cap, the context budget. It stops at `built` and prints the playtest list — the verdict belongs to the human, and there is no stage past the build.
|
package/commands/harness.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// `ai-factory gcf-harness
|
|
1
|
+
// `ai-factory gcf-harness init` — registers the readset-guard PreToolUse hook in the
|
|
2
2
|
// project's .claude/settings.json (the AIF manifest cannot install Claude Code hooks —
|
|
3
3
|
// same decision as gcf hooks-install for git hooks). Idempotent by marker comment.
|
|
4
4
|
import { readFile, writeFile, mkdir, appendFile } from 'node:fs/promises';
|
|
@@ -23,8 +23,8 @@ function coreMissing(program) {
|
|
|
23
23
|
export function register(program) {
|
|
24
24
|
const harness = program.command('gcf-harness').description('GCF harness setup');
|
|
25
25
|
|
|
26
|
-
harness.command('
|
|
27
|
-
.description('
|
|
26
|
+
harness.command('init')
|
|
27
|
+
.description('Initialize the harness in this project: readset-guard hook in .claude/settings.json (idempotent)')
|
|
28
28
|
.action(async () => {
|
|
29
29
|
if (coreMissing(program)) {
|
|
30
30
|
throw new Error('gcf-aif-ext is not installed: the harness drives `ai-factory gcf …` — run `ai-factory extension add gcf-aif-ext` first');
|
package/extension.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://raw.githubusercontent.com/lee-to/ai-factory/2.x/schemas/extension.schema.json",
|
|
3
3
|
"name": "gcf-harness-aif-ext",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.3.0",
|
|
5
5
|
"description": "GCF orchestration harness for Claude Code: one-command card pipeline, readset guard",
|
|
6
6
|
"skills": [
|
|
7
7
|
"skills/gcf-run",
|