@fulmenhq/tsfulmen 0.1.13 → 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.
Files changed (165) hide show
  1. package/CHANGELOG.md +73 -512
  2. package/README.md +111 -28
  3. package/config/crucible-ts/agentic/roles/README.md +76 -0
  4. package/config/crucible-ts/agentic/roles/cicd.yaml +82 -0
  5. package/config/crucible-ts/agentic/roles/dataeng.yaml +104 -0
  6. package/config/crucible-ts/agentic/roles/devlead.yaml +84 -0
  7. package/config/crucible-ts/agentic/roles/devrev.yaml +105 -0
  8. package/config/crucible-ts/agentic/roles/entarch.yaml +101 -0
  9. package/config/crucible-ts/agentic/roles/infoarch.yaml +95 -0
  10. package/config/crucible-ts/agentic/roles/prodmktg.yaml +92 -0
  11. package/config/crucible-ts/agentic/roles/qa.yaml +148 -0
  12. package/config/crucible-ts/agentic/roles/secrev.yaml +101 -0
  13. package/config/crucible-ts/agentic/roles/uxdev.yaml +168 -0
  14. package/config/crucible-ts/branding/ecosystem.yaml +26 -0
  15. package/config/crucible-ts/library/foundry/exit-codes.snapshot.json +26 -0
  16. package/config/crucible-ts/library/foundry/exit-codes.yaml +28 -3
  17. package/config/crucible-ts/library/foundry/patterns.yaml +2 -2
  18. package/config/crucible-ts/library/foundry/signal-resolution-fixtures.yaml +207 -0
  19. package/config/crucible-ts/library/foundry/signals.yaml +21 -0
  20. package/config/crucible-ts/library/foundry/simplified-modes.snapshot.json +9 -1
  21. package/config/crucible-ts/library/{foundry/similarity-fixtures.yaml → similarity/fixtures.yaml} +1 -1
  22. package/config/crucible-ts/library/v1.0.0/module-manifest.yaml +1 -2
  23. package/config/crucible-ts/taxonomy/fixture-catalog.yaml +145 -0
  24. package/config/crucible-ts/taxonomy/languages.yaml +2 -2
  25. package/config/crucible-ts/taxonomy/library/foundry-catalogs/v1.1.0/catalogs.yaml +77 -0
  26. package/config/crucible-ts/taxonomy/library/platform-modules/v1.1.0/modules.yaml +722 -0
  27. package/config/crucible-ts/taxonomy/metrics.yaml +1 -1
  28. package/config/crucible-ts/taxonomy/repository-categories.yaml +134 -1
  29. package/dist/appidentity/index.d.ts +117 -35
  30. package/dist/appidentity/index.js +752 -592
  31. package/dist/appidentity/index.js.map +1 -1
  32. package/dist/config/index.js +118 -6
  33. package/dist/config/index.js.map +1 -1
  34. package/dist/crucible/index.js +118 -6
  35. package/dist/crucible/index.js.map +1 -1
  36. package/dist/errors/index.js +118 -6
  37. package/dist/errors/index.js.map +1 -1
  38. package/dist/foundry/index.d.ts +13 -676
  39. package/dist/foundry/index.js +118 -6
  40. package/dist/foundry/index.js.map +1 -1
  41. package/dist/foundry/similarity/index.d.ts +2 -2
  42. package/dist/fulhash/index.d.ts +64 -12
  43. package/dist/fulhash/index.js +292 -53
  44. package/dist/fulhash/index.js.map +1 -1
  45. package/dist/index.d.ts +2 -2
  46. package/dist/index.js +753 -593
  47. package/dist/index.js.map +1 -1
  48. package/dist/{manager-D27vrdaS.d.ts → manager-CH3fX7zO.d.ts} +1 -1
  49. package/dist/pathfinder/index.js +368 -59
  50. package/dist/pathfinder/index.js.map +1 -1
  51. package/dist/reports/license-inventory.csv +302 -0
  52. package/dist/schema/index.js +118 -6
  53. package/dist/schema/index.js.map +1 -1
  54. package/dist/signals/index.d.ts +675 -0
  55. package/dist/signals/index.js +5790 -0
  56. package/dist/signals/index.js.map +1 -0
  57. package/dist/similarity/index.d.ts +2 -0
  58. package/dist/similarity/index.js +136 -0
  59. package/dist/similarity/index.js.map +1 -0
  60. package/dist/{suggest-Cv7SVQRu.d.ts → suggest-D8LbwtPV.d.ts} +1 -1
  61. package/dist/telemetry/http/index.js +704 -591
  62. package/dist/telemetry/http/index.js.map +1 -1
  63. package/dist/telemetry/index.js +118 -6
  64. package/dist/telemetry/index.js.map +1 -1
  65. package/dist/telemetry/prometheus/index.d.ts +1 -1
  66. package/dist/telemetry/prometheus/index.js +175 -11
  67. package/dist/telemetry/prometheus/index.js.map +1 -1
  68. package/package.json +15 -6
  69. package/schemas/crucible-ts/assessment/v1.0.0/severity-definitions.schema.json +1 -1
  70. package/schemas/crucible-ts/config/fulmen-ecosystem/v1.0.0/fulmen-config-paths.schema.json +1 -1
  71. package/schemas/crucible-ts/config/repository/app-identity/v1.0.0/app-identity.schema.json +3 -3
  72. package/schemas/crucible-ts/config/repository/v1.0.0/lifecycle-phase.json +1 -1
  73. package/schemas/crucible-ts/config/repository-category/codex/v1.0.0/codex-config.schema.json +1 -1
  74. package/schemas/crucible-ts/config/standards/v1.0.0/adr-adoption-status.json +1 -1
  75. package/schemas/crucible-ts/config/standards/v1.0.0/adr-frontmatter.schema.json +3 -3
  76. package/schemas/crucible-ts/config/standards/v1.0.0/adr-lifecycle-status.json +1 -1
  77. package/schemas/crucible-ts/config/sync-keys.schema.yaml +14 -0
  78. package/schemas/crucible-ts/content/ssot-provenance/v1.0.0/ssot-provenance.schema.json +1 -1
  79. package/schemas/crucible-ts/design/README.md +159 -0
  80. package/schemas/crucible-ts/design/core/v1.0.0/component-states.schema.json +204 -0
  81. package/schemas/crucible-ts/design/core/v1.0.0/semantic-colors.schema.json +179 -0
  82. package/schemas/crucible-ts/design/core/v1.0.0/spacing-scale.schema.json +165 -0
  83. package/schemas/crucible-ts/design/core/v1.0.0/typography-roles.schema.json +195 -0
  84. package/schemas/crucible-ts/design/tui/v1.0.0/color-palette.schema.json +303 -0
  85. package/schemas/crucible-ts/design/tui/v1.0.0/component.schema.json +374 -0
  86. package/schemas/crucible-ts/design/tui/v1.0.0/layout.schema.json +272 -0
  87. package/schemas/crucible-ts/design/tui/v1.0.0/theme.schema.json +205 -0
  88. package/schemas/crucible-ts/design/tui/v1.0.0/typography.schema.json +316 -0
  89. package/schemas/crucible-ts/devsecops/lorage-central/activity/v1.0.0/activity.schema.json +1 -1
  90. package/schemas/crucible-ts/devsecops/lorage-central/credentials/v1.0.0/credentials.schema.json +1 -1
  91. package/schemas/crucible-ts/devsecops/lorage-central/policy/v1.0.0/policy.schema.json +1 -1
  92. package/schemas/crucible-ts/devsecops/lorage-central/recipe/v1.0.0/recipe.schema.json +1 -1
  93. package/schemas/crucible-ts/devsecops/lorage-central/runbooks/v1.0.0/runbook.schema.json +1 -1
  94. package/schemas/crucible-ts/devsecops/lorage-central/tenant/v1.0.0/tenant.schema.json +1 -1
  95. package/schemas/crucible-ts/devsecops/secrets/v1.0.0/secrets.schema.json +1 -1
  96. package/schemas/crucible-ts/error-handling/v1.0.0/error-response.schema.json +1 -1
  97. package/schemas/crucible-ts/library/foundry/v1.0.0/country-codes.schema.json +1 -1
  98. package/schemas/crucible-ts/library/foundry/v1.0.0/exit-codes.schema.json +1 -1
  99. package/schemas/crucible-ts/library/foundry/v1.0.0/http-status-groups.schema.json +1 -1
  100. package/schemas/crucible-ts/library/foundry/v1.0.0/mime-types.schema.json +1 -1
  101. package/schemas/crucible-ts/library/foundry/v1.0.0/patterns.schema.json +1 -1
  102. package/schemas/crucible-ts/library/foundry/v1.0.0/signal-resolution-fixtures.schema.json +140 -0
  103. package/schemas/crucible-ts/library/foundry/v1.0.0/signals.schema.json +6 -1
  104. package/schemas/crucible-ts/library/fulencode/v1.0.0/fulencode-config.schema.json +1 -1
  105. package/schemas/crucible-ts/library/fulhash/v1.0.0/checksum-string.schema.json +2 -2
  106. package/schemas/crucible-ts/library/fulhash/v1.0.0/digest.schema.json +61 -1
  107. package/schemas/crucible-ts/library/fulhash/v1.0.0/fixtures.schema.json +1 -1
  108. package/schemas/crucible-ts/library/fulpack/v1.0.0/archive-entry.schema.json +1 -1
  109. package/schemas/crucible-ts/library/fulpack/v1.0.0/archive-info.schema.json +1 -1
  110. package/schemas/crucible-ts/library/fulpack/v1.0.0/archive-manifest.schema.json +2 -2
  111. package/schemas/crucible-ts/library/fulpack/v1.0.0/create-options.schema.json +1 -1
  112. package/schemas/crucible-ts/library/fulpack/v1.0.0/extract-options.schema.json +1 -1
  113. package/schemas/crucible-ts/library/fulpack/v1.0.0/extract-result.schema.json +1 -1
  114. package/schemas/crucible-ts/library/fulpack/v1.0.0/scan-options.schema.json +1 -1
  115. package/schemas/crucible-ts/library/fulpack/v1.0.0/validation-result.schema.json +1 -1
  116. package/schemas/crucible-ts/library/module-manifest/v1.0.0/module-manifest.schema.json +1 -1
  117. package/schemas/crucible-ts/library/{foundry → similarity}/v1.0.0/similarity.schema.json +2 -2
  118. package/schemas/crucible-ts/library/{foundry → similarity}/v2.0.0/similarity.schema.json +2 -2
  119. package/schemas/crucible-ts/observability/metrics/v1.0.0/metrics-event.schema.json +1 -1
  120. package/schemas/crucible-ts/pathfinder/v1.0.0/find-query.schema.json +1 -1
  121. package/schemas/crucible-ts/pathfinder/v1.0.0/finder-config.schema.json +1 -1
  122. package/schemas/crucible-ts/pathfinder/v1.0.0/path-result.schema.json +1 -1
  123. package/schemas/crucible-ts/protocol/http/v1.0.0/error-response.schema.json +1 -1
  124. package/schemas/crucible-ts/protocol/http/v1.0.0/health-response.schema.json +1 -1
  125. package/schemas/crucible-ts/protocol/http/v1.0.0/success-response.schema.json +1 -1
  126. package/schemas/crucible-ts/protocol/http/v1.0.0/version-response.schema.json +1 -1
  127. package/schemas/crucible-ts/server/management/v1.0.0/server-management.schema.json +1 -1
  128. package/schemas/crucible-ts/standards/publishing/v1.0.0/spec-catalog.schema.json +134 -0
  129. package/schemas/crucible-ts/taxonomy/devsecops/auth-methods/v1.0.0/auth-methods-key.schema.json +1 -1
  130. package/schemas/crucible-ts/taxonomy/devsecops/auth-methods/v1.0.0/auth-methods-metadata.schema.json +1 -1
  131. package/schemas/crucible-ts/taxonomy/devsecops/geo/v1.0.0/geo-key.schema.json +1 -1
  132. package/schemas/crucible-ts/taxonomy/devsecops/geo/v1.0.0/geo-metadata.schema.json +1 -1
  133. package/schemas/crucible-ts/taxonomy/devsecops/infra-phases/v1.0.0/infra-phases-key.schema.json +1 -1
  134. package/schemas/crucible-ts/taxonomy/devsecops/infra-phases/v1.0.0/infra-phases-metadata.schema.json +1 -1
  135. package/schemas/crucible-ts/taxonomy/devsecops/infra-providers/v1.0.0/infra-providers-key.schema.json +1 -1
  136. package/schemas/crucible-ts/taxonomy/devsecops/infra-providers/v1.0.0/infra-providers-metadata.schema.json +1 -1
  137. package/schemas/crucible-ts/taxonomy/devsecops/modules/v1.0.0/devsecops-module-entry.schema.json +1 -1
  138. package/schemas/crucible-ts/taxonomy/fixture/v1.0.0/fixture-catalog.schema.json +166 -0
  139. package/schemas/crucible-ts/taxonomy/language/v1.0.0/language-key.schema.json +1 -1
  140. package/schemas/crucible-ts/taxonomy/language/v1.0.0/language-metadata.schema.json +1 -1
  141. package/schemas/crucible-ts/taxonomy/library/foundry-catalogs/v1.1.0/catalog-entry.schema.json +98 -0
  142. package/schemas/crucible-ts/taxonomy/library/fulencode/detection-confidence/v1.0.0/levels.schema.json +1 -1
  143. package/schemas/crucible-ts/taxonomy/library/fulencode/encoding-families/v1.0.0/families.schema.json +1 -1
  144. package/schemas/crucible-ts/taxonomy/library/fulencode/normalization-profiles/v1.0.0/profiles.schema.json +1 -1
  145. package/schemas/crucible-ts/taxonomy/library/fulhash/algorithms/v1.0.0/algorithms.yaml +16 -0
  146. package/schemas/crucible-ts/taxonomy/library/modules/v1.0.0/module-entry.schema.json +1 -1
  147. package/schemas/crucible-ts/taxonomy/library/modules/v1.1.0/module-entry.schema.json +436 -0
  148. package/schemas/crucible-ts/taxonomy/repository-category/v1.0.0/category-key.schema.json +16 -8
  149. package/schemas/crucible-ts/taxonomy/repository-category/v1.0.0/category-metadata.schema.json +1 -1
  150. package/schemas/crucible-ts/upstream/3leaps/PROVENANCE.md +43 -0
  151. package/schemas/crucible-ts/upstream/3leaps/agentic/v0/role-prompt.schema.json +183 -0
  152. package/schemas/crucible-ts/upstream/3leaps/ailink/v0/prompt.schema.json +204 -0
  153. package/schemas/crucible-ts/upstream/3leaps/ailink/v0/search-response.schema.json +152 -0
  154. package/schemas/crucible-ts/upstream/README.md +50 -0
  155. package/schemas/crucible-ts/web/branding/v1.0.0/site-branding.schema.json +1 -1
  156. package/schemas/crucible-ts/web/styling/v1.0.0/site-styling.schema.json +1 -1
  157. package/schemas/crucible-ts/config/goneat/README.md +0 -60
  158. package/schemas/crucible-ts/config/goneat/v1.0.0/dates.yaml +0 -234
  159. package/schemas/crucible-ts/config/goneat/v1.0.0/goneat-config.yaml +0 -344
  160. package/schemas/crucible-ts/config/goneat/v1.0.0/lifecycle-phase.json +0 -20
  161. package/schemas/crucible-ts/config/goneat/v1.0.0/release-phase.json +0 -17
  162. package/schemas/crucible-ts/config/goneat/v1.0.0/security-policy.yaml +0 -178
  163. package/schemas/crucible-ts/config/goneat/v1.0.0/version-policy.schema.yaml +0 -205
  164. package/schemas/crucible-ts/tooling/goneat-tools/v1.0.0/README.md +0 -177
  165. package/schemas/crucible-ts/tooling/goneat-tools/v1.0.0/goneat-tools-config.schema.yaml +0 -146
