unitbob 0.4.1 → 0.4.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/README.md
CHANGED
|
@@ -30,7 +30,7 @@ claude plugin install unitbob@unitbob
|
|
|
30
30
|
```
|
|
31
31
|
codex plugin marketplace add sergeygershun/unitbob-connector
|
|
32
32
|
codex plugin add unitbob@unitbob
|
|
33
|
-
npx -y unitbob@0.4.
|
|
33
|
+
npx -y unitbob@0.4.2 codex-install
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
Start a new Claude Code or Codex thread so the installed skill and named agents
|
|
@@ -74,14 +74,25 @@ function validateCompactFacts(value, label, errors) {
|
|
|
74
74
|
return;
|
|
75
75
|
}
|
|
76
76
|
for (const [index, entry] of value.entries()) {
|
|
77
|
+
if (!entry || typeof entry !== 'object' || Array.isArray(entry)) {
|
|
78
|
+
errors.push(`${label}: $.facts[${index}] must be an object with fact and source_refs; got ${jsonType(entry)}`);
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
77
81
|
const fact = entry;
|
|
78
|
-
if (
|
|
82
|
+
if (typeof fact.fact !== 'string' || !fact.fact.trim())
|
|
79
83
|
errors.push(`${label}: facts[${index}].fact must be non-empty`);
|
|
80
|
-
if (!Array.isArray(fact
|
|
84
|
+
if (!Array.isArray(fact.source_refs) || fact.source_refs.some((ref) => typeof ref !== 'string' || !ref.trim())) {
|
|
81
85
|
errors.push(`${label}: facts[${index}].source_refs must be compact source references`);
|
|
82
86
|
}
|
|
83
|
-
if ('source' in
|
|
87
|
+
if ('source' in fact || 'transcript' in fact || 'suite' in fact) {
|
|
84
88
|
errors.push(`${label}: facts[${index}] may not embed source, transcript, or suite copies`);
|
|
85
89
|
}
|
|
86
90
|
}
|
|
87
91
|
}
|
|
92
|
+
function jsonType(value) {
|
|
93
|
+
if (value === null)
|
|
94
|
+
return 'null';
|
|
95
|
+
if (Array.isArray(value))
|
|
96
|
+
return 'array';
|
|
97
|
+
return typeof value;
|
|
98
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "unitbob",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"description": "Unitbob connector — thin local hands for the Unitbob Rails brain. Owns no domain logic: it runs tools, relays bytes over the wire, and prints what the server returns.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -13,7 +13,14 @@ not edit host-owned shared files, the connector-owned harness, application
|
|
|
13
13
|
production code, or another slice.
|
|
14
14
|
|
|
15
15
|
Update the same checkpoint as promises complete. Keep facts compact and
|
|
16
|
-
source-referenced.
|
|
16
|
+
source-referenced. The normative JSON shape of one facts entry is:
|
|
17
|
+
```json
|
|
18
|
+
{"fact":"The route creates an order.","source_refs":["app/orders.rb:12"]}
|
|
19
|
+
```
|
|
20
|
+
Every facts entry is an object in that shape, never a string. Before handoff,
|
|
21
|
+
make one final read of the checkpoint and confirm every `facts` entry is an
|
|
22
|
+
object in the normative shape above. Never run the suite or boot the
|
|
23
|
+
application; the coordinator
|
|
17
24
|
owns the single final run. Do not delegate a second repair, continue another
|
|
18
25
|
agent, or request another repair round. If work remains at the turn ceiling,
|
|
19
26
|
record it in `unresolved_promises` so the coordinator can produce an honest
|
|
@@ -16,7 +16,12 @@ native budget stop, preserve the supplied checkpoint and completed files and
|
|
|
16
16
|
continue only its `unresolved_promises`; never initialize that checkpoint again.
|
|
17
17
|
Update the checkpoint after every completed promise. Also keep `known_problems` as a compact
|
|
18
18
|
array of precise unresolved harness problems (empty when none are known). Facts are short statements with
|
|
19
|
-
source references
|
|
19
|
+
source references. The normative JSON shape of one facts entry is:
|
|
20
|
+
```json
|
|
21
|
+
{"fact":"The route creates an order.","source_refs":["app/orders.rb:12"]}
|
|
22
|
+
```
|
|
23
|
+
Every facts entry is an object in that shape, never a string. Never embed source
|
|
24
|
+
files, suite copies, or transcript.
|
|
20
25
|
|
|
21
26
|
Read only the initial `source_paths` and dependencies needed for the finite
|
|
22
27
|
planned cases. Ask closed questions with the files to look in. For a closed
|
|
@@ -31,7 +36,9 @@ copy it into an owned file.
|
|
|
31
36
|
|
|
32
37
|
Never run the suite, boot the application, or perform branch-global duplicate,
|
|
33
38
|
marker, metadata, or surface validation. You may make one final read of your
|
|
34
|
-
owned files before handoff.
|
|
39
|
+
owned files before handoff. During that final read, confirm every `facts` entry
|
|
40
|
+
is an object in the normative shape above and correct the checkpoint if it is
|
|
41
|
+
not. Do not create temporary self-validation scripts or
|
|
35
42
|
loop over repeated rereads. If the turn ceiling arrives, leave partial files and
|
|
36
43
|
an accurate checkpoint; the coordinator will rotate unresolved work into one
|
|
37
44
|
fresh repair task.
|