gcf-aif-ext 0.2.7 → 0.4.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 (63) hide show
  1. package/README.md +54 -10
  2. package/commands/gcf.js +452 -30
  3. package/extension.json +22 -5
  4. package/hooks/pre-commit.js +69 -41
  5. package/injections/commit-status.md +7 -4
  6. package/injections/plan-context.md +8 -4
  7. package/injections/review-pillars.md +4 -3
  8. package/lib/anchors.js +60 -35
  9. package/lib/audit-core.js +172 -55
  10. package/lib/bundle.js +278 -0
  11. package/lib/context.js +25 -23
  12. package/lib/design-check.js +631 -0
  13. package/lib/design.js +179 -0
  14. package/lib/gcf-paths.js +13 -2
  15. package/lib/git.js +63 -0
  16. package/lib/id.js +7 -15
  17. package/lib/inbox.js +54 -0
  18. package/lib/index-gen.js +62 -13
  19. package/lib/ledger.js +94 -0
  20. package/lib/linter.js +17 -5
  21. package/lib/live.js +179 -0
  22. package/lib/migrate.js +345 -0
  23. package/lib/plan-check.js +31 -0
  24. package/lib/playtest-list.js +9 -5
  25. package/lib/systems-doc.js +85 -0
  26. package/lib/transitions.js +36 -21
  27. package/lib/unit-ops.js +297 -0
  28. package/lib/validate-item.js +244 -0
  29. package/lib/verdict-fs.js +112 -165
  30. package/lib/work-ops.js +727 -0
  31. package/package.json +1 -1
  32. package/profiles/game.md +68 -0
  33. package/profiles/glossary.md +37 -0
  34. package/profiles/pillars.md +3 -2
  35. package/profiles/system.md +1 -1
  36. package/profiles/unit-constraint.md +52 -0
  37. package/profiles/unit-entity.md +48 -0
  38. package/profiles/unit-mechanic.md +111 -0
  39. package/profiles/unit-resource.md +91 -0
  40. package/profiles/unit-rule.md +52 -0
  41. package/schemas/item.schema.json +105 -0
  42. package/skills/gcf-adopt/SKILL.md +3 -3
  43. package/skills/gcf-audit/SKILL.md +7 -6
  44. package/skills/gcf-card/SKILL.md +31 -17
  45. package/skills/gcf-debate/SKILL.md +17 -14
  46. package/skills/gcf-ingest/SKILL.md +39 -23
  47. package/skills/gcf-init/SKILL.md +5 -5
  48. package/skills/gcf-triage/SKILL.md +35 -0
  49. package/skills/gcf-verdict/SKILL.md +19 -15
  50. package/skills/gcf-vision/SKILL.md +17 -11
  51. package/templates/PILLARS.md +2 -0
  52. package/templates/backlog.md +2 -5
  53. package/templates/cnlp.config.json +0 -1
  54. package/templates/config.yml +7 -0
  55. package/templates/design.md +59 -0
  56. package/templates/game.md +24 -0
  57. package/templates/glossary.md +11 -0
  58. package/templates/item.md +58 -0
  59. package/templates/system.md +1 -1
  60. package/lib/validate-card.js +0 -82
  61. package/profiles/card.md +0 -65
  62. package/schemas/card.schema.json +0 -30
  63. package/templates/card.md +0 -34
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gcf-aif-ext",
3
- "version": "0.2.7",
3
+ "version": "0.4.0",
4
4
  "description": "Game Context Framework for AI Factory",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -0,0 +1,68 @@
