@punal_manalan/blender-project-harness 0.0.0-stage → 1.0.2
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/.kilo/agent/blender-grader.md +197 -0
- package/.kilo/agent/blender-worker.md +127 -0
- package/.kilo/blender-project-harness/config.example.json +71 -0
- package/.kilo/blender-project-harness/tools/harness/EXPECTED_FLOW.md +656 -0
- package/.kilo/blender-project-harness/tools/harness/blender-operations.mjs +882 -0
- package/.kilo/blender-project-harness/tools/harness/blender-operations.test.mjs +550 -0
- package/.kilo/blender-project-harness/tools/harness/blender.mjs +301 -0
- package/.kilo/blender-project-harness/tools/harness/blender.test.mjs +87 -0
- package/.kilo/blender-project-harness/tools/harness/cli.mjs +127 -0
- package/.kilo/blender-project-harness/tools/harness/documents.mjs +201 -0
- package/.kilo/blender-project-harness/tools/harness/download.mjs +94 -0
- package/.kilo/blender-project-harness/tools/harness/download.test.mjs +63 -0
- package/.kilo/blender-project-harness/tools/harness/engine.mjs +1866 -0
- package/.kilo/blender-project-harness/tools/harness/engine.test.mjs +2219 -0
- package/.kilo/blender-project-harness/tools/harness/intake.mjs +571 -0
- package/.kilo/blender-project-harness/tools/harness/intake.test.mjs +181 -0
- package/.kilo/blender-project-harness/tools/harness/package-lock.json +1227 -0
- package/.kilo/blender-project-harness/tools/harness/package.json +15 -0
- package/.kilo/blender-project-harness/tools/harness/plugin.mjs +550 -0
- package/.kilo/blender-project-harness/tools/harness/plugin.test.mjs +526 -0
- package/.kilo/blender-project-harness/tools/harness/proxy.mjs +222 -0
- package/.kilo/blender-project-harness/tools/harness/proxy.test.mjs +217 -0
- package/.kilo/blender-project-harness/tools/harness/scaffold.mjs +83 -0
- package/.kilo/blender-project-harness/tools/harness/scaffold.test.mjs +74 -0
- package/.kilo/blender-project-harness/tools/harness/server.mjs +24 -0
- package/.kilo/blender-project-harness/tools/harness/shell-policy.mjs +196 -0
- package/.kilo/blender-project-harness/tools/harness/shell-policy.test.mjs +68 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/Documents/ASSETS.md +29 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/Documents/DECISIONS.md +8 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/Documents/Goals/01-project-brief.md +71 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/Documents/Goals/README.md +17 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/Documents/INTAKE.md +8 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/Documents/README.md +57 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/Documents/REQUIREMENTS.md +64 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/Documents/REVIEW.md +29 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/Documents/References/README.md +18 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/Documents/Reviews/README.md +48 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/Documents/TASKSTRACKER.md +10 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/Documents/Tasks/README.md +4 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/Documents/WORKFLOW.md +36 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/README.md +130 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/assets/README.md +31 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/assets/audio/.gitkeep +0 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/assets/external/README.md +43 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/assets/external/SOURCE_TEMPLATE.md +18 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/assets/hdri/.gitkeep +0 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/assets/models/.gitkeep +0 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/assets/textures/.gitkeep +0 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/backups/.gitkeep +0 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/backups/README.md +5 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/exports/.gitkeep +0 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/exports/README.md +11 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/renders/README.md +7 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/renders/final/.gitkeep +0 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/renders/wip/.gitkeep +0 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/scenes/README.md +10 -0
- package/.kilo/blender-project-harness/tools/harness/templates/project/scripts/README.md +16 -0
- package/.kilo/blender-project-harness/tools/harness/test-fixture.mjs +91 -0
- package/.kilo/blender-project-harness/tools/harness/workspace.mjs +30 -0
- package/.kilo/blender-project-harness/tools/harness/workspace.test.mjs +31 -0
- package/.kilo/blender-project-harness/tools/test_blender_tools.py +427 -0
- package/.kilo/plugins/blender-workflow.js +3 -0
- package/.kilo/skills/blender-assets/SKILL.md +99 -0
- package/.kilo/skills/blender-mcp/SKILL.md +147 -0
- package/.kilo/skills/blender-mcp/references/README.md +22 -0
- package/.kilo/skills/blender-mcp/references/animation.md +83 -0
- package/.kilo/skills/blender-mcp/references/bpy.md +97 -0
- package/.kilo/skills/blender-mcp/references/level-design.md +53 -0
- package/.kilo/skills/blender-mcp/references/materials.md +80 -0
- package/.kilo/skills/blender-mcp/references/retopology.md +104 -0
- package/.kilo/skills/blender-mcp/references/rigging.md +123 -0
- package/.kilo/skills/blender-mcp/references/scene.md +72 -0
- package/.kilo/skills/blender-project-goal/SKILL.md +115 -0
- package/.kilo/skills/blender-project-grading/SKILL.md +184 -0
- package/.kilo/skills/blender-project-readme/SKILL.md +46 -0
- package/.kilo/skills/blender-project-requirements/SKILL.md +84 -0
- package/.kilo/skills/blender-project-scaffold/SKILL.md +59 -0
- package/.kilo/skills/blender-project-workflow/SKILL.md +96 -0
- package/.kilo/skills/blender-subagents/SKILL.md +204 -0
- package/.kilo/skills/blender-workflow-harness/SKILL.md +187 -0
- package/AGENTS.md +234 -0
- package/Blender/README.md +30 -0
- package/CHANGELOG.md +22 -0
- package/LICENSE +21 -0
- package/README.md +368 -2
- package/THIRD_PARTY_NOTICES.md +51 -0
- package/bin/blender-project-harness.mjs +4 -0
- package/installer/cli.mjs +116 -0
- package/installer/install.mjs +325 -0
- package/installer/install.test.mjs +134 -0
- package/package.json +58 -6
|
@@ -0,0 +1,656 @@
|
|
|
1
|
+
# Blender Harness — Expected Flow
|
|
2
|
+
|
|
3
|
+
Status: developer reference
|
|
4
|
+
Audience: contributors who need to understand the harness without reading the full codebase
|
|
5
|
+
Scope: conceptual flow, lifecycle, evidence, failure handling, and examples
|
|
6
|
+
|
|
7
|
+
This document is a generic reference. It is not a live test contract and is not tied to a specific
|
|
8
|
+
project, branch, machine, or run. Project documents and the workspace instructions remain
|
|
9
|
+
authoritative.
|
|
10
|
+
|
|
11
|
+
## 1. What the harness is
|
|
12
|
+
|
|
13
|
+
The harness turns a normal conversation into a governed Blender production workflow:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
user prompt
|
|
17
|
+
-> requirements confirmation
|
|
18
|
+
-> workflow and review selection
|
|
19
|
+
-> project scaffold and registration
|
|
20
|
+
-> active goal
|
|
21
|
+
-> bounded scene changes
|
|
22
|
+
-> worker apply tickets
|
|
23
|
+
-> WIP renders and inspections
|
|
24
|
+
-> sealed review evidence
|
|
25
|
+
-> independent graders
|
|
26
|
+
-> review verdict
|
|
27
|
+
-> scoped commits
|
|
28
|
+
-> checkpoint and completion
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The harness exists to make these guarantees:
|
|
32
|
+
|
|
33
|
+
- Blender is only edited through declared, bounded changes.
|
|
34
|
+
- Every scene edit has a ticket, an exact payload, and a task record.
|
|
35
|
+
- The orchestrator does not execute apply operations; a worker does.
|
|
36
|
+
- A review is based on frozen evidence, not on a viewport glance.
|
|
37
|
+
- Graders cannot edit the scene or fabricate a pass.
|
|
38
|
+
- Project history is scoped and clean.
|
|
39
|
+
- Assets, licences, exports, and external files are recorded.
|
|
40
|
+
- Failures are reported as failures, not silently downgraded.
|
|
41
|
+
|
|
42
|
+
## 2. Main components
|
|
43
|
+
|
|
44
|
+
| Component | Responsibility |
|
|
45
|
+
|---|---|
|
|
46
|
+
| Workflow engine | State machine, registrations, changes, tickets, review, commits, checkpoints. |
|
|
47
|
+
| MCP proxy | Exposes a narrow tool surface and guards the live Blender connection. |
|
|
48
|
+
| Kilo plugin | Enforces tool permissions, goal state, session identity, and delegation rules. |
|
|
49
|
+
| Scaffold | Creates the project structure from templates. |
|
|
50
|
+
| Document tools | Validates and reads/writes structured project documents. |
|
|
51
|
+
| Operation schema | Defines bounded Blender operations and generated Blender Python. |
|
|
52
|
+
| Intake | Copies user files into canonical project paths with hashes and sidecars. |
|
|
53
|
+
| Download | Fetches allowed HTTPS assets into ignored staging only. |
|
|
54
|
+
| Shell policy | Classifies and approves workspace shell commands. |
|
|
55
|
+
| Worker | Executes exactly one assigned apply ticket. |
|
|
56
|
+
| Grader | Reads frozen evidence and writes one assigned report. |
|
|
57
|
+
| Task ledger | Records ticket, task, child, state, and result under project control. |
|
|
58
|
+
|
|
59
|
+
The engine owns state. The proxy owns live Blender execution. The plugin owns session and tool
|
|
60
|
+
permissions. Keep those responsibilities separate.
|
|
61
|
+
|
|
62
|
+
## 3. Core concepts
|
|
63
|
+
|
|
64
|
+
### Project
|
|
65
|
+
|
|
66
|
+
A project is a folder under the workspace Blender area, for example:
|
|
67
|
+
|
|
68
|
+
```text
|
|
69
|
+
Blender/ExampleRoom/
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
It contains a scene, documents, assets, renders, and task records. The exact project name is chosen
|
|
73
|
+
during requirements and registration.
|
|
74
|
+
|
|
75
|
+
### Registration
|
|
76
|
+
|
|
77
|
+
Registration freezes the project requirements, workflow mode, review mode, goal, scene path, and
|
|
78
|
+
grader roster. After registration, changing those records requires an explicit re-registration.
|
|
79
|
+
Do not edit registration documents inside a normal change.
|
|
80
|
+
|
|
81
|
+
### Goal
|
|
82
|
+
|
|
83
|
+
The goal is the active production objective. The harness exposes `status.nextStep`; follow it rather
|
|
84
|
+
than guessing the next action. Do not start a goal just to ask questions.
|
|
85
|
+
|
|
86
|
+
### Bounded change
|
|
87
|
+
|
|
88
|
+
A bounded change has:
|
|
89
|
+
|
|
90
|
+
- one observable outcome;
|
|
91
|
+
- exact object names;
|
|
92
|
+
- exact project-relative paths;
|
|
93
|
+
- declared scenes when the change is multi-scene;
|
|
94
|
+
- a milestone or requirement scope;
|
|
95
|
+
- at most one open change per project.
|
|
96
|
+
|
|
97
|
+
Every scene edit belongs to a change. A documentation-only or asset-only change is non-scene and
|
|
98
|
+
does not need seal or review.
|
|
99
|
+
|
|
100
|
+
### Ticket
|
|
101
|
+
|
|
102
|
+
A ticket is a one-time authorization for an operation or a batch of operations. The orchestrator
|
|
103
|
+
issues it; the worker consumes it. Tickets expire. The worker never saves, seals, reviews, or
|
|
104
|
+
commits on its own.
|
|
105
|
+
|
|
106
|
+
### WIP render
|
|
107
|
+
|
|
108
|
+
A work-in-progress render is a checkpoint for visual progress. It is required every three applies
|
|
109
|
+
and before seal. Inspect it with `look`; a WIP render without an inspection is not evidence.
|
|
110
|
+
|
|
111
|
+
### Seal
|
|
112
|
+
|
|
113
|
+
Seal freezes the review evidence:
|
|
114
|
+
|
|
115
|
+
- saved scene hash;
|
|
116
|
+
- per-scene renders;
|
|
117
|
+
- camera evidence;
|
|
118
|
+
- scene facts;
|
|
119
|
+
- manifest;
|
|
120
|
+
- evidence key;
|
|
121
|
+
- review round folder.
|
|
122
|
+
|
|
123
|
+
Seal is not a review and not a pass. It creates the package a grader can inspect.
|
|
124
|
+
|
|
125
|
+
### Review
|
|
126
|
+
|
|
127
|
+
Review aggregates independent grader reports. The verdict can be PASS, CHANGES_REQUIRED, or BLOCKED.
|
|
128
|
+
A tooling BLOCKED is not a design finding. A missing report is not a PASS.
|
|
129
|
+
|
|
130
|
+
### Checkpoint
|
|
131
|
+
|
|
132
|
+
A checkpoint verifies that the project is committed, the review history is consistent, and no
|
|
133
|
+
unexpected files are left behind. Completion requires a clean checkpoint.
|
|
134
|
+
|
|
135
|
+
## 4. Expected lifecycle
|
|
136
|
+
|
|
137
|
+
### Phase 0 — Status and capabilities
|
|
138
|
+
|
|
139
|
+
Start with status and capabilities:
|
|
140
|
+
|
|
141
|
+
```json
|
|
142
|
+
{ "action": "status" }
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
```json
|
|
146
|
+
{ "action": "capabilities" }
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Expected:
|
|
150
|
+
|
|
151
|
+
- the live operation set matches the source;
|
|
152
|
+
- the scene limit and supported actions are known;
|
|
153
|
+
- the agent does not claim a missing operation;
|
|
154
|
+
- Blender is not launched before registration.
|
|
155
|
+
|
|
156
|
+
### Phase 1 — Requirements and workflow
|
|
157
|
+
|
|
158
|
+
Ask only questions that change the result or the rights:
|
|
159
|
+
|
|
160
|
+
- What should the scene contain?
|
|
161
|
+
- What style, mood, and lighting?
|
|
162
|
+
- What deliverables?
|
|
163
|
+
- Are references generated, supplied, or omitted?
|
|
164
|
+
- Are external assets supplied, downloaded, or avoided?
|
|
165
|
+
- Are scripts needed?
|
|
166
|
+
- Fully Autonomous or Partially Autonomous?
|
|
167
|
+
- Review Off, Single, or All?
|
|
168
|
+
|
|
169
|
+
Record confirmed answers before scaffolding. Do not ask the user to understand harness internals.
|
|
170
|
+
|
|
171
|
+
### Phase 2 — Scaffold, documents, registration, and goal
|
|
172
|
+
|
|
173
|
+
Expected sequence:
|
|
174
|
+
|
|
175
|
+
1. Scaffold the project with the harness-owned scaffold command.
|
|
176
|
+
2. Fill required documents with the bootstrap document tool.
|
|
177
|
+
3. Commit the scaffold with the bootstrap commit action.
|
|
178
|
+
4. Confirm the commit includes every scaffold file, including current template additions such as
|
|
179
|
+
the intake register.
|
|
180
|
+
5. Call `prepare`.
|
|
181
|
+
6. Ask the exact registration question.
|
|
182
|
+
7. Register only after a real user answer.
|
|
183
|
+
8. Start the goal.
|
|
184
|
+
9. Launch Blender through the harness.
|
|
185
|
+
10. Verify the addon and scene path.
|
|
186
|
+
11. Save the bootstrap scene.
|
|
187
|
+
12. Commit and checkpoint the bootstrap save without review.
|
|
188
|
+
|
|
189
|
+
Example scaffold outcome:
|
|
190
|
+
|
|
191
|
+
```text
|
|
192
|
+
Blender/ExampleRoom/
|
|
193
|
+
ExampleRoom.blend
|
|
194
|
+
README.md
|
|
195
|
+
Documents/
|
|
196
|
+
REQUIREMENTS.md
|
|
197
|
+
WORKFLOW.md
|
|
198
|
+
REVIEW.md
|
|
199
|
+
ASSETS.md
|
|
200
|
+
DECISIONS.md
|
|
201
|
+
INTAKE.md
|
|
202
|
+
TASKSTRACKER.md
|
|
203
|
+
Tasks/
|
|
204
|
+
Goals/
|
|
205
|
+
References/
|
|
206
|
+
assets/
|
|
207
|
+
renders/
|
|
208
|
+
exports/
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
A scaffold commit that leaves a template file untracked is a bug. Verify the commit, not just the
|
|
212
|
+
working tree.
|
|
213
|
+
|
|
214
|
+
### Phase 3 — Scene change and apply
|
|
215
|
+
|
|
216
|
+
Example `begin` payload:
|
|
217
|
+
|
|
218
|
+
```json
|
|
219
|
+
{
|
|
220
|
+
"project": "Blender/ExampleRoom",
|
|
221
|
+
"outcome": "Build the desk, monitor, and warm desk lamp",
|
|
222
|
+
"objects": ["Desk_Top", "Monitor_Bezel", "Desk_Lamp_Shade"],
|
|
223
|
+
"paths": [
|
|
224
|
+
"Blender/ExampleRoom/ExampleRoom.blend",
|
|
225
|
+
"Blender/ExampleRoom/README.md"
|
|
226
|
+
],
|
|
227
|
+
"scenes": ["Scene"],
|
|
228
|
+
"requirements": ["REQ-01", "REQ-02"]
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
Example apply batch:
|
|
233
|
+
|
|
234
|
+
```json
|
|
235
|
+
{
|
|
236
|
+
"operations": [
|
|
237
|
+
{
|
|
238
|
+
"operation": "create_mesh",
|
|
239
|
+
"name": "Desk_Top",
|
|
240
|
+
"primitive": "cube",
|
|
241
|
+
"location": [0, 0, 0.75],
|
|
242
|
+
"scale": [0.9, 0.35, 0.03]
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
"operation": "create_mesh",
|
|
246
|
+
"name": "Monitor_Bezel",
|
|
247
|
+
"primitive": "cube",
|
|
248
|
+
"location": [0, 0.1, 1.1],
|
|
249
|
+
"scale": [0.28, 0.02, 0.2]
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
"operation": "create_light",
|
|
253
|
+
"name": "Light_Lamp",
|
|
254
|
+
"light_type": "POINT",
|
|
255
|
+
"location": [-0.7, 0.2, 1.2],
|
|
256
|
+
"energy": 45
|
|
257
|
+
}
|
|
258
|
+
]
|
|
259
|
+
}
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
Expected:
|
|
263
|
+
|
|
264
|
+
- the orchestrator issues one apply ticket;
|
|
265
|
+
- the worker receives the ticket and exact payload;
|
|
266
|
+
- the worker executes only that batch;
|
|
267
|
+
- the harness saves the scene;
|
|
268
|
+
- an apply commit records the scene and task records;
|
|
269
|
+
- no other writer runs at the same time.
|
|
270
|
+
|
|
271
|
+
### Phase 4 — WIP and inspection
|
|
272
|
+
|
|
273
|
+
Every three applies, and before seal:
|
|
274
|
+
|
|
275
|
+
```text
|
|
276
|
+
apply -> save -> WIP render -> look -> continue
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
The WIP render is not a final review. It is a cheap visual checkpoint. Inspect it for:
|
|
280
|
+
|
|
281
|
+
- camera framing;
|
|
282
|
+
- missing or floating objects;
|
|
283
|
+
- unreadable scale;
|
|
284
|
+
- black or empty render;
|
|
285
|
+
- obvious material or lighting failures.
|
|
286
|
+
|
|
287
|
+
### Phase 5 — Finalize and seal
|
|
288
|
+
|
|
289
|
+
Before seal:
|
|
290
|
+
|
|
291
|
+
- the final asset or material change is complete;
|
|
292
|
+
- strict `check_assets` has run on the final unchanged scene when assets were used;
|
|
293
|
+
- the strict asset receipt is stored on the change;
|
|
294
|
+
- the WIP render has been inspected;
|
|
295
|
+
- every declared scene has a camera and render.
|
|
296
|
+
|
|
297
|
+
Seal produces:
|
|
298
|
+
|
|
299
|
+
```text
|
|
300
|
+
Documents/Reviews/R01-<timestamp>/
|
|
301
|
+
REVIEW.md
|
|
302
|
+
manifest.json
|
|
303
|
+
_evidence/
|
|
304
|
+
scenes/<SceneName>/
|
|
305
|
+
camera.png
|
|
306
|
+
scene-facts.json
|
|
307
|
+
scene.txt
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
The manifest must include:
|
|
311
|
+
|
|
312
|
+
- scene hash;
|
|
313
|
+
- per-scene evidence hashes;
|
|
314
|
+
- evidence key;
|
|
315
|
+
- spec hashes;
|
|
316
|
+
- grader roster;
|
|
317
|
+
- operation tasks;
|
|
318
|
+
- `asset_check` with the strict receipt when assets were used.
|
|
319
|
+
|
|
320
|
+
`scene-facts.json` should contain more than names and types:
|
|
321
|
+
|
|
322
|
+
- world location, rotation, scale, dimensions;
|
|
323
|
+
- materials and modifiers;
|
|
324
|
+
- mesh vertex, edge, and face counts;
|
|
325
|
+
- n-gons, non-manifold edges, loose vertices, degenerate faces;
|
|
326
|
+
- render resolution, engine, frame range, fps;
|
|
327
|
+
- colour management, samples, and VSE strips.
|
|
328
|
+
|
|
329
|
+
### Phase 6 — Graders
|
|
330
|
+
|
|
331
|
+
Each grader gets one ticket and one exact prompt. Example ticket content:
|
|
332
|
+
|
|
333
|
+
```text
|
|
334
|
+
HARNESS_GRADER:<token>
|
|
335
|
+
Round: R01-<timestamp>
|
|
336
|
+
Project root: <workspace>
|
|
337
|
+
Grader name / focus: visual / composition, camera, lighting, colour, materials, mood
|
|
338
|
+
Milestone: <outcome>
|
|
339
|
+
Requirements to grade: REQ-01, REQ-02
|
|
340
|
+
Scenes to grade: Scene
|
|
341
|
+
Primary scene: Scene
|
|
342
|
+
Final full-spec review: yes
|
|
343
|
+
Spec: <workspace>/Blender/ExampleRoom/Documents/REQUIREMENTS.md
|
|
344
|
+
Target: base <commit>, saved scene SHA-256 <hash>, project clean
|
|
345
|
+
Evidence key: <evidence-key>
|
|
346
|
+
Evidence files:
|
|
347
|
+
- <render path> (sha256 <hash>)
|
|
348
|
+
- <scene-facts path> (sha256 <hash>)
|
|
349
|
+
Manifest: <manifest path>
|
|
350
|
+
Report path: <assigned report path>
|
|
351
|
+
Live inspection: not allowed
|
|
352
|
+
Budget: <minutes> minutes, <steps> steps
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
Expected:
|
|
356
|
+
|
|
357
|
+
- all configured graders are dispatched, up to `max_parallel`;
|
|
358
|
+
- each reads only assigned specs, evidence, and its own prior report;
|
|
359
|
+
- each writes only its assigned `REPORT.md`;
|
|
360
|
+
- each cites the scene hash and evidence key;
|
|
361
|
+
- a missing report is recorded as BLOCKED;
|
|
362
|
+
- a retry uses a fresh ticket with the current hash and evidence key;
|
|
363
|
+
- no grader reads a peer report.
|
|
364
|
+
|
|
365
|
+
A hand-written grader prompt that omits the scene hash or evidence key is a bug. Use the ticket
|
|
366
|
+
prompt.
|
|
367
|
+
|
|
368
|
+
### Phase 7 — Review, commit, checkpoint
|
|
369
|
+
|
|
370
|
+
The review aggregates the reports:
|
|
371
|
+
|
|
372
|
+
- PASS: every applicable report passes;
|
|
373
|
+
- CHANGES_REQUIRED: a design finding requires another revision;
|
|
374
|
+
- BLOCKED: evidence or tooling is insufficient.
|
|
375
|
+
|
|
376
|
+
On a review commit, include the review artifacts and the scoped project change. Then checkpoint.
|
|
377
|
+
Completion requires a final full-spec PASS and a clean project.
|
|
378
|
+
|
|
379
|
+
### Phase 8 — Completion
|
|
380
|
+
|
|
381
|
+
Before reporting complete:
|
|
382
|
+
|
|
383
|
+
- the scene is saved;
|
|
384
|
+
- the final sealed render exists and was inspected;
|
|
385
|
+
- every declared scene was inspected;
|
|
386
|
+
- every required grader report exists;
|
|
387
|
+
- the verdict is PASS;
|
|
388
|
+
- the strict asset receipt is present when assets were used;
|
|
389
|
+
- exports have valid receipts;
|
|
390
|
+
- the checkpoint is clean;
|
|
391
|
+
- the goal is complete;
|
|
392
|
+
- the tracker is complete.
|
|
393
|
+
|
|
394
|
+
## 5. Evidence contract
|
|
395
|
+
|
|
396
|
+
Every sealed round must satisfy:
|
|
397
|
+
|
|
398
|
+
- `scene` hash matches the saved `.blend`;
|
|
399
|
+
- every declared scene has a render, camera, facts, and text evidence;
|
|
400
|
+
- the facts contain dimensions and topology;
|
|
401
|
+
- the manifest lists every evidence hash;
|
|
402
|
+
- the evidence key is reproducible from the scene hash, specs, and evidence;
|
|
403
|
+
- grader reports cite the same scene hash and evidence key;
|
|
404
|
+
- `asset_check` is non-null when assets were used;
|
|
405
|
+
- the review index and manifest agree on the round;
|
|
406
|
+
- the final checkpoint is clean.
|
|
407
|
+
|
|
408
|
+
If any item is missing, the review is BLOCKED. Do not accept a visually good render as proof of
|
|
409
|
+
geometry, topology, or asset integrity.
|
|
410
|
+
|
|
411
|
+
## 6. Review and autonomy modes
|
|
412
|
+
|
|
413
|
+
### Workflow modes
|
|
414
|
+
|
|
415
|
+
- Fully Autonomous: the agent may proceed through approved production steps and review commits
|
|
416
|
+
without asking for every change.
|
|
417
|
+
- Partially Autonomous: every reviewable change requires explicit user approval before commit.
|
|
418
|
+
|
|
419
|
+
The mode is frozen at registration. A change requires re-registration.
|
|
420
|
+
|
|
421
|
+
### Review modes
|
|
422
|
+
|
|
423
|
+
- Off: self-review only.
|
|
424
|
+
- Single: one configured grader.
|
|
425
|
+
- All: every configured grader.
|
|
426
|
+
|
|
427
|
+
A configured grader must have a primary and backup provider/model/variant. A missing grader is a
|
|
428
|
+
tooling failure, not an automatic pass.
|
|
429
|
+
|
|
430
|
+
## 7. Subagents
|
|
431
|
+
|
|
432
|
+
### Worker
|
|
433
|
+
|
|
434
|
+
- executes one assigned ticket and payload;
|
|
435
|
+
- never saves, seals, reviews, approves, or commits;
|
|
436
|
+
- returns the operation result;
|
|
437
|
+
- leaves the scene saved and clean;
|
|
438
|
+
- uses the backup model only when the primary fails.
|
|
439
|
+
|
|
440
|
+
### Grader
|
|
441
|
+
|
|
442
|
+
- is read-only;
|
|
443
|
+
- writes only its assigned report;
|
|
444
|
+
- does not read peer reports;
|
|
445
|
+
- does not ask the user;
|
|
446
|
+
- does not edit the scene;
|
|
447
|
+
- returns structured findings and a verdict;
|
|
448
|
+
- stops on missing evidence or budget exhaustion.
|
|
449
|
+
|
|
450
|
+
## 8. Assets and intake
|
|
451
|
+
|
|
452
|
+
### User-supplied files
|
|
453
|
+
|
|
454
|
+
Bring files in through intake. Intake:
|
|
455
|
+
|
|
456
|
+
- scans first;
|
|
457
|
+
- copies into canonical project paths;
|
|
458
|
+
- records hashes, MIME, dimensions, source, and licence;
|
|
459
|
+
- writes sidecars and register rows;
|
|
460
|
+
- never asks the user to move or rename files manually.
|
|
461
|
+
|
|
462
|
+
### Downloads
|
|
463
|
+
|
|
464
|
+
A download may fetch a public HTTPS asset into ignored staging. It does not import, register, or
|
|
465
|
+
execute it. Inspect the receipt, provide source/licence, then intake.
|
|
466
|
+
|
|
467
|
+
### Media generation
|
|
468
|
+
|
|
469
|
+
Media generation belongs to the agent, not the harness. Use the configured media tool only with
|
|
470
|
+
explicit permission before spending credits. Save the actual file, inspect it, pass its path to
|
|
471
|
+
intake with generated metadata, display it, and ask before using it as a texture or reference.
|
|
472
|
+
|
|
473
|
+
### Licences and binaries
|
|
474
|
+
|
|
475
|
+
- external assets require source and licence metadata;
|
|
476
|
+
- non-redistributable binaries are not committed;
|
|
477
|
+
- sidecars and metadata are committed;
|
|
478
|
+
- strict `check_assets` must pass on the final unchanged scene;
|
|
479
|
+
- export receipts are separate from asset checks.
|
|
480
|
+
|
|
481
|
+
## 9. Multi-scene flow
|
|
482
|
+
|
|
483
|
+
Example user prompt:
|
|
484
|
+
|
|
485
|
+
> Turn this into three scenes: a wide establishing shot, a close desk shot, and a master scene
|
|
486
|
+
> that sequences both. Keep the room intact and give each shot its own camera.
|
|
487
|
+
|
|
488
|
+
Expected:
|
|
489
|
+
|
|
490
|
+
- create the shot scenes and master scene;
|
|
491
|
+
- declare exact scene names;
|
|
492
|
+
- switch scene only deliberately;
|
|
493
|
+
- duplicate or link the room with the correct copy semantics;
|
|
494
|
+
- add scene strips to the master;
|
|
495
|
+
- set frame range and FPS where needed;
|
|
496
|
+
- seal every declared scene;
|
|
497
|
+
- inspect every scene render;
|
|
498
|
+
- grade every declared scene;
|
|
499
|
+
- verify every scene in the manifest.
|
|
500
|
+
|
|
501
|
+
A seal that captures only the active scene is a bug.
|
|
502
|
+
|
|
503
|
+
## 10. Export flow
|
|
504
|
+
|
|
505
|
+
Example user prompt:
|
|
506
|
+
|
|
507
|
+
> Export a GLB for sharing, keeping the Blender file as the source of truth.
|
|
508
|
+
|
|
509
|
+
Expected:
|
|
510
|
+
|
|
511
|
+
- export under `exports/`;
|
|
512
|
+
- receipt includes format, path, bytes, SHA-256, source scene, and signature;
|
|
513
|
+
- the harness verifies the receipt;
|
|
514
|
+
- `check_assets` remains a separate check;
|
|
515
|
+
- README and asset records stay current;
|
|
516
|
+
- completion denies a missing or changed export.
|
|
517
|
+
|
|
518
|
+
## 11. Git and commit rules
|
|
519
|
+
|
|
520
|
+
Expected history:
|
|
521
|
+
|
|
522
|
+
- scaffold commit;
|
|
523
|
+
- one atomic commit per successful apply batch;
|
|
524
|
+
- review/evidence commit at the review boundary;
|
|
525
|
+
- tracker-only completion commit;
|
|
526
|
+
- no manual project commits;
|
|
527
|
+
- no unrelated files;
|
|
528
|
+
- no secrets, absolute paths, WIP renders, or non-redistributable binaries.
|
|
529
|
+
|
|
530
|
+
Workspace code changes are separate from project history. Do not mix harness or tooling changes into
|
|
531
|
+
a project change. When tooling fixes are needed, keep them atomic and outside the live project
|
|
532
|
+
change.
|
|
533
|
+
|
|
534
|
+
Example atomic commit set for a harness fix:
|
|
535
|
+
|
|
536
|
+
```text
|
|
537
|
+
fix: harden apply commits for ignored assets and staged recovery
|
|
538
|
+
feat: expose scene geometry and topology in scene facts
|
|
539
|
+
fix: preserve strict asset-check receipts in review manifests
|
|
540
|
+
fix: require exact grader ticket evidence and allow reference reads
|
|
541
|
+
fix: include intake register in project scaffold
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
## 12. Failure handling
|
|
545
|
+
|
|
546
|
+
### Harness BLOCKED
|
|
547
|
+
|
|
548
|
+
The harness refused an action because the state or evidence was insufficient. Retry only after the
|
|
549
|
+
missing condition is fixed.
|
|
550
|
+
|
|
551
|
+
Examples:
|
|
552
|
+
|
|
553
|
+
- no camera before a render;
|
|
554
|
+
- seal before finalize;
|
|
555
|
+
- strict asset check missing;
|
|
556
|
+
- missing grader report;
|
|
557
|
+
- index contains files outside the change;
|
|
558
|
+
- scene changed outside a guarded operation.
|
|
559
|
+
|
|
560
|
+
### Design CHANGES_REQUIRED
|
|
561
|
+
|
|
562
|
+
The scene is valid but does not meet the confirmed visual or spec requirements. Start a new revision
|
|
563
|
+
change, apply the fixes, seal again, and re-review.
|
|
564
|
+
|
|
565
|
+
Examples:
|
|
566
|
+
|
|
567
|
+
- lamp lights the wall instead of the desk;
|
|
568
|
+
- palette is cool instead of warm;
|
|
569
|
+
- wall material reads as striping;
|
|
570
|
+
- monitor is a flat emissive panel;
|
|
571
|
+
- props are missing or unreadable.
|
|
572
|
+
|
|
573
|
+
### Recovery rules
|
|
574
|
+
|
|
575
|
+
- do not edit runtime state;
|
|
576
|
+
- do not force-add ignored binaries;
|
|
577
|
+
- do not manually stage or commit project files;
|
|
578
|
+
- preserve a failed change as WIP and checkpoint;
|
|
579
|
+
- clear a stale base only through a controlled recovery, not by deleting the project;
|
|
580
|
+
- keep code fixes separate from the test project.
|
|
581
|
+
|
|
582
|
+
## 13. Developer invariants
|
|
583
|
+
|
|
584
|
+
- One Blender writer at a time.
|
|
585
|
+
- One open bounded change per project.
|
|
586
|
+
- One ticket, one payload, one worker.
|
|
587
|
+
- Orchestrator never executes apply.
|
|
588
|
+
- Every scene edit has a task record.
|
|
589
|
+
- Every review has frozen evidence.
|
|
590
|
+
- Every grader has one assigned report.
|
|
591
|
+
- Every completion has a clean checkpoint.
|
|
592
|
+
- Every asset has a source and licence record.
|
|
593
|
+
- Every export has a verified receipt.
|
|
594
|
+
- Every failure is reported with exact error text.
|
|
595
|
+
|
|
596
|
+
## 14. Example end-to-end session
|
|
597
|
+
|
|
598
|
+
User:
|
|
599
|
+
|
|
600
|
+
> Make a cozy room with a computer.
|
|
601
|
+
|
|
602
|
+
Agent:
|
|
603
|
+
|
|
604
|
+
> I need a few choices that change the result: warm or cool mood, what the computer setup should
|
|
605
|
+
> include, and whether I may download free assets. I will also ask you to choose Fully or Partially
|
|
606
|
+
> Autonomous and Off, Single, or All review.
|
|
607
|
+
|
|
608
|
+
User:
|
|
609
|
+
|
|
610
|
+
> Warm evening, desk with monitor and keyboard, free CC0 assets allowed, Fully Autonomous, All
|
|
611
|
+
> graders.
|
|
612
|
+
|
|
613
|
+
Agent:
|
|
614
|
+
|
|
615
|
+
- confirms requirements;
|
|
616
|
+
- scaffolds and registers;
|
|
617
|
+
- launches Blender;
|
|
618
|
+
- builds the room in bounded changes;
|
|
619
|
+
- renders WIP checks;
|
|
620
|
+
- seals the final scene;
|
|
621
|
+
- dispatches visual, technical, and spec graders;
|
|
622
|
+
- fixes review findings in a new revision;
|
|
623
|
+
- reaches PASS;
|
|
624
|
+
- commits and checkpoints;
|
|
625
|
+
- reports the project path, render path, review result, and remaining limitations.
|
|
626
|
+
|
|
627
|
+
## 15. Minimal acceptance checklist
|
|
628
|
+
|
|
629
|
+
- [ ] Live capabilities match source.
|
|
630
|
+
- [ ] Requirements and modes were confirmed before scaffolding.
|
|
631
|
+
- [ ] Scaffold commit includes every template file.
|
|
632
|
+
- [ ] Blender launched only after registration.
|
|
633
|
+
- [ ] Every scene edit has a ticket and task record.
|
|
634
|
+
- [ ] WIP renders were inspected.
|
|
635
|
+
- [ ] Final scene was saved before seal.
|
|
636
|
+
- [ ] Strict `check_assets` ran on the final unchanged scene when assets were used.
|
|
637
|
+
- [ ] `scene-facts.json` includes dimensions and topology.
|
|
638
|
+
- [ ] Manifest `asset_check` is non-null when assets were used.
|
|
639
|
+
- [ ] All configured graders wrote reports.
|
|
640
|
+
- [ ] Reports cite the scene hash and evidence key.
|
|
641
|
+
- [ ] Final verdict is PASS.
|
|
642
|
+
- [ ] Every declared scene render was inspected.
|
|
643
|
+
- [ ] Exports have verified receipts if produced.
|
|
644
|
+
- [ ] Project history is scoped and clean.
|
|
645
|
+
- [ ] Checkpoint is clean.
|
|
646
|
+
- [ ] Goal and tracker are complete.
|
|
647
|
+
|
|
648
|
+
## 16. Known limits
|
|
649
|
+
|
|
650
|
+
- No arbitrary Blender Python execution.
|
|
651
|
+
- No browser or authentication bypass.
|
|
652
|
+
- No automatic licence acceptance.
|
|
653
|
+
- No model preview worker yet.
|
|
654
|
+
- No master animation render ticket yet; master scene stills and scene strips are tested.
|
|
655
|
+
- Media generation is agent-owned; the harness only intakes and records the result.
|
|
656
|
+
- A single-scene pass is valid before multi-scene, media, and export follow-ups.
|