gcf-aif-ext 0.2.5 → 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.
Files changed (55) hide show
  1. package/README.md +7 -5
  2. package/commands/gcf.js +408 -73
  3. package/extension.json +1 -1
  4. package/hooks/pre-commit.js +47 -29
  5. package/injections/commit-status.md +1 -0
  6. package/injections/plan-context.md +3 -2
  7. package/injections/review-pillars.md +1 -1
  8. package/lib/anchors.js +110 -10
  9. package/lib/audit-core.js +175 -50
  10. package/lib/bundle.js +275 -0
  11. package/lib/context.js +55 -36
  12. package/lib/design-check.js +580 -0
  13. package/lib/design.js +179 -0
  14. package/lib/frontmatter.js +2 -1
  15. package/lib/gcf-paths.js +14 -3
  16. package/lib/git.js +85 -4
  17. package/lib/id.js +8 -14
  18. package/lib/index-gen.js +68 -16
  19. package/lib/ledger.js +92 -0
  20. package/lib/linter.js +91 -42
  21. package/lib/migrate.js +345 -0
  22. package/lib/playtest-list.js +1 -1
  23. package/lib/safe-path.js +23 -4
  24. package/lib/systems-doc.js +70 -0
  25. package/lib/transitions.js +1 -3
  26. package/lib/unit-ops.js +270 -0
  27. package/lib/validate-card.js +59 -14
  28. package/lib/verdict-fs.js +173 -96
  29. package/package.json +1 -1
  30. package/profiles/game.md +68 -0
  31. package/profiles/glossary.md +37 -0
  32. package/profiles/pillars.md +2 -1
  33. package/profiles/unit-constraint.md +42 -0
  34. package/profiles/unit-entity.md +38 -0
  35. package/profiles/unit-mechanic.md +106 -0
  36. package/profiles/unit-resource.md +86 -0
  37. package/profiles/unit-rule.md +42 -0
  38. package/schemas/card.schema.json +23 -7
  39. package/skills/gcf-adopt/SKILL.md +3 -3
  40. package/skills/gcf-audit/SKILL.md +4 -3
  41. package/skills/gcf-card/SKILL.md +26 -16
  42. package/skills/gcf-debate/SKILL.md +17 -14
  43. package/skills/gcf-ingest/SKILL.md +43 -16
  44. package/skills/gcf-init/SKILL.md +9 -8
  45. package/skills/gcf-verdict/SKILL.md +7 -6
  46. package/skills/gcf-vision/SKILL.md +17 -11
  47. package/templates/PILLARS.md +2 -0
  48. package/templates/backlog.md +2 -4
  49. package/templates/card.md +27 -10
  50. package/templates/cnlp.config.json +0 -1
  51. package/templates/design.md +59 -0
  52. package/templates/game.md +24 -0
  53. package/templates/glossary.md +11 -0
  54. package/templates/system.md +1 -1
  55. package/profiles/card.md +0 -65
package/templates/card.md CHANGED
@@ -1,29 +1,46 @@
1
1
  ---
2
- schema: 1
3
- id: card-000
4
- slug: example
2
+ schema: 2
3
+ id: example
4
+ type: mechanic
5
5
  status: proposed
6
- route: soft
7
6
  system: [example-system]
8
7
  depends: []
8
+ pillars: []
9
9
  source: manual
10
10
  tune_count: 0
11
11
  built_at: null
12
12
  created: "2026-01-01"
13
13
  ---
14
14
 
15
+ intent:
16
+ - the player crosses short gaps without breaking the pace of a fight
17
+
15
18
  behavior:
16
- - player presses X -> the character does Y -> the screen shows Z
19
+ - input: the player presses X
20
+ state: the character moves a short distance forward
21
+ feedback: the screen shows a short trail behind the character
22
+
23
+ refusal:
24
+ - pressing X during the cooldown does nothing and plays no sound
25
+
26
+ boundaries:
27
+ - a dash into a wall stops at the wall
28
+
29
+ persistence: none: a dash leaves no state behind
30
+
31
+ feel_like: like Hades, not like Celeste
32
+
33
+ feel:
34
+ - name: duration
35
+ envelope: 0.15..0.25 s
36
+
37
+ - name: cooldown
38
+ envelope: 0.4..0.8 s
17
39
 
18
40
  contract:
19
41
  - new components and systems live under Assets/Scripts/Example/
20
42
  - data flows from input to simulation, never backwards
21
43
 
22
- feel:
23
- - like Hades, not like Celeste
24
- - duration 0.15..0.25 s
25
- - cooldown 0.4..0.8 s
26
-
27
44
  interactions:
28
45
  - none: this example crosses no existing mechanic
29
46
 
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "profiles": ".ai-factory/extensions/gcf-aif-ext/profiles",
3
3
  "corpus": [
4
- { "profile": "card", "glob": "gcf/cards/*.md" },
5
4
  { "profile": "system", "glob": "gcf/systems/*.md" },
6
5
  { "profile": "pillars", "glob": "gcf/PILLARS.md" }
7
6
  ]
