opendevbrowser 0.0.19 → 0.0.21
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/README.md +32 -24
- package/dist/automation/coordinator.d.ts +61 -2
- package/dist/automation/coordinator.d.ts.map +1 -1
- package/dist/browser/browser-manager.d.ts +6 -1
- package/dist/browser/browser-manager.d.ts.map +1 -1
- package/dist/browser/canvas-manager.d.ts +4 -0
- package/dist/browser/canvas-manager.d.ts.map +1 -1
- package/dist/browser/manager-types.d.ts +6 -1
- package/dist/browser/manager-types.d.ts.map +1 -1
- package/dist/browser/ops-browser-manager.d.ts +6 -1
- package/dist/browser/ops-browser-manager.d.ts.map +1 -1
- package/dist/browser/screencast-recorder.d.ts.map +1 -1
- package/dist/browser/session-inspector.d.ts +39 -0
- package/dist/browser/session-inspector.d.ts.map +1 -1
- package/dist/canvas/document-store.d.ts +14 -5
- package/dist/canvas/document-store.d.ts.map +1 -1
- package/dist/canvas/starters/catalog.d.ts.map +1 -1
- package/dist/canvas/types.d.ts +120 -9
- package/dist/canvas/types.d.ts.map +1 -1
- package/dist/challenges/action-loop.d.ts +2 -1
- package/dist/challenges/action-loop.d.ts.map +1 -1
- package/dist/challenges/capture.d.ts +14 -0
- package/dist/challenges/capture.d.ts.map +1 -0
- package/dist/challenges/index.d.ts +3 -1
- package/dist/challenges/index.d.ts.map +1 -1
- package/dist/challenges/inspect-plan.d.ts +40 -0
- package/dist/challenges/inspect-plan.d.ts.map +1 -0
- package/dist/challenges/orchestrator.d.ts.map +1 -1
- package/dist/challenges/types.d.ts +34 -0
- package/dist/challenges/types.d.ts.map +1 -1
- package/dist/{chunk-YBQECXZX.js → chunk-3VA6XR25.js} +3 -3
- package/dist/chunk-3VA6XR25.js.map +1 -0
- package/dist/{chunk-W4IHGDXV.js → chunk-4KVXCXV3.js} +25778 -24279
- package/dist/chunk-4KVXCXV3.js.map +1 -0
- package/dist/{chunk-5FZQJRBQ.js → chunk-ZE2E7ZGH.js} +3013 -1010
- package/dist/chunk-ZE2E7ZGH.js.map +1 -0
- package/dist/cli/commands/challenge-automation-mode.d.ts +3 -0
- package/dist/cli/commands/challenge-automation-mode.d.ts.map +1 -0
- package/dist/cli/commands/inspiredesign.d.ts +25 -0
- package/dist/cli/commands/inspiredesign.d.ts.map +1 -0
- package/dist/cli/commands/macro-resolve.d.ts.map +1 -1
- package/dist/cli/commands/nav/review-desktop.d.ts +7 -0
- package/dist/cli/commands/nav/review-desktop.d.ts.map +1 -0
- package/dist/cli/commands/nav/review-shared.d.ts +10 -0
- package/dist/cli/commands/nav/review-shared.d.ts.map +1 -0
- package/dist/cli/commands/nav/review.d.ts.map +1 -1
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/session/inspector-audit.d.ts +7 -0
- package/dist/cli/commands/session/inspector-audit.d.ts.map +1 -0
- package/dist/cli/commands/session/inspector-plan.d.ts +7 -0
- package/dist/cli/commands/session/inspector-plan.d.ts.map +1 -0
- package/dist/cli/commands/session/inspector-shared.d.ts +11 -0
- package/dist/cli/commands/session/inspector-shared.d.ts.map +1 -0
- package/dist/cli/commands/session/inspector.d.ts +1 -11
- package/dist/cli/commands/session/inspector.d.ts.map +1 -1
- package/dist/cli/commands/status-capabilities.d.ts +7 -0
- package/dist/cli/commands/status-capabilities.d.ts.map +1 -0
- package/dist/cli/daemon-client.d.ts.map +1 -1
- package/dist/cli/daemon-commands.d.ts.map +1 -1
- package/dist/cli/daemon-status.d.ts +5 -0
- package/dist/cli/daemon-status.d.ts.map +1 -1
- package/dist/cli/daemon.d.ts +5 -0
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/help.d.ts +2 -0
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/index.js +660 -244
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/remote-manager.d.ts +6 -0
- package/dist/cli/remote-manager.d.ts.map +1 -1
- package/dist/cli/utils/parse.d.ts +1 -0
- package/dist/cli/utils/parse.d.ts.map +1 -1
- package/dist/cli/utils/skills.d.ts +1 -1
- package/dist/cli/utils/skills.d.ts.map +1 -1
- package/dist/cli/utils/workflow-message.d.ts +3 -0
- package/dist/cli/utils/workflow-message.d.ts.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/core/bootstrap.d.ts.map +1 -1
- package/dist/core/runtime-assemblies.d.ts +2 -1
- package/dist/core/runtime-assemblies.d.ts.map +1 -1
- package/dist/core/types.d.ts +1 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/desktop/runtime.d.ts +1 -0
- package/dist/desktop/runtime.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +729 -448
- package/dist/index.js.map +1 -1
- package/dist/inspiredesign/handoff.d.ts +34 -0
- package/dist/inspiredesign/handoff.d.ts.map +1 -0
- package/dist/opendevbrowser.d.ts.map +1 -1
- package/dist/opendevbrowser.js +729 -448
- package/dist/opendevbrowser.js.map +1 -1
- package/dist/providers/browser-fallback.d.ts.map +1 -1
- package/dist/providers/constraint.d.ts +11 -0
- package/dist/providers/constraint.d.ts.map +1 -1
- package/dist/providers/cookie-source.d.ts +8 -0
- package/dist/providers/cookie-source.d.ts.map +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/inspiredesign-capture.d.ts +17 -0
- package/dist/providers/inspiredesign-capture.d.ts.map +1 -0
- package/dist/providers/inspiredesign-contract.d.ts +110 -0
- package/dist/providers/inspiredesign-contract.d.ts.map +1 -0
- package/dist/providers/renderer.d.ts +23 -0
- package/dist/providers/renderer.d.ts.map +1 -1
- package/dist/providers/runtime-bundle.d.ts +2 -1
- package/dist/providers/runtime-bundle.d.ts.map +1 -1
- package/dist/providers/runtime-factory.d.ts +4 -2
- package/dist/providers/runtime-factory.d.ts.map +1 -1
- package/dist/providers/shopping/index.d.ts +1 -1
- package/dist/providers/types.d.ts +3 -2
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/workflow-contracts.d.ts +1 -1
- package/dist/providers/workflow-contracts.d.ts.map +1 -1
- package/dist/providers/workflow-handoff.d.ts +14 -0
- package/dist/providers/workflow-handoff.d.ts.map +1 -0
- package/dist/providers/workflows.d.ts +21 -2
- package/dist/providers/workflows.d.ts.map +1 -1
- package/dist/{providers-G36AM3Z2.js → providers-ZIVHHH4F.js} +6 -2
- package/dist/public-surface/generated-manifest.d.ts +143 -7
- package/dist/public-surface/generated-manifest.d.ts.map +1 -1
- package/dist/public-surface/source.d.ts +102 -3
- package/dist/public-surface/source.d.ts.map +1 -1
- package/dist/relay/protocol.d.ts +1 -1
- package/dist/relay/protocol.d.ts.map +1 -1
- package/dist/relay/relay-server.d.ts +1 -0
- package/dist/relay/relay-server.d.ts.map +1 -1
- package/dist/skills/skill-loader.js +1 -1
- package/dist/tools/automation-shared.d.ts +6 -0
- package/dist/tools/automation-shared.d.ts.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/inspiredesign_run.d.ts +4 -0
- package/dist/tools/inspiredesign_run.d.ts.map +1 -0
- package/dist/tools/review_desktop.d.ts +4 -0
- package/dist/tools/review_desktop.d.ts.map +1 -0
- package/dist/tools/session_inspector.d.ts.map +1 -1
- package/dist/tools/session_inspector_audit.d.ts +4 -0
- package/dist/tools/session_inspector_audit.d.ts.map +1 -0
- package/dist/tools/session_inspector_plan.d.ts +4 -0
- package/dist/tools/session_inspector_plan.d.ts.map +1 -0
- package/dist/tools/status_capabilities.d.ts +4 -0
- package/dist/tools/status_capabilities.d.ts.map +1 -0
- package/extension/dist/background.js +70 -10
- package/extension/dist/canvas/canvas-runtime.js +14 -1
- package/extension/dist/ops/ops-runtime.js +18 -1
- package/extension/dist/popup.js +29 -16
- package/extension/dist/services/ConnectionManager.js +27 -2
- package/extension/manifest.json +1 -1
- package/extension/popup.html +11 -0
- package/package.json +5 -5
- package/skills/AGENTS.md +2 -2
- package/skills/opendevbrowser-best-practices/SKILL.md +50 -15
- package/skills/opendevbrowser-best-practices/artifacts/canvas-governance-playbook.md +31 -12
- package/skills/opendevbrowser-best-practices/artifacts/command-channel-reference.md +64 -15
- package/skills/opendevbrowser-best-practices/artifacts/provider-workflows.md +4 -0
- package/skills/opendevbrowser-best-practices/artifacts/skill-runtime-surface-matrix.md +11 -10
- package/skills/opendevbrowser-best-practices/assets/templates/canvas-blocker-checklist.json +28 -22
- package/skills/opendevbrowser-best-practices/assets/templates/canvas-generation-plan.v1.json +18 -17
- package/skills/opendevbrowser-best-practices/assets/templates/canvas-handshake-example.json +135 -17
- package/skills/opendevbrowser-best-practices/assets/templates/skill-runtime-pack-matrix.json +55 -8
- package/skills/opendevbrowser-best-practices/assets/templates/surface-audit-checklist.json +18 -4
- package/skills/opendevbrowser-best-practices/scripts/odb-workflow.sh +16 -4
- package/skills/opendevbrowser-best-practices/scripts/run-robustness-audit.sh +3 -1
- package/skills/opendevbrowser-best-practices/scripts/validate-skill-assets.sh +68 -25
- package/skills/opendevbrowser-design-agent/SKILL.md +9 -4
- package/skills/opendevbrowser-design-agent/artifacts/design-workflows.md +15 -6
- package/skills/opendevbrowser-design-agent/assets/templates/canvas-generation-plan.design.v1.json +18 -17
- package/skills/opendevbrowser-design-agent/scripts/design-workflow.sh +11 -0
- package/skills/opendevbrowser-design-agent/scripts/validate-skill-assets.sh +57 -0
- package/skills/opendevbrowser-product-presentation-asset/SKILL.md +2 -2
- package/dist/chunk-5FZQJRBQ.js.map +0 -1
- package/dist/chunk-W4IHGDXV.js.map +0 -1
- package/dist/chunk-YBQECXZX.js.map +0 -1
- /package/dist/{providers-G36AM3Z2.js.map → providers-ZIVHHH4F.js.map} +0 -0
|
@@ -77,20 +77,29 @@ Use when the work should flow through the OpenDevBrowser design canvas.
|
|
|
77
77
|
|
|
78
78
|
1. Open a canvas session.
|
|
79
79
|
2. Read the handshake and document context.
|
|
80
|
-
3.
|
|
81
|
-
4.
|
|
82
|
-
5.
|
|
83
|
-
6.
|
|
84
|
-
7.
|
|
80
|
+
3. Inspect `planStatus`, `preflightState`, `generationPlanRequirements.allowedValues`, `generationPlanIssues`, and `guidance.recommendedNextCommands` before moving on.
|
|
81
|
+
4. Treat `preflightState="handshake_read"` as the normal first-step checkpoint; if the handshake is already reporting `plan_invalid`, repair the plan instead of mutating.
|
|
82
|
+
5. Fill the full design contract.
|
|
83
|
+
6. Extract the `generationPlan`.
|
|
84
|
+
7. Send `canvas.plan.set`.
|
|
85
|
+
8. If the response is accepted, read `guidance.recommendedNextCommands` again and mutate with `canvas.document.patch`.
|
|
86
|
+
9. If the response fails with `generation_plan_invalid`, inspect `details.missingFields`, `details.issues`, and `generationPlanIssues`, then optionally re-read with `canvas.plan.get` or `canvas.capabilities.get`.
|
|
87
|
+
10. Render preview, poll feedback, and save or export until the contract and runtime match.
|
|
85
88
|
|
|
86
89
|
Canonical command order:
|
|
87
90
|
|
|
88
91
|
```bash
|
|
89
92
|
npx opendevbrowser canvas --command canvas.session.open --params '{"requestId":"req_open_01","browserSessionId":"<browser-session-id>","documentId":null,"repoPath":null,"mode":"dual-track"}'
|
|
93
|
+
# Inspect planStatus, preflightState, generationPlanRequirements.allowedValues, generationPlanIssues, and guidance.recommendedNextCommands before continuing.
|
|
90
94
|
npx opendevbrowser canvas --command canvas.plan.set --params-file ./tmp/canvas-plan.json
|
|
95
|
+
# If canvas.plan.set succeeds with planStatus=accepted or preflightState=plan_accepted, follow the returned guidance into canvas.document.patch.
|
|
96
|
+
# Optional diagnostics after generation_plan_invalid:
|
|
97
|
+
# npx opendevbrowser canvas --command canvas.plan.get --params '{"requestId":"req_plan_get_01","canvasSessionId":"<canvas-session-id>","leaseId":"<lease-id>","documentId":"<document-id>"}'
|
|
98
|
+
# or re-read with canvas.capabilities.get to inspect generationPlanIssues before resubmitting canvas.plan.set.
|
|
91
99
|
npx opendevbrowser canvas --command canvas.document.patch --params-file ./tmp/canvas-patch.json
|
|
92
|
-
npx opendevbrowser canvas --command canvas.feedback.poll --params '{"requestId":"req_feedback_01","canvasSessionId":"<canvas-session-id>","documentId":"<document-id>","targetId":"<target-id>","afterCursor":null}'
|
|
93
100
|
npx opendevbrowser canvas --command canvas.preview.render --params '{"requestId":"req_preview_01","canvasSessionId":"<canvas-session-id>","leaseId":"<lease-id>","targetId":"<target-id>","projection":"canvas_html"}'
|
|
101
|
+
npx opendevbrowser canvas --command canvas.feedback.poll --params '{"requestId":"req_feedback_01","canvasSessionId":"<canvas-session-id>","documentId":"<document-id>","targetId":"<target-id>","afterCursor":null}'
|
|
102
|
+
npx opendevbrowser canvas --command canvas.document.save --params '{"requestId":"req_save_01","canvasSessionId":"<canvas-session-id>","leaseId":"<lease-id>","documentId":"<document-id>","repoPath":null}'
|
|
94
103
|
```
|
|
95
104
|
|
|
96
105
|
## Workflow D — Real-Surface Validation
|
package/skills/opendevbrowser-design-agent/assets/templates/canvas-generation-plan.design.v1.json
CHANGED
|
@@ -9,29 +9,28 @@
|
|
|
9
9
|
"summary": "Clarify hierarchy, trust, and action flow"
|
|
10
10
|
},
|
|
11
11
|
"visualDirection": {
|
|
12
|
-
"profile": "product-
|
|
13
|
-
"
|
|
14
|
-
"contrast": "high",
|
|
15
|
-
"density": "airy"
|
|
16
|
-
}
|
|
12
|
+
"profile": "product-story",
|
|
13
|
+
"themeStrategy": "single-theme"
|
|
17
14
|
},
|
|
18
15
|
"layoutStrategy": {
|
|
19
|
-
"approach": "hero-led-grid"
|
|
16
|
+
"approach": "hero-led-grid",
|
|
17
|
+
"navigationModel": "global-header"
|
|
20
18
|
},
|
|
21
19
|
"contentStrategy": {
|
|
22
20
|
"source": "real-content-first"
|
|
23
21
|
},
|
|
24
22
|
"componentStrategy": {
|
|
25
23
|
"mode": "reuse-first",
|
|
26
|
-
"
|
|
27
|
-
"
|
|
24
|
+
"interactionStates": [
|
|
25
|
+
"default",
|
|
26
|
+
"hover",
|
|
27
|
+
"focus",
|
|
28
|
+
"disabled"
|
|
28
29
|
]
|
|
29
30
|
},
|
|
30
31
|
"motionPosture": {
|
|
31
32
|
"level": "subtle",
|
|
32
|
-
"
|
|
33
|
-
"allowParallax": false,
|
|
34
|
-
"allowCustomSmoothScroll": false
|
|
33
|
+
"reducedMotion": "respect-user-preference"
|
|
35
34
|
},
|
|
36
35
|
"responsivePosture": {
|
|
37
36
|
"primaryViewport": "desktop",
|
|
@@ -43,16 +42,18 @@
|
|
|
43
42
|
},
|
|
44
43
|
"accessibilityPosture": {
|
|
45
44
|
"target": "WCAG_2_2_AA",
|
|
46
|
-
"
|
|
47
|
-
"keyboardParity": true
|
|
45
|
+
"keyboardNavigation": "full"
|
|
48
46
|
},
|
|
49
47
|
"validationTargets": {
|
|
50
48
|
"blockOn": [
|
|
51
|
-
"contrast-failure"
|
|
52
|
-
],
|
|
53
|
-
"warnOn": [
|
|
49
|
+
"contrast-failure",
|
|
54
50
|
"responsive-mismatch"
|
|
55
|
-
]
|
|
51
|
+
],
|
|
52
|
+
"requiredThemes": [
|
|
53
|
+
"light"
|
|
54
|
+
],
|
|
55
|
+
"browserValidation": "required",
|
|
56
|
+
"maxInteractionLatencyMs": 160
|
|
56
57
|
}
|
|
57
58
|
}
|
|
58
59
|
}
|
|
@@ -97,10 +97,21 @@ EOF
|
|
|
97
97
|
cat skills/opendevbrowser-design-agent/assets/templates/design-contract.v1.json
|
|
98
98
|
cat skills/opendevbrowser-design-agent/assets/templates/canvas-generation-plan.design.v1.json
|
|
99
99
|
cat skills/opendevbrowser-design-agent/artifacts/design-contract-playbook.md
|
|
100
|
+
cat skills/opendevbrowser-best-practices/artifacts/canvas-governance-playbook.md
|
|
101
|
+
cat skills/opendevbrowser-best-practices/assets/templates/canvas-handshake-example.json
|
|
100
102
|
./skills/opendevbrowser-design-agent/scripts/extract-canvas-plan.sh ./tmp/design-contract.json > ./tmp/canvas-plan.json
|
|
101
103
|
$CLI_PREFIX canvas --command canvas.session.open --params '{"requestId":"req_open_01","browserSessionId":"<browser-session-id>","documentId":null,"repoPath":null,"mode":"dual-track"}'
|
|
104
|
+
# Inspect planStatus, preflightState, generationPlanRequirements.allowedValues, generationPlanIssues, and guidance.recommendedNextCommands before continuing.
|
|
105
|
+
# Treat preflightState=handshake_read as the normal first-step checkpoint before canvas.plan.set.
|
|
102
106
|
$CLI_PREFIX canvas --command canvas.plan.set --params-file ./tmp/canvas-plan.json
|
|
107
|
+
# If canvas.plan.set succeeds with planStatus=accepted or preflightState=plan_accepted, follow the returned guidance into canvas.document.patch.
|
|
108
|
+
# Optional diagnostics after generation_plan_invalid:
|
|
109
|
+
# $CLI_PREFIX canvas --command canvas.plan.get --params '{"requestId":"req_plan_get_01","canvasSessionId":"<canvas-session-id>","leaseId":"<lease-id>","documentId":"<document-id>"}'
|
|
110
|
+
# or re-read with canvas.capabilities.get to inspect generationPlanIssues before resubmitting canvas.plan.set.
|
|
111
|
+
$CLI_PREFIX canvas --command canvas.document.patch --params-file ./tmp/canvas-patch.json
|
|
112
|
+
$CLI_PREFIX canvas --command canvas.preview.render --params '{"requestId":"req_preview_01","canvasSessionId":"<canvas-session-id>","leaseId":"<lease-id>","targetId":"<target-id>","prototypeId":"<prototype-id>"}'
|
|
103
113
|
$CLI_PREFIX canvas --command canvas.feedback.poll --params '{"requestId":"req_feedback_01","canvasSessionId":"<canvas-session-id>","documentId":"<document-id>","targetId":"<target-id>","afterCursor":null}'
|
|
114
|
+
$CLI_PREFIX canvas --command canvas.document.save --params '{"requestId":"req_save_01","canvasSessionId":"<canvas-session-id>","leaseId":"<lease-id>","documentId":"<document-id>","repoPath":null}'
|
|
104
115
|
EOF
|
|
105
116
|
;;
|
|
106
117
|
real-surface-validation)
|
|
@@ -88,6 +88,16 @@ const skillDocMarkers = [
|
|
|
88
88
|
"assets/templates/reference-pattern-board.v1.json",
|
|
89
89
|
"assets/templates/design-release-gate.v1.json",
|
|
90
90
|
"scripts/extract-canvas-plan.sh",
|
|
91
|
+
"canvas.session.open",
|
|
92
|
+
"canvas.plan.get",
|
|
93
|
+
"generationPlanIssues",
|
|
94
|
+
"canvas.document.patch",
|
|
95
|
+
"canvas.preview.render",
|
|
96
|
+
"canvas.document.save",
|
|
97
|
+
"handshake_read",
|
|
98
|
+
"plan_invalid",
|
|
99
|
+
"plan_accepted",
|
|
100
|
+
"recommendedNextCommands",
|
|
91
101
|
"canvas.plan.set",
|
|
92
102
|
"canvas.history.undo",
|
|
93
103
|
"canvas.history.redo",
|
|
@@ -105,6 +115,38 @@ const skillDocMarkers = [
|
|
|
105
115
|
"docs.lovable.dev/prompting/prompting-best-practices"
|
|
106
116
|
];
|
|
107
117
|
|
|
118
|
+
const designWorkflowMarkers = [
|
|
119
|
+
"canvas.session.open",
|
|
120
|
+
"canvas.plan.set",
|
|
121
|
+
"canvas.plan.get",
|
|
122
|
+
"generationPlanIssues",
|
|
123
|
+
"canvas.document.patch",
|
|
124
|
+
"canvas.preview.render",
|
|
125
|
+
"canvas.feedback.poll",
|
|
126
|
+
"canvas.document.save",
|
|
127
|
+
"handshake_read",
|
|
128
|
+
"plan_invalid",
|
|
129
|
+
"plan_accepted",
|
|
130
|
+
"recommendedNextCommands"
|
|
131
|
+
];
|
|
132
|
+
|
|
133
|
+
const workflowOutputMarkers = {
|
|
134
|
+
"canvas-contract": [
|
|
135
|
+
"canvas.session.open",
|
|
136
|
+
"canvas.plan.set",
|
|
137
|
+
"canvas.plan.get",
|
|
138
|
+
"generationPlanIssues",
|
|
139
|
+
"canvas.document.patch",
|
|
140
|
+
"canvas.preview.render",
|
|
141
|
+
"canvas.feedback.poll",
|
|
142
|
+
"canvas.document.save",
|
|
143
|
+
"handshake_read",
|
|
144
|
+
"plan_invalid",
|
|
145
|
+
"plan_accepted",
|
|
146
|
+
"recommendedNextCommands"
|
|
147
|
+
]
|
|
148
|
+
};
|
|
149
|
+
|
|
108
150
|
const patternMarkers = [
|
|
109
151
|
"Anthropic",
|
|
110
152
|
"Vercel v0",
|
|
@@ -154,6 +196,13 @@ for (const marker of patternMarkers) {
|
|
|
154
196
|
}
|
|
155
197
|
}
|
|
156
198
|
|
|
199
|
+
const designWorkflowDoc = fs.readFileSync(fullPath("artifacts/design-workflows.md"), "utf8");
|
|
200
|
+
for (const marker of designWorkflowMarkers) {
|
|
201
|
+
if (!designWorkflowDoc.includes(marker)) {
|
|
202
|
+
failures.push(`design-workflows missing marker: ${marker}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
157
206
|
const extractScript = fullPath("scripts/extract-canvas-plan.sh");
|
|
158
207
|
const contractTemplate = fullPath("assets/templates/design-contract.v1.json");
|
|
159
208
|
const extractResult = spawnSync(extractScript, [contractTemplate], { encoding: "utf8" });
|
|
@@ -210,6 +259,14 @@ for (const workflow of [
|
|
|
210
259
|
if ((result.stdout ?? "").trim().length === 0) {
|
|
211
260
|
failures.push(`design-workflow.sh produced empty output for mode ${workflow}`);
|
|
212
261
|
}
|
|
262
|
+
const requiredOutputMarkers = workflowOutputMarkers[workflow];
|
|
263
|
+
if (requiredOutputMarkers) {
|
|
264
|
+
for (const marker of requiredOutputMarkers) {
|
|
265
|
+
if (!(result.stdout ?? "").includes(marker)) {
|
|
266
|
+
failures.push(`design-workflow.sh output for ${workflow} missing marker: ${marker}`);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
213
270
|
}
|
|
214
271
|
|
|
215
272
|
if (failures.length > 0) {
|
|
@@ -67,8 +67,8 @@ The `render-video-brief.sh` helper adds:
|
|
|
67
67
|
1. Pick product URL or product name.
|
|
68
68
|
2. Run collection workflow and confirm output pack path.
|
|
69
69
|
3. Review generated manifest/copy/features for accuracy and check whether the pack is visual-ready or metadata-first.
|
|
70
|
-
4. Run
|
|
71
|
-
Canonical helper path:
|
|
70
|
+
4. Run `./skills/opendevbrowser-product-presentation-asset/scripts/render-video-brief.sh` to generate production instructions and visual sourcing notes.
|
|
71
|
+
Canonical helper path: `./skills/opendevbrowser-product-presentation-asset/scripts/render-video-brief.sh`.
|
|
72
72
|
5. If no visuals were captured, source or capture visuals before handing the brief to the editor/creator pipeline.
|
|
73
73
|
|
|
74
74
|
## Parallel Multitab Alignment
|