gcf-aif-ext 0.2.4 → 0.2.7

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.
@@ -15,21 +15,22 @@ preconditions:
15
15
  - `gcf/` exists; `gcf/INDEX.md` lists the current subsystems
16
16
 
17
17
  forbidden_behaviors:
18
- - do not invent a new subsystem name when INDEX carries a synonym: reuse or ask (GCF-PRD §5.4)
18
+ - do not invent a new subsystem name when INDEX carries a synonym: reuse or ask
19
19
  - do not write numbers outside the feel slot envelopes
20
20
  - do not put `until:` in the frontmatter: it is a line annotation inside slots
21
21
  - do not fill a slot with a guess: an unknown goes to `gcf/open-questions.md`, marked D1 or D2
22
22
 
23
23
  workflow:
24
- 1. read `gcf/INDEX.md`; for a cand-NNN input read its backlog line, otherwise ask "into work now, or park in the backlog?" and on "park" append a candidate line and stop
25
- 2. route the requirement: ask "can an autotest accept this without a human playing?"; yes = hard, no or mixed = soft; state the route in one line and let the human veto
26
- 3. for a pure hard route: send the requirement to the normal AIF cycle, add any lasting prohibition to the subsystem's constraints, and stop - no card (GCF-PRD §6.3)
27
- 4. copy `templates/card.md` to `gcf/cards/<card-id>-<slug>.md`: the id keeps the candidate number, or takes the next free number for a fresh idea
28
- 5. fill the frontmatter: status proposed, route, system list from the INDEX vocabulary, depends from cards this feature builds on, source, created
29
- 6. fill the six slots with the human: behavior, contract, feel (comparison + envelopes), interactions, constraints, miss_criterion
30
- 7. when the card came from a candidate, delete that candidate line from `gcf/backlog.md`
31
- 8. run `ai-factory gcf index`, then `npx cnlp check`, and fix what they report
32
- 9. report the card path and the one question the playtest will answer
24
+ 1. read `gcf/INDEX.md`; for a cand-NNN input read its backlog line, otherwise ask "into work now, or park in the backlog?" and on "park" append a line in the backlog header format and stop
25
+ 2. for an `impl?` line ask the human first whether the mechanic already ships; for a `src-changed` line rebuild the candidate from `ai-factory gcf section` over its `src:` anchor
26
+ 3. route the requirement: ask "can an autotest accept this without a human playing?"; yes = hard, no or mixed = soft; state the route in one line, start from the line's `route:` reason, and let the human veto
27
+ 4. for a pure hard route: send the requirement to the normal AIF cycle, add any lasting prohibition to the subsystem's constraints, and stop - no card
28
+ 5. copy `templates/card.md` to `gcf/cards/<card-id>-<slug>.md`: the id keeps the candidate number, or takes the next free number for a fresh idea
29
+ 6. fill the frontmatter: status proposed, route, system list from the INDEX vocabulary, depends from cards this feature builds on, source, created
30
+ 7. fill the six slots with the human: behavior, contract, feel (comparison + envelopes), interactions, constraints, miss_criterion; ask each `gaps:` lens of the line here
31
+ 8. when the card came from a candidate, delete that candidate line from `gcf/backlog.md`
32
+ 9. run `ai-factory gcf index`, then `npx cnlp check`, and fix what they report
33
+ 10. report the card path and the one question the playtest will answer
33
34
 
34
35
  invocation:
35
36
  - run when work starts on a feature or the user names a candidate to materialize
@@ -21,7 +21,7 @@ forbidden_behaviors:
21
21
 
22
22
  workflow:
23
23
  1. run `ai-factory gcf anchor <file>` and use the printed anchors in every finding
24
- 2. play each completeness lens as its own expert over each mechanic: state, input, feedback, refusal, boundaries, persistence (GCF-PRD §11.4)
24
+ 2. play each completeness lens as its own expert over each mechanic: state, input, feedback, refusal, boundaries, persistence
25
25
  3. play the coherence lenses over the whole document: interaction matrix (which mechanics write the same state), loop closure, progression pressure, economy balance, one-word-per-concept dictionary
26
26
  4. cross-examine: for each pair of findings that touch one anchor, check whether they contradict each other and merge or escalate
27
27
  5. classify each finding: D2 gets a proposed default the human can skim; D1 is a principal fork and carries the question, the anchors and a proposed answer
@@ -16,23 +16,34 @@ preconditions:
16
16
  - the sequential pass below is the correctness reference; the parallel fan-out belongs to the harness
17
17
 
18
18
  forbidden_behaviors:
19
- - do not create card files: candidates are backlog lines, a card materializes only at pull (GCF-PRD §5.2)
19
+ - do not create card files: candidates are backlog lines, and a card file materializes only when `/gcf-card` pulls a candidate into work
20
20
  - do not write a pillar into PILLARS.md: pillar candidates go to open-questions as D1
21
21
  - do not put an extracted unit into the backlog without a verbatim quote from its section: no quote means source inferred, and inferred goes to open-questions