1
+ ---
2
+ name: game
3
+ description: The CNL-P profile of gcf/game.md — the vision, the scope and the milestones the design units are planned against.
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 fixed path
12
+
13
+ frontmatter_fields:
14
+ - none: the file is a singleton at a fixed path and carries no machine fields
15
+
16
+ lexicon_exempt:
17
+ - none: nothing is exempt in the document that bounds the scope
18
+
19
+ sections:
20
+ - key: logline
21
+ form: scalar
22
+ required: yes
23
+ note: the game in one line
24
+
25
+ - key: platforms
26
+ form: bullet-list
27
+ required: yes
28
+ note: platform and input, one per line
29
+
30
+ - key: audience
31
+ form: bullet-list
32
+ required: yes
33
+ note: who plays, one group per line
34
+
35
+ - key: references
36
+ form: bullet-list
37
+ required: no
38
+ note: "like X, not like Y", one reference per line
39
+
40
+ - key: scope_in
41
+ form: bullet-list
42
+ required: yes
43
+ note: what the game holds
44
+
45
+ - key: scope_out
46
+ form: bullet-list
47
+ required: yes
48
+ note: what the game does not hold, or not in this version
49
+
50
+ - key: milestones
51
+ form: record-list
52
+ required: yes
53
+ record_keys: name, goal
54
+ optional_record_keys: content
55
+ note: the closed vocabulary of a unit's milestone field; content is a volume written as a comparison
56
+
57
+ - key: provenance
58
+ form: record-list
59
+ required: no
60
+ record_keys: slot
61
+ optional_record_keys: src, quote, answer, assumed
62
+ note: per slot, a verbatim quote with its anchor when the file came from a GDD
63
+
64
+ custom_sections:
65
+ - none: a block that is not listed above belongs to a unit or to PILLARS.md
66
+
67
+ enforcement:
68
+ - `ai-factory gcf design check` resolves every unit's milestone against this file
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: glossary
3
+ description: The CNL-P profile of gcf/glossary.md — one word per concept, the synonyms it forbids, and the project's own units of measure.
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 fixed path
12
+
13
+ frontmatter_fields:
14
+ - none: the file is a singleton at a fixed path and carries no machine fields
15
+
16
+ lexicon_exempt:
17
+ - none: the glossary is the lexicon of the project
18
+
19
+ sections:
20
+ - key: terms
21
+ form: record-list
22
+ required: yes
23
+ record_keys: term, means
24
+ optional_record_keys: not
25
+ note: a term the human confirmed, what it means, and the words that may not name it
26
+
27
+ - key: units
28
+ form: bullet-list
29
+ required: no
30
+ note: units of measure the project adds to the closed list, one per line as "<unit>: <what it measures>"
31
+
32
+ custom_sections:
33
+ - none: a block that is not listed above belongs to a unit
34
+
35
+ enforcement:
36
+ - `ai-factory gcf design check` refuses a forbidden synonym in gcf/design/ and in a card (M4)
37
+ - quoted text is data: a GDD quote keeps the designer's own word
@@ -21,11 +21,12 @@ sections:
21
21
  form: record-list
22
22
  required: yes
23
23
  record_keys: statement, invariant, review_question
24
- note: pillar count <= 7 and the token budget are enforced by the gcf audit core, not the checker
24
+ optional_record_keys: id
25
+ note: pillar count <= 7 and the token budget are enforced by the gcf audit core; id is the slug a design unit cites in pillars:
25
26
 
26
27
  custom_sections:
27
28
  - none: a pillar that needs more than its three keys is not a pillar yet
28
29
 
29
30
  enforcement:
30
- - `npx cnlp check`, over the file a `cnlp.config.json` corpus entry maps to this profile
31
+ - `npx --yes cnlp-kit check`, over the file a `cnlp.config.json` corpus entry maps to this profile
31
32
  - `ai-factory gcf audit` checks the count and token budget
@@ -52,5 +52,5 @@ custom_sections:
52
52
  - none: a fact that fits no block above belongs to code or to a card, not here
53
53
 
54
54
  enforcement:
55
- - `npx cnlp check`, over the files a `cnlp.config.json` corpus entry maps to this profile
55
+ - `npx --yes cnlp-kit check`, over the files a `cnlp.config.json` corpus entry maps to this profile
56
56
  - the gcf P2 linter adds its own forbidden-content patterns on top in the pre-commit hook
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: unit-constraint
3
+ description: The CNL-P profile of a GCF design unit of type constraint — a platform, performance or size threshold, accepted by a measurement.
4
+ ---
5
+
6
+ format: cnlp-format.md
7
+
8
+ mood: declarative
9
+
10
+ headings:
11
+ - none: the body is flat; the `## <id>` line and the header fields above the blocks name the unit
12
+
13
+ frontmatter_fields:
14
+ - none: a constraint never becomes a card, so its header lives above the blocks in design/
15
+
16
+ lexicon_exempt:
17
+ - none: every block is read when the constraint is planned and measured
18
+
19
+ sections:
20
+ - key: threshold
21
+ form: bullet-list
22
+ required: yes
23
+ note: one comparison per line, "<subject> <op> <value> <unit>"
24
+
25
+ - key: measure
26
+ form: bullet-list
27
+ required: yes
28
+ note: how the threshold is measured and on what - device, build, scene
29
+
30
+ - key: tuning
31
+ form: bullet-list
32
+ required: no
33
+ note: work stage only - one verdict remark per tune, read before the rebuild
34
+
35
+ - key: notes
36
+ form: bullet-list
37
+ required: no
38
+ note: work stage only - the operator's answers and delivered files, one per unblock
39
+
40
+ - key: provenance
41
+ form: record-list
42
+ required: no
43
+ record_keys: slot
44
+ optional_record_keys: src, quote, answer, assumed
45
+ note: per slot, a verbatim quote with its anchor, a human answer, or a D2 assumption
46
+
47
+ custom_sections:
48
+ - none: a block that is not listed above is prose looking for a home
49
+
50
+ enforcement:
51
+ - `ai-factory gcf design check`, over the units in gcf/design/
52
+ - the gcf pre-commit hook runs the same check and refuses a commit with a blocking finding
@@ -0,0 +1,48 @@
1
+ ---
2
+ name: unit-entity
3
+ description: The CNL-P profile of a GCF design unit of type entity — the shape of a data noun before code holds it.
4
+ ---
5
+
6
+ format: cnlp-format.md
7
+
8
+ mood: declarative
9
+
10
+ headings:
11
+ - none: the body is flat; the `## <id>` line and the header fields above the blocks name the unit
12
+
13
+ frontmatter_fields:
14
+ - none: an entity never becomes a card, so its header lives above the blocks in design/
15
+
16
+ lexicon_exempt:
17
+ - none: every block is read when the entity is planned and coded
18
+
19
+ sections:
20
+ - key: fields
21
+ form: record-list
22
+ required: yes
23
+ record_keys: name, holds
24
+ note: one record per field - what it holds, never its allowed values, which belong to a rule
25
+
26
+ - key: tuning
27
+ form: bullet-list
28
+ required: no
29
+ note: work stage only - one verdict remark per tune, read before the rebuild
30
+
31
+ - key: notes
32
+ form: bullet-list
33
+ required: no
34
+ note: work stage only - the operator's answers and delivered files, one per unblock
35
+
36
+ - key: provenance
37
+ form: record-list
38
+ required: no
39
+ record_keys: slot
40
+ optional_record_keys: src, quote, answer, assumed
41
+ note: per slot, a verbatim quote with its anchor, a human answer, or a D2 assumption
42
+
43
+ custom_sections:
44
+ - none: a block that is not listed above is prose looking for a home
45
+
46
+ enforcement:
47
+ - `ai-factory gcf design check`, over the units in gcf/design/
48
+ - the gcf pre-commit hook runs the same check and refuses a commit with a blocking finding
@@ -0,0 +1,111 @@
1
+ ---
2
+ name: unit-mechanic
3
+ description: The CNL-P profile of a GCF design unit of type mechanic — one body for its section in design/<system>.md and for its card in cards/<id>.md.
4
+ ---
5
+
6
+ format: cnlp-format.md
7
+
8
+ mood: declarative
9
+
10
+ headings:
11
+ - none: the body is flat; in design/ the `## <id>` line and the header fields above the blocks name the unit, in cards/ the frontmatter does
12
+
13
+ frontmatter_fields:
14
+ - schema
15
+ - id
16
+ - type
17
+ - title
18
+ - status
19
+ - system
20
+ - depends
21
+ - pillars
22
+ - source
23
+ - reopens
24
+ - tune_count
25
+ - built_at
26
+ - created
27
+
28
+ lexicon_exempt:
29
+ - none: every block is read when the unit is planned, built or played
30
+
31
+ sections:
32
+ - key: intent
33
+ form: bullet-list
34
+ required: yes
35
+ note: why the mechanic exists, in the designer's words
36
+
37
+ - key: behavior
38
+ form: record-list
39
+ required: yes
40
+ record_keys: input, state, feedback
41
+ note: one record per chain - player input, the state it changes, the feedback the player sees
42
+
43
+ - key: refusal
44
+ form: bullet-list
45
+ required: yes
46
+ note: what happens when the action is not allowed - no resource, invalid target, already active
47
+
48
+ - key: boundaries
49
+ form: bullet-list
50
+ required: yes
51
+ note: zero, maximum, overflow, simultaneity; an exact limit is a comparison at the end of its line
52
+
53
+ - key: persistence
54
+ form: scalar
55
+ required: yes
56
+ note: what survives a reload, a session or a match
57
+
58
+ - key: feel_like
59
+ form: scalar
60
+ required: yes
61
+ note: the comparison "like X, not like Y"
62
+
63
+ - key: feel
64
+ form: record-list
65
+ required: yes
66
+ record_keys: name, envelope
67
+ note: one record per tunable value; an envelope "a..b <unit>" is the only legal range of intent
68
+
69
+ - key: contract
70
+ form: bullet-list
71
+ required: yes
72
+ note: card stage, absent in design/ - paths and entry points, never member lists or values; an architecture rule is a constraint
73
+
74
+ - key: interactions
75
+ form: bullet-list
76
+ required: yes
77
+ note: card stage, absent in design/ - "<other id>: how the two cross", one line per crossing
78
+
79
+ - key: constraints
80
+ form: bullet-list
81
+ required: yes
82
+ note: negative constraints, one prohibition per line, checkable by an analyzer or a reviewer
83
+
84
+ - key: miss_criterion
85
+ form: scalar
86
+ required: yes
87
+ note: the one question the game in hand answers; the human answers it at the verdict
88
+
89
+ - key: tuning
90
+ form: bullet-list
91
+ required: no
92
+ note: work stage only - one verdict remark per tune, read before the rebuild
93
+
94
+ - key: notes
95
+ form: bullet-list
96
+ required: no
97
+ note: work stage only - the operator's answers and delivered files, one per unblock
98
+
99
+ - key: provenance
100
+ form: record-list
101
+ required: no
102
+ record_keys: slot
103
+ optional_record_keys: src, quote, answer, assumed
104
+ note: per slot, a verbatim quote with its anchor, a human answer, or a D2 assumption
105
+
106
+ custom_sections:
107
+ - none: a block that is not listed above is prose looking for a home
108
+
109
+ enforcement:
110
+ - `ai-factory gcf design check`, over the units in gcf/design/ and the cards in gcf/cards/
111
+ - the gcf pre-commit hook runs the same check and refuses a commit with a blocking finding
@@ -0,0 +1,91 @@
1
+ ---
2
+ name: unit-resource
3
+ description: The CNL-P profile of a GCF design unit of type resource — an economy resource with its sources and sinks, in design/<system>.md and as a card.
4
+ ---
5
+
6
+ format: cnlp-format.md
7
+
8
+ mood: declarative
9
+
10
+ headings:
11
+ - none: the body is flat; in design/ the `## <id>` line and the header fields above the blocks name the unit, in cards/ the frontmatter does
12
+
13
+ frontmatter_fields:
14
+ - schema
15
+ - id
16
+ - type
17
+ - title
18
+ - status
19
+ - system
20
+ - depends
21
+ - pillars
22
+ - source
23
+ - reopens
24
+ - tune_count
25
+ - built_at
26
+ - created
27
+
28
+ lexicon_exempt:
29
+ - none: every block is read when the unit is planned, built or played
30
+
31
+ sections:
32
+ - key: intent
33
+ form: bullet-list
34
+ required: yes
35
+ note: why the resource exists, in the designer's words
36
+
37
+ - key: sources
38
+ form: record-list
39
+ required: yes
40
+ record_keys: name, rate
41
+ note: where the player gets the resource; a rate is an envelope "a..b <unit>" or a comparison
42
+
43
+ - key: sinks
44
+ form: record-list
45
+ required: yes
46
+ record_keys: name, rate
47
+ note: where the player spends the resource; a rate is an envelope "a..b <unit>" or a comparison
48
+
49
+ - key: contract
50
+ form: bullet-list
51
+ required: yes
52
+ note: card stage, absent in design/ - paths and entry points, never member lists or values
53
+
54
+ - key: interactions
55
+ form: bullet-list
56
+ required: yes
57
+ note: card stage, absent in design/ - "<other id>: how the two cross", one line per crossing
58
+
59
+ - key: constraints
60
+ form: bullet-list
61
+ required: yes
62
+ note: negative constraints on the economy, one prohibition per line
63
+
64
+ - key: miss_criterion
65
+ form: scalar
66
+ required: yes
67
+ note: the one question the game in hand answers about the economy
68
+
69
+ - key: tuning
70
+ form: bullet-list
71
+ required: no
72
+ note: work stage only - one verdict remark per tune, read before the rebuild
73
+
74
+ - key: notes
75
+ form: bullet-list
76
+ required: no
77
+ note: work stage only - the operator's answers and delivered files, one per unblock
78
+
79
+ - key: provenance
80
+ form: record-list
81
+ required: no
82
+ record_keys: slot
83
+ optional_record_keys: src, quote, answer, assumed
84
+ note: per slot, a verbatim quote with its anchor, a human answer, or a D2 assumption
85
+
86
+ custom_sections:
87
+ - none: a block that is not listed above is prose looking for a home
88
+
89
+ enforcement:
90
+ - `ai-factory gcf design check`, over the units in gcf/design/ and the cards in gcf/cards/
91
+ - the gcf pre-commit hook runs the same check and refuses a commit with a blocking finding
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: unit-rule
3
+ description: The CNL-P profile of a GCF design unit of type rule — an invariant of the rules or the structure, accepted by a test.
4
+ ---
5
+
6
+ format: cnlp-format.md
7
+
8
+ mood: declarative
9
+
10
+ headings:
11
+ - none: the body is flat; the `## <id>` line and the header fields above the blocks name the unit
12
+
13
+ frontmatter_fields:
14
+ - none: a rule never becomes a card, so its header lives above the blocks in design/
15
+
16
+ lexicon_exempt:
17
+ - none: every block is read when the rule is planned and tested
18
+
19
+ sections:
20
+ - key: statement
21
+ form: bullet-list
22
+ required: yes
23
+ note: the invariant, one per line; an exact value is a comparison at the end of its line
24
+
25
+ - key: check
26
+ form: bullet-list
27
+ required: yes
28
+ note: what accepts the rule without a human playing - a test, an analyzer, a device run
29
+
30
+ - key: tuning
31
+ form: bullet-list
32
+ required: no
33
+ note: work stage only - one verdict remark per tune, read before the rebuild
34
+
35
+ - key: notes
36
+ form: bullet-list
37
+ required: no
38
+ note: work stage only - the operator's answers and delivered files, one per unblock
39
+
40
+ - key: provenance
41
+ form: record-list
42
+ required: no
43
+ record_keys: slot
44
+ optional_record_keys: src, quote, answer, assumed
45
+ note: per slot, a verbatim quote with its anchor, a human answer, or a D2 assumption
46
+
47
+ custom_sections:
48
+ - none: a block that is not listed above is prose looking for a home
49
+
50
+ enforcement:
51
+ - `ai-factory gcf design check`, over the units in gcf/design/
52
+ - the gcf pre-commit hook runs the same check and refuses a commit with a blocking finding
@@ -0,0 +1,105 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://github.com/VirtualMaestro/GCF/schemas/item.schema.json",
4
+ "title": "GCF work item frontmatter (schema 3)",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["schema", "id", "type", "gate", "status", "created"],
8
+ "definitions": {
9
+ "slug": { "type": "string", "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$" },
10
+ "slugOrNull": {
11
+ "anyOf": [{ "type": "null" }, { "type": "string", "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$" }]
12
+ },
13
+ "textOrNull": {
14
+ "anyOf": [{ "type": "null" }, { "type": "string", "pattern": "\\S" }]
15
+ },
16
+ "slugList": {
17
+ "type": "array",
18
+ "items": { "type": "string", "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$" }
19
+ },
20
+ "summary": { "type": "string", "pattern": "\\S", "maxLength": 250 }
21
+ },
22
+ "properties": {
23
+ "schema": { "const": 3 },
24
+ "id": { "$ref": "#/definitions/slug" },
25
+ "type": {
26
+ "enum": [
27
+ "feature",
28
+ "mechanic",
29
+ "resource",
30
+ "rule",
31
+ "constraint",
32
+ "entity",
33
+ "tech",
34
+ "bug",
35
+ "spike",
36
+ "asset",
37
+ "content",
38
+ "perf",
39
+ "release"
40
+ ]
41
+ },
42
+ "gate": { "enum": ["verdict", "auto", "decision"] },
43
+ "title": { "type": "string", "pattern": "\\S" },
44
+ "status": {
45
+ "enum": ["ready", "awaiting-verdict", "awaiting-decision", "blocked", "parked", "unplayed"]
46
+ },
47
+ "parent": { "$ref": "#/definitions/slugOrNull" },
48
+ "children": { "$ref": "#/definitions/slugList" },
49
+ "system": { "$ref": "#/definitions/slugList" },
50
+ "depends": { "$ref": "#/definitions/slugList" },
51
+ "pillars": { "$ref": "#/definitions/slugList" },
52
+ "source": { "type": "string", "pattern": "^(GDD#[A-Za-z0-9_-]+|manual)$" },
53
+ "reopens": { "$ref": "#/definitions/slugOrNull" },
54
+ "milestone": { "$ref": "#/definitions/slugOrNull" },
55
+ "parallel": { "enum": ["ok", "serial"] },
56
+ "plan": { "$ref": "#/definitions/textOrNull" },
57
+ "tune_count": { "type": "integer", "minimum": 0 },
58
+ "severity": {
59
+ "anyOf": [{ "type": "null" }, { "enum": ["critical", "high", "medium", "low"] }]
60
+ },
61
+ "blocked": { "$ref": "#/definitions/textOrNull" },
62
+ "since": {
63
+ "anyOf": [{ "type": "null" }, { "type": "string", "pattern": "^[0-9a-f]{7,64}$" }]
64
+ },
65
+ "frozen": { "type": "string", "pattern": "^[0-9a-f]{40}$" },
66
+ "live": {
67
+ "anyOf": [
68
+ { "type": "null" },
69
+ {
70
+ "type": "object",
71
+ "additionalProperties": false,
72
+ "required": ["none"],
73
+ "properties": { "none": { "type": "string", "pattern": "\\S" } }
74
+ },
75
+ {
76
+ "type": "object",
77
+ "additionalProperties": false,
78
+ "required": ["changes"],
79
+ "properties": {
80
+ "changes": {
81
+ "type": "array",
82
+ "minItems": 1,
83
+ "items": {
84
+ "type": "object",
85
+ "additionalProperties": false,
86
+ "required": ["id", "change"],
87
+ "properties": {
88
+ "id": { "$ref": "#/definitions/slug" },
89
+ "change": { "enum": ["added", "modified", "removed"] },
90
+ "summary": { "$ref": "#/definitions/summary" },
91
+ "refs": { "type": "string", "pattern": "\\S" }
92
+ },
93
+ "if": { "properties": { "change": { "enum": ["added", "modified"] } } },
94
+ "then": { "required": ["summary"] }
95
+ }
96
+ }
97
+ }
98
+ }
99
+ ]
100
+ },
101
+ "model": { "$ref": "#/definitions/textOrNull" },
102
+ "effort": { "$ref": "#/definitions/textOrNull" },
103
+ "created": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }
104
+ }
105
+ }
@@ -18,7 +18,7 @@ preconditions:
18
18
 