@@ -0,0 +1,59 @@
1
+ # example-system
2
+
3
+ purpose:
4
+ - holds the example mechanic and the rule it rests on
5
+
6
+ ## example-dash
7
+
8
+ type: mechanic
9
+ title: dash
10
+ route: soft (acceptance is the feel of the move)
11
+ system: [example-system]
12
+ milestone: TBD
13
+ pillars: TBD
14
+ depends: [example-grid]
15
+ source: manual
16
+
17
+ intent:
18
+ - the player crosses short gaps without breaking the pace of a fight
19
+
20
+ behavior:
21
+ - input: the player presses X
22
+ state: the character moves a short distance forward
23
+ feedback: TBD
24
+
25
+ refusal:
26
+ - pressing X during the cooldown does nothing
27
+
28
+ boundaries: TBD
29
+
30
+ persistence: none: a dash leaves no state behind
31
+
32
+ feel_like: like Hades, not like Celeste
33
+
34
+ feel:
35
+ - name: duration
36
+ envelope: 0.15..0.25 s
37
+
38
+ constraints:
39
+ - do not add a new input binding
40
+
41
+ miss_criterion: TBD
42
+
43
+ ## example-grid
44
+
45
+ type: rule
46
+ title: example grid
47
+ route: hard (a structural invariant, unit-testable)
48
+ system: [example-system]
49
+ milestone: TBD
50
+ pillars: TBD
51
+ depends: none
52
+ source: manual
53
+
54
+ statement:
55
+ - grid cells per side in {4, 6, 8}
56
+ - the grid never scrolls
57
+
58
+ check:
59
+ - a unit test over the level data
@@ -0,0 +1,24 @@
1
+ logline: a short-session puzzle about placing tiles on a small board
2
+
3
+ platforms:
4
+ - web portals and mobile browsers, touch and mouse
5
+
6
+ audience:
7
+ - TBD
8
+
9
+ references:
10
+ - like a tabletop logic puzzle, not like a match-three game
11
+
12
+ scope_in:
13
+ - the core puzzle with one short win animation
14
+
15
+ scope_out:
16
+ - story, cutscenes and dialogue
17
+
18
+ milestones:
19
+ - name: web
20
+ goal: validate the core puzzle on a live audience
21
+ content: campaign levels = 50
22
+
23
+ - name: steam
24
+ goal: a long campaign once the web version proves the puzzle keeps players
@@ -0,0 +1,11 @@
1
+ terms:
2
+ - term: tile tray
3
+ means: the supply of unplaced tiles the player picks from
4
+ not: hand, table
5
+
6
+ - term: void cell
7
+ means: a cell a shaped board leaves out
8
+ not: blocked cell
9
+
10
+ units:
11
+ - coins: the soft currency
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  system: example-system
3
- updated_by: card-000
3
+ updated_by: example
4
4
  ---
5
5
 
6
6
  purpose:
package/profiles/card.md DELETED
@@ -1,65 +0,0 @@
1
- ---
2
- name: card
3
- description: The CNL-P profile of a GCF feature card — the six slots a card body carries, in order.
4
- ---
5
-
6
- format: cnlp-format.md
7
-
8
- mood: declarative
9
-
10
- headings:
11
- - none: the body is flat and the document is named by its frontmatter or its fixed path
12
-
13
- frontmatter_fields:
14
- - schema
15
- - id
16
- - slug
17
- - status
18
- - route
19
- - system
20
- - depends
21
- - source
22
- - tune_count
23
- - built_at
24
- - created
25
-
26
- lexicon_exempt:
27
- - none: every field of a card body is read at planning time and must stay unambiguous
28
-
29
- sections:
30
- - key: behavior
31
- form: bullet-list
32
- required: yes
33
- note: player input -> state change -> feedback, one observable statement per line
34
-
35
- - key: contract
36
- form: bullet-list
37
- required: yes
38
- note: entities, components and data flows the feature adds; paths and entry points, never member lists or values
39
-
40
- - key: feel
41
- form: bullet-list
42
- required: yes
43
- note: a comparison line (like X, not like Y) plus envelope lines; envelopes are the only legal numbers in gcf documents
44
-
45
- - key: interactions
46
- form: bullet-list
47
- required: yes
48
- note: existing mechanics this feature crosses; a soft line may end with an "[until: ...]" annotation
49
-
50
- - key: constraints
51
- form: bullet-list
52
- required: yes
53
- note: negative constraints, one prohibition per line, checkable by an analyzer or a reviewer
54
-
55
- - key: miss_criterion
56
- form: scalar
57
- required: yes
58
- note: the one question the game in hand answers; the human answers it at the verdict
59
-
60
- custom_sections:
61
- - none: a card block that is not listed above is prose looking for a home
62
-
63
- enforcement:
64
- - `npx cnlp check`, over the files a `cnlp.config.json` corpus entry maps to this profile
65
- - frontmatter is validated separately by `schemas/card.schema.json` in the gcf pre-commit hook