22
- - do not read `gcf/source/` files whole after anchoring: address sections by anchor
22
+ - do not read `gcf/source/` files whole after anchoring: read a section with `ai-factory gcf section <file> <anchor>`
23
+ - do not turn a count, a hard limit or a performance threshold into an envelope: only a tunable value gets a spread
24
+
25
+ outputs:
26
+ - a backlog line: `- <cand-id> | <name> | route: soft|hard (<why>) | sys: <system> | deps: <ids or -> | src: GDD#<anchor> | q: "<verbatim quote>" | <description>`
27
+ - optional backlog fields go before the description, only when they apply: `gaps: <lenses>`, `impl?`, `src-changed`, `orphan`
28
+ - a question record in `gcf/open-questions.md`: `- id: q-NNN`, then `lens:`, `sections:`, `sys:`, `class: D1|D2`, `question:`, `proposed:`, each on its own indented line
29
+ - a D2 record adds `assumed:` (what the agent took as given) and `until:` (when it expires, in the `verdict(card-id)`, `retune(system)` or `manual(text)` form)
23
30
 
24
31
  workflow:
25
- 1. run `ai-factory gcf anchor <file>`; on a re-import read the printed delta and jump to step 9
26
- 2. extract per aspect, one pass each, citing a quote and an anchor per unit: pillar candidates; subsystems (nouns); feature candidates (player verbs); numbers and progressions; platform and audience constraints
27
- 3. verify provenance: a unit whose quote is not found verbatim in its section becomes `inferred` and moves to the question list
28
- 4. turn each exact number into an envelope: value ± the `envelope_default_spread` from `gcf/config.yml`, marked assumed, listed for the human's skim
29
- 5. run the completeness lenses per candidate and write gaps into the candidate line as `gaps:` notes - questions at import time go only to document-level findings
30
- 6. run the coherence lenses over the whole set; build the interaction matrix and record `deps:` between candidates from it
31
- 7. write the outputs: candidate lines into `gcf/backlog.md` (route guessed per GCF-PRD §6, human vetoes later); D1 and D2 records into `gcf/open-questions.md`; then run `ai-factory gcf index`
32
- 8. mark a candidate whose nouns match the `purpose` or the `code` paths of an existing systems doc with `impl?` in its backlog line: on an adopted codebase the mechanic may already ship, and the human is the one who deletes the line
33
- 9. on a re-import, apply the delta classes (GCF-PRD §11.6): added -> new candidates; changed -> mark `src-changed`, and D1 when an open card or a collapsed system cites the anchor; removed -> orphan marks; renamed -> update anchors in place
34
- 10. report the package, ordered: D1 questions (the main product), pillar candidates, dictionary conflicts, backlog summary with the top crossing candidates, D2 assumptions
35
- 11. state the next step: answer D1s, confirm pillars, then pull the first candidate with `/gcf-card`
32
+ 1. when `gcf/systems/` is empty and the repository already holds game code, tell the human `impl?` marks are blind without `/gcf-adopt`, and offer to run it first
33
+ 2. run `ai-factory gcf anchor <file>`: it prints each anchor with its line range; on a re-import read the printed delta and jump to step 11
34
+ 3. extract per aspect, one pass each, citing a quote and an anchor per unit: pillar candidates; subsystems (nouns); feature candidates (player verbs); numbers and progressions; platform and audience constraints
35
+ 4. treat the GDD's own open-questions section, and any TBD or TODO, as D1 records with lens `gdd-open` and the anchor in `sections:`, not as candidates
36
+ 5. copy each quote verbatim from the section `ai-factory gcf section` prints; write a unit with no such quote as a D1 record with lens `provenance`, not a candidate
37
+ 6. classify each number before an envelope: a tunable value (duration, speed, damage, cost, rate) gets value ± `envelope_default_spread` from `gcf/config.yml`
38
+ 7. round both envelope bounds of an integer to integers, at least 1 apart from the value; leave counts (50 levels), hard limits and performance thresholds exact
39
+ 8. write each envelope as a D2 record with `assumed:` and `until: manual(materialization of <cand-id>)`; an exact limit or threshold goes into the candidate description and leans the route to hard
40
+ 9. route each candidate: hard when the agent can verify acceptance alone (data format, protocol, structural invariant, numeric performance threshold), soft when acceptance is a playtest; doubt -> soft
41
+ 10. run the completeness lenses per candidate into `gaps:`, then the coherence lenses over the set; build the interaction matrix and record `deps:` between candidates from it
42
+ 11. on a re-import apply the delta: added -> new candidates; changed -> `src-changed`, D1 when an open card or collapsed system cites the anchor; removed -> `orphan`; renamed -> rewrite the anchor in place
43
+ 12. mark a candidate whose nouns match the `purpose` or the `code` paths of an existing systems doc with `impl?`: the mechanic may already ship, and the human deletes the line
44
+ 13. write candidate lines into `gcf/backlog.md` and records into `gcf/open-questions.md`; run `ai-factory gcf quotes`, move each flagged line to a D1 with lens `provenance`, then run `ai-factory gcf index`
45
+ 14. report the package, ordered: D1 questions (the main product), pillar candidates, dictionary conflicts, backlog summary with the top crossing candidates, D2 assumptions; say when `impl?` was blind
46
+ 15. state the next step: answer D1s, confirm pillars, then pull the first candidate with `/gcf-card`
36
47
 