19
19
  forbidden_behaviors:
20
20
  - do not write `behavior`, `feel` or `constraints` out of reading code: a line derivable from code stays in code (П2)
21
- - do not open cards or backlog lines for what is already implemented: adoption puts nobody into work
21
+ - do not open work items or backlog lines for what is already implemented: adoption puts nobody into work
22
22
  - do not schedule a retro playtest for a mechanic that already ships
23
23
  - do not write a pillar or a subsystem name the human did not confirm: both are human authorship
24
24
  - do not read code files whole: names, paths and entry points are the whole input
@@ -33,9 +33,9 @@ workflow:
33
33
  7. fill `behavior:` and `constraints:` with 1 placeholder each, annotated `[until: manual(first verdict touching <name>)]`: the profile requires both blocks, and a `manual(...)` trigger is not an audit finding
34
34
  8. write a constraint the human states out loud into `constraints:`, and do not interview subsystem by subsystem for more: unanswered questions on adoption day are the staleness this framework exists to remove
35
35
  9. draft `PILLARS.md` by the interview in the `gcf-init` skill, steps 4..6, and do not restate that interview here
36
- 10. run `npx cnlp check`, then `ai-factory gcf lint` over each new systems doc, then `ai-factory gcf index`
36
+ 10. run `npx --yes cnlp-kit check`, then `ai-factory gcf lint` over each new systems doc, then `ai-factory gcf index`
37
37
  11. ask the human to run `ai-factory gcf hooks-install`; when it refuses over a foreign pre-commit, hand them the chain line it prints
