@lifeaitools/rdc-skills 0.37.10 → 0.38.0

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.37.10",
3
+ "version": "0.38.0",
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",
@@ -2121,6 +2121,46 @@
2121
2121
  "codeflow_required": false,
2122
2122
  "purpose": "orient before working: position, target from the registry, and the harness shape"
2123
2123
  },
2124
+ "close": {
2125
+ "name": "close",
2126
+ "slash": "rdc:close",
2127
+ "category": "dev-loop",
2128
+ "usage": "rdc:close",
2129
+ "args": {
2130
+ "positional": [],
2131
+ "flags": []
2132
+ },
2133
+ "requires": [
2134
+ "git",
2135
+ "work-items-rpc"
2136
+ ],
2137
+ "produces": [
2138
+ "git_commits",
2139
+ "git_pushes",
2140
+ "deploys"
2141
+ ],
2142
+ "default_model": "sonnet",
2143
+ "triggers": [
2144
+ "can I exit",
2145
+ "close the session",
2146
+ "are we done",
2147
+ "is everything landed",
2148
+ "rdc:close",
2149
+ "wrap up the session",
2150
+ "end the session"
2151
+ ],
2152
+ "follows": [
2153
+ "build",
2154
+ "fixit",
2155
+ "overnight"
2156
+ ],
2157
+ "leads_to": [],
2158
+ "sandbox_aware": false,
2159
+ "output_contract": "guides/output-contract.md",
2160
+ "enabled_default": true,
2161
+ "codeflow_required": false,
2162
+ "purpose": "decide whether the session can exit (commits, land, deploy, stash), fix what is unfinished, and record it as closed via rdc-close"
2163
+ },
2124
2164
  "new": {
2125
2165
  "name": "new",
2126
2166
  "slash": "rdc:new",
package/README.md CHANGED
@@ -318,6 +318,7 @@ skills/
318
318
  build/SKILL.md (dispatch agents in waves — mandatory validator gate)
319
319
  channel-formatter/SKILL.md (channel-native formatting and content packs)
320
320
  clean-code-analyzer/SKILL.md (naming, dead code and complexity smells)
321
+ close/SKILL.md (can this session exit: verify, fix, record closed)
321
322
  co-develop/SKILL.md (peer-aware Claude/Codex co-development)
322
323
  collab/SKILL.md (bidirectional claude.ai ↔ Claude Code relay)
323
324
  convert/SKILL.md (Office/Markdown conversion)
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schema": "lifeai.plugin.v1",
3
3
  "id": "rdc-skills",
4
- "version": "0.37.10",
4
+ "version": "0.38.0",
5
5
  "publisher": "LIFEAI",
6
6
  "core": false,
7
7
  "documentation": {
package/git-sha.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "sha": "36d09ffe1920d0f5906909cf599953d73c71bff9"
2
+ "sha": "bbbd79996feafdb0aae6bf5c1f8bbebed904db74"
3
3
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifeaitools/rdc-skills",
3
- "version": "0.37.10",
3
+ "version": "0.38.0",
4
4
  "description": "RDC typed-agent dispatch skill suite for Claude Code - plan, build, review, overnight builds",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -19,7 +19,7 @@
19
19
  "type": "plugin",
20
20
  "skills": "skills/",
21
21
  "guides": "guides/",
22
- "version": "0.37.10",
22
+ "version": "0.38.0",
23
23
  "commands": "commands/"
24
24
  },
25
25
  "bin": {
@@ -0,0 +1,73 @@
1
+ ---
2
+ name: close
3
+ description: rdc:close () — decide whether this session can exit, fix what is unfinished, and record it as closed
4
+ ---
5
+
6
+ > **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
7
+ > Checklist-only output. No tool-call narration. No raw MCP/JSON/log dumps.
8
+ > One checklist upfront, updated in place, shown again at end with a 1-line verdict.
9
+
10
+ > If dispatching subagents or running as a subagent: read `{PROJECT_ROOT}/.rdc/guides/agent-bootstrap.md` first (fallback: `{PROJECT_ROOT}/.rdc/guides/agent-bootstrap.md`).
11
+
12
+
13
+ # rdc:close — Can this session exit?
14
+
15
+ ## When to Use
16
+ - Before ending any session that changed something.
17
+ - Dave asks "are we done", "can I exit", "is everything landed".
18
+ - As the last step of `rdc:build`, `rdc:fixit` and `rdc:overnight`.
19
+
20
+ ## What it is
21
+
22
+ `rdc-close` (`$LIFEAI_ENV/bin/rdc-close.mjs`) holds every mechanical check and the session marker. This skill is the
23
+ judgment layer on top: it fixes what the engine reports. The engine never commits, edits or deploys; those need a
24
+ decision, and the decision is yours.
25
+
26
+ If a session ends without a close, a SessionEnd hook starts a detached worker that lands what is **already
27
+ committed** and writes an unclean record for the rest. The next session in that lane is told what was left. So close
28
+ properly; the hook is a safety net, not the plan.
29
+
30
+ ## Procedure
31
+
32
+ 1. **Get the verdict.** `node "$LIFEAI_ENV/bin/rdc-close.mjs" check` (add `--json` to parse). Exit 0 is clear.
33
+ It reads root, integration branch and ship route from the work contract, so the same call serves every repository.
34
+
35
+ 2. **Fix each blocking check, then re-run `check`.**
36
+
37
+ | Check | Blocks when | Fix |
38
+ |---|---|---|
39
+ | `contract` | a proof row is unproved | `rdc-work verify --all`; then prove it, or `drop` / `ship-row` / `hold` with a reason. Never edit code to turn a gate green. |
40
+ | `clean` | files are uncommitted or untracked | Commit under the declared contract with its `Work-Item:` trailer, or remove scratch with `rm`. Stage explicit paths, never `git add -A`. Stash only work that is truly deferred, tagged `rdc-<first 8 of the session id>`. |
41
+ | `landed` | a commit is not on `origin/<integration>` | Run the contract's ship route (`rdc-work status` prints it: `node scripts/land.mjs`, `node machines/land.mjs`, ...). A pushed lane branch is not landed. |
42
+ | `other_repos` | a repository this session touched is not clean | Repeat the two rows above in that repository. |
43
+ | `deploy` | `fail`: a deployable changed and no deploy followed | `/rdc:deploy <slug>`. `unknown`: the deploy manager's job window does not reach the change, so deploy if this session changed that app and say so. `na`: nothing to do. |
44
+ | `stash` | a stash entry carries this session's tag | Pop, commit or drop it with a reason. Entries tagged for other sessions are not yours; leave them. |
45
+
46
+ 3. **Housekeeping the engine cannot decide.**
47
+ - An `apps/*` or `sites/*` change bumps that app's displayed version in the same commit (`version-numbering.md`).
48
+ A published package bumps only inside `/rdc:release`.
49
+ - A non-obvious lesson whose fix is not encoded in a commit: `rdc-lesson submit`.
50
+ - `/rdc:report` when the work contract's tier asks for a session report.
51
+ - Finalize the CodeFlow session (`codeflow_finalize`).
52
+
53
+ 4. **Close.** `node "$LIFEAI_ENV/bin/rdc-close.mjs" run` lands anything committed, runs `clauth scrub`, re-checks, and
54
+ writes the session marker. Exit 0 means closed. Exit 1 prints the failing checks: go back to step 2.
55
+
56
+ 5. **Report one line.** Closed (marker current, with the commit it names), or the blockers that remain and the one
57
+ decision that clears them.
58
+
59
+ ## Rules
60
+
61
+ - Never say "closed" without `rdc-close run` exiting 0 **in this turn**. A marker goes stale on any later commit or
62
+ edit, so a close claimed earlier does not carry.
63
+ - Never commit, reset or delete another session's work. A dirty sibling worktree is preserved, not cleaned.
64
+ - Deploy only when the engine says a deployable changed. `deploy: na` is the answer for a docs-only or tooling-only
65
+ session; do not run `/rdc:deploy` for the sake of it.
66
+ - A blocker needs an independent look before you report it as one: probe it, and have another agent confirm.
67
+ - A question for Dave goes through `AskUserQuestion`, never as a line in the report.
68
+
69
+ ## Capture lessons (exit step)
70
+
71
+ If this close taught something non-obvious, follow `.rdc/guides/lessons-learned-spec.md` § Capture procedure: a fix
72
+ already encoded goes in its commit message; a fix not encoded is `node "$LIFEAI_ENV/bin/rdc-lesson.mjs" submit`.
73
+ Note "N lessons captured" in the verdict. A close that taught nothing records nothing.
@@ -93,6 +93,18 @@ shipping one verb as two documents produces.
93
93
  - **Never declare success without verifying the installed or deployed version.**
94
94
  A publish that exits 0 is not a published package — the registry can lag
95
95
  minutes behind, so check the version endpoint, not the success line.
96
+ - **npm auth: publish with the stored token until interactive login is fixed.**
97
+ Operator instruction, 2026-10-02. The `dladouceur` npm account cannot log in
98
+ interactively (2FA reset is with npm support). So `npm error need auth`, `E401`
99
+ or "needs an OTP" is NOT a blocker and is never handed back to Dave: publish with
100
+ the clauth `npm` service token, which `node $LIFEAI_ENV/sessions/work-ship.mjs
101
+ --repo <name> --lane <path> -F <msgfile> --publish` fetches and passes to npm
102
+ in-process. Never `curl .../v/npm`
103
+ into a shell, print the token, or write it into an `.npmrc` (`~/.npmrc` holds only
104
+ a GitHub Packages token). A 404 on publish means the token is package-scoped and
105
+ lacks that package; say which package, do not retry. Verify the exact version on
106
+ the registry afterwards. Delete this rule once `npm whoami` works from a plain
107
+ shell again.
96
108
 
97
109
  For a `package`-class target that already resolves through `rdc-harness` (a real
98
110
  monorepo subtree, not a standalone repo like this one),