37
48
  invocation:
38
49
  - run when a GDD arrives or changes
@@ -16,17 +16,18 @@ preconditions:
16
16
 
17
17
  forbidden_behaviors:
18
18
  - do not overwrite an existing gcf/ tree: re-running repairs missing files only
19
- - do not write pillars the human did not confirm: pillar authorship is human (GCF-PRD §5.3)
19
+ - do not write pillars the human did not confirm: pillar authorship is human
20
20
  - pillar count <= 7, and do not pad the list to reach 7
21
21
 
22
22
  workflow:
23
- 1. run `ai-factory gcf init` and report which files it created
24
- 2. read `gcf/PILLARS.md`; when it still holds template content, start the interview
25
- 3. ask the human for the game's core promise, then for 2..7 pillars: each needs a statement, a negative invariant and a review question
26
- 4. rewrite `gcf/PILLARS.md` with the confirmed pillars in the pillars record-list form
27
- 5. run `npx cnlp check` and fix form issues it reports
28
- 6. ask the human to run `ai-factory gcf hooks-install`: the commit gate is theirs to arm
29
- 7. state the next step: fill `gcf/backlog.md` with candidates by hand or import a GDD
23
+ 1. when `.ai-factory/DESCRIPTION.md` is absent, tell the human to run `/aif` first: `aif-plan` reads it, and a card cannot reach a plan without it
24
+ 2. run `ai-factory gcf init` and report which files it created; it writes no `PILLARS.md`, so no example ever reads as the game's truth
25
+ 3. when the human is about to import a GDD, leave `PILLARS.md` absent: the import proposes pillar candidates, and the interview runs after it
26
+ 4. otherwise ask the human for the game's core promise, then for 2..7 pillars: each needs a statement, a negative invariant and a review question
27
+ 5. write `gcf/PILLARS.md` with the confirmed pillars in the record-list form of `.ai-factory/extensions/gcf-aif-ext/templates/PILLARS.md`
28
+ 6. run `npx cnlp check` and fix form issues it reports
29
+ 7. ask the human to run `ai-factory gcf hooks-install`: the commit gate is theirs to arm
30
+ 8. state the next step: fill `gcf/backlog.md` with candidates by hand or import a GDD with `/gcf-ingest`
30
31
 
31
32
  invocation:
32
33
  - run when the user asks to set up gcf in a project
@@ -22,7 +22,7 @@ forbidden_behaviors:
22
22
  workflow:
23
23
  1. with no arguments: run `ai-factory gcf playtest` and stop - that list is the session's playtest sheet
24
24
  2. read the card; ask the human the miss_criterion question and record the answer in one line
25
- 3. for `tune` at tune_count 3: refuse and present the fork - kill, or redesign the envelope and reset the counter with a note (GCF-PRD §7.2)
25
+ 3. for `tune` at tune_count 3: refuse and present the fork - kill, or redesign the envelope and reset the counter with a note
26
26
  4. for `keep`: rewrite the behavior slot into 1 line per observable behavior and strip contract lines down to paths and entry points - the collapse copies lines verbatim, so compress them in the card first
27
27
  5. run `ai-factory gcf verdict <card-id> <verdict> --note "<answer or reason>"`
28
28
  6. for `keep` on a card touching 2 or more subsystems: read each updated systems doc and report a contradiction between constraints as a D1 question instead of finishing silently
@@ -1,4 +1,5 @@
1
1
  # Backlog — candidates, one line each. Order = priority, owned by the human.
2
- # Format: - <cand-id> | <name> | route: soft|hard | sys: <system> | deps: <ids or -> | src: <GDD#id|manual> | <one-line description>
3
-
4
- - cand-001 | example move | route: soft | sys: example-system | deps: - | src: manual | the move this template illustrates
2
+ # Format: - <cand-id> | <name> | route: soft|hard (<why, one line>) | sys: <system> | deps: <ids or -> | src: <GDD#anchor|manual> | q: "<verbatim quote>" | [gaps: <lenses>] | [impl?] | [src-changed] | [orphan] | <one-line description>
3
+ # q: is required with a GDD# src (`ai-factory gcf quotes` checks it); bracketed fields appear only when they apply.
4
+ # Example (a comment, not a candidate):
5
+ # - cand-001 | dash | route: soft (acceptance is the feel of the move) | sys: movement | deps: - | src: GDD#3f2a9c1e | q: "a short dash through enemies" | gaps: refusal, boundaries | a short invulnerable dash