@orkestrel/scaffold 0.0.18 → 0.0.19
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/dist/host/AGENTS.md +4 -2
- package/dist/host/CLAUDE.md +22 -10
- package/dist/host/agents/skills/enterprise-bootstrap/SKILL.md +267 -0
- package/dist/host/agents/skills/enterprise-bootstrap/agents/openai.yaml +4 -0
- package/dist/host/agents/skills/enterprise-bootstrap/references/bootstrap-reference.md +609 -0
- package/dist/host/agents/skills/enterprise-bootstrap/references/components.md +994 -0
- package/dist/host/agents/skills/enterprise-bootstrap/references/frontend-design.md +59 -0
- package/dist/host/agents/skills/enterprise-bootstrap/references/utilities.md +312 -0
- package/dist/host/agents/skills/orkestrel-align-packages/references/integration.md +4 -13
- package/dist/host/agents/skills/orkestrel-build-application/SKILL.md +78 -50
- package/dist/host/agents/skills/orkestrel-debrief/SKILL.md +81 -0
- package/dist/host/agents/skills/orkestrel-debrief/agents/openai.yaml +4 -0
- package/dist/host/agents/skills/orkestrel-debrief/references/field-testing.md +75 -0
- package/dist/host/agents/skills/orkestrel-harden-package/SKILL.md +11 -9
- package/dist/host/agents/skills/orkestrel-harden-package/references/centralization.md +44 -59
- package/dist/host/agents/skills/orkestrel-harden-package/references/hardening.md +14 -6
- package/dist/host/agents/skills/orkestrel-polish-surface/SKILL.md +113 -0
- package/dist/host/agents/skills/orkestrel-polish-surface/agents/openai.yaml +4 -0
- package/dist/host/agents/skills/orkestrel-polish-surface/references/capture-harness.md +82 -0
- package/dist/host/claude/agents/builder.md +2 -0
- package/dist/host/claude/agents/codex.md +33 -26
- package/dist/host/claude/agents/grok.md +7 -0
- package/dist/host/claude/agents/implementer.md +2 -1
- package/dist/host/claude/agents/orkestrel.md +20 -15
- package/dist/host/claude/agents/planner.md +2 -1
- package/dist/host/claude/agents/reviewer.md +6 -0
- package/dist/host/claude/rules/documentation.md +1 -0
- package/dist/host/claude/rules/names.md +5 -7
- package/dist/host/claude/rules/quality.md +7 -5
- package/dist/host/claude/rules/styles.md +1 -0
- package/dist/host/claude/rules/tests.md +1 -0
- package/dist/host/claude/rules/typescript.md +3 -10
- package/dist/host/claude/rules/workspace.md +2 -5
- package/dist/host/claude/skills/enterprise-bootstrap/SKILL.md +12 -0
- package/dist/host/claude/skills/orkestrel-debrief/SKILL.md +12 -0
- package/dist/host/claude/skills/orkestrel-polish-surface/SKILL.md +12 -0
- package/dist/host/codex/agents/analyst.toml +6 -3
- package/dist/host/codex/agents/builder.toml +3 -2
- package/dist/host/codex/agents/checker.toml +4 -2
- package/dist/host/codex/agents/grok.toml +3 -1
- package/dist/host/codex/agents/implementer.toml +4 -2
- package/dist/host/codex/agents/opus.toml +5 -3
- package/dist/host/codex/agents/orkestrel.toml +6 -5
- package/dist/host/codex/agents/planner.toml +6 -2
- package/dist/host/codex/agents/reviewer.toml +7 -2
- package/dist/host/codex/config.toml +11 -2
- package/dist/host/dotfiles/prettierignore +3 -0
- package/dist/host/guides/src/scaffold.md +42 -12
- package/dist/host/manifest.json +80 -9
- package/dist/src/core/index.cjs +162 -14
- package/dist/src/core/index.cjs.map +1 -1
- package/dist/src/core/index.d.cts +17 -6
- package/dist/src/core/index.d.ts +17 -6
- package/dist/src/core/index.js +162 -15
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/server/index.cjs +9 -3
- package/dist/src/server/index.cjs.map +1 -1
- package/dist/src/server/index.d.cts +2 -1
- package/dist/src/server/index.d.ts +2 -1
- package/dist/src/server/index.js +10 -4
- package/dist/src/server/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/host/agents/skills/orkestrel-build-application/references/application.md +0 -129
- package/dist/host/claude/agents/application.md +0 -30
- package/dist/host/codex/agents/application.toml +0 -25
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Frontend Design
|
|
2
|
+
|
|
3
|
+
> Part of the `enterprise-bootstrap` package. Full aesthetic, typography,
|
|
4
|
+
> process, and copy guidance — use when setting visual direction.
|
|
5
|
+
> Operate layer: [SKILL.md](../SKILL.md).
|
|
6
|
+
|
|
7
|
+
Approach this as the design lead at a small studio known for giving every client a visual identity that could not be mistaken for anyone else's. This client has already rejected proposals that felt templated, and is paying for a distinctive point of view: make deliberate, opinionated choices about palette, typography, and layout that are specific to this brief, and take one real aesthetic risk you can justify.
|
|
8
|
+
|
|
9
|
+
## Ground it in the subject
|
|
10
|
+
|
|
11
|
+
If the brief does not pin down what the product or subject is, pin it yourself before designing: name one concrete subject, its audience, and the page's single job, and state your choice. If there's any information in your memory about the human's preferences, context about what they're building, or designs you've made before — use that as a hint. The subject's own world, its materials, instruments, artifacts, and vernacular, is where distinctive choices come from. Build with the brief's real content and subject matter throughout.
|
|
12
|
+
|
|
13
|
+
## Design principles
|
|
14
|
+
|
|
15
|
+
For web designs, the hero is a thesis. Open with the most characteristic thing in the subject's world, in whatever form makes sense for it: a headline, an image, an animation, a live demo, an interactive moment. Be deliberate with your choice: a big number with a small label, supporting stats, and a gradient accent is the template answer — only use it if that's truly the best option.
|
|
16
|
+
|
|
17
|
+
Typography carries the personality of the page. Pair the display and body faces deliberately, not the same families you would reach for on any other project, and set a clear type scale with intentional weights, widths, and spacing. Make the type treatment itself a memorable part of the design, not a neutral delivery vehicle for the content.
|
|
18
|
+
|
|
19
|
+
Structure is information. Structural devices — numbering, eyebrows, dividers, labels — should encode something true about the content, not decorate it. Many generic designs use numbered markers (01 / 02 / 03), but that's only appropriate if the content actually is a sequence, like a real process or a typed timeline where order carries information the reader needs. Question whether choices like numbered markers actually make sense before incorporating them.
|
|
20
|
+
|
|
21
|
+
Leverage motion deliberately. Think about where and whether animation can serve the subject: a page-load sequence, a scroll-triggered reveal, hover micro-interactions, ambient atmosphere. An orchestrated moment usually lands harder than scattered effects; choose what the direction calls for. Sometimes less is more — extra animation is one of the fastest ways to make a design feel AI-generated.
|
|
22
|
+
|
|
23
|
+
Match complexity to the vision. Maximalist directions need elaborate execution; minimal directions need precision in spacing, type, and detail. Elegance is executing the chosen vision well.
|
|
24
|
+
|
|
25
|
+
Consider written content carefully. A design brief often contains no real content, and it's up to you to come up with copy. Copy can make a design feel as templated as the layout itself. See the writing section below.
|
|
26
|
+
|
|
27
|
+
## Where the signature lives in product UI
|
|
28
|
+
|
|
29
|
+
The same craft applies to dense, authenticated tools — but the signature moves. In an admin screen or dashboard, the data is the content and must stay quiet, legible, and fast to scan; spending the aesthetic risk on the table itself taxes every user on every visit. Put the point of view in the chrome instead: the navigation and header treatment, the type pairing, the empty states, the way status and density are handled. A distinctive product UI is one whose _frame_ could not be mistaken for another product while its data surfaces stay disciplined and conventional enough to disappear into use.
|
|
30
|
+
|
|
31
|
+
## Process: brainstorm, explore, plan, critique, build, critique again
|
|
32
|
+
|
|
33
|
+
For calibration: AI-generated design right now clusters around three looks: (1) a warm cream background (near #F4F1EA) with a high-contrast serif display and a terracotta accent; (2) a near-black background with a single bright acid-green or vermilion accent; (3) a broadsheet-style layout with hairline rules, zero border-radius, and dense newspaper-like columns. All three are legitimate for some briefs, but they are defaults rather than choices, and they appear regardless of subject. Where the brief pins down a visual direction, follow it exactly — the brief's own words always win, including when it asks for one of these looks. Where it leaves an axis free, don't spend that freedom on one of these defaults. Just like a hired human designer, there's a careful balance between doing what you're good at and taking each project as a chance to experiment and learn.
|
|
34
|
+
|
|
35
|
+
Work in two passes. First, brainstorm a short design plan based on the human's design brief: create a compact token system with color, type, layout, and signature. Color: describe the palette as 4–6 named hex values. Type: the typefaces for 2+ roles (a characterful display face used with restraint, a complementary body face, and a utility face for captions or data if needed). Layout: a layout concept, using one-sentence prose descriptions and ASCII wireframes to ideate and compare. Signature: the single unique element this page will be remembered by, embodying the brief in an appropriate way.
|
|
36
|
+
|
|
37
|
+
Then review that plan against the brief before building: if any part of it reads like the generic default you would produce for any similar page (work through a similar prompt to see if you arrive somewhere similar) rather than a choice made for this specific brief — revise that part, and say what you changed and why. Only after you've confirmed the relative uniqueness of your design plan should you start to write the code, following the revised plan exactly and deriving every color and type decision from it.
|
|
38
|
+
|
|
39
|
+
When writing the code, be careful structuring your CSS selector specificities. It's easy to generate classes that cancel each other out (especially a type-based selector like `.section` against an element-based selector like `.cta`), and paddings/margins between sections are where it happens most.
|
|
40
|
+
|
|
41
|
+
Do a lot of this planning and iteration in your thinking, and only show ideas to the user when you have higher confidence they'll delight.
|
|
42
|
+
|
|
43
|
+
## Restraint and self-critique
|
|
44
|
+
|
|
45
|
+
Spend your boldness in one place. Let the signature element be the one memorable thing, keep everything around it quiet and disciplined, and cut any decoration that does not serve the brief. Not taking a risk can be a risk itself! Build to a quality floor without announcing it: responsive down to mobile, visible keyboard focus, reduced motion respected. Critique your own work as you build, taking screenshots if your environment supports it — a picture is worth 1000 tokens, and it is the only thing that can tell you whether the design you wrote is the design that rendered. Look at both themes and both the wide and the narrow viewport; a treatment that only exists in the markup is not a treatment yet. Consider Chanel's advice: before leaving the house, look in the mirror and remove one accessory. Human creators have memory and always try to do something new; if you have a place to jot down notes about what you've tried, it will help future passes.
|
|
46
|
+
|
|
47
|
+
## More on writing in design
|
|
48
|
+
|
|
49
|
+
Words appear in a design for one reason: to make it easier to understand, and therefore easier to use. They are design material, not decoration. Bring the same intentionality to copy that you bring to spacing and color. Before writing anything, ask what the design needs to say, and how it can best be said to help the person navigate the experience.
|
|
50
|
+
|
|
51
|
+
Write from the end user's side of the screen. Name things by what people control and recognize, never by how the system is built. A person manages notifications, not webhook config. Describe what something does in plain terms rather than selling it. Being specific is always better than being clever.
|
|
52
|
+
|
|
53
|
+
Use active voice as default. A control should say exactly what happens when it's used: "Save changes," not "Submit." An action keeps the same name through the whole flow, so the button that says "Publish" produces a toast that says "Published." The vocabulary of an interface is the signposting for someone navigating the product. Cohesion and consistency are how people learn their way around.
|
|
54
|
+
|
|
55
|
+
Treat failure and emptiness as moments for direction, not mood. Explain what went wrong and how to fix it, in the interface's voice rather than a person's. Errors don't apologize, and they are never vague about what happened. An empty screen is an invitation to act.
|
|
56
|
+
|
|
57
|
+
Keep the register conversational and tuned: plain verbs, sentence case, no filler, with tone matched to the brand and the audience. Let each element do exactly one job. A label labels, an example demonstrates, and nothing quietly does double duty.
|
|
58
|
+
|
|
59
|
+
Brevity on a control is not the same as vagueness. Where the surrounding context already names the object, the visible label can be a single word and stay unambiguous — the specific phrase then lives in the control's accessible name, so nothing is lost for someone who arrives without the context. The same discipline governs the visual vocabulary: a glyph is a word, and a word means one thing. Once a mark stands for "finished" it cannot also stand for "selected" three panels over, or the reader has to relearn the language on every screen.
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
# Bootstrap 5 Utilities Reference
|
|
2
|
+
|
|
3
|
+
> Part of the `enterprise-bootstrap` package. Bootstrap **5.3.x** class index +
|
|
4
|
+
> composition notes. Component markup: [components.md](components.md).
|
|
5
|
+
> Theming, patterns, a11y: [bootstrap-reference.md](bootstrap-reference.md).
|
|
6
|
+
|
|
7
|
+
## Contents
|
|
8
|
+
|
|
9
|
+
- [Utility classes](#utility-classes-quick-reference) — background, borders, text color, display, flexbox, float, interactions, links, object fit, opacity, overflow, position, shadows, sizing, spacing, text, vertical align, visibility, z-index
|
|
10
|
+
- [Scales](#spacing-scale) — spacing scale, z-index component scale
|
|
11
|
+
- [Print utilities](#print-utilities)
|
|
12
|
+
- [Helpers](#helpers) — visually-hidden, stretched-link, ratio, stacks, vr, focus-ring, icon-link
|
|
13
|
+
- [Enterprise notes](#enterprise-notes-utilities) — composition habits
|
|
14
|
+
|
|
15
|
+
## Utility Classes Quick Reference
|
|
16
|
+
|
|
17
|
+
### Background
|
|
18
|
+
|
|
19
|
+
```css
|
|
20
|
+
.bg-primary, .bg-secondary, .bg-success, .bg-danger, .bg-warning, .bg-info, .bg-light, .bg-dark, .bg-body, .bg-white, .bg-transparent, .bg-black
|
|
21
|
+
.bg-body-secondary, .bg-body-tertiary
|
|
22
|
+
.bg-primary-subtle, .bg-secondary-subtle, .bg-success-subtle, .bg-danger-subtle, .bg-warning-subtle, .bg-info-subtle, .bg-light-subtle, .bg-dark-subtle
|
|
23
|
+
.bg-gradient
|
|
24
|
+
.bg-opacity-10, .bg-opacity-25, .bg-opacity-50, .bg-opacity-75, .bg-opacity-100
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Prefer `bg-body-*` and `*-subtle` over `bg-white`/`bg-light` — they track `data-bs-theme` so dark mode works without extra rules.
|
|
28
|
+
|
|
29
|
+
### Borders
|
|
30
|
+
|
|
31
|
+
```css
|
|
32
|
+
.border, .border-top, .border-end, .border-bottom, .border-start
|
|
33
|
+
.border-0, .border-top-0, .border-end-0, .border-bottom-0, .border-start-0
|
|
34
|
+
.border-1, .border-2, .border-3, .border-4, .border-5 /* widths */
|
|
35
|
+
.border-primary, .border-secondary, .border-success, .border-danger, .border-warning, .border-info, .border-light, .border-dark, .border-white, .border-black
|
|
36
|
+
.border-primary-subtle, .border-secondary-subtle, .border-success-subtle, .border-danger-subtle, .border-warning-subtle, .border-info-subtle, .border-light-subtle, .border-dark-subtle
|
|
37
|
+
.border-opacity-10, .border-opacity-25, .border-opacity-50, .border-opacity-75, .border-opacity-100
|
|
38
|
+
.rounded, .rounded-top, .rounded-end, .rounded-bottom, .rounded-start, .rounded-circle, .rounded-pill
|
|
39
|
+
.rounded-0, .rounded-1, .rounded-2, .rounded-3, .rounded-4, .rounded-5
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
For borders that must stay visible in both color modes, prefer `border-*-subtle` variants (theme-adaptive) over raw color borders.
|
|
43
|
+
|
|
44
|
+
### Colors (Text)
|
|
45
|
+
|
|
46
|
+
```css
|
|
47
|
+
.text-primary, .text-secondary, .text-success, .text-danger, .text-warning, .text-info, .text-light, .text-dark
|
|
48
|
+
.text-body, .text-body-secondary, .text-body-tertiary, .text-body-emphasis
|
|
49
|
+
.text-primary-emphasis, .text-secondary-emphasis, .text-success-emphasis, .text-danger-emphasis, .text-warning-emphasis, .text-info-emphasis, .text-light-emphasis, .text-dark-emphasis
|
|
50
|
+
.text-black, .text-white, .text-black-50, .text-white-50
|
|
51
|
+
.text-muted /* DEPRECATED in 5.3 — use .text-body-secondary; removed in v6 */
|
|
52
|
+
.text-opacity-25, .text-opacity-50, .text-opacity-75, .text-opacity-100
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Display
|
|
56
|
+
|
|
57
|
+
```css
|
|
58
|
+
.d-none, .d-inline, .d-inline-block, .d-block, .d-grid, .d-inline-grid, .d-table, .d-table-cell, .d-table-row, .d-flex, .d-inline-flex
|
|
59
|
+
.d-{breakpoint}-none, .d-{breakpoint}-inline, .d-{breakpoint}-inline-block, .d-{breakpoint}-block, .d-{breakpoint}-grid, .d-{breakpoint}-inline-grid, .d-{breakpoint}-table, .d-{breakpoint}-table-cell, .d-{breakpoint}-table-row, .d-{breakpoint}-flex, .d-{breakpoint}-inline-flex
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Flexbox
|
|
63
|
+
|
|
64
|
+
```css
|
|
65
|
+
/* Direction */
|
|
66
|
+
.flex-row, .flex-column, .flex-row-reverse, .flex-column-reverse
|
|
67
|
+
.flex-{breakpoint}-row, .flex-{breakpoint}-column, .flex-{breakpoint}-row-reverse, .flex-{breakpoint}-column-reverse
|
|
68
|
+
|
|
69
|
+
/* Justify Content */
|
|
70
|
+
.justify-content-start, .justify-content-end, .justify-content-center, .justify-content-between, .justify-content-around, .justify-content-evenly
|
|
71
|
+
.justify-content-{breakpoint}-start, .justify-content-{breakpoint}-end, .justify-content-{breakpoint}-center, .justify-content-{breakpoint}-between, .justify-content-{breakpoint}-around, .justify-content-{breakpoint}-evenly
|
|
72
|
+
|
|
73
|
+
/* Align Items */
|
|
74
|
+
.align-items-start, .align-items-end, .align-items-center, .align-items-baseline, .align-items-stretch
|
|
75
|
+
.align-items-{breakpoint}-start, .align-items-{breakpoint}-end, .align-items-{breakpoint}-center, .align-items-{breakpoint}-baseline, .align-items-{breakpoint}-stretch
|
|
76
|
+
|
|
77
|
+
/* Align Self */
|
|
78
|
+
.align-self-start, .align-self-end, .align-self-center, .align-self-baseline, .align-self-stretch
|
|
79
|
+
|
|
80
|
+
/* Fill */
|
|
81
|
+
.flex-fill, .flex-{breakpoint}-fill
|
|
82
|
+
|
|
83
|
+
/* Grow/Shrink */
|
|
84
|
+
.flex-grow-0, .flex-grow-1, .flex-shrink-0, .flex-shrink-1
|
|
85
|
+
|
|
86
|
+
/* Wrap */
|
|
87
|
+
.flex-wrap, .flex-nowrap, .flex-wrap-reverse
|
|
88
|
+
|
|
89
|
+
/* Order */
|
|
90
|
+
.order-first, .order-0, .order-1, .order-2, .order-3, .order-4, .order-5, .order-last
|
|
91
|
+
|
|
92
|
+
/* Align Content */
|
|
93
|
+
.align-content-start, .align-content-end, .align-content-center, .align-content-between, .align-content-around, .align-content-stretch
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Float
|
|
97
|
+
|
|
98
|
+
```css
|
|
99
|
+
.float-start, .float-end, .float-none
|
|
100
|
+
.float-{breakpoint}-start, .float-{breakpoint}-end, .float-{breakpoint}-none
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Interactions
|
|
104
|
+
|
|
105
|
+
```css
|
|
106
|
+
.user-select-all, .user-select-auto, .user-select-none
|
|
107
|
+
.pe-none, .pe-auto /* pointer-events */
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
`.pe-none` blocks pointer input only — keyboard and assistive tech can still reach the element. Pair with `tabindex="-1"` and `aria-disabled="true"`, or better, use the real `disabled` attribute on form controls and drop `href` on links.
|
|
111
|
+
|
|
112
|
+
### Link
|
|
113
|
+
|
|
114
|
+
```css
|
|
115
|
+
.link-primary, .link-secondary, .link-success, .link-danger, .link-warning, .link-info, .link-light, .link-dark
|
|
116
|
+
.link-body-emphasis
|
|
117
|
+
.link-opacity-10, .link-opacity-25, .link-opacity-50, .link-opacity-75, .link-opacity-100
|
|
118
|
+
.link-underline, .link-underline-primary (…per theme color)
|
|
119
|
+
.link-underline-opacity-0, .link-underline-opacity-10, .link-underline-opacity-25, .link-underline-opacity-50, .link-underline-opacity-75, .link-underline-opacity-100
|
|
120
|
+
.link-offset-1, .link-offset-2, .link-offset-3
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Object Fit
|
|
124
|
+
|
|
125
|
+
```css
|
|
126
|
+
.object-fit-contain, .object-fit-cover, .object-fit-fill, .object-fit-scale, .object-fit-none
|
|
127
|
+
.object-fit-{breakpoint}-contain, .object-fit-{breakpoint}-cover, .object-fit-{breakpoint}-fill, .object-fit-{breakpoint}-scale, .object-fit-{breakpoint}-none
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Opacity
|
|
131
|
+
|
|
132
|
+
```css
|
|
133
|
+
.opacity-0, .opacity-25, .opacity-50, .opacity-75, .opacity-100
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Overflow
|
|
137
|
+
|
|
138
|
+
```css
|
|
139
|
+
.overflow-auto, .overflow-hidden, .overflow-visible, .overflow-scroll
|
|
140
|
+
.overflow-x-auto, .overflow-x-hidden, .overflow-x-visible, .overflow-x-scroll
|
|
141
|
+
.overflow-y-auto, .overflow-y-hidden, .overflow-y-visible, .overflow-y-scroll
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Position
|
|
145
|
+
|
|
146
|
+
```css
|
|
147
|
+
.position-static, .position-relative, .position-absolute, .position-fixed, .position-sticky
|
|
148
|
+
.fixed-top, .fixed-bottom
|
|
149
|
+
.sticky-top, .sticky-bottom
|
|
150
|
+
.top-0, .top-50, .top-100
|
|
151
|
+
.bottom-0, .bottom-50, .bottom-100
|
|
152
|
+
.start-0, .start-50, .start-100
|
|
153
|
+
.end-0, .end-50, .end-100
|
|
154
|
+
.translate-middle, .translate-middle-x, .translate-middle-y
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Shadows
|
|
158
|
+
|
|
159
|
+
```css
|
|
160
|
+
.shadow-none, .shadow-sm, .shadow, .shadow-lg
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Sizing
|
|
164
|
+
|
|
165
|
+
Bootstrap ships exactly these — nothing else (no `.vw-25`, `.vh-50`, `.mw-auto`, `.min-vh-75`, etc.; add missing steps via the utilities API if a project truly needs them — see [bootstrap-reference.md](bootstrap-reference.md)):
|
|
166
|
+
|
|
167
|
+
```css
|
|
168
|
+
/* Width / height (percent of parent) */
|
|
169
|
+
.w-25, .w-50, .w-75, .w-100, .w-auto
|
|
170
|
+
.h-25, .h-50, .h-75, .h-100, .h-auto
|
|
171
|
+
|
|
172
|
+
/* Max */
|
|
173
|
+
.mw-100, .mh-100
|
|
174
|
+
|
|
175
|
+
/* Viewport */
|
|
176
|
+
.vw-100, .vh-100, .min-vw-100, .min-vh-100
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Spacing
|
|
180
|
+
|
|
181
|
+
```css
|
|
182
|
+
/* Format: {property}{sides}-{size} or {property}{sides}-{breakpoint}-{size} */
|
|
183
|
+
/* Property: m (margin), p (padding) */
|
|
184
|
+
/* Sides: t, b, s (start), e (end), x, y, (blank) */
|
|
185
|
+
/* Size: 0, 1, 2, 3, 4, 5, auto (margins only) */
|
|
186
|
+
|
|
187
|
+
.m-0 … .m-5, .m-auto .mt-* .mb-* .ms-* .me-* .mx-* .my-* (same sizes, + auto)
|
|
188
|
+
.p-0 … .p-5 .pt-* .pb-* .ps-* .pe-* .px-* .py-* (same sizes)
|
|
189
|
+
|
|
190
|
+
/* Gap — flex and grid parents */
|
|
191
|
+
.gap-0 … .gap-5
|
|
192
|
+
.row-gap-0 … .row-gap-5
|
|
193
|
+
.column-gap-0 … .column-gap-5
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Notes: `s`/`e` are logical start/end — they flip automatically under RTL; never reach for physical left/right. `.g-*` / `.gx-*` / `.gy-*` are **row gutters** (used on `.row`), a separate system from `gap-*`. Negative margins exist in source but are disabled by default (`$enable-negative-margins`).
|
|
197
|
+
|
|
198
|
+
### Text
|
|
199
|
+
|
|
200
|
+
```css
|
|
201
|
+
/* Alignment */
|
|
202
|
+
.text-start, .text-center, .text-end
|
|
203
|
+
.text-{breakpoint}-start, .text-{breakpoint}-center, .text-{breakpoint}-end
|
|
204
|
+
|
|
205
|
+
/* Wrap / break */
|
|
206
|
+
.text-wrap, .text-nowrap, .text-break
|
|
207
|
+
|
|
208
|
+
/* Transform */
|
|
209
|
+
.text-lowercase, .text-uppercase, .text-capitalize
|
|
210
|
+
|
|
211
|
+
/* Weight / italics */
|
|
212
|
+
.fw-lighter, .fw-light, .fw-normal, .fw-medium, .fw-semibold, .fw-bold, .fw-bolder
|
|
213
|
+
.fst-normal, .fst-italic
|
|
214
|
+
|
|
215
|
+
/* Line height */
|
|
216
|
+
.lh-1, .lh-sm, .lh-base, .lh-lg
|
|
217
|
+
|
|
218
|
+
/* Family / reset / decoration */
|
|
219
|
+
.font-monospace, .text-reset
|
|
220
|
+
.text-decoration-none, .text-decoration-underline, .text-decoration-line-through
|
|
221
|
+
|
|
222
|
+
/* Size */
|
|
223
|
+
.fs-1, .fs-2, .fs-3, .fs-4, .fs-5, .fs-6
|
|
224
|
+
|
|
225
|
+
/* Truncate — needs display block/inline-block or a flex child with min-width 0 */
|
|
226
|
+
.text-truncate
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Two composition traps in this group:
|
|
230
|
+
|
|
231
|
+
- **`fs-*` without `lh-1` grows the row.** A resized glyph or mark keeps the parent's line-height, so the line box stretches and the row sits taller than its neighbors. Pair `fs-*` with `lh-1` on anything that is a mark rather than a paragraph.
|
|
232
|
+
- **`text-truncate` zeroes a flex item's automatic minimum size** (that's the `min-width: 0` it carries). Inside a flex _column_, that also removes the floor that kept a heading at its own height: a growing sibling then squeezes the title from the bottom until it clips. Floor the title with `flex-shrink-0` and let the growing sibling absorb the change.
|
|
233
|
+
|
|
234
|
+
### Vertical Align
|
|
235
|
+
|
|
236
|
+
```css
|
|
237
|
+
.align-baseline, .align-top, .align-middle, .align-bottom, .align-text-top, .align-text-bottom
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Visibility
|
|
241
|
+
|
|
242
|
+
```css
|
|
243
|
+
.visible, .invisible
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### Z-index
|
|
247
|
+
|
|
248
|
+
```css
|
|
249
|
+
.z-n1, .z-0, .z-1, .z-2, .z-3 /* NOT responsive — no breakpoint variants exist */
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
## Spacing Scale
|
|
253
|
+
|
|
254
|
+
| Class | Size |
|
|
255
|
+
| ------ | ------------------------------ |
|
|
256
|
+
| `0` | 0 |
|
|
257
|
+
| `1` | $spacer \* .25 (0.25rem = 4px) |
|
|
258
|
+
| `2` | $spacer \* .5 (0.5rem = 8px) |
|
|
259
|
+
| `3` | $spacer (1rem = 16px) |
|
|
260
|
+
| `4` | $spacer \* 1.5 (1.5rem = 24px) |
|
|
261
|
+
| `5` | $spacer \* 3 (3rem = 48px) |
|
|
262
|
+
| `auto` | auto |
|
|
263
|
+
|
|
264
|
+
## Z-index Scale (components)
|
|
265
|
+
|
|
266
|
+
| Component | Z-index |
|
|
267
|
+
| ------------------ | ------- |
|
|
268
|
+
| Dropdown | 1000 |
|
|
269
|
+
| Sticky | 1020 |
|
|
270
|
+
| Fixed | 1030 |
|
|
271
|
+
| Offcanvas backdrop | 1040 |
|
|
272
|
+
| Offcanvas | 1045 |
|
|
273
|
+
| Modal backdrop | 1050 |
|
|
274
|
+
| Modal | 1055 |
|
|
275
|
+
| Popover | 1070 |
|
|
276
|
+
| Tooltip | 1080 |
|
|
277
|
+
| Toast | 1090 |
|
|
278
|
+
|
|
279
|
+
## Print Utilities
|
|
280
|
+
|
|
281
|
+
```css
|
|
282
|
+
.d-print-none, .d-print-inline, .d-print-inline-block, .d-print-block, .d-print-grid, .d-print-table, .d-print-table-cell, .d-print-table-row, .d-print-flex, .d-print-inline-flex
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
## Helpers
|
|
286
|
+
|
|
287
|
+
Helpers are single-purpose classes that sit alongside utilities.
|
|
288
|
+
|
|
289
|
+
- **`.visually-hidden`** — hide visually, keep for screen readers (icon-button labels, table caption text, "Danger:" prefixes).
|
|
290
|
+
- **`.visually-hidden-focusable`** — hidden until focused; the skip-link class. Never combine with `.visually-hidden`.
|
|
291
|
+
- **`.stretched-link`** — makes a whole `position-relative` container (e.g. a card) the click target of one inner link, without wrapping everything in `<a>`.
|
|
292
|
+
- **`.ratio .ratio-16x9`** (also `1x1`, `4x3`, `21x9`, or `--bs-aspect-ratio`) — responsive embeds/iframes.
|
|
293
|
+
- **`.vstack` / `.hstack gap-*`** — shorthand vertical/horizontal flex stacks for quick toolbars and side rails.
|
|
294
|
+
- **`.vr`** — vertical rule divider inside an `.hstack` or flex row.
|
|
295
|
+
- **`.focus-ring`** (+ `.focus-ring-primary` … per theme color) — opt-in focus ring for custom interactive elements; tune via `--bs-focus-ring-width` (.25rem), `--bs-focus-ring-opacity` (.25), `--bs-focus-ring-color`, `--bs-focus-ring-x/y/blur`. Use it instead of `outline: none` hacks so keyboard focus stays visible.
|
|
296
|
+
- **`.icon-link`** (+ `.icon-link-hover`) — pairs a Bootstrap Icon SVG with a text link; icon auto-sizes to 1em; give decorative icons `aria-hidden="true"`. Hover shift via `--bs-icon-link-transform`.
|
|
297
|
+
|
|
298
|
+
## Enterprise notes (utilities)
|
|
299
|
+
|
|
300
|
+
### Composition habits
|
|
301
|
+
|
|
302
|
+
- **Spacing scale:** prefer `gap-*` on flex/grid parents over scattering `m-*` on every child — the parent owns rhythm, children stay reorderable. Use `p-3` / `p-4` for panel padding; reserve `p-5` for sparse marketing-like empty states.
|
|
303
|
+
- **Body surfaces:** `bg-body`, `bg-body-secondary`, `bg-body-tertiary` track `data-bs-theme` — raw `bg-white` / `bg-light` freeze the surface in light mode.
|
|
304
|
+
- **Text hierarchy:** `text-body` for content, `text-body-secondary` for meta, `text-*-emphasis` when a status must stay readable on subtle backgrounds. `text-body-tertiary` is the decoration tier — it misses the 4.5:1 bar for information-bearing small text, so anything a user must read is `text-body-secondary` or better.
|
|
305
|
+
- **Opacity traps:** `text-white-50` / `text-black-50` often fail contrast — prefer `text-opacity-75` on a known solid, or `text-body-secondary`. Every one of these pairings is measured against the shipped cascade in both themes; a skin retunes the same token names.
|
|
306
|
+
- **Flex floors:** a flex column gives its items an automatic minimum size, and `text-truncate` removes it. Titles and marks that must keep their height carry `flex-shrink-0`; only the growing sibling absorbs the slack.
|
|
307
|
+
- **Flex toolbars:** `d-flex align-items-center gap-2 flex-wrap` (or `flex-nowrap overflow-auto` for dense bars). Equal-height siblings: `align-items-stretch` + `h-100` on cards.
|
|
308
|
+
- **Responsive hide:** show the best layout per breakpoint (`d-none d-md-block` vs `d-md-none`) rather than cramming one layout everywhere. Below `sm`, hide button captions (`d-none d-sm-inline` on the label span, `aria-label` on the control so the accessible name stays) before you let the brand or page title truncate.
|
|
309
|
+
- **RTL safety:** always `ms-*`/`me-*`/`ps-*`/`pe-*`, `text-start`/`text-end`, `float-start`/`float-end` — the logical model is what lets one build serve LTR and RTL.
|
|
310
|
+
- **Density as a system:** when a screen offers compact/comfortable density, drive it from a token or wrapper class that swaps padding — not ad-hoc `-sm` sprinkling per element ([bootstrap-reference.md](bootstrap-reference.md) → Design tokens).
|
|
311
|
+
- **Shadows:** `shadow-sm` for panels in product UI; `shadow-lg` rarely belongs in dense admin screens.
|
|
312
|
+
- **Print:** mark chrome `d-print-none`; keep the data table/results printable.
|
|
@@ -2,20 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
## Map ownership
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Dependency direction across environments is the root project model in `AGENTS.md`, detailed for placement in `.claude/rules/workspace.md` and for app composition in `.claude/rules/application.md`. Read those; this reference does not restate them. Apply the same law to a dependency's `@orkestrel/<package>/browser` and `/server` exports, whose bare export is its core API.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
| ------------- | ------------------------------------------------------------------- | -------------------------------------- |
|
|
9
|
-
| `src/core` | host-independent Orkestrel core packages | Node, DOM, browser/server environments |
|
|
10
|
-
| `src/server` | its core and server-capable dependencies | browser/app environments |
|
|
11
|
-
| `src/browser` | its core and browser-capable dependencies | Node/server/app environments |
|
|
12
|
-
| `app/core` | host-independent library/core and app/core logic | Node, DOM, app/server, app/browser |
|
|
13
|
-
| `app/server` | app/core plus core/server libraries | browser/app/browser |
|
|
14
|
-
| `app/browser` | app/core plus core/browser libraries and shared transport contracts | Node/app/server implementation |
|
|
15
|
-
|
|
16
|
-
Browser application code reaches server behavior through shared contracts and transports, not server implementation imports.
|
|
17
|
-
|
|
18
|
-
Framework packages own reusable mechanisms. Applications own workflows, policy, presentation, users, authorization decisions, and product-specific defaults.
|
|
7
|
+
Ownership across packages is what those rules leave open: framework packages own reusable mechanisms, and applications own workflows, policy, presentation, users, authorization decisions, and product-specific defaults.
|
|
19
8
|
|
|
20
9
|
## Use consumers as evidence
|
|
21
10
|
|
|
@@ -53,4 +42,6 @@ Place each proof at the highest useful layer:
|
|
|
53
42
|
|
|
54
43
|
Use the actual packages and transports. Use temporary resources or protocol-faithful fixture servers for deterministic network boundaries. Use the real external service when its behavior is the claim. Never simulate an owned package with a mock or fake.
|
|
55
44
|
|
|
45
|
+
When the claim is that a foreign client can consume the stack — an editor, an agent CLI, a third-party protocol client — one representative real client of that class drives the surface end to end before the claim ships. Record the exact commands, the authentication and approval model that client needed, and every part of the surface it could not reach. Protocol-level tests prove the protocol; only the client proves the integration.
|
|
46
|
+
|
|
56
47
|
Test both successful composition and contract disagreement: invalid options, unavailable capability, partial failure, abort/cleanup, version mismatch, and lifecycle ordering where applicable.
|
|
@@ -5,60 +5,88 @@ description: Design, scaffold, extend, or harden Orkestrel `app/core`, `app/brow
|
|
|
5
5
|
|
|
6
6
|
# Build an Orkestrel application
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
`.claude/rules/architecture.md`, `.claude/rules/documentation.md`, and every other rule
|
|
10
|
-
selected by the files in scope. Then read
|
|
11
|
-
[`references/application.md`](references/application.md) completely.
|
|
8
|
+
## Load authority
|
|
12
9
|
|
|
13
|
-
|
|
10
|
+
Read the current files in this order:
|
|
14
11
|
|
|
15
|
-
1.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
12
|
+
1. `AGENTS.md`.
|
|
13
|
+
2. `.claude/rules/application.md` for composition, entries, manifest safety, and
|
|
14
|
+
lifecycle; `.claude/rules/workspace.md` for environments, aliases, configuration, and
|
|
15
|
+
scripts; `.claude/rules/architecture.md` for placement and barrels;
|
|
16
|
+
`.claude/rules/tests.md` for test law; `.claude/rules/documentation.md` for parity;
|
|
17
|
+
plus every other rule the files in scope select.
|
|
18
|
+
3. `guides/README.md`, the governing application guide, and `ROADMAP.md` when present.
|
|
19
|
+
4. The authoritative `*/types.ts` of each selected environment, the root
|
|
20
|
+
`tsconfig.json` and `vite.config.ts`, the manifest, and `configs/app`.
|
|
21
|
+
|
|
22
|
+
Those rules are the contract; this skill is only the workflow. Where a step names a law,
|
|
23
|
+
read the law rather than this summary of it.
|
|
24
|
+
|
|
25
|
+
## Select the environments
|
|
26
|
+
|
|
27
|
+
`--src` selects published src environments and `--app` selects private app environments.
|
|
28
|
+
The selections are independent, at least one is required, each offers `core`, `browser`,
|
|
29
|
+
and `server`, and there is no `--surfaces` synonym.
|
|
30
|
+
|
|
31
|
+
| Selection | What it owns |
|
|
32
|
+
| ----------- | ------------------------------------------------------------------------ |
|
|
33
|
+
| app/core | Host-independent contracts and composition; check and test only |
|
|
34
|
+
| app/browser | Vue runtime behind an `index.html` entry, `vue-tsc`, real Chromium tests |
|
|
35
|
+
| app/server | Node runtime, `dist/app/server/main.cjs` with only `node:*` external |
|
|
36
|
+
|
|
37
|
+
Core-only, browser-only, and server-only applications are valid. A browser+server pair
|
|
38
|
+
includes app/core so the shared transport contracts have one host-independent owner.
|
|
39
|
+
|
|
40
|
+
## Execute the workflow
|
|
41
|
+
|
|
42
|
+
1. **Inventory** existing `src`, `app`, `configs`, tests, manifest scripts, aliases, and
|
|
43
|
+
guide rows. Treat current code as evidence, not policy.
|
|
44
|
+
2. **Contract first.** Define or refine each environment's `types.ts` before
|
|
45
|
+
implementation, and inspect the exact installed `@orkestrel/*` capabilities before
|
|
46
|
+
writing any boundary code.
|
|
47
|
+
3. **Wire configuration.** Root `tsconfig.json` owns the `@app/*` aliases and root
|
|
48
|
+
`vite.config.ts` derives from them and owns the Vitest projects; `configs/app` holds
|
|
49
|
+
thin target wrappers and scoped tsconfigs.
|
|
50
|
+
4. **Implement completely** — entries, barrels, centralized declarations, one-class
|
|
51
|
+
implementation files, environment parsing, lifecycle, builds, and scripts — under the
|
|
52
|
+
placement and manifest laws. Parse the options container and its host and port leaves
|
|
53
|
+
before mutation, rejecting wrong-shaped containers, empty hosts, and non-integer,
|
|
54
|
+
negative, or out-of-range ports with a coded error and its guard.
|
|
55
|
+
5. **Own the shutdown contract.** Lifecycle transitions serialize in call order, an
|
|
56
|
+
ephemeral restart re-requests port zero, stop closes hostile active connections
|
|
57
|
+
deterministically, and runner stop idempotently releases its signal listeners. Runner
|
|
58
|
+
generations isolate asynchronous failures so an older transition cannot release a
|
|
59
|
+
newer run's listeners, and convenience startup returns the runner rather than hiding
|
|
60
|
+
that cleanup.
|
|
61
|
+
6. **Keep boundary enforcement inside the configured toolchain,** each layer owning what
|
|
33
62
|
it can express: Oxlint `no-restricted-imports` for literal-string declared package,
|
|
34
63
|
alias, and conventional relative import direction; Oxfmt for formatting;
|
|
35
64
|
`tests/setupPolicy.ts` as the narrow TypeScript compiler-API pass over computed and
|
|
36
65
|
template-literal specifiers, declaration placement, and the barrel law; scoped
|
|
37
|
-
TypeScript projects for host-global isolation; and Vite's real
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
repository gates in their required order.
|
|
66
|
+
TypeScript projects for host-global isolation; and Vite's real builds and
|
|
67
|
+
environment-boundary plugin for Vue, CSS, assets, workers, runtime resolution, and
|
|
68
|
+
physical workspace containment. Add no standalone boundary script and no second
|
|
69
|
+
parser or source-language analyzer duplicating those layers. Disable the browser
|
|
70
|
+
application's public directory so an unmanaged file copy cannot bypass the module
|
|
71
|
+
graph. Keep browser-only runtime tooling development-only and require explicit
|
|
72
|
+
authorization before adding a Sass compiler.
|
|
73
|
+
7. **Prove it on real hosts.** app/browser tests run on Playwright-backed Vitest Browser
|
|
74
|
+
Mode against real DOM, probing the installed executable directly with
|
|
75
|
+
`existsSync(chromium.executablePath())` rather than guessing a channel or reading an
|
|
76
|
+
environment flag; app/server tests bind port zero on loopback and use real fetch;
|
|
77
|
+
real child-process tests prove executable readiness, collision exit, signal
|
|
78
|
+
termination, and port release, remembering that Windows reports
|
|
79
|
+
`ChildProcess.kill('SIGTERM')` as OS termination by signal while POSIX delivery
|
|
80
|
+
exercises the graceful listener and exits zero. A capability-dependent test probes the
|
|
81
|
+
actual capability and scopes any skip narrowly.
|
|
82
|
+
8. **Document and prove parity** for every app export and behavioral method: guide,
|
|
83
|
+
examples, manifest index, and the parity specifiers walking the existing `src` and
|
|
84
|
+
`app` roots and every selected alias.
|
|
85
|
+
9. **Verify.** Run the rules' cleanup sweeps over source and tests, then one independent
|
|
86
|
+
design audit, one independent objective audit, a mechanical conformance pass, and the
|
|
87
|
+
repository gates in their required order. Generated CI runs those gates on the declared
|
|
88
|
+
minimum Node release and on the current major.
|
|
61
89
|
|
|
62
|
-
Do not add showcase, authentication, persistence, proxy, styling-system, or
|
|
63
|
-
|
|
64
|
-
|
|
90
|
+
Do not add showcase, authentication, persistence, proxy, styling-system, or product
|
|
91
|
+
policy unless the request requires it. Do not leave placeholders, compatibility shims,
|
|
92
|
+
empty setup files, or deferred app behavior.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: orkestrel-debrief
|
|
3
|
+
description: Convert a closed campaign's residue into portable truth through field evidence, a findings ledger, fix loops with live re-proof, canon refinement, and disciplined disposal. Use after a campaign or milestone closes to audit what was built and how it was built, when live field testing must precede judgment, when learnings must propagate into skills/rules/guides/scaffold, or when working ledgers must fold into canon and retire.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Debrief a closed campaign
|
|
7
|
+
|
|
8
|
+
## Load authority
|
|
9
|
+
|
|
10
|
+
Read the current files in this order:
|
|
11
|
+
|
|
12
|
+
1. `AGENTS.md`.
|
|
13
|
+
2. Every applicable `.claude/rules/*.md`; the documentation and quality laws bind every
|
|
14
|
+
ledger entry and every canon refinement this skill produces.
|
|
15
|
+
3. [field-testing.md](references/field-testing.md) before running or judging any live
|
|
16
|
+
field pass.
|
|
17
|
+
4. `guides/README.md`, the governing guide for what the campaign built, and `ROADMAP.md`.
|
|
18
|
+
|
|
19
|
+
The user's current instruction wins. The debrief judges both the artifact and the process
|
|
20
|
+
that produced it; neither is exempt.
|
|
21
|
+
|
|
22
|
+
## The debrief laws
|
|
23
|
+
|
|
24
|
+
- **Use it before you judge it.** A debrief of a surface nobody drove is a review of
|
|
25
|
+
intentions. Field evidence — real clients, real harnesses, goal-only prompts — precedes
|
|
26
|
+
every finding about usability, and the field transcript is the evidence of record.
|
|
27
|
+
- **Evidence is verbatim or it is not evidence.** The ledger quotes exact commands, exact
|
|
28
|
+
refusals, exact reasoning-trace lines. A paraphrase cannot be re-verified after the
|
|
29
|
+
session that produced it is gone.
|
|
30
|
+
- **Every finding ends in exactly one bucket**: fix now; canon refinement (skill, rule,
|
|
31
|
+
guide); promotion (package/library boundary move); stays as-is with the reason; or
|
|
32
|
+
dropped on the record with the refuting evidence. A finding with no bucket is an
|
|
33
|
+
unfinished debrief.
|
|
34
|
+
- **Fixes are re-proven by the class of evidence that found them.** A defect found by a
|
|
35
|
+
live field pass is closed by a live field pass, never by the fix's own tests alone.
|
|
36
|
+
- **Portable versus resident.** Anything reusable beyond this repository — process
|
|
37
|
+
doctrine, teaching-surface laws, harness knowledge — lands in the portable skill/rule
|
|
38
|
+
set and propagates through the scaffold. Repository-specific truth lands in the guide.
|
|
39
|
+
Forward-looking work lands in `ROADMAP.md`. Nothing load-bearing stays only in the
|
|
40
|
+
ledger.
|
|
41
|
+
- **The ledger is ephemeral.** The debrief folder is a working file: fold every surviving
|
|
42
|
+
truth into its destination, then delete the folder on the owner's explicit go-ahead —
|
|
43
|
+
never silently, and never leave it as residue after its campaign.
|
|
44
|
+
|
|
45
|
+
## Run the round
|
|
46
|
+
|
|
47
|
+
1. **Scope.** Name the campaign(s) under debrief, the artifact surfaces involved, and the
|
|
48
|
+
audiences that matter (human operators, frontier models, small models, external
|
|
49
|
+
clients). State what evidence already exists and what must be produced live.
|
|
50
|
+
2. **Field passes.** Drive the artifact with representative real consumers per
|
|
51
|
+
[field-testing.md](references/field-testing.md): goal-only prompts, no coaching, the
|
|
52
|
+
tier ladder from frontier to the smallest model that matters, reasoning traces
|
|
53
|
+
captured wherever the runtime exposes them. Record every pass verbatim in the ledger.
|
|
54
|
+
3. **Layer audits.** In parallel with the field passes, audit each layer the campaign
|
|
55
|
+
touched: implementation boundaries (what belongs a layer down or in a published
|
|
56
|
+
package), the process record (which dispatches failed, which laws were missing, where
|
|
57
|
+
executors deviated), and the instruction set itself (agents, rules, skills — what
|
|
58
|
+
confused an executor is a defect in the instruction, not the executor).
|
|
59
|
+
4. **Reconcile into the ledger.** Number the findings, attach verbatim evidence to each,
|
|
60
|
+
and bucket every one. Confusion signatures from reasoning traces are findings about
|
|
61
|
+
the artifact's teaching surface, not anecdotes — see the signature catalog in
|
|
62
|
+
[field-testing.md](references/field-testing.md).
|
|
63
|
+
5. **Fix loops.** Dispatch fix-now findings as bounded units under the repository's
|
|
64
|
+
engine contract, serialized, failing-first. After each round, re-run the field passes
|
|
65
|
+
that found the class and record the delta. Iterate until the field tier that matters
|
|
66
|
+
walks the surface unaided or the residual is proven to be consumer-floor, not
|
|
67
|
+
artifact darkness — state which, with evidence.
|
|
68
|
+
6. **Canon refinement.** Write or revise the portable skills/rules the findings justify;
|
|
69
|
+
update the guide for resident truth; update `ROADMAP.md` for forward work. Every
|
|
70
|
+
retained finding names the artifact that now carries it.
|
|
71
|
+
7. **Propagate.** Land the portable set in the scaffold repository so every future
|
|
72
|
+
project inherits it; run the scaffold's own gates before pushing.
|
|
73
|
+
8. **Dispose.** Present the ledger's disposition map to the owner: what folded where,
|
|
74
|
+
what remains open. Delete the ledger only on their explicit go-ahead.
|
|
75
|
+
|
|
76
|
+
## Verdict shape
|
|
77
|
+
|
|
78
|
+
Each debrief round ends with one fixed report: the finding table (id, evidence pointer,
|
|
79
|
+
bucket, carrier), the field-pass scoreboard before and after, the canon delta (files
|
|
80
|
+
created or changed), and exactly one terminal line — `DEBRIEF: FOLDED` when every finding
|
|
81
|
+
has a carrier and the propagation is pushed, or `DEBRIEF: OPEN` with the blocking items.
|