38
- 12. state the next step: an old design document goes through `/gcf-ingest`, new work starts at `/gcf-card`
38
+ 12. state the next step: an old design document goes through `/gcf-ingest` into `gcf/design/`, new work starts at `/gcf-card`
39
39
 
40
40
  invocation:
41
41
  - run once, when a project that already has code adopts GCF
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: gcf-audit
3
- description: Run the GCF consistency audit - stale until records, idle built cards, tune limits, P2 linter findings, plus a semantic contradiction pass. Use at session start or when the user says "аудит gcf".
3
+ description: Run the GCF consistency audit - stale until records, items waiting on the human too long, tune limits, unplayed items, P2 linter findings, plus a semantic contradiction pass. Use at session start or when the user says "аудит gcf".
4
4
  ---
5
5
 
6
6
  mode: inspection
@@ -17,11 +17,12 @@ forbidden_behaviors:
17
17
 
18
18
  workflow:
19
19
  1. run `ai-factory gcf audit --json` and read the report
20
- 2. state the first line verbatim: stale built cards block dependent work, so they lead
21
- 3. for each stale until record: name the file, the trigger that fired and the line to re-check
22
- 4. semantic pass, only when the mechanical report is clean or the human asks: read the systems docs of ONE subsystem the human names and report pairs of lines that contradict each other as D1 questions
23
- 5. list the pragmas: each `gcf:allow` is a standing exception, and a growing list is the linter rotting
24
- 6. propose the next actions, ranked, proposed actions <= 3: playtest, answer a D1, or collapse a stale record
20
+ 2. state the first line verbatim: items waiting too long block dependent work, so they lead
21
+ 3. for each stale until record: name the file, the trigger that fired and the line to re-check; for each entry of `stale_questions`: name the question id and ask the human for the answer
22
+ 4. read the `design` summary: blocking findings first (run `ai-factory gcf design check` for the list), then the count of ready units
23
+ 5. semantic pass, only when the mechanical report is clean or the human asks: read the systems docs of ONE subsystem the human names and report pairs of lines that contradict each other as D1 questions
24
+ 6. list the pragmas: each `gcf:allow` is a standing exception, and a growing list is the linter rotting
25
+ 7. propose the next actions, ranked, proposed actions <= 3: playtest, answer a D1, take a ready unit, or collapse a stale record
25
26
 
26
27
  invocation:
27
28
  - run at session start, after a long break, or on demand