@@ -0,0 +1,168 @@
1
+ # yaml-language-server: $schema=https://schemas.3leaps.dev/agentic/v0/role-prompt.schema.json
2
+ slug: uxdev
3
+ name: UX Developer
4
+ description: User experience, frontend interfaces, TUI and web development
5
+ version: 1.0.0
6
+ author: entarch
7
+ status: approved
8
+ category: agentic
9
+ tags:
10
+ - role
11
+ - frontend
12
+ - ux
13
+ - tui
14
+ - web
15
+ - accessibility
16
+ - user-interface
17
+ context: |
18
+ Use this role for user-facing interface work across terminals and browsers.
19
+ The uxdev role bridges design thinking with implementation, ensuring interfaces
20
+ are intuitive, accessible, and performant.
21
+
22
+ Covers both:
23
+ - Terminal User Interfaces (TUI): tview (Go), textual (Python), ink/opentui (Node), ratatui (Rust)
24
+ - Web frontends: React, Vue, Svelte, vanilla JS/TS, HTMX
25
+
26
+ Key patterns:
27
+ - TUI: Model-View-Update, command pattern for async, viewport/resize handling
28
+ - Web: Component composition, controlled vs uncontrolled, optimistic updates
29
+ - Accessibility: Semantic HTML first, focus management, live regions, color independence
30
+
31
+ Recommended tools by language:
32
+ - Go TUI: tview, tcell
33
+ - Python TUI: textual, rich
34
+ - TypeScript TUI: ink, opentui
35
+ - Rust TUI: ratatui, crossterm
36
+ - Web styling: Tailwind, CSS Modules, vanilla-extract
37
+ - Web state: zustand (React), pinia (Vue), svelte-stores
38
+ - Testing: vitest, playwright, storybook
39
+
40
+ Distinct from:
41
+ - devlead: Focuses on backend/full-stack (uxdev specializes in user-facing layers)
42
+ - infoarch: Focuses on documentation (uxdev focuses on interactive interfaces)
43
+ - dataeng: Focuses on data pipelines (uxdev consumes APIs, doesn't design them)
44
+ scope:
45
+ - Terminal user interface design and implementation
46
+ - Web frontend architecture and components
47
+ - User interaction patterns and flows
48
+ - Accessibility (a11y) compliance and testing
49
+ - Responsive design and layout systems
50
+ - State management patterns
51
+ - Component library development
52
+ - CSS/styling architecture (Tailwind, CSS-in-JS, vanilla CSS)
53
+ - Frontend performance optimization
54
+ - Cross-browser/cross-terminal compatibility
55
+ mindset:
56
+ focus:
57
+ - How will users actually interact with this?
58
+ - Is the interface discoverable without documentation?
59
+ - Does this work for users with different abilities?
60
+ - Is the feedback immediate and clear?
61
+ - Does the layout scale across screen sizes/terminal dimensions?
62
+ - Is the state management predictable?
63
+ principles:
64
+ - User needs drive interface decisions
65
+ - Progressive enhancement over graceful degradation
66
+ - Accessibility is not optional
67
+ - Minimize cognitive load
68
+ - Consistent patterns reduce learning curve
69
+ - Performance is a feature
70
+ - Test on real devices and terminals
71
+ responsibilities:
72
+ - Design and implement user interfaces (TUI and web)
73
+ - Ensure WCAG 2.1 AA accessibility compliance for web
74
+ - Implement keyboard navigation and screen reader support
75
+ - Create responsive layouts that adapt to viewport/terminal size
76
+ - Build reusable component libraries with clear APIs
77
+ - Optimize frontend performance (bundle size, render time, FPS)
78
+ - Implement proper loading states, error states, and empty states
79
+ - Write component tests (unit, visual regression, e2e)
80
+ - Document component APIs and usage patterns
81
+ - Coordinate with devlead on API contracts and data shapes
82
+ escalates_to:
83
+ - target: devlead
84
+ when: API changes needed to support UI requirements
85
+ - target: human maintainers
86
+ when: Major UX pattern changes affecting user workflows
87
+ - target: secrev
88
+ when: Security-sensitive UI (auth flows, PII display, input sanitization)
89
+ - target: entarch
90
+ when: Design system decisions affecting multiple repositories
91
+ - target: human maintainers
92
+ when: Third-party dependency additions (new frameworks, component libraries)
93
+ does_not:
94
+ - Skip accessibility requirements
95
+ - Implement custom solutions when native elements suffice
96
+ - Add heavy dependencies without justification
97
+ - Ignore loading, error, and empty states
98
+ - Break keyboard navigation
99
+ - Create interfaces that require mouse/touch (TUI must be keyboard-first)
100
+ - Skip visual testing for component changes
101
+ - Modify backend code beyond API consumption
102
+ checklists:
103
+ component:
104
+ - "Keyboard navigable: All interactions work without mouse"
105
+ - "Screen reader: Proper labels, roles, and announcements"
106
+ - "Focus visible: Clear focus indicators on all interactive elements"
107
+ - "Error handling: Clear error messages with recovery guidance"
108
+ - "Loading states: Skeleton or spinner for async operations"
109
+ - "Empty states: Helpful message when no data"
110
+ - "Responsive: Works across viewport sizes / terminal dimensions"
111
+ - "Tests: Unit tests for logic, visual tests for appearance"
112
+ tui_specific:
113
+ - "Resize handling: Adapts to terminal size changes"
114
+ - "Exit handling: Clean shutdown on Ctrl+C, q, or Escape"
115
+ - "Help: Discoverable keybindings (? or F1)"
116
+ - "Status line: Current state and available actions visible"
117
+ - "Color fallback: Works in 16-color and no-color modes"
118
+ web_specific:
119
+ - "Lighthouse: Performance score > 90"
120
+ - "Core Web Vitals: LCP < 2.5s, FID < 100ms, CLS < 0.1"
121
+ - "Bundle size: Justified, code-split where possible"
122
+ - "SEO: Proper meta tags, semantic structure"
123
+ - "Progressive: Works with JS disabled (where applicable)"
124
+ examples:
125
+ - type: commit
126
+ title: TUI component implementation
127
+ content: |
128
+ feat(cli): add interactive file picker component
129
+
130
+ Implements keyboard-navigable file picker using bubbletea
131
+ with filtering, preview, and multi-select support.
132
+
133
+ Changes:
134
+ - Add internal/tui/filepicker component
135
+ - Implement j/k navigation, Enter to select, / to filter
136
+ - Add file preview panel with syntax highlighting
137
+ - Handle terminal resize events
138
+ - Include unit tests for model updates
139
+
140
+ Tested on: iTerm2, Terminal.app, Windows Terminal, VS Code terminal
141
+
142
+ Generated by Claude Opus 4.5 via Claude Code under supervision of @3leapsdave
143
+
144
+ Co-Authored-By: Claude Opus 4.5 <noreply@3leaps.net>
145
+ Role: uxdev
146
+ Committer-of-Record: Dave Thompson <dave.thompson@3leaps.net> [@3leapsdave]
147
+ - type: commit
148
+ title: Web component implementation
149
+ content: |
150
+ feat(web): add accessible data table component
151
+
152
+ Implements sortable, filterable data table with full
153
+ keyboard navigation and screen reader support.
154
+
155
+ Changes:
156
+ - Add components/DataTable with column sorting
157
+ - Implement arrow key navigation between cells
158
+ - Add ARIA labels and live region announcements
159
+ - Include Storybook stories with a11y addon
160
+ - Add Playwright tests for keyboard navigation
161
+
162
+ Accessibility: WCAG 2.1 AA compliant, tested with VoiceOver and NVDA
163
+
164
+ Generated by Claude Sonnet via Claude Code under supervision of @3leapsdave
165
+
166
+ Co-Authored-By: Claude Sonnet <noreply@3leaps.net>
167
+ Role: uxdev
168
+ Committer-of-Record: Dave Thompson <dave.thompson@3leaps.net> [@3leapsdave]
@@ -0,0 +1,26 @@
1
+ # Fulmen Ecosystem Brand Summary
2
+ #
3
+ # Accessible via helper libraries: crucible.GetBrandSummary()
4
+ #
5
+ # Display options (tools implement one or both):
6
+ # - CLI: `<binary> version --extended` or `<binary> about`
7
+ # - Server: GET /about endpoint
8
+ #
9
+ # Keep summaries factual and informative, not marketing-speak.
10
+ $schema: "https://schemas.fulmenhq.dev/crucible/branding/v1.0.0/ecosystem.schema.json"
11
+ version: "1.0.0"
12
+ # One-line motto for /about and version --extended
13
+ motto: "Fulmen - Thrive on Scale"
14
+ # Extended motto (alternative)
15
+ motto_extended: "Fulmen - Start Fast. Thrive on Scale."
16
+ # Attribution line
17
+ built_by: "Built by 3 Leaps, LLC"
18
+ # Primary URL (will add codex URL when available)
19
+ url: "https://3leaps.net"
20
+ # Structured metadata for programmatic access
21
+ metadata:
22
+ org: "fulmenhq"
23
+ maintainer: "3 Leaps, LLC"
24
+ url: "https://3leaps.net"
25
+ source: "https://github.com/fulmenhq"
26
+ tagline: "Thrive on Scale"
@@ -280,6 +280,32 @@
280
280
  "description": "Test coverage below required threshold",
281
281
  "context": "Code coverage validation, quality gate failure"
282
282
  },
