@lifeaitools/rdc-skills 0.30.1 → 0.30.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rdc",
3
- "version": "0.30.1",
3
+ "version": "0.30.2",
4
4
  "description": "RDC typed-agent dispatch skill suite for Claude Code — plan, build, review, overnight unattended builds with work-item tracking and TDD enforcement.",
5
5
  "author": {
6
6
  "name": "LIFEAI",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifeaitools/rdc-skills",
3
- "version": "0.30.1",
3
+ "version": "0.30.2",
4
4
  "description": "RDC typed-agent dispatch skill suite for Claude Code - plan, build, review, overnight builds",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -127,11 +127,29 @@ is not helpful — it is what the format exists to remove.
127
127
  **One block per point:**
128
128
 
129
129
  ```
130
- POINT <n>: AGREE | AGREE-WITH-AMENDMENT | DISAGREE
130
+ POINT <n>: AGREE | AGREE-WITH-AMENDMENT | DISAGREE | UNKNOWN | DEFER
131
131
  EDIT: <the exact section and change that SHOULD be made, or NONE — describe it, do not make it>
132
- REASON: <one sentence — only if AMENDMENT or DISAGREE>
132
+ REASON: <one sentence — required for AMENDMENT, DISAGREE, UNKNOWN and DEFER>
133
133
  ```
134
134
 
135
+ **`UNKNOWN` and `DEFER` are answers, not failures.** If you lack the evidence to
136
+ hold a position, say so. A three-value contract forces you to invent one, and an
137
+ invented position is indistinguishable from a settled one in the next round —
138
+ which is how a negotiation converges on something nobody checked. `UNKNOWN` = you
139
+ cannot determine it. `DEFER` = it is determinable but belongs to another owner or
140
+ another round.
141
+
142
+ **Always carry `AS_OF` and `PROBE_STATE`:**
143
+
144
+ ```
145
+ AS_OF: <timestamp of your last observation of what you are describing>
146
+ PROBE_STATE: live | cached | absent
147
+ ```
148
+
149
+ A claim with no as-of is a claim about an unknown moment. `live` = you probed it
150
+ this turn; `cached` = you are reporting an earlier observation; `absent` = you
151
+ could not observe it and are reasoning from something else. Say which.
152
+
135
153
  **For a factual question rather than a proposal:**
136
154
 
137
155
  ```
@@ -147,6 +165,43 @@ OWNER: <who lands the resulting Decision or work item — exactly one agent>
147
165
  BLOCKED: <what you cannot do from where you are, or NONE>
148
166
  ```
149
167
 
168
+ ### 1b. A broken briefing is the HOST's defect. Report it; do not repair it.
169
+
170
+ **You are a guest in this workspace.** Checking that everything you were handed is
171
+ actually there is welcome — one quick pass, seconds, before you start reading. It
172
+ catches the host's mistakes early, which is worth doing.
173
+
174
+ **What is not yours is the RECOVERY.** If a path does not exist, a service is
175
+ down, or the tree is not in the state the dispatch claims — say so, in one line,
176
+ and stop. Do not go find the file. Do not search the filesystem, do not search git
177
+ objects, do not resolve which branch really has it, do not reconcile the
178
+ initiator's checkouts. Verifying takes seconds and helps; recovering takes minutes
179
+ and hides the defect.
180
+
181
+ This is not laziness, and it is the opposite of unhelpful. Measured 2026-08-15: a
182
+ peer was handed six paths, two of which did not exist where stated. It did
183
+ everything a capable agent would do — searched the tree, searched hidden files,
184
+ searched `git ls-tree` across refs, found the real versions in `origin/develop`
185
+ and a `v0.30.1` tag, read them from immutable git objects without touching either
186
+ worktree, and reported the mismatch precisely. **The answer was correct and it
187
+ cost 4m23s instead of 60s.** Worse, the initiator's two drifted checkouts stayed
188
+ drifted, because the peer had quietly worked around them — the defect was
189
+ absorbed instead of returned, so nothing got fixed and the next session hit it
190
+ again.
191
+
192
+ ```
193
+ BLOCKED: path 3 does not exist: C:/path/as/given. Not searching — fix the briefing.
194
+ ```
195
+
196
+ One line, immediately, before reading anything else. The host can fix a wrong path
197
+ in seconds; you cannot fix it at all, because you cannot know whether the path was
198
+ mistyped, the file was renamed, or their checkout is stale. **Guessing which,
199
+ correctly, still leaves their room broken.**
200
+
201
+ The same applies to a service the dispatch told you to use: if CodeFlow or an MCP
202
+ is unreachable, report it and stop. Do not restart it, do not route around it, do
203
+ not substitute a different tool and carry on as though nothing happened.
204
+
150
205
  ### 2. Declare `BLOCKED` loudly. Silence is the worst answer.
151
206
 
152
207
  If you cannot write, cannot reach a service, or lack the credential — **say it in
@@ -296,9 +296,22 @@ Two rules that override the table:
296
296
  Every dispatch carries an explicit answer format. The contract is not politeness —
297
297
  it is what makes the reply *checkable*.
298
298
 
299
- **Every field returns information. No field asks the peer what it changed** — if a
300
- contract invites `CHANGED: <file paths>`, it has invited the peer to mutate the
301
- repo mid-conversation, which is the v0.27.0 defect this version removes.
299
+ **During a NEGOTIATION, the contract returns information no field asks the peer
300
+ what it changed.** A `CHANGED: <file paths>` field invites both sides to mutate the
301
+ same artifact mid-argument, which is the v0.27.0 defect this version removes.
302
+
303
+ **This is not a read-only peer, and never say it is.** The constraint is
304
+ SINGLE-WRITER-PER-ARTIFACT (Step 4), not "the guest may not touch anything". A
305
+ peer that is the named writer for an artifact writes it — that is the whole
306
+ mechanism by which an agreed change gets made. What it must not do is edit the
307
+ artifact under negotiation while the negotiation is still open, or edit one it
308
+ does not own.
309
+
310
+ Telling a capable peer it is read-only when the workspace imposes no such rule is
311
+ an invented constraint, and inventing constraints on someone else's behalf costs
312
+ exactly what a wrong constraint always costs: work that could have been done in
313
+ the same turn gets deferred to another round, or gets done anyway and now
314
+ contradicts what you told them. In `delegate` mode the peer is expected to write.
302
315
 
303
316
  **The contract — one block per open point:**
304
317
 
@@ -417,6 +430,16 @@ dispatch.
417
430
  > Two active writers on one surface is forbidden — the same rule the fleet plans
418
431
  > state as *"never run two active writers for one effect."*
419
432
 
433
+ > **The single-writer rule is a stopgap, and it is worth knowing what it stands
434
+ > in for.** Per-artifact version numbers solved this in the 1970s — VMS gave every
435
+ > file a generation (`FILE.TXT;1`, `;2`), so two writers produced two versions and
436
+ > the collision was *detected* instead of silently losing one. Git is that
437
+ > mechanism, better: content-addressed versions plus a merge base that says
438
+ > exactly where two lines of work diverged. A rule that forbids concurrent writing
439
+ > is a rule that declines to use it. Keep single-writer for now — it is cheap and
440
+ > it holds — but do not mistake it for the right answer to two agents on one file.
441
+ > GitHub already handles most of it.
442
+
420
443
  **Scope ownership to a named effect or artifact, never to an agent in general** —
421
444
  "Claude owns `fleet-throughput-remediation.md`", not "Claude is the writer".
422
445
  Transfer is explicit and acknowledged; **silence never transfers ownership**. A