@hegemonart/get-design-done 1.19.5 → 1.20.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/.claude-plugin/marketplace.json +4 -4
- package/.claude-plugin/plugin.json +2 -2
- package/CHANGELOG.md +90 -0
- package/README.md +12 -0
- package/agents/design-auditor.md +12 -0
- package/agents/design-discussant.md +14 -0
- package/agents/design-reflector.md +23 -0
- package/connections/connections.md +3 -0
- package/connections/figma.md +2 -0
- package/connections/gdd-state.md +186 -0
- package/hooks/budget-enforcer.ts +716 -0
- package/hooks/context-exhaustion.ts +251 -0
- package/hooks/gdd-read-injection-scanner.ts +172 -0
- package/hooks/hooks.json +3 -3
- package/package.json +29 -7
- package/reference/authority-feeds.md +4 -2
- package/reference/checklists.md +30 -0
- package/reference/component-authoring.md +184 -0
- package/reference/config-schema.md +2 -2
- package/reference/emotional-design.md +124 -0
- package/reference/error-recovery.md +58 -0
- package/reference/first-principles.md +89 -0
- package/reference/heuristics.md +70 -0
- package/reference/motion-advanced.md +192 -3
- package/reference/registry.json +28 -0
- package/reference/schemas/budget.schema.json +42 -0
- package/reference/schemas/events.schema.json +55 -0
- package/reference/schemas/generated.d.ts +419 -0
- package/reference/schemas/iteration-budget.schema.json +36 -0
- package/reference/schemas/mcp-gdd-state-tools.schema.json +89 -0
- package/reference/schemas/rate-limits.schema.json +31 -0
- package/reference/shared-preamble.md +10 -0
- package/scripts/aggregate-agent-metrics.ts +282 -0
- package/scripts/codegen-schema-types.ts +149 -0
- package/scripts/lib/error-classifier.cjs +232 -0
- package/scripts/lib/error-classifier.d.cts +44 -0
- package/scripts/lib/event-stream/emitter.ts +88 -0
- package/scripts/lib/event-stream/index.ts +154 -0
- package/scripts/lib/event-stream/types.ts +127 -0
- package/scripts/lib/event-stream/writer.ts +154 -0
- package/scripts/lib/gdd-errors/classification.ts +124 -0
- package/scripts/lib/gdd-errors/index.ts +218 -0
- package/scripts/lib/gdd-state/gates.ts +216 -0
- package/scripts/lib/gdd-state/index.ts +167 -0
- package/scripts/lib/gdd-state/lockfile.ts +232 -0
- package/scripts/lib/gdd-state/mutator.ts +574 -0
- package/scripts/lib/gdd-state/parser.ts +523 -0
- package/scripts/lib/gdd-state/types.ts +179 -0
- package/scripts/lib/iteration-budget.cjs +205 -0
- package/scripts/lib/iteration-budget.d.cts +32 -0
- package/scripts/lib/jittered-backoff.cjs +112 -0
- package/scripts/lib/jittered-backoff.d.cts +38 -0
- package/scripts/lib/lockfile.cjs +177 -0
- package/scripts/lib/lockfile.d.cts +21 -0
- package/scripts/lib/prompt-sanitizer/index.ts +435 -0
- package/scripts/lib/prompt-sanitizer/patterns.ts +173 -0
- package/scripts/lib/rate-guard.cjs +365 -0
- package/scripts/lib/rate-guard.d.cts +38 -0
- package/scripts/mcp-servers/gdd-state/schemas/add_blocker.schema.json +67 -0
- package/scripts/mcp-servers/gdd-state/schemas/add_decision.schema.json +68 -0
- package/scripts/mcp-servers/gdd-state/schemas/add_must_have.schema.json +68 -0
- package/scripts/mcp-servers/gdd-state/schemas/checkpoint.schema.json +51 -0
- package/scripts/mcp-servers/gdd-state/schemas/frontmatter_update.schema.json +62 -0
- package/scripts/mcp-servers/gdd-state/schemas/get.schema.json +51 -0
- package/scripts/mcp-servers/gdd-state/schemas/probe_connections.schema.json +75 -0
- package/scripts/mcp-servers/gdd-state/schemas/resolve_blocker.schema.json +66 -0
- package/scripts/mcp-servers/gdd-state/schemas/set_status.schema.json +47 -0
- package/scripts/mcp-servers/gdd-state/schemas/transition_stage.schema.json +70 -0
- package/scripts/mcp-servers/gdd-state/schemas/update_progress.schema.json +58 -0
- package/scripts/mcp-servers/gdd-state/server.ts +288 -0
- package/scripts/mcp-servers/gdd-state/tools/add_blocker.ts +72 -0
- package/scripts/mcp-servers/gdd-state/tools/add_decision.ts +89 -0
- package/scripts/mcp-servers/gdd-state/tools/add_must_have.ts +113 -0
- package/scripts/mcp-servers/gdd-state/tools/checkpoint.ts +60 -0
- package/scripts/mcp-servers/gdd-state/tools/frontmatter_update.ts +91 -0
- package/scripts/mcp-servers/gdd-state/tools/get.ts +51 -0
- package/scripts/mcp-servers/gdd-state/tools/index.ts +51 -0
- package/scripts/mcp-servers/gdd-state/tools/probe_connections.ts +73 -0
- package/scripts/mcp-servers/gdd-state/tools/resolve_blocker.ts +84 -0
- package/scripts/mcp-servers/gdd-state/tools/set_status.ts +54 -0
- package/scripts/mcp-servers/gdd-state/tools/shared.ts +194 -0
- package/scripts/mcp-servers/gdd-state/tools/transition_stage.ts +80 -0
- package/scripts/mcp-servers/gdd-state/tools/update_progress.ts +81 -0
- package/scripts/validate-frontmatter.ts +114 -0
- package/scripts/validate-schemas.ts +401 -0
- package/skills/brief/SKILL.md +15 -6
- package/skills/design/SKILL.md +31 -13
- package/skills/explore/SKILL.md +41 -17
- package/skills/health/SKILL.md +15 -4
- package/skills/optimize/SKILL.md +3 -3
- package/skills/pause/SKILL.md +16 -10
- package/skills/plan/SKILL.md +33 -17
- package/skills/progress/SKILL.md +15 -11
- package/skills/resume/SKILL.md +19 -10
- package/skills/settings/SKILL.md +11 -3
- package/skills/todo/SKILL.md +12 -3
- package/skills/verify/SKILL.md +65 -29
- package/hooks/budget-enforcer.js +0 -329
- package/hooks/context-exhaustion.js +0 -127
- package/hooks/gdd-read-injection-scanner.js +0 -39
- package/scripts/aggregate-agent-metrics.js +0 -173
- package/scripts/validate-frontmatter.cjs +0 -68
- package/scripts/validate-schemas.cjs +0 -242
|
@@ -746,9 +746,198 @@ Fresh eyes catch what in-the-moment iteration misses. Animations feel correct wh
|
|
|
746
746
|
|
|
747
747
|
## Disney's 12 Principles — UX Mapping
|
|
748
748
|
|
|
749
|
-
|
|
750
|
-
<!-- Cross-reference: reference/motion-easings.md, reference/motion-spring.md -->
|
|
749
|
+
Original source: Frank Thomas & Ollie Johnston, *The Illusion of Life: Disney Animation* (1981). The 12 principles were developed for hand-drawn character animation; the UX mappings below translate each to interface motion.
|
|
751
750
|
|
|
752
|
-
|
|
751
|
+
---
|
|
752
|
+
|
|
753
|
+
### 1. Squash and Stretch
|
|
754
|
+
|
|
755
|
+
**Animation:** Objects deform under force — squash on impact, stretch during fast movement.
|
|
756
|
+
|
|
757
|
+
**UX mapping:** Scale feedback communicates physical weight and responsiveness.
|
|
758
|
+
```tsx
|
|
759
|
+
// Press: squash slightly (wider, shorter)
|
|
760
|
+
// Release: snap back through scale(1.05) → scale(1)
|
|
761
|
+
<motion.button
|
|
762
|
+
whileTap={{ scaleX: 1.05, scaleY: 0.95 }}
|
|
763
|
+
transition={{ type: "spring", stiffness: 500, damping: 30 }}
|
|
764
|
+
/>
|
|
765
|
+
```
|
|
766
|
+
**Rule:** Constrain squash/stretch to ≤5% deviation — more reads as glitchy, not physical.
|
|
767
|
+
|
|
768
|
+
---
|
|
769
|
+
|
|
770
|
+
### 2. Anticipation
|
|
771
|
+
|
|
772
|
+
**Animation:** A small preparatory motion before the main action (e.g., a character bending knees before jumping).
|
|
773
|
+
|
|
774
|
+
**UX mapping:** Preview animations prime the user for what's about to happen.
|
|
775
|
+
```tsx
|
|
776
|
+
// Drawer that "breathes" slightly before opening
|
|
777
|
+
<motion.div
|
|
778
|
+
animate={isOpen ? { x: 0 } : { x: -8 }}
|
|
779
|
+
initial={{ x: -8 }}
|
|
780
|
+
transition={{ type: "spring", stiffness: 300, damping: 24 }}
|
|
781
|
+
/>
|
|
782
|
+
```
|
|
783
|
+
**Rule:** Anticipation delays should be ≤80ms; longer delays read as lag, not anticipation.
|
|
784
|
+
|
|
785
|
+
---
|
|
786
|
+
|
|
787
|
+
### 3. Staging
|
|
788
|
+
|
|
789
|
+
**Animation:** Present one idea at a time; the primary action draws the eye; secondary elements are subordinate.
|
|
790
|
+
|
|
791
|
+
**UX mapping:** One primary motion per state change. All other motion is either absent or staggered to follow.
|
|
792
|
+
- Never animate two elements of equal visual weight simultaneously
|
|
793
|
+
- Use stagger to create a reading order for entering content
|
|
794
|
+
- The element the user acted on should move first
|
|
795
|
+
|
|
796
|
+
---
|
|
797
|
+
|
|
798
|
+
### 4. Straight Ahead vs Pose to Pose
|
|
799
|
+
|
|
800
|
+
**Animation:** Straight-ahead: draw each frame in sequence. Pose-to-pose: define key positions and interpolate.
|
|
801
|
+
|
|
802
|
+
**UX mapping:** All CSS transitions and spring animations are pose-to-pose by definition — you define start and end states. This means:
|
|
803
|
+
- Transitions retarget smoothly when interrupted (see CSS Transitions vs Keyframes section above)
|
|
804
|
+
- The in-between frames are computed by the engine, not designed
|
|
805
|
+
- Design the **poses** (states) carefully; the interpolation handles itself
|
|
806
|
+
|
|
807
|
+
---
|
|
808
|
+
|
|
809
|
+
### 5. Follow Through and Overlapping Action
|
|
810
|
+
|
|
811
|
+
**Animation:** Parts of an object continue moving after the main action stops; related elements finish at slightly different times.
|
|
812
|
+
|
|
813
|
+
**UX mapping:** Stagger exit animations and let secondary elements settle slightly after primary.
|
|
814
|
+
```tsx
|
|
815
|
+
// List exit: items stagger out with slight delay between each
|
|
816
|
+
const container = {
|
|
817
|
+
exit: { transition: { staggerChildren: 0.04, staggerDirection: -1 } },
|
|
818
|
+
};
|
|
819
|
+
const item = {
|
|
820
|
+
exit: { opacity: 0, y: -8, transition: { duration: 0.2 } },
|
|
821
|
+
};
|
|
822
|
+
```
|
|
823
|
+
**Rule:** Follow-through delay ≤60ms per level. Beyond this, the UI feels sluggish.
|
|
824
|
+
|
|
825
|
+
---
|
|
826
|
+
|
|
827
|
+
### 6. Slow In and Slow Out
|
|
828
|
+
|
|
829
|
+
**Animation:** Objects accelerate from rest and decelerate to a stop; they are never at constant velocity.
|
|
830
|
+
|
|
831
|
+
**UX mapping:** Never use `linear` easing for UI transitions. Always use a curve that starts slow, speeds up, and decelerates.
|
|
832
|
+
```css
|
|
833
|
+
/* The standard Material/web ease — correct for most UI */
|
|
834
|
+
transition: transform 0.24s cubic-bezier(0.4, 0, 0.2, 1);
|
|
835
|
+
|
|
836
|
+
/* Enter (slow in) */
|
|
837
|
+
transition: transform 0.24s cubic-bezier(0, 0, 0.2, 1);
|
|
838
|
+
|
|
839
|
+
/* Exit (slow out) */
|
|
840
|
+
transition: transform 0.2s cubic-bezier(0.4, 0, 1, 1);
|
|
841
|
+
```
|
|
842
|
+
**Rule:** `linear` easing is only valid for: scroll-driven animations tied to position, and progress bar fills.
|
|
843
|
+
|
|
844
|
+
---
|
|
845
|
+
|
|
846
|
+
### 7. Arcs
|
|
847
|
+
|
|
848
|
+
**Animation:** Objects in the real world move in slight arcs, not straight lines.
|
|
849
|
+
|
|
850
|
+
**UX mapping:** For spatial transitions (element moving from one position to another), a slight arc feels more natural than a straight-line translate. Achieved by animating both axes with slightly different timing:
|
|
851
|
+
```tsx
|
|
852
|
+
<motion.div
|
|
853
|
+
initial={{ x: -40, y: 10, opacity: 0 }}
|
|
854
|
+
animate={{ x: 0, y: 0, opacity: 1 }}
|
|
855
|
+
transition={{
|
|
856
|
+
x: { type: "spring", stiffness: 300, damping: 28 },
|
|
857
|
+
y: { type: "spring", stiffness: 300, damping: 28, delay: 0.04 },
|
|
858
|
+
opacity: { duration: 0.2 },
|
|
859
|
+
}}
|
|
860
|
+
/>
|
|
861
|
+
```
|
|
862
|
+
**Rule:** Arcs apply only to spatial motion. Opacity, scale, and color changes do not arc.
|
|
863
|
+
|
|
864
|
+
---
|
|
865
|
+
|
|
866
|
+
### 8. Secondary Action
|
|
867
|
+
|
|
868
|
+
**Animation:** A supporting action that reinforces the primary one (e.g., a character's hair bouncing while they walk).
|
|
869
|
+
|
|
870
|
+
**UX mapping:** A small supplementary animation that confirms and amplifies the main interaction.
|
|
871
|
+
- Toast notification: icon pulses briefly after the toast appears (secondary action confirming the event)
|
|
872
|
+
- Success state: checkmark draws itself after the confirmation color appears
|
|
873
|
+
- Delete: item fades + the list count badge decrements with a small number-flip animation
|
|
874
|
+
|
|
875
|
+
**Rule:** Secondary actions must complete before or simultaneously with the primary — never after. They reinforce, not extend.
|
|
876
|
+
|
|
877
|
+
---
|
|
878
|
+
|
|
879
|
+
### 9. Timing
|
|
880
|
+
|
|
881
|
+
**Animation:** Duration communicates physical weight. Fast = light and snappy. Slow = heavy and significant.
|
|
882
|
+
|
|
883
|
+
**UX mapping:**
|
|
884
|
+
|
|
885
|
+
| Duration | Use for |
|
|
886
|
+
|---|---|
|
|
887
|
+
| 80–120ms | Micro-interactions: hover states, active states, icon swaps |
|
|
888
|
+
| 150–200ms | Standard component transitions: dropdowns, tooltips, toasts |
|
|
889
|
+
| 220–300ms | Page-level state changes, drawer open/close, modal appear |
|
|
890
|
+
| 300–500ms | Full-page route transitions |
|
|
891
|
+
| > 500ms | Reserved for intentionally cinematic moments only |
|
|
892
|
+
|
|
893
|
+
**Rule:** Match duration to the visual weight of the element. A small icon swap at 300ms feels lethargic; a full-page transition at 80ms feels jarring.
|
|
894
|
+
|
|
895
|
+
---
|
|
896
|
+
|
|
897
|
+
### 10. Exaggeration
|
|
898
|
+
|
|
899
|
+
**Animation:** Push key poses slightly beyond reality for emphasis and clarity.
|
|
900
|
+
|
|
901
|
+
**UX mapping:** Slight overshoot in spring animations communicates energy and intention.
|
|
902
|
+
```tsx
|
|
903
|
+
// Slight overshoot via underdamped spring — not bouncy, but alive
|
|
904
|
+
<motion.div
|
|
905
|
+
animate={{ scale: 1 }}
|
|
906
|
+
transition={{ type: "spring", stiffness: 400, damping: 22, mass: 0.8 }}
|
|
907
|
+
/>
|
|
908
|
+
// Peak scale ≈ 1.03–1.05 before settling — imperceptible consciously, felt physically
|
|
909
|
+
```
|
|
910
|
+
**Rule:** Exaggeration in UI should be invisible when you're looking for it. If users notice the bounce, it's too much. Target spring `bounce` values of 0.1–0.2.
|
|
911
|
+
|
|
912
|
+
---
|
|
913
|
+
|
|
914
|
+
### 11. Solid Drawing
|
|
915
|
+
|
|
916
|
+
**Animation:** Characters have weight, depth, and obey perspective; they feel three-dimensional.
|
|
917
|
+
|
|
918
|
+
**UX mapping:** UI elements should feel visually grounded — not floating. Shadows, depth layering, and transform-origin choices communicate which layer an element lives on.
|
|
919
|
+
- Drawers and sheets slide from an edge — they feel physically attached
|
|
920
|
+
- Modals emerge from center or from the triggering element — they float above the page
|
|
921
|
+
- Tooltips appear near the cursor — they are attached to the pointer
|
|
922
|
+
- `transform-origin` must match where the element conceptually emerges from
|
|
923
|
+
|
|
924
|
+
---
|
|
925
|
+
|
|
926
|
+
### 12. Appeal
|
|
927
|
+
|
|
928
|
+
**Animation:** Characters have a quality that makes the audience want to watch them — not necessarily cute, but interesting.
|
|
929
|
+
|
|
930
|
+
**UX mapping:** Animation has personality that is consistent with the product's brand.
|
|
931
|
+
|
|
932
|
+
| Product type | Animation personality |
|
|
933
|
+
|---|---|
|
|
934
|
+
| Financial / serious tools | Crisp, minimal, sub-150ms, no bounce |
|
|
935
|
+
| Consumer apps | Warm, slightly slower, gentle ease-out |
|
|
936
|
+
| Playful / creative tools | Spring physics, slight overshoot, expressive icon animations |
|
|
937
|
+
| Data dashboards | Smooth, purposeful, transitions that reveal data sequentially |
|
|
938
|
+
|
|
939
|
+
**Rule:** Animation personality must be decided once per product and applied consistently. Mixed personalities (snappy in one area, bouncy in another) destroy cohesion.
|
|
940
|
+
|
|
941
|
+
---
|
|
753
942
|
|
|
754
943
|
See also: `reference/motion-easings.md`, `reference/motion-spring.md`, `reference/framer-motion-patterns.md`
|
package/reference/registry.json
CHANGED
|
@@ -3,6 +3,34 @@
|
|
|
3
3
|
"version": 1,
|
|
4
4
|
"generated_at": "2026-04-24T00:00:00.000Z",
|
|
5
5
|
"entries": [
|
|
6
|
+
{
|
|
7
|
+
"name": "error-recovery",
|
|
8
|
+
"path": "reference/error-recovery.md",
|
|
9
|
+
"type": "meta-rules",
|
|
10
|
+
"phase": 20,
|
|
11
|
+
"description": "Phase 20 resilience recovery protocol — rate-limit + 429 + context-overflow retry guidance for the SDK runner (jittered-backoff / rate-guard / error-classifier / iteration-budget integration)"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "component-authoring",
|
|
15
|
+
"path": "reference/component-authoring.md",
|
|
16
|
+
"type": "heuristic",
|
|
17
|
+
"phase": 19.6,
|
|
18
|
+
"description": "Kowalski/Sonner 6-principle component quality standard (P-01 Minimal API, P-02 Composability, P-03 Defaults, P-04 Animation as State, P-05 Accessibility First, P-06 Edge Honesty) with grep-able audit signals"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "emotional-design",
|
|
22
|
+
"path": "reference/emotional-design.md",
|
|
23
|
+
"type": "heuristic",
|
|
24
|
+
"phase": 19.6,
|
|
25
|
+
"description": "Don Norman's visceral/behavioral/reflective three-level cross-cutting scoring lens with per-level rubrics and cross-level conflict patterns"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "first-principles",
|
|
29
|
+
"path": "reference/first-principles.md",
|
|
30
|
+
"type": "heuristic",
|
|
31
|
+
"phase": 19.6,
|
|
32
|
+
"description": "3-invariant framework (body/attention/memory) with grep-able principle→code pairs and reducibility test; wired into design-discussant brief stage"
|
|
33
|
+
},
|
|
6
34
|
{
|
|
7
35
|
"name": "DEPRECATIONS",
|
|
8
36
|
"path": "reference/DEPRECATIONS.md",
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://get-design-done.example/schemas/budget.schema.json",
|
|
4
|
+
"title": ".design/budget.json",
|
|
5
|
+
"description": "Shape of .design/budget.json — the Phase 10.1 optimization-layer budget governance file. Consumed by hooks/budget-enforcer.ts on every PreToolUse:Agent spawn. Bootstrap writes the Default Config from reference/config-schema.md if the file is missing.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": true,
|
|
8
|
+
"properties": {
|
|
9
|
+
"per_task_cap_usd": {
|
|
10
|
+
"type": "number",
|
|
11
|
+
"minimum": 0,
|
|
12
|
+
"description": "Hard ceiling per agent spawn (USD). Breach under enforcement_mode=enforce triggers D-02 block."
|
|
13
|
+
},
|
|
14
|
+
"per_phase_cap_usd": {
|
|
15
|
+
"type": "number",
|
|
16
|
+
"minimum": 0,
|
|
17
|
+
"description": "Cumulative ceiling across all spawns within the current phase (USD). Read from .design/STATE.md frontmatter `phase:` field."
|
|
18
|
+
},
|
|
19
|
+
"tier_overrides": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"additionalProperties": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"enum": ["haiku", "sonnet", "opus"]
|
|
24
|
+
},
|
|
25
|
+
"description": "Per-agent tier override map (agent-name -> tier). Wins over agent frontmatter default-tier per D-04."
|
|
26
|
+
},
|
|
27
|
+
"auto_downgrade_on_cap": {
|
|
28
|
+
"type": "boolean",
|
|
29
|
+
"description": "When true, hook silently rewrites tier -> haiku at 80% of per_task_cap_usd per D-03; logged as tier_downgraded: true in telemetry."
|
|
30
|
+
},
|
|
31
|
+
"cache_ttl_seconds": {
|
|
32
|
+
"type": "integer",
|
|
33
|
+
"minimum": 0,
|
|
34
|
+
"description": "TTL (seconds) driving .design/cache-manifest.json entry expiry per D-08 Layer B. Default 3600."
|
|
35
|
+
},
|
|
36
|
+
"enforcement_mode": {
|
|
37
|
+
"type": "string",
|
|
38
|
+
"enum": ["enforce", "warn", "log"],
|
|
39
|
+
"description": "D-11 enforcement policy. enforce = block + auto-downgrade; warn = print warnings but allow spawn; log = advisory-only telemetry without gating."
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/hegemonart/get-design-done/main/reference/schemas/events.schema.json",
|
|
4
|
+
"title": "Event",
|
|
5
|
+
"description": "One line of .design/telemetry/events.jsonl — the append-only telemetry stream produced by Plan 20-06. Each event is a single JSON object followed by a newline. See .planning/phases/20-gdd-sdk-foundation/20-06-PLAN.md.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["type", "timestamp", "sessionId", "payload"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"type": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"minLength": 1,
|
|
13
|
+
"description": "Free-form event type identifier. Pre-registered seeds: state.mutation, state.transition, stage.entered, stage.exited, hook.fired, error."
|
|
14
|
+
},
|
|
15
|
+
"timestamp": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"format": "date-time",
|
|
18
|
+
"description": "ISO-8601 timestamp of event emission."
|
|
19
|
+
},
|
|
20
|
+
"sessionId": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"minLength": 1,
|
|
23
|
+
"description": "Stable identifier per GDD pipeline run; correlates events across stages."
|
|
24
|
+
},
|
|
25
|
+
"stage": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"enum": ["brief", "explore", "plan", "design", "verify"],
|
|
28
|
+
"description": "Optional — present when the event is scoped to a pipeline stage."
|
|
29
|
+
},
|
|
30
|
+
"cycle": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"minLength": 1,
|
|
33
|
+
"description": "Optional — present when the event is scoped to a cycle identifier."
|
|
34
|
+
},
|
|
35
|
+
"payload": {
|
|
36
|
+
"type": "object",
|
|
37
|
+
"description": "Event-type-specific payload. Opaque at the envelope level."
|
|
38
|
+
},
|
|
39
|
+
"_meta": {
|
|
40
|
+
"type": "object",
|
|
41
|
+
"additionalProperties": false,
|
|
42
|
+
"required": ["pid", "host", "source"],
|
|
43
|
+
"properties": {
|
|
44
|
+
"pid": { "type": "integer", "minimum": 0 },
|
|
45
|
+
"host": { "type": "string" },
|
|
46
|
+
"source": { "type": "string" }
|
|
47
|
+
},
|
|
48
|
+
"description": "Writer-injected provenance. Never set by callers."
|
|
49
|
+
},
|
|
50
|
+
"_truncated": {
|
|
51
|
+
"type": "boolean",
|
|
52
|
+
"description": "Writer-set flag indicating the payload exceeded maxLineBytes and has been replaced by a placeholder."
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|