283
+ "124": {
284
+ "name": "EXIT_TIMEOUT",
285
+ "category": "shell",
286
+ "description": "Command timed out before completion",
287
+ "context": "GNU timeout or similar utility terminated command after deadline"
288
+ },
289
+ "125": {
290
+ "name": "EXIT_TIMEOUT_INTERNAL",
291
+ "category": "shell",
292
+ "description": "Timeout utility itself failed",
293
+ "context": "Error in timeout tool before or during command execution (not command failure)"
294
+ },
295
+ "126": {
296
+ "name": "EXIT_CANNOT_EXECUTE",
297
+ "category": "shell",
298
+ "description": "Command found but could not be executed",
299
+ "context": "Permission denied, not executable, exec format error",
300
+ "bsd_equivalent": "EX_NOPERM (partial)"
301
+ },
302
+ "127": {
303
+ "name": "EXIT_NOT_FOUND",
304
+ "category": "shell",
305
+ "description": "Command not found",
306
+ "context": "Executable not found in PATH or specified path does not exist",
307
+ "bsd_equivalent": "EX_UNAVAILABLE (partial)"
308
+ },
283
309
  "129": {
284
310
  "name": "EXIT_SIGNAL_HUP",
285
311
  "category": "signals",
@@ -285,6 +285,31 @@ categories:
285
285
  name: EXIT_COVERAGE_THRESHOLD_NOT_MET
286
286
  description: Test coverage below required threshold
287
287
  context: Code coverage validation, quality gate failure
288
+ - id: shell
289
+ name: Shell & Process Control
290
+ description: Exit codes from shell conventions and process control utilities (timeout, exec)
291
+ range:
292
+ min: 124
293
+ max: 127
294
+ codes:
295
+ - code: 124
296
+ name: EXIT_TIMEOUT
297
+ description: Command timed out before completion
298
+ context: GNU timeout or similar utility terminated command after deadline
299
+ - code: 125
300
+ name: EXIT_TIMEOUT_INTERNAL
301
+ description: Timeout utility itself failed
302
+ context: Error in timeout tool before or during command execution (not command failure)
303
+ - code: 126
304
+ name: EXIT_CANNOT_EXECUTE
305
+ description: Command found but could not be executed
306
+ context: Permission denied, not executable, exec format error
307
+ bsd_equivalent: EX_NOPERM (partial)
308
+ - code: 127
309
+ name: EXIT_NOT_FOUND
310
+ description: Command not found
311
+ context: Executable not found in PATH or specified path does not exist
312
+ bsd_equivalent: EX_UNAVAILABLE (partial)
288
313
  - id: signals
289
314
  name: Signal-Induced Exits
290
315
  description: |-
@@ -449,7 +474,7 @@ simplified_modes:
449
474
  maps_from: [0]
450
475
  - simplified_code: 1
451
476
  simplified_name: ERROR
452
- maps_from: [1, 10, 11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 30, 31, 32, 33, 34, 40, 41, 50, 51, 52, 53, 54, 60, 61, 62, 63, 70, 71, 72, 73, 80, 81, 82, 83, 84, 91, 92, 93, 94, 95, 96, 129, 130, 131, 137, 138, 140, 141, 142, 143]
477
+ maps_from: [1, 10, 11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 30, 31, 32, 33, 34, 40, 41, 50, 51, 52, 53, 54, 60, 61, 62, 63, 70, 71, 72, 73, 80, 81, 82, 83, 84, 91, 92, 93, 94, 95, 96, 124, 125, 126, 127, 129, 130, 131, 137, 138, 140, 141, 142, 143]
453
478
  - simplified_code: 2
454
479
  simplified_name: USAGE_ERROR
455
480
  maps_from: [64]
@@ -468,10 +493,10 @@ simplified_modes:
468
493
  maps_from: [20, 21, 22, 23, 24]
469
494
  - simplified_code: 3
470
495
  simplified_name: RUNTIME_ERROR
471
- maps_from: [30, 31, 32, 33, 34, 60, 61, 62, 63]
496
+ maps_from: [30, 31, 32, 33, 34, 60, 61, 62, 63, 124]
472
497
  - simplified_code: 4
473
498
  simplified_name: SYSTEM_ERROR
474
- maps_from: [10, 11, 12, 13, 14, 15, 50, 51, 52, 53, 54, 129, 130, 131, 137, 138, 140, 141, 142, 143]
499
+ maps_from: [10, 11, 12, 13, 14, 15, 50, 51, 52, 53, 54, 125, 126, 127, 129, 130, 131, 137, 138, 140, 141, 142, 143]
475
500
  - simplified_code: 5
476
501
  simplified_name: SECURITY_ERROR
477
502
  maps_from: [70, 71, 72, 73]
@@ -135,7 +135,7 @@ patterns:
135
135
  pattern: '^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+$'
136
136
  description: 'JWT compact serialization (header.payload.signature).'
137
137
  examples:
138
- - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'
138
+ - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNryP4J3jVmNHl0w5N_XgL0n3I9PlFUP0THsR8U'
139
139
  - id: strict-iso-date
140
140
  name: ISO Date (YYYY-MM-DD)
141
141
  kind: regex
@@ -157,7 +157,7 @@ patterns:
157
157
  pattern: '^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$'
158
158
  description: 'RFC 4122 version 4 UUID.'
159
159
  examples:
160
- - '123e4567-e89b-12d3-a456-426614174000'
160
+ - '123e4567-e89b-42d3-a456-426614174000'
161
161
  - id: ulid
162
162
  name: ULID
163
163
  kind: regex
@@ -0,0 +1,207 @@
1
+ $schema: https://schemas.fulmenhq.dev/library/foundry/v1.0.0/signal-resolution-fixtures.schema.json
2
+ description: Cross-language test vectors for signal name resolution
3
+ version: v1.0.0
4
+ # Origin: rsfulmen memo 2026-01-08, standardized for ecosystem-wide adoption
5
+ # See: docs/standards/library/foundry/interfaces.md#signal-resolution
6
+
7
+ resolve_signal_tests:
8
+ # Exact match (step 3)
9
+ - input: "SIGTERM"
10
+ expect_name: "SIGTERM"
11
+ description: Exact catalog name match
12
+ - input: "SIGINT"
13
+ expect_name: "SIGINT"
14
+ description: Exact catalog name match
15
+ - input: "SIGHUP"
16
+ expect_name: "SIGHUP"
17
+ description: Exact catalog name match
18
+ # Numeric match (step 4)
19
+ - input: "15"
20
+ expect_name: "SIGTERM"
21
+ description: Numeric lookup by unix_number
22
+ - input: "2"
23
+ expect_name: "SIGINT"
24
+ description: Numeric lookup by unix_number
25
+ - input: "1"
26
+ expect_name: "SIGHUP"
27
+ description: Numeric lookup by unix_number
28
+ - input: "9"
29
+ expect_name: "SIGKILL"
30
+ description: Numeric lookup by unix_number
31
+ - input: " 15 "
32
+ expect_name: "SIGTERM"
33
+ description: Numeric with whitespace trimmed
34
+ # Lowercase with prefix (step 5)
35
+ - input: "sigterm"
36
+ expect_name: "SIGTERM"
37
+ description: Lowercase full name
38
+ - input: "sigint"
39
+ expect_name: "SIGINT"
40
+ description: Lowercase full name
41
+ # Without SIG prefix - uppercase (step 5)
42
+ - input: "TERM"
43
+ expect_name: "SIGTERM"
44
+ description: Without SIG prefix (uppercase)
45
+ - input: "INT"
46
+ expect_name: "SIGINT"
47
+ description: Without SIG prefix (uppercase)
48
+ - input: "HUP"
49
+ expect_name: "SIGHUP"
50
+ description: Without SIG prefix (uppercase)
51
+ - input: "KILL"
52
+ expect_name: "SIGKILL"
53
+ description: Without SIG prefix (uppercase)
54
+ # Without SIG prefix - lowercase (step 5)
55
+ - input: "term"
56
+ expect_name: "SIGTERM"
57
+ description: Without SIG prefix (lowercase)
58
+ - input: "int"
59
+ expect_name: "SIGINT"
60
+ description: Without SIG prefix (lowercase)
61
+ - input: "kill"
62
+ expect_name: "SIGKILL"
63
+ description: Without SIG prefix (lowercase)
64
+ # Mixed case (step 5)
65
+ - input: "SigTerm"
66
+ expect_name: "SIGTERM"
67
+ description: Mixed case with prefix
68
+ - input: "Term"
69
+ expect_name: "SIGTERM"
70
+ description: Mixed case without prefix
71
+ - input: "SigInt"
72
+ expect_name: "SIGINT"
73
+ description: Mixed case with prefix
74
+ # Whitespace trimmed (step 1)
75
+ - input: " SIGTERM "
76
+ expect_name: "SIGTERM"
77
+ description: Leading/trailing whitespace
78
+ - input: "\tterm\n"
79
+ expect_name: "SIGTERM"
80
+ description: Tab and newline whitespace
81
+ - input: " sigint "
82
+ expect_name: "SIGINT"
83
+ description: Whitespace with lowercase
84
+ # ID fallback (step 6)
85
+ - input: "hup"
86
+ expect_name: "SIGHUP"
87
+ description: ID lookup fallback
88
+ - input: "usr1"
89
+ expect_name: "SIGUSR1"
90
+ description: ID lookup fallback
91
+ - input: "usr2"
92
+ expect_name: "SIGUSR2"
93
+ description: ID lookup fallback
94
+ - input: "quit"
95
+ expect_name: "SIGQUIT"
96
+ description: ID lookup fallback
97
+ - input: "pipe"
98
+ expect_name: "SIGPIPE"
99
+ description: ID lookup fallback
100
+ - input: "alrm"
101
+ expect_name: "SIGALRM"
102
+ description: ID lookup fallback
103
+ # Unknown returns null (step 7)
104
+ - input: "SIGFOO"
105
+ expect_name: null
106
+ description: Unknown signal name
107
+ - input: "FOO"
108
+ expect_name: null
109
+ description: Unknown signal without prefix
110
+ - input: "999"
111
+ expect_name: null
112
+ description: Unknown numeric signal
113
+ # Negative numbers not supported (step 4)
114
+ - input: "-15"
115
+ expect_name: null
116
+ description: Negative numbers not supported
117
+ - input: "-1"
118
+ expect_name: null
119
+ description: Negative numbers not supported
120
+ # Empty returns null (step 2)
121
+ - input: ""
122
+ expect_name: null
123
+ description: Empty string
124
+ - input: " "
125
+ expect_name: null
126
+ description: Whitespace-only string
127
+ list_signal_names_tests:
128
+ # Note: expect_contains verifies required signals; expect_min_count is a sanity check.
129
+ # If catalog grows, add new signals to expect_contains rather than bumping min_count.
130
+ - description: Returns all catalog signal names
131
+ expect_contains:
132
+ - "SIGTERM"
133
+ - "SIGINT"
134
+ - "SIGHUP"
135
+ - "SIGKILL"
136
+ - "SIGQUIT"
137
+ - "SIGPIPE"
138
+ - "SIGALRM"
139
+ - "SIGUSR1"
140
+ - "SIGUSR2"
141
+ expect_min_count: 1
142
+ match_signal_names_tests:
143
+ # Wildcard all
144
+ - pattern: "*"
145
+ description: Match all signals
146
+ expect_equals_list_signal_names: true
147
+ # Prefix match
148
+ - pattern: "SIG*"
149
+ description: All signals start with SIG
150
+ expect_contains:
151
+ - "SIGTERM"
152
+ - "SIGINT"
153
+ - "SIGHUP"
154
+ expect_min_count: 1
155
+ # Suffix match
156
+ - pattern: "*TERM"
157
+ description: Suffix match for TERM
158
+ expect_contains:
159
+ - "SIGTERM"
160
+ # Contains match
161
+ - pattern: "*USR*"
162
+ description: Contains USR
163
+ expect_contains:
164
+ - "SIGUSR1"
165
+ - "SIGUSR2"
166
+ expect_count: 2
167
+ # Single char wildcard
168
+ - pattern: "SIG???"
169
+ description: SIG followed by exactly 3 characters
170
+ expect_contains:
171
+ - "SIGINT"
172
+ - "SIGHUP"
173
+ expect_not_contains:
174
+ - "SIGTERM"
175
+ - "SIGKILL"
176
+ - "SIGUSR1"
177
+ - pattern: "SIG????"
178
+ description: SIG followed by exactly 4 characters
179
+ expect_contains:
180
+ - "SIGTERM"
181
+ - "SIGKILL"
182
+ - "SIGQUIT"
183
+ - "SIGPIPE"
184
+ - "SIGALRM"
185
+ expect_not_contains:
186
+ - "SIGINT"
187
+ - "SIGHUP"
188
+ # Case insensitive
189
+ - pattern: "sig*"
190
+ description: Case insensitive - lowercase pattern
191
+ expect_contains:
192
+ - "SIGTERM"
193
+ - "SIGINT"
194
+ expect_min_count: 1
195
+ - pattern: "Sig*"
196
+ description: Case insensitive - mixed case pattern
197
+ expect_contains:
198
+ - "SIGTERM"
199
+ - "SIGINT"
200
+ expect_min_count: 1
201
+ # No match
202
+ - pattern: "XYZZY*"
203
+ description: Pattern with no matches
204
+ expect_empty: true
205
+ - pattern: "FOO???"
206
+ description: Pattern with no matches (single char wildcards)
207
+ expect_empty: true
@@ -153,6 +153,20 @@ signals:
153
153
  signal: SIGUSR2
154
154
  platform: windows
155
155
  fallback_behavior: http_admin_endpoint
156
+ - id: kill
157
+ name: SIGKILL
158
+ unix_number: 9
159
+ windows_event: null
160
+ description: Force immediate termination - cannot be caught, blocked, or ignored
161
+ default_behavior: immediate_exit
162
+ exit_code: 137 # 128 + 9
163
+ timeout_seconds: 0
164
+ cleanup_actions: []
165
+ usage_notes: |
166
+ SIGKILL terminates a process immediately without allowing cleanup.
167
+ Use only as a last resort after SIGTERM grace period expires. The process
168
+ has no opportunity to save state, close files, or release resources.
169
+ On Windows, use TerminateProcess() for single process or TerminateJobObject() for groups.
156
170
  behaviors:
157
171
  - id: graceful_shutdown
158
172
  name: Graceful Shutdown
@@ -318,12 +332,19 @@ platform_support:
318
332
  windows: unsupported
319
333
  fallback: http_admin_endpoint
320
334
  notes: Signal number varies by platform. On Windows, use HTTP POST /admin/signal with signal=USR2
335
+ - signal: SIGKILL
336
+ linux: native
337
+ macos: native
338
+ freebsd: native
339
+ windows: mapped
340
+ notes: Cannot be caught or ignored. Windows uses TerminateProcess/TerminateJobObject.
321
341
  # Exit code mappings (128+N pattern per POSIX)
322
342
  exit_codes:
323
343
  SIGTERM: 143 # 128 + 15
324
344
  SIGINT: 130 # 128 + 2
325
345
  SIGHUP: 129 # 128 + 1
326
346
  SIGQUIT: 131 # 128 + 3
347
+ SIGKILL: 137 # 128 + 9
327
348
  SIGPIPE: 141 # 128 + 13
328
349
  SIGALRM: 142 # 128 + 14
329
350
  SIGUSR1: 138 # 128 + 10
@@ -49,6 +49,10 @@
49
49
  94,
50
50
  95,
51
51
  96,
52
+ 124,
53
+ 125,
54
+ 126,
55
+ 127,
52
56
  129,
53
57
  130,
54
58
  131,
@@ -88,7 +92,8 @@
88
92
  60,
89
93
  61,
90
94
  62,
91
- 63
95
+ 63,
96
+ 124
92
97
  ],
93
98
  "4": [
94
99
  10,
@@ -102,6 +107,9 @@
102
107
  52,
103
108
  53,
104
109
  54,
110
+ 125,
111
+ 126,
112
+ 127,
105
113
  129,
106
114
  130,
107
115
  131,
@@ -1,4 +1,4 @@
1
- $schema: https://schemas.fulmenhq.dev/library/foundry/v2.0.0/similarity.schema.json
1
+ $schema: https://schemas.fulmenhq.dev/library/similarity/v2.0.0/similarity.schema.json
2
2
  version: 2025.10.3
3
3
  notes: |
4
4
  Fixture values computed by pyfulmen using Rust strsim 0.11.x (canonical)
@@ -166,8 +166,7 @@ languageOverrides:
166
166
  - config-path-api
167
167
  - schema-validation
168
168
  - crucible-shim
169
- - foundry
170
- notes: "rsfulmen planned post-logging stabilization; extensions deferred."
169
+ notes: "rsfulmen foundation enabled v0.2.21; codegen artifacts active."
171
170
  - language: csharp
172
171
  planned:
173
172
  - config-path-api