gcf-aif-ext 0.2.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/LICENSE +21 -0
- package/README.md +41 -0
- package/commands/gcf.js +173 -0
- package/extension.json +24 -0
- package/hooks/pre-commit.js +91 -0
- package/injections/commit-status.md +6 -0
- package/injections/plan-context.md +8 -0
- package/injections/review-pillars.md +7 -0
- package/lib/anchors.js +109 -0
- package/lib/audit-core.js +102 -0
- package/lib/context.js +77 -0
- package/lib/frontmatter.js +26 -0
- package/lib/gcf-paths.js +60 -0
- package/lib/git.js +19 -0
- package/lib/id.js +42 -0
- package/lib/index-gen.js +51 -0
- package/lib/linter.js +61 -0
- package/lib/playtest-list.js +13 -0
- package/lib/safe-path.js +71 -0
- package/lib/transitions.js +30 -0
- package/lib/validate-card.js +48 -0
- package/lib/verdict-fs.js +126 -0
- package/node_modules/cnlp-kit/CHANGELOG.md +625 -0
- package/node_modules/cnlp-kit/LICENSE +21 -0
- package/node_modules/cnlp-kit/README.md +242 -0
- package/node_modules/cnlp-kit/bin/cnlp.js +334 -0
- package/node_modules/cnlp-kit/cnlp-format.md +470 -0
- package/node_modules/cnlp-kit/package.json +40 -0
- package/node_modules/cnlp-kit/profiles/adr.md +129 -0
- package/node_modules/cnlp-kit/profiles/api.md +87 -0
- package/node_modules/cnlp-kit/profiles/concept.md +70 -0
- package/node_modules/cnlp-kit/profiles/docset.md +103 -0
- package/node_modules/cnlp-kit/profiles/guide.md +51 -0
- package/node_modules/cnlp-kit/profiles/profile.md +69 -0
- package/node_modules/cnlp-kit/profiles/reference.md +61 -0
- package/node_modules/cnlp-kit/profiles/skill.md +75 -0
- package/node_modules/cnlp-kit/profiles/task.md +65 -0
- package/node_modules/cnlp-kit/quality-rules.md +69 -0
- package/node_modules/cnlp-kit/skills/cnlp-docset/SKILL.md +73 -0
- package/node_modules/cnlp-kit/skills/cnlp-migrate/SKILL.md +64 -0
- package/node_modules/cnlp-kit/src/cnlp.js +534 -0
- package/node_modules/cnlp-kit/src/config.js +352 -0
- package/node_modules/yaml/LICENSE +13 -0
- package/node_modules/yaml/README.md +172 -0
- package/node_modules/yaml/bin.mjs +11 -0
- package/node_modules/yaml/browser/dist/compose/compose-collection.js +88 -0
- package/node_modules/yaml/browser/dist/compose/compose-doc.js +43 -0
- package/node_modules/yaml/browser/dist/compose/compose-node.js +109 -0
- package/node_modules/yaml/browser/dist/compose/compose-scalar.js +86 -0
- package/node_modules/yaml/browser/dist/compose/composer.js +219 -0
- package/node_modules/yaml/browser/dist/compose/resolve-block-map.js +115 -0
- package/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +198 -0
- package/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +49 -0
- package/node_modules/yaml/browser/dist/compose/resolve-end.js +37 -0
- package/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +207 -0
- package/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +226 -0
- package/node_modules/yaml/browser/dist/compose/resolve-props.js +146 -0
- package/node_modules/yaml/browser/dist/compose/util-contains-newline.js +34 -0
- package/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +26 -0
- package/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +15 -0
- package/node_modules/yaml/browser/dist/compose/util-map-includes.js +13 -0
- package/node_modules/yaml/browser/dist/doc/Document.js +335 -0
- package/node_modules/yaml/browser/dist/doc/anchors.js +71 -0
- package/node_modules/yaml/browser/dist/doc/applyReviver.js +55 -0
- package/node_modules/yaml/browser/dist/doc/createNode.js +88 -0
- package/node_modules/yaml/browser/dist/doc/directives.js +176 -0
- package/node_modules/yaml/browser/dist/errors.js +57 -0
- package/node_modules/yaml/browser/dist/index.js +17 -0
- package/node_modules/yaml/browser/dist/log.js +11 -0
- package/node_modules/yaml/browser/dist/nodes/Alias.js +118 -0
- package/node_modules/yaml/browser/dist/nodes/Collection.js +147 -0
- package/node_modules/yaml/browser/dist/nodes/Node.js +38 -0
- package/node_modules/yaml/browser/dist/nodes/Pair.js +36 -0
- package/node_modules/yaml/browser/dist/nodes/Scalar.js +24 -0
- package/node_modules/yaml/browser/dist/nodes/YAMLMap.js +144 -0
- package/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +113 -0
- package/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +63 -0
- package/node_modules/yaml/browser/dist/nodes/identity.js +36 -0
- package/node_modules/yaml/browser/dist/nodes/toJS.js +37 -0
- package/node_modules/yaml/browser/dist/parse/cst-scalar.js +214 -0
- package/node_modules/yaml/browser/dist/parse/cst-stringify.js +61 -0
- package/node_modules/yaml/browser/dist/parse/cst-visit.js +97 -0
- package/node_modules/yaml/browser/dist/parse/cst.js +98 -0
- package/node_modules/yaml/browser/dist/parse/lexer.js +721 -0
- package/node_modules/yaml/browser/dist/parse/line-counter.js +39 -0
- package/node_modules/yaml/browser/dist/parse/parser.js +975 -0
- package/node_modules/yaml/browser/dist/public-api.js +102 -0
- package/node_modules/yaml/browser/dist/schema/Schema.js +37 -0
- package/node_modules/yaml/browser/dist/schema/common/map.js +17 -0
- package/node_modules/yaml/browser/dist/schema/common/null.js +15 -0
- package/node_modules/yaml/browser/dist/schema/common/seq.js +17 -0
- package/node_modules/yaml/browser/dist/schema/common/string.js +14 -0
- package/node_modules/yaml/browser/dist/schema/core/bool.js +19 -0
- package/node_modules/yaml/browser/dist/schema/core/float.js +43 -0
- package/node_modules/yaml/browser/dist/schema/core/int.js +38 -0
- package/node_modules/yaml/browser/dist/schema/core/schema.js +23 -0
- package/node_modules/yaml/browser/dist/schema/json/schema.js +62 -0
- package/node_modules/yaml/browser/dist/schema/tags.js +96 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +58 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +26 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +46 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +71 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +67 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +74 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +78 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +39 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +93 -0
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
- package/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +146 -0
- package/node_modules/yaml/browser/dist/stringify/stringify.js +129 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +153 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyComment.js +20 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +85 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +25 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyPair.js +150 -0
- package/node_modules/yaml/browser/dist/stringify/stringifyString.js +336 -0
- package/node_modules/yaml/browser/dist/util.js +11 -0
- package/node_modules/yaml/browser/dist/visit.js +233 -0
- package/node_modules/yaml/browser/index.js +5 -0
- package/node_modules/yaml/browser/package.json +3 -0
- package/node_modules/yaml/dist/cli.d.ts +8 -0
- package/node_modules/yaml/dist/cli.mjs +201 -0
- package/node_modules/yaml/dist/compose/compose-collection.d.ts +11 -0
- package/node_modules/yaml/dist/compose/compose-collection.js +90 -0
- package/node_modules/yaml/dist/compose/compose-doc.d.ts +7 -0
- package/node_modules/yaml/dist/compose/compose-doc.js +45 -0
- package/node_modules/yaml/dist/compose/compose-node.d.ts +29 -0
- package/node_modules/yaml/dist/compose/compose-node.js +112 -0
- package/node_modules/yaml/dist/compose/compose-scalar.d.ts +5 -0
- package/node_modules/yaml/dist/compose/compose-scalar.js +88 -0
- package/node_modules/yaml/dist/compose/composer.d.ts +63 -0
- package/node_modules/yaml/dist/compose/composer.js +224 -0
- package/node_modules/yaml/dist/compose/resolve-block-map.d.ts +6 -0
- package/node_modules/yaml/dist/compose/resolve-block-map.js +117 -0
- package/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +11 -0
- package/node_modules/yaml/dist/compose/resolve-block-scalar.js +200 -0
- package/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +6 -0
- package/node_modules/yaml/dist/compose/resolve-block-seq.js +51 -0
- package/node_modules/yaml/dist/compose/resolve-end.d.ts +6 -0
- package/node_modules/yaml/dist/compose/resolve-end.js +39 -0
- package/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +7 -0
- package/node_modules/yaml/dist/compose/resolve-flow-collection.js +209 -0
- package/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +10 -0
- package/node_modules/yaml/dist/compose/resolve-flow-scalar.js +228 -0
- package/node_modules/yaml/dist/compose/resolve-props.d.ts +23 -0
- package/node_modules/yaml/dist/compose/resolve-props.js +148 -0
- package/node_modules/yaml/dist/compose/util-contains-newline.d.ts +2 -0
- package/node_modules/yaml/dist/compose/util-contains-newline.js +36 -0
- package/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +2 -0
- package/node_modules/yaml/dist/compose/util-empty-scalar-position.js +28 -0
- package/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +3 -0
- package/node_modules/yaml/dist/compose/util-flow-indent-check.js +17 -0
- package/node_modules/yaml/dist/compose/util-map-includes.d.ts +4 -0
- package/node_modules/yaml/dist/compose/util-map-includes.js +15 -0
- package/node_modules/yaml/dist/doc/Document.d.ts +141 -0
- package/node_modules/yaml/dist/doc/Document.js +337 -0
- package/node_modules/yaml/dist/doc/anchors.d.ts +24 -0
- package/node_modules/yaml/dist/doc/anchors.js +76 -0
- package/node_modules/yaml/dist/doc/applyReviver.d.ts +9 -0
- package/node_modules/yaml/dist/doc/applyReviver.js +57 -0
- package/node_modules/yaml/dist/doc/createNode.d.ts +17 -0
- package/node_modules/yaml/dist/doc/createNode.js +90 -0
- package/node_modules/yaml/dist/doc/directives.d.ts +49 -0
- package/node_modules/yaml/dist/doc/directives.js +178 -0
- package/node_modules/yaml/dist/errors.d.ts +21 -0
- package/node_modules/yaml/dist/errors.js +62 -0
- package/node_modules/yaml/dist/index.d.ts +25 -0
- package/node_modules/yaml/dist/index.js +50 -0
- package/node_modules/yaml/dist/log.d.ts +3 -0
- package/node_modules/yaml/dist/log.js +19 -0
- package/node_modules/yaml/dist/nodes/Alias.d.ts +29 -0
- package/node_modules/yaml/dist/nodes/Alias.js +120 -0
- package/node_modules/yaml/dist/nodes/Collection.d.ts +73 -0
- package/node_modules/yaml/dist/nodes/Collection.js +151 -0
- package/node_modules/yaml/dist/nodes/Node.d.ts +53 -0
- package/node_modules/yaml/dist/nodes/Node.js +40 -0
- package/node_modules/yaml/dist/nodes/Pair.d.ts +22 -0
- package/node_modules/yaml/dist/nodes/Pair.js +39 -0
- package/node_modules/yaml/dist/nodes/Scalar.d.ts +47 -0
- package/node_modules/yaml/dist/nodes/Scalar.js +27 -0
- package/node_modules/yaml/dist/nodes/YAMLMap.d.ts +53 -0
- package/node_modules/yaml/dist/nodes/YAMLMap.js +147 -0
- package/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +60 -0
- package/node_modules/yaml/dist/nodes/YAMLSeq.js +115 -0
- package/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +4 -0
- package/node_modules/yaml/dist/nodes/addPairToJSMap.js +65 -0
- package/node_modules/yaml/dist/nodes/identity.d.ts +23 -0
- package/node_modules/yaml/dist/nodes/identity.js +53 -0
- package/node_modules/yaml/dist/nodes/toJS.d.ts +29 -0
- package/node_modules/yaml/dist/nodes/toJS.js +39 -0
- package/node_modules/yaml/dist/options.d.ts +350 -0
- package/node_modules/yaml/dist/parse/cst-scalar.d.ts +64 -0
- package/node_modules/yaml/dist/parse/cst-scalar.js +218 -0
- package/node_modules/yaml/dist/parse/cst-stringify.d.ts +8 -0
- package/node_modules/yaml/dist/parse/cst-stringify.js +63 -0
- package/node_modules/yaml/dist/parse/cst-visit.d.ts +39 -0
- package/node_modules/yaml/dist/parse/cst-visit.js +99 -0
- package/node_modules/yaml/dist/parse/cst.d.ts +109 -0
- package/node_modules/yaml/dist/parse/cst.js +112 -0
- package/node_modules/yaml/dist/parse/lexer.d.ts +87 -0
- package/node_modules/yaml/dist/parse/lexer.js +723 -0
- package/node_modules/yaml/dist/parse/line-counter.d.ts +22 -0
- package/node_modules/yaml/dist/parse/line-counter.js +41 -0
- package/node_modules/yaml/dist/parse/parser.d.ts +84 -0
- package/node_modules/yaml/dist/parse/parser.js +980 -0
- package/node_modules/yaml/dist/public-api.d.ts +44 -0
- package/node_modules/yaml/dist/public-api.js +107 -0
- package/node_modules/yaml/dist/schema/Schema.d.ts +17 -0
- package/node_modules/yaml/dist/schema/Schema.js +39 -0
- package/node_modules/yaml/dist/schema/common/map.d.ts +2 -0
- package/node_modules/yaml/dist/schema/common/map.js +19 -0
- package/node_modules/yaml/dist/schema/common/null.d.ts +4 -0
- package/node_modules/yaml/dist/schema/common/null.js +17 -0
- package/node_modules/yaml/dist/schema/common/seq.d.ts +2 -0
- package/node_modules/yaml/dist/schema/common/seq.js +19 -0
- package/node_modules/yaml/dist/schema/common/string.d.ts +2 -0
- package/node_modules/yaml/dist/schema/common/string.js +16 -0
- package/node_modules/yaml/dist/schema/core/bool.d.ts +4 -0
- package/node_modules/yaml/dist/schema/core/bool.js +21 -0
- package/node_modules/yaml/dist/schema/core/float.d.ts +4 -0
- package/node_modules/yaml/dist/schema/core/float.js +47 -0
- package/node_modules/yaml/dist/schema/core/int.d.ts +4 -0
- package/node_modules/yaml/dist/schema/core/int.js +42 -0
- package/node_modules/yaml/dist/schema/core/schema.d.ts +1 -0
- package/node_modules/yaml/dist/schema/core/schema.js +25 -0
- package/node_modules/yaml/dist/schema/json/schema.d.ts +2 -0
- package/node_modules/yaml/dist/schema/json/schema.js +64 -0
- package/node_modules/yaml/dist/schema/json-schema.d.ts +69 -0
- package/node_modules/yaml/dist/schema/tags.d.ts +48 -0
- package/node_modules/yaml/dist/schema/tags.js +99 -0
- package/node_modules/yaml/dist/schema/types.d.ts +92 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +2 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/binary.js +70 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +7 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/bool.js +29 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +4 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/float.js +50 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +5 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/int.js +76 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +9 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/merge.js +71 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +22 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/omap.js +77 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +10 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +82 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +1 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/schema.js +41 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +28 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/set.js +96 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
- package/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +105 -0
- package/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +34 -0
- package/node_modules/yaml/dist/stringify/foldFlowLines.js +151 -0
- package/node_modules/yaml/dist/stringify/stringify.d.ts +21 -0
- package/node_modules/yaml/dist/stringify/stringify.js +132 -0
- package/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +17 -0
- package/node_modules/yaml/dist/stringify/stringifyCollection.js +155 -0
- package/node_modules/yaml/dist/stringify/stringifyComment.d.ts +10 -0
- package/node_modules/yaml/dist/stringify/stringifyComment.js +24 -0
- package/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +4 -0
- package/node_modules/yaml/dist/stringify/stringifyDocument.js +87 -0
- package/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +2 -0
- package/node_modules/yaml/dist/stringify/stringifyNumber.js +27 -0
- package/node_modules/yaml/dist/stringify/stringifyPair.d.ts +3 -0
- package/node_modules/yaml/dist/stringify/stringifyPair.js +152 -0
- package/node_modules/yaml/dist/stringify/stringifyString.d.ts +9 -0
- package/node_modules/yaml/dist/stringify/stringifyString.js +338 -0
- package/node_modules/yaml/dist/test-events.d.ts +4 -0
- package/node_modules/yaml/dist/test-events.js +134 -0
- package/node_modules/yaml/dist/util.d.ts +16 -0
- package/node_modules/yaml/dist/util.js +28 -0
- package/node_modules/yaml/dist/visit.d.ts +102 -0
- package/node_modules/yaml/dist/visit.js +236 -0
- package/node_modules/yaml/package.json +97 -0
- package/node_modules/yaml/util.js +2 -0
- package/package.json +54 -0
- package/profiles/card.md +65 -0
- package/profiles/pillars.md +31 -0
- package/profiles/system.md +56 -0
- package/schemas/card.schema.json +30 -0
- package/skills/gcf-adopt/SKILL.md +41 -0
- package/skills/gcf-audit/SKILL.md +27 -0
- package/skills/gcf-card/SKILL.md +35 -0
- package/skills/gcf-debate/SKILL.md +33 -0
- package/skills/gcf-ingest/SKILL.md +38 -0
- package/skills/gcf-init/SKILL.md +32 -0
- package/skills/gcf-verdict/SKILL.md +32 -0
- package/skills/gcf-vision/SKILL.md +33 -0
- package/templates/PILLARS.md +8 -0
- package/templates/backlog.md +4 -0
- package/templates/card.md +34 -0
- package/templates/cnlp.config.json +8 -0
- package/templates/config.yml +8 -0
- package/templates/system.md +22 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gcf-card
|
|
3
|
+
description: Materialize a GCF card from a backlog candidate or a fresh idea - slots, hard/soft routing, depends. Use when work starts on a feature or the user says "заведи карточку".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
mode: authoring
|
|
7
|
+
|
|
8
|
+
purpose:
|
|
9
|
+
- turn a backlog candidate or a fresh idea into a card file with the six slots filled
|
|
10
|
+
|
|
11
|
+
inputs:
|
|
12
|
+
- a cand-NNN id from `gcf/backlog.md`, or a free-text feature idea
|
|
13
|
+
|
|
14
|
+
preconditions:
|
|
15
|
+
- `gcf/` exists; `gcf/INDEX.md` lists the current subsystems
|
|
16
|
+
|
|
17
|
+
forbidden_behaviors:
|
|
18
|
+
- do not invent a new subsystem name when INDEX carries a synonym: reuse or ask (GCF-PRD §5.4)
|
|
19
|
+
- do not write numbers outside the feel slot envelopes
|
|
20
|
+
- do not put `until:` in the frontmatter: it is a line annotation inside slots
|
|
21
|
+
- do not fill a slot with a guess: an unknown goes to `gcf/open-questions.md`, marked D1 or D2
|
|
22
|
+
|
|
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
|
|
33
|
+
|
|
34
|
+
invocation:
|
|
35
|
+
- run when work starts on a feature or the user names a candidate to materialize
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gcf-debate
|
|
3
|
+
description: The debate table - expert lenses stress a GDD for gaps, contradictions and unbuildable specs before import. Use when the user asks to review a GDD, check design coherence, or says "стол дебатов".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
mode: review board
|
|
7
|
+
|
|
8
|
+
purpose:
|
|
9
|
+
- stress a GDD through the GCF lenses and report the gaps the designer did not write down
|
|
10
|
+
|
|
11
|
+
inputs:
|
|
12
|
+
- a path to the GDD (markdown); optionally the names of lenses to run, default is all
|
|
13
|
+
|
|
14
|
+
preconditions:
|
|
15
|
+
- the file exists and is readable markdown
|
|
16
|
+
|
|
17
|
+
forbidden_behaviors:
|
|
18
|
+
- do not edit the document without the human's explicit go-ahead per edit
|
|
19
|
+
- do not resolve a principal fork yourself: a fork goes to the human as a D1 question with a proposed default
|
|
20
|
+
- do not review style or prose quality: the table checks buildability and coherence only
|
|
21
|
+
|
|
22
|
+
workflow:
|
|
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)
|
|
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
|
+
4. cross-examine: for each pair of findings that touch one anchor, check whether they contradict each other and merge or escalate
|
|
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
|
|
28
|
+
6. report by lens, ordered by damage: contradictions first, then holes, then dictionary drift; cite anchors, quote lines <= 15 words
|
|
29
|
+
7. when `gcf/` exists, append D1 and D2 records to `gcf/open-questions.md`; otherwise put them into the report only
|
|
30
|
+
8. offer the fixes: apply agreed edits to the document one by one, each on its own go-ahead
|
|
31
|
+
|
|
32
|
+
invocation:
|
|
33
|
+
- run on a fresh GDD before ingest, after a big GDD revision, or on demand
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gcf-ingest
|
|
3
|
+
description: Import a GDD into GCF - anchors, candidate backlog, pillar candidates, gap questions; re-import classifies the delta. Use when the user brings a GDD or says "импортируй GDD".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
mode: import
|
|
7
|
+
|
|
8
|
+
purpose:
|
|
9
|
+
- cut a GDD into inert backlog candidates and a short list of questions, without putting anyone "into work"
|
|
10
|
+
|
|
11
|
+
inputs:
|
|
12
|
+
- a path to the GDD (markdown)
|
|
13
|
+
|
|
14
|
+
preconditions:
|
|
15
|
+
- `gcf/` exists (run gcf-init first)
|
|
16
|
+
- the sequential pass below is the correctness reference; the parallel fan-out belongs to the harness
|
|
17
|
+
|
|
18
|
+
forbidden_behaviors:
|
|
19
|
+
- do not create card files: candidates are backlog lines, a card materializes only at pull (GCF-PRD §5.2)
|
|
20
|
+
- do not write a pillar into PILLARS.md: pillar candidates go to open-questions as D1
|
|
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
|
|
23
|
+
|
|
24
|
+
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`
|
|
36
|
+
|
|
37
|
+
invocation:
|
|
38
|
+
- run when a GDD arrives or changes
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gcf-init
|
|
3
|
+
description: Bootstrap the gcf/ documentary layer - skeleton, pillars interview, hooks reminder. Use when a game project adopts GCF or when the user says "set up gcf".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
mode: bootstrap
|
|
7
|
+
|
|
8
|
+
purpose:
|
|
9
|
+
- create the gcf/ documentary layer and draft PILLARS.md from a short interview with the human
|
|
10
|
+
|
|
11
|
+
inputs:
|
|
12
|
+
- none: the skill discovers project state from the working directory and asks the human for the rest
|
|
13
|
+
|
|
14
|
+
preconditions:
|
|
15
|
+
- the project is a git repository with AI Factory initialized
|
|
16
|
+
|
|
17
|
+
forbidden_behaviors:
|
|
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)
|
|
20
|
+
- pillar count <= 7, and do not pad the list to reach 7
|
|
21
|
+
|
|
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
|
|
30
|
+
|
|
31
|
+
invocation:
|
|
32
|
+
- run when the user asks to set up gcf in a project
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gcf-verdict
|
|
3
|
+
description: Record the human playtest verdict on a built card - keep, tune or kill - and run the collapse. Use after a playtest or when the user says "вердикт".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
mode: human gate
|
|
7
|
+
|
|
8
|
+
purpose:
|
|
9
|
+
- record the human verdict and run the one operation that collapses a card into subsystem state
|
|
10
|
+
|
|
11
|
+
inputs:
|
|
12
|
+
- a card-NNN id and a verdict word: keep, tune or kill; or nothing, which means "print the playtest list"
|
|
13
|
+
|
|
14
|
+
preconditions:
|
|
15
|
+
- the card sits in status `built`; the human has played the build
|
|
16
|
+
|
|
17
|
+
forbidden_behaviors:
|
|
18
|
+
- do not decide the verdict: the human with hands on the controls decides, this skill records
|
|
19
|
+
- do not run `keep` when the human has not answered the card's miss_criterion question
|
|
20
|
+
- do not edit systems docs by hand: `ai-factory gcf verdict` owns the collapse
|
|
21
|
+
|
|
22
|
+
workflow:
|
|
23
|
+
1. with no arguments: run `ai-factory gcf playtest` and stop - that list is the session's playtest sheet
|
|
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)
|
|
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
|
+
5. run `ai-factory gcf verdict <card-id> <verdict> --note "<answer or reason>"`
|
|
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
|
|
29
|
+
7. report the verdict commit hash: `git revert <hash>` is the undo
|
|
30
|
+
|
|
31
|
+
invocation:
|
|
32
|
+
- run after a playtest, or with no arguments to print the playtest sheet
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gcf-vision
|
|
3
|
+
description: Project-start wizard - guided questions that turn a raw game idea into a first GDD draft ready for gcf-ingest. Use when there is no project yet or the user says "начнем игру" / "start a game".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
mode: wizard
|
|
7
|
+
|
|
8
|
+
purpose:
|
|
9
|
+
- turn a raw idea into a first GDD draft through a guided interview, so the standard ingest flow has an input
|
|
10
|
+
|
|
11
|
+
inputs:
|
|
12
|
+
- none: the skill discovers everything by asking the human
|
|
13
|
+
|
|
14
|
+
preconditions:
|
|
15
|
+
- no GDD exists yet; when one exists, route to gcf-debate or gcf-ingest instead
|
|
16
|
+
|
|
17
|
+
forbidden_behaviors:
|
|
18
|
+
- do not write into `gcf/`: the draft is the designer's document, ingest brings it into gcf later
|
|
19
|
+
- do not fill an answer the human skipped: write the gap into the draft as an open question
|
|
20
|
+
- questions per message <= 2: a wall of questions kills the interview
|
|
21
|
+
|
|
22
|
+
workflow:
|
|
23
|
+
1. ask about the core: genre, the one-sentence fantasy, and the reference games with "like X, not like Y"
|
|
24
|
+
2. ask about the loop: what the player does each 30 seconds, each session, each week
|
|
25
|
+
3. ask about scope: platform, session length, solo or multiplayer, art constraints, team size
|
|
26
|
+
4. ask what the game is NOT: negative answers seed the pillars and cost the least
|
|
27
|
+
5. draft the GDD as plain markdown with one `##` heading per topic: vision, pillars-candidates, core loop, mechanics, progression, scope, open questions
|
|
28
|
+
6. write every unanswered or invented point into the `## open questions` section, marked as a guess
|
|
29
|
+
7. present the draft, iterate on the human's corrections, and save where the human names
|
|
30
|
+
8. state the next step: `/gcf-debate <file>` to stress the draft, or `/gcf-ingest <file>` to import it
|
|
31
|
+
|
|
32
|
+
invocation:
|
|
33
|
+
- run at project start, before any gcf structure exists
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
pillars:
|
|
2
|
+
- statement: every encounter is readable at a glance
|
|
3
|
+
invariant: no effect ever hides the player character
|
|
4
|
+
review_question: does this change add visual noise over the player
|
|
5
|
+
|
|
6
|
+
- statement: death is the player's fault, never the camera's
|
|
7
|
+
invariant: no off-screen damage sources
|
|
8
|
+
review_question: can this change hurt the player from outside the view
|
|
@@ -0,0 +1,4 @@
|
|
|
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
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema: 1
|
|
3
|
+
id: card-000
|
|
4
|
+
slug: example
|
|
5
|
+
status: proposed
|
|
6
|
+
route: soft
|
|
7
|
+
system: [example-system]
|
|
8
|
+
depends: []
|
|
9
|
+
source: manual
|
|
10
|
+
tune_count: 0
|
|
11
|
+
built_at: null
|
|
12
|
+
created: "2026-01-01"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
behavior:
|
|
16
|
+
- player presses X -> the character does Y -> the screen shows Z
|
|
17
|
+
|
|
18
|
+
contract:
|
|
19
|
+
- new components and systems live under Assets/Scripts/Example/
|
|
20
|
+
- data flows from input to simulation, never backwards
|
|
21
|
+
|
|
22
|
+
feel:
|
|
23
|
+
- like Hades, not like Celeste
|
|
24
|
+
- duration 0.15..0.25 s
|
|
25
|
+
- cooldown 0.4..0.8 s
|
|
26
|
+
|
|
27
|
+
interactions:
|
|
28
|
+
- none: this example crosses no existing mechanic
|
|
29
|
+
|
|
30
|
+
constraints:
|
|
31
|
+
- do not add a new input binding
|
|
32
|
+
- no per-frame allocations
|
|
33
|
+
|
|
34
|
+
miss_criterion: does the move feel responsive on the first try
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
system: example-system
|
|
3
|
+
updated_by: card-000
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
purpose:
|
|
7
|
+
- holds the example mechanic and its simulation rules
|
|
8
|
+
|
|
9
|
+
code:
|
|
10
|
+
- Assets/Scripts/Example/, entry point ExampleFeature.cs
|
|
11
|
+
|
|
12
|
+
behavior:
|
|
13
|
+
- pressing X performs Y with feedback Z
|
|
14
|
+
|
|
15
|
+
feel:
|
|
16
|
+
- duration 0.15..0.25 s, kept as the retune envelope
|
|
17
|
+
|
|
18
|
+
constraints:
|
|
19
|
+
- do not stop the simulation from this subsystem
|
|
20
|
+
|
|
21
|
+
open:
|
|
22
|
+
- tempo assumption pending combat retune [until: retune(combat)]
|