@rubytech/create-maxy-code 0.1.319 → 0.1.321
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/dist/__tests__/base-toolchain-deps.test.js +67 -0
- package/dist/index.js +7 -1
- package/package.json +1 -1
- package/payload/platform/config/brand.json +1 -1
- package/payload/platform/lib/graph-style/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/graph-style/dist/index.js +15 -0
- package/payload/platform/lib/graph-style/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-style/src/index.ts +16 -0
- package/payload/platform/lib/graph-write/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/graph-write/dist/index.js +3 -0
- package/payload/platform/lib/graph-write/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-write/src/index.ts +3 -0
- package/payload/platform/lib/models/dist/index.d.ts +14 -0
- package/payload/platform/lib/models/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/models/dist/index.js +22 -1
- package/payload/platform/lib/models/dist/index.js.map +1 -1
- package/payload/platform/lib/models/src/index.ts +26 -0
- package/payload/platform/neo4j/schema.cypher +103 -0
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +40 -10
- package/payload/platform/plugins/docs/references/admin-ui.md +26 -5
- package/payload/platform/plugins/docs/references/neo4j.md +9 -0
- package/payload/platform/plugins/docs/references/platform.md +1 -1
- package/payload/platform/plugins/docs/references/plugins-guide.md +2 -2
- package/payload/platform/plugins/docs/references/troubleshooting.md +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.js +28 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/typed-edge-schema.test.js +7 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/typed-edge-schema.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-schema.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-schema.js +19 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/typed-edge-schema.js.map +1 -1
- package/payload/platform/plugins/memory/references/schema-knowledge-work.md +80 -0
- package/payload/platform/plugins/projects/PLUGIN.md +11 -0
- package/payload/platform/plugins/projects/references/meeting-to-tasks.md +34 -0
- package/payload/platform/plugins/projects/references/prioritization.md +43 -0
- package/payload/platform/plugins/projects/references/risk-premortem.md +34 -0
- package/payload/platform/plugins/projects/references/sprint.md +5 -1
- package/payload/platform/plugins/projects/references/stakeholder-map.md +43 -0
- package/payload/platform/scripts/installer-device-verify.sh +38 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +24 -6
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.d.ts +6 -0
- package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.js +17 -3
- package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/permission-mode-tail.d.ts +3 -1
- package/payload/platform/services/claude-session-manager/dist/permission-mode-tail.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/permission-mode-tail.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +2 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +10 -3
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts +1 -25
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +23 -95
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/settings-permission-mode.d.ts +9 -0
- package/payload/platform/services/claude-session-manager/dist/settings-permission-mode.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/settings-permission-mode.js +29 -0
- package/payload/platform/services/claude-session-manager/dist/settings-permission-mode.js.map +1 -1
- package/payload/premium-plugins/venture-studio/PLUGIN.md +12 -3
- package/payload/premium-plugins/venture-studio/skills/investor-data-room/SKILL.md +14 -0
- package/payload/premium-plugins/venture-studio/skills/investor-data-room/references/competitive-battlecard.md +37 -0
- package/payload/premium-plugins/venture-studio/skills/investor-data-room/references/competitor-analysis.md +32 -0
- package/payload/premium-plugins/venture-studio/skills/investor-data-room/references/monetization-strategy.md +35 -0
- package/payload/premium-plugins/venture-studio/skills/investor-data-room/references/pricing-strategy.md +37 -0
- package/payload/premium-plugins/venture-studio/skills/investor-data-room/references/strategy-frameworks.md +46 -0
- package/payload/premium-plugins/venture-studio/skills/legal-essentials/SKILL.md +65 -0
- package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/SKILL.md +6 -0
- package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/market-sizing.md +58 -0
- package/payload/premium-plugins/venture-studio/skills/zero-to-prototype/references/strategy-red-team.md +41 -0
- package/payload/server/maxy-edge.js +1 -1
- package/payload/server/public/assets/{AdminLoginScreens-CrdmA3KA.js → AdminLoginScreens-DKwWudsP.js} +1 -1
- package/payload/server/public/assets/AdminShell-BsPsXvJv.js +1 -0
- package/payload/server/public/assets/{Checkbox-DXisJRUK.js → Checkbox-V5ubVZG1.js} +1 -1
- package/payload/server/public/assets/OperatorConversations-DOGCHZhv.css +1 -0
- package/payload/server/public/assets/OperatorConversations-DPRRlS_z.js +9 -0
- package/payload/server/public/assets/{admin-DX5lZxWt.js → admin-Cfqj5N4P.js} +1 -1
- package/payload/server/public/assets/{browser-Bxx8w8BA.js → browser-CtMwlpyW.js} +1 -1
- package/payload/server/public/assets/chat-Bm11OGsU.js +1 -0
- package/payload/server/public/assets/data-7_dN5vN5.js +1 -0
- package/payload/server/public/assets/{graph-B59N222f.js → graph-Bez5QF37.js} +3 -3
- package/payload/server/public/assets/graph-labels-BkbaBPIP.js +1 -0
- package/payload/server/public/assets/operator-F5KHg5WG.js +1 -0
- package/payload/server/public/assets/page-CExyEcvh.js +30 -0
- package/payload/server/public/assets/{public-BcqXGSaE.js → public-wy93nfmL.js} +1 -1
- package/payload/server/public/browser.html +4 -4
- package/payload/server/public/chat.html +5 -5
- package/payload/server/public/data.html +4 -4
- package/payload/server/public/graph.html +6 -6
- package/payload/server/public/index.html +6 -6
- package/payload/server/public/operator.html +7 -7
- package/payload/server/public/public.html +5 -5
- package/payload/server/server.js +109 -9
- package/payload/server/public/assets/AdminShell-0meAFBva.js +0 -1
- package/payload/server/public/assets/OperatorConversations-DBy2G8q3.js +0 -9
- package/payload/server/public/assets/OperatorConversations-DvRXfq3q.css +0 -1
- package/payload/server/public/assets/chat-CT9YrNtI.js +0 -1
- package/payload/server/public/assets/data-B9NtsXgF.js +0 -1
- package/payload/server/public/assets/graph-labels-70w-1ov0.js +0 -1
- package/payload/server/public/assets/operator-DpRAhwQN.js +0 -1
- package/payload/server/public/assets/page-Ehjc9b9V.js +0 -30
- /package/payload/server/{chunk-NCRJQEZ3.js → chunk-GRKG3KNN.js} +0 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Schema Reference — Knowledge Work
|
|
2
|
+
|
|
3
|
+
Vertical schema for `businessType: "knowledge-work"` — the Maxy brand's knowledge workers: strategists, founders, operators, researchers, analysts.
|
|
4
|
+
|
|
5
|
+
This reference extends the base schema. All base node types remain valid. Load `schema-base.md` first.
|
|
6
|
+
|
|
7
|
+
When loading this reference, confirm: "Using schema-base + schema-knowledge-work".
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Reuse the base — this vertical adds only the gaps
|
|
12
|
+
|
|
13
|
+
Most of knowledge work is already in the base schema. Use the base labels, do not duplicate them:
|
|
14
|
+
|
|
15
|
+
- People and orgs: `Person`, `Organization`, `Position`, `Credential`. Reporting lines are the `REPORTS_TO` edge below, not a node.
|
|
16
|
+
- Work: `Task` (a `schema:Action`), `Project`, `Meeting`, `Event`, `Workflow`.
|
|
17
|
+
- Concepts and content: `DefinedTerm` (concepts, skills, glossary, learnings), `Concept`, `Idea`, `CreativeWork`, `KnowledgeDocument` and `Section`.
|
|
18
|
+
|
|
19
|
+
The gaps this vertical fills are: goals and OKRs, decision records, risk, and the research / citation / evidence layer. It adds those seven labels and nothing else.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Additional Node Types
|
|
24
|
+
|
|
25
|
+
| Entity | Neo4j Label | Schema.org Type | Required Properties |
|
|
26
|
+
|--------|-------------|-----------------|---------------------|
|
|
27
|
+
| Objective | `Objective` | platform-native | `accountId`, `title`, `framework` (OKR/OGSM/V2MOM/Hoshin), `timeframe`, `status` (draft/active/achieved/missed/abandoned) |
|
|
28
|
+
| KeyResult | `KeyResult` | platform-native | `accountId`, `title`, `target`, `current`, `unit`, `status` (on-track/at-risk/missed/achieved) |
|
|
29
|
+
| Decision | `Decision` | `schema:CreativeWork` | `accountId`, `title`, `status` (proposed/accepted/superseded/rejected), `decision` |
|
|
30
|
+
| Risk | `Risk` | platform-native | `accountId`, `statement`, `probability` (low/medium/high), `impact` (low/medium/high), `status` (open/mitigated/accepted/closed) |
|
|
31
|
+
| Source | `Source` | `schema:CreativeWork` | `accountId`, `title`, `sourceType` (article/book/web/dataset/report) |
|
|
32
|
+
| Finding | `Finding` | platform-native | `accountId`, `statement`, `status` (draft/validated/retracted) |
|
|
33
|
+
| Hypothesis | `Hypothesis` | platform-native | `accountId`, `statement`, `status` (open/supported/refuted/assumed) |
|
|
34
|
+
|
|
35
|
+
`Objective` carries the strategy framework on a `framework` discriminator rather than proliferating one label per framework: OGSM and V2MOM strategy/method tiers are `Objective` nodes distinguished by `framework`. A North-Star metric is an `Objective`-level `KeyResult`, not a separate label. A `Source` is a referenced work (a citation target), distinct from an ingested `KnowledgeDocument` whose full text lives on disk. An open research question is a `Hypothesis {status:'open'}`; an assumption is a `Hypothesis {status:'assumed'}` — the base `Question` label stays reserved for `schema:Question` FAQ content.
|
|
36
|
+
|
|
37
|
+
Optional properties seen in practice: `Decision` — `context`, `consequences`, `decidedAt`; `Source` — `url`, `doi`, `datePublished`; `Finding` — `confidence`.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Idempotency contracts
|
|
42
|
+
|
|
43
|
+
MERGE keys per label:
|
|
44
|
+
|
|
45
|
+
- `:Objective` — `(accountId, title)`
|
|
46
|
+
- `:KeyResult` — `(accountId, objectiveTitle, title)` — child of the `:Objective` it measures
|
|
47
|
+
- `:Decision` — `(accountId, title)`
|
|
48
|
+
- `:Risk` — `(accountId, statement)`
|
|
49
|
+
- `:Source` — `(accountId, title)`
|
|
50
|
+
- `:Finding` — `(accountId, statement)`
|
|
51
|
+
- `:Hypothesis` — `(accountId, statement)`
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Relationship Patterns
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
(:Objective)-[:MEASURED_BY]->(:KeyResult)
|
|
59
|
+
(:Project)-[:ADVANCES]->(:Objective)
|
|
60
|
+
(:Project)-[:ADVANCES]->(:KeyResult)
|
|
61
|
+
(:Task)-[:ADVANCES]->(:Objective)
|
|
62
|
+
(:Task)-[:ADVANCES]->(:KeyResult)
|
|
63
|
+
(:Decision)-[:SUPERSEDES]->(:Decision)
|
|
64
|
+
(:Risk)-[:THREATENS]->(:Objective)
|
|
65
|
+
(:Risk)-[:THREATENS]->(:Project)
|
|
66
|
+
(:Source)-[:AUTHORED_BY]->(:Person)
|
|
67
|
+
(:Source)-[:CITES]->(:Source)
|
|
68
|
+
(:Source)-[:SUPPORTS]->(:Source)
|
|
69
|
+
(:Source)-[:REFUTES]->(:Source)
|
|
70
|
+
(:Finding)-[:DERIVED_FROM]->(:Source)
|
|
71
|
+
(:Finding)-[:DERIVED_FROM]->(:KnowledgeDocument)
|
|
72
|
+
(:Finding)-[:SUPPORTS]->(:Hypothesis)
|
|
73
|
+
(:Finding)-[:REFUTES]->(:Hypothesis)
|
|
74
|
+
(:Task)-[:DEPENDS_ON]->(:Task)
|
|
75
|
+
(:Person)-[:REPORTS_TO]->(:Person)
|
|
76
|
+
(:Person)-[:RESPONSIBLE_FOR]->(:Task)
|
|
77
|
+
(:Person)-[:ACCOUNTABLE_FOR]->(:Decision)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
A `Decision` records what it decided through a `DECIDES` edge to the entity it governs (an `Objective`, a `Project`, a `Task`, or any base entity), and supersedes the decision it replaces. `Source`-to-`Source` citation uses CiTO verbs (`CITES`, `SUPPORTS`, `REFUTES`); a `Finding` is derived from its evidence (`DERIVED_FROM`, the PROV `wasDerivedFrom` relation) and bears on a `Hypothesis` (`SUPPORTS`/`REFUTES`). Task precedence uses `DEPENDS_ON` with an optional `type` property in `{FS, SS, FF, SF}` (the project-management precedence kinds). Responsibility is an edge, never a node: reporting lines are `REPORTS_TO`, and RACI assignment is `RESPONSIBLE_FOR` / `ACCOUNTABLE_FOR` / `CONSULTED_ON` / `INFORMED_OF` from a `Person` to a `Task` or `Decision` — consistent with the base doctrine that responsibility is a property of an edge, not its own node.
|
|
@@ -32,6 +32,17 @@ Explicit triggers always apply structured execution without asking:
|
|
|
32
32
|
|
|
33
33
|
Load the relevant reference via `plugin-read` when entering a mode. Each reference describes outcomes and constraints for that mode — follow them.
|
|
34
34
|
|
|
35
|
+
## Method References
|
|
36
|
+
|
|
37
|
+
Beyond the four modes, the plugin carries method references for recurring needs that attach to a mode rather than defining one. Load the relevant reference via `plugin-read` when the need arises. Each one terminates in a graph write — a Task, a relationship, or a `[PROJECT:*]` note — never a free-text artefact the graph never sees.
|
|
38
|
+
|
|
39
|
+
| Method | Reference | Attaches to |
|
|
40
|
+
|--------|-----------|-------------|
|
|
41
|
+
| Identify and engage stakeholders (Power × Interest) | `references/stakeholder-map.md` | Sprint Plan (Standard + Full) |
|
|
42
|
+
| Surface and rank risks before execution | `references/risk-premortem.md` | Sprint Challenge Premise (Full) |
|
|
43
|
+
| Order ready tasks by impact and effort (RICE / ICE / MoSCoW / Kano) | `references/prioritization.md` | Sprint Plan |
|
|
44
|
+
| Turn a meeting transcript into decisions and tasks | `references/meeting-to-tasks.md` | Any mode |
|
|
45
|
+
|
|
35
46
|
## Creating a Project
|
|
36
47
|
|
|
37
48
|
Use `project-create` to create a project atomically. One tool call creates the parent `:Project:Task` node, all child work items, dependency relationships (`BLOCKS`), and entity relationships (`RAISED_BY`, `AFFECTS`) in a single transaction.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Meeting to Tasks
|
|
2
|
+
|
|
3
|
+
A method for turning a meeting transcript into tracked project records: decisions captured as notes, action items created as child tasks. A client engagement generates meetings, but a transcript on its own is inert — the decisions and commitments in it are not in the graph, so nothing reminds anyone to act on them. This converts the conversation into the same structures the rest of the plugin uses.
|
|
4
|
+
|
|
5
|
+
## Method: separate decisions from actions
|
|
6
|
+
|
|
7
|
+
Read the transcript and pull out two distinct kinds of content. Keep them separate — they terminate differently.
|
|
8
|
+
|
|
9
|
+
- **Decisions** — things the meeting settled. A choice made, a direction agreed, a scope change, a problem identified. These are facts about the project's history.
|
|
10
|
+
- **Action items** — things someone committed to do. Each has an owner (even if implicit) and an outcome. These are future work.
|
|
11
|
+
|
|
12
|
+
Discard everything else. Discussion that led nowhere, restated context, and small talk do not become records. The test for an action item is whether someone is expected to do something as a result; the test for a decision is whether the project's state changed because of it.
|
|
13
|
+
|
|
14
|
+
For each action item, capture who owns it and what "done" looks like, so it can be created as a real task rather than a vague reminder.
|
|
15
|
+
|
|
16
|
+
## Graph termination
|
|
17
|
+
|
|
18
|
+
The transcript itself is never the deliverable — the records it produces are.
|
|
19
|
+
|
|
20
|
+
- **Decisions become project notes.** Append each to the project with `project-update` using the matching lifecycle format: a settled direction or scope change as `[PROJECT:CHANGE] {what changed} — Reason: {why}`, a problem raised as `[PROJECT:ISSUE] {description} — Impact: {assessment}`, a general decision as a `[PROJECT:PHASE]` note. These land in the project's searchable history.
|
|
21
|
+
- **Action items become child tasks.** Create each with `work-create`, naming the owner in the task description (there is no assignee relationship — the owner lives on the task itself). Attach the task to the project via `work-relate` (`PART_OF`, passing the project `taskId`). If the transcript names who requested the action, link that person with `RAISED_BY`; link any affected entity with `AFFECTS`. The action then flows through `work-ready` and execution like any other task.
|
|
22
|
+
|
|
23
|
+
After processing a transcript, `project-get` shows new notes for the decisions and new child tasks for the action items. A transcript that produces neither was not processed — it was only read.
|
|
24
|
+
|
|
25
|
+
## Wiring
|
|
26
|
+
|
|
27
|
+
This method is invokable in any mode, not tied to a single sprint phase — meetings happen throughout a project's life. Load it via `plugin-read` whenever a transcript is pasted into a project conversation, or when the operator asks to turn meeting notes into tasks. If the meeting belongs to no existing project, create or identify the project first so the notes and tasks have a parent.
|
|
28
|
+
|
|
29
|
+
## When to Use
|
|
30
|
+
|
|
31
|
+
- A meeting transcript pasted into a project conversation.
|
|
32
|
+
- "Turn these notes into tasks."
|
|
33
|
+
- "What did we agree in that call?"
|
|
34
|
+
- "Capture the action items from the client meeting."
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Prioritization
|
|
2
|
+
|
|
3
|
+
A method for ordering a project's tasks when every one looks important and dependency edges alone do not decide the sequence. `BLOCKS` relationships say what *must* come before what; they say nothing about what *should* come first among tasks that are all ready. This reference supplies a named framework for that choice and reflects the result in how tasks are created and noted — no schema change.
|
|
4
|
+
|
|
5
|
+
## When dependency order is not enough
|
|
6
|
+
|
|
7
|
+
`work-ready` returns the set of tasks with no unresolved blockers. When that set has one item, the choice is made. When it has many, the operator needs a way to rank them. Pick one framework below to fit the project; do not mix them within a single project.
|
|
8
|
+
|
|
9
|
+
### RICE
|
|
10
|
+
|
|
11
|
+
Score each task on Reach (how many people or cases it touches), Impact (how much it moves the outcome), Confidence (how sure you are of the first two), and Effort (how much work it takes). Rank by `(Reach × Impact × Confidence) ÷ Effort`. Use RICE when tasks vary widely in both benefit and cost and you want a single comparable number.
|
|
12
|
+
|
|
13
|
+
### ICE
|
|
14
|
+
|
|
15
|
+
A lighter RICE: score Impact, Confidence, and Ease (the inverse of effort), each on a simple scale, and rank by their product. Use ICE for a quick ranking when full RICE scoring is more precision than the project warrants.
|
|
16
|
+
|
|
17
|
+
### MoSCoW
|
|
18
|
+
|
|
19
|
+
Sort tasks into Must have, Should have, Could have, and Won't have (this time). Use MoSCoW when the project has a fixed deadline and the real question is what to drop, not what to score — it makes the cut line explicit.
|
|
20
|
+
|
|
21
|
+
### Kano
|
|
22
|
+
|
|
23
|
+
Classify each task by how it affects satisfaction: basic expectations (their absence causes complaints, their presence is unremarkable), performance features (more is better), and delighters (unexpected, disproportionately appreciated). Use Kano when the project is about a client-facing result and you are deciding where extra effort earns the most goodwill.
|
|
24
|
+
|
|
25
|
+
## Graph termination
|
|
26
|
+
|
|
27
|
+
Prioritization changes the order work is created and started, and records the decision — it never leaves a free-standing ranked list.
|
|
28
|
+
|
|
29
|
+
- **Create or order tasks to reflect the ranking.** When building the project, create the higher-ranked work items first so they surface earlier; for an existing project, the ranking decides which ready task is started next via the normal `work-ready` flow.
|
|
30
|
+
- **Record the method and the resulting order as a note.** Append to the project with `project-update`, e.g. `[PROJECT:PHASE] Prioritized via RICE — top three: site survey, supplier quotes, deposit invoice`. This makes the reasoning auditable later and visible in `project-get`.
|
|
31
|
+
|
|
32
|
+
No new property or relationship is introduced — priority lives in creation order and the lifecycle note, not a schema field.
|
|
33
|
+
|
|
34
|
+
## Wiring
|
|
35
|
+
|
|
36
|
+
This method runs inside the Plan phase of `sprint.md`. Load it via `plugin-read` when a project has many tasks and dependency edges do not settle the sequence. It pairs with `stakeholder-map.md` in the same phase: stakeholder power often informs Impact.
|
|
37
|
+
|
|
38
|
+
## When to Use
|
|
39
|
+
|
|
40
|
+
- A Plan phase where many tasks are ready and the order is unclear.
|
|
41
|
+
- "Everything feels urgent — what do we do first?"
|
|
42
|
+
- "We can't do all of this before the deadline — what makes the cut?"
|
|
43
|
+
- A client project where you are deciding where to spend the extra effort.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Risk Pre-Mortem
|
|
2
|
+
|
|
3
|
+
A forward-looking method for surfacing what could go wrong before a project starts, ranking each risk, and turning the serious ones into either a recorded issue or a mitigation task. Investigation mode handles problems after they happen; this is the opposite — it finds problems while they are still cheap to prevent. The Challenge Premise phase of a Full sprint asks whether the work is right but names no method for the risks; this supplies it.
|
|
4
|
+
|
|
5
|
+
## Method: imagine it already failed
|
|
6
|
+
|
|
7
|
+
The pre-mortem inverts the usual question. Instead of "what might go wrong?", assume the project has already failed and ask: "it is six months from now and this went badly — what happened?" Working backwards from an assumed failure surfaces risks that forward optimism hides, because the team is now explaining a failure rather than defending a plan.
|
|
8
|
+
|
|
9
|
+
Generate the list of failure causes, then rank each one on two axes:
|
|
10
|
+
|
|
11
|
+
- **Likelihood** — how probable is this, given what you know? Low / Medium / High.
|
|
12
|
+
- **Impact** — if it happens, how much does it hurt the project? Low / Medium / High.
|
|
13
|
+
|
|
14
|
+
The product of the two sets priority. A High × High risk is addressed before execution starts. A Low × Low risk is noted and left. The middle band is where judgement applies — a low-likelihood, high-impact risk (a key supplier folding) often deserves a mitigation even though it probably will not happen.
|
|
15
|
+
|
|
16
|
+
## Graph termination
|
|
17
|
+
|
|
18
|
+
Every risk worth surfacing terminates in the graph — never as chat-only text.
|
|
19
|
+
|
|
20
|
+
- **Serious risks become a recorded issue.** For each High-impact risk, append a note to the project with `project-update` in the issue format: `[PROJECT:ISSUE] {risk description} — Impact: {likelihood × impact assessment}`. This lands it in the project's searchable lifecycle history.
|
|
21
|
+
- **Risks you will act on become a mitigation Task.** Where a risk warrants concrete preventive work, create it with `work-create` and attach it to the project via `work-relate` (`PART_OF`, passing the project `taskId`). The mitigation then flows through the normal `work-ready` / execution path like any other task.
|
|
22
|
+
|
|
23
|
+
A pre-mortem that produces only a verbal warning has failed its own method. The test: after running it, `project-get` shows `[PROJECT:ISSUE]` notes or related mitigation Tasks. If it shows neither, nothing was actually captured.
|
|
24
|
+
|
|
25
|
+
## Wiring
|
|
26
|
+
|
|
27
|
+
This method runs inside the Challenge Premise phase of `sprint.md` (Full tier), before Lock Execution. Load it via `plugin-read` once the scope is agreed but execution has not begun — mitigations identified here change the locked task list. It can also run standalone before any significant project when the operator asks what could go wrong.
|
|
28
|
+
|
|
29
|
+
## When to Use
|
|
30
|
+
|
|
31
|
+
- A Full sprint Challenge Premise phase, before the plan is locked.
|
|
32
|
+
- "What could go wrong with this?"
|
|
33
|
+
- "Before we commit, what are the risks?"
|
|
34
|
+
- A high-stakes project where a preventable failure would be expensive.
|
|
@@ -40,6 +40,8 @@ Understand the project scope: what are the deliverables, who are they for, what'
|
|
|
40
40
|
|
|
41
41
|
Check for prior learnings: call `memory-search` with a description of the project to surface relevant learnings from past similar work. If learnings exist, factor them into the plan — adjust timelines, flag known risks, apply lessons learned.
|
|
42
42
|
|
|
43
|
+
When the project has more than one interested party, map them with `references/stakeholder-map.md`. When many tasks are ready and dependency order does not settle the sequence, order them with `references/prioritization.md`. Load either via `plugin-read`.
|
|
44
|
+
|
|
43
45
|
### Execute
|
|
44
46
|
|
|
45
47
|
Work through the child tasks in dependency order. Before starting each task, check `work-ready` to confirm no blockers or AFFECTS conflicts. Append progress notes as work progresses. If a blocker is discovered mid-execution, create a new child task for it and link via `BLOCKS`.
|
|
@@ -73,7 +75,7 @@ Mark the parent Task complete with `[PROJECT:COMPLETE]`.
|
|
|
73
75
|
|
|
74
76
|
### Plan
|
|
75
77
|
|
|
76
|
-
Same as Standard Plan, but more thorough: map all stakeholders, identify risks, estimate timeline for each work item, and define acceptance criteria for every deliverable.
|
|
78
|
+
Same as Standard Plan, but more thorough: map all stakeholders (use `references/stakeholder-map.md`), identify risks, estimate timeline for each work item, and define acceptance criteria for every deliverable. Order ready work with `references/prioritization.md` when the sequence is not obvious.
|
|
77
79
|
|
|
78
80
|
### Challenge Premise
|
|
79
81
|
|
|
@@ -85,6 +87,8 @@ Before locking in the execution plan, challenge the scope:
|
|
|
85
87
|
|
|
86
88
|
Surface any concerns and resolve them before proceeding.
|
|
87
89
|
|
|
90
|
+
Run a pre-mortem to surface what could go wrong before the plan is locked: load `references/risk-premortem.md` via `plugin-read`. Mitigations identified here change the locked task list, so run it before Lock Execution.
|
|
91
|
+
|
|
88
92
|
### Lock Execution
|
|
89
93
|
|
|
90
94
|
Finalise the execution plan: confirm the task list, dependency order, timeline, resource requirements, and acceptance criteria. This is the agreement — Phase 6 (Plan Conformity) will check the outcome against this.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Stakeholder Map
|
|
2
|
+
|
|
3
|
+
A method for identifying the people a project affects or depends on, and deciding how to engage each one. The Plan phase of a Standard or Full sprint names "multiple stakeholders" but gives no way to find them or decide who needs what. This reference supplies that method and terminates in graph relationships, not a loose list.
|
|
4
|
+
|
|
5
|
+
Use this whenever a project has more than one interested party — a client plus their finance team, a landlord plus tenants, a partner plus the people who sign off the work. A project with a single decision-maker does not need it.
|
|
6
|
+
|
|
7
|
+
## Method: Power × Interest
|
|
8
|
+
|
|
9
|
+
Place each stakeholder on two axes:
|
|
10
|
+
|
|
11
|
+
- **Power** — how much influence they have over whether the project succeeds. Can they approve it, fund it, block it, or redirect it?
|
|
12
|
+
- **Interest** — how much the project's outcome affects them. Will they feel the result day to day, or is it peripheral to them?
|
|
13
|
+
|
|
14
|
+
Each stakeholder lands in one of four quadrants. Each quadrant has a default engagement posture:
|
|
15
|
+
|
|
16
|
+
| Quadrant | Power | Interest | Engagement posture |
|
|
17
|
+
|----------|-------|----------|--------------------|
|
|
18
|
+
| Manage closely | High | High | Involve in decisions, update frequently, resolve their concerns first |
|
|
19
|
+
| Keep satisfied | High | Low | Brief enough to keep onside, do not overload — they disengage if flooded |
|
|
20
|
+
| Keep informed | Low | High | Regular updates, listen for early warnings — they often see problems first |
|
|
21
|
+
| Monitor | Low | Low | Minimal contact, light-touch updates only when the outcome touches them |
|
|
22
|
+
|
|
23
|
+
Work through the project and ask, for each person or group: who decides, who pays, who does the work, who is affected by the result, who could block it. Place each one. The grid surfaces two failure modes a flat list hides: a high-power stakeholder being treated as peripheral, and effort spent over-communicating with someone who has neither power nor interest.
|
|
24
|
+
|
|
25
|
+
## Graph termination
|
|
26
|
+
|
|
27
|
+
A stakeholder map is not done until it lands in the graph against the project.
|
|
28
|
+
|
|
29
|
+
- **Record each stakeholder as a node related to the project.** If the person already exists, find them via `memory-search`; otherwise create them through the normal entity path. Then relate them to the project Task with `work-relate`: use `RAISED_BY` for the person who requested or sponsors the project, and `AFFECTS` for people or entities the project's outcome changes. Pass the project `taskId` from `project-create`/`project-get` and the stakeholder `elementId` from `memory-search`.
|
|
30
|
+
- **Record the engagement decision as a note.** Append the posture per quadrant to the project with `project-update`, e.g. `[PROJECT:PHASE] Stakeholders mapped — 2 manage-closely (client, surveyor), 1 keep-informed (tenant); client concerns resolved first`.
|
|
31
|
+
|
|
32
|
+
Do not leave the map as chat-only text. If a stakeholder is worth naming, the relationship is worth writing — that is what lets `project-get` and conflict detection (`AFFECTS`) see them later.
|
|
33
|
+
|
|
34
|
+
## Wiring
|
|
35
|
+
|
|
36
|
+
This method runs inside the Plan phase of `sprint.md` (Standard and Full tiers). Load it via `plugin-read` when a project has more than one interested party. Full tier maps all stakeholders; Standard tier maps the ones with high power or high interest and monitors the rest.
|
|
37
|
+
|
|
38
|
+
## When to Use
|
|
39
|
+
|
|
40
|
+
- A project Plan phase where "who are the deliverables for" has more than one answer.
|
|
41
|
+
- "Who do we need on side for this?"
|
|
42
|
+
- "Make sure we keep everyone in the loop on the refit."
|
|
43
|
+
- Before a project where one party could block progress and has not yet been engaged.
|
|
@@ -235,6 +235,44 @@ REMOTE
|
|
|
235
235
|
continue
|
|
236
236
|
fi
|
|
237
237
|
|
|
238
|
+
# Step 2b — base toolchain command-presence audit. An independent check of
|
|
239
|
+
# actual PATH state (not an install log): a pre-existing box that never
|
|
240
|
+
# re-runs the installer keeps the tools missing with no log line, so this
|
|
241
|
+
# greps the live binaries directly. python, python3, pip, and file must all
|
|
242
|
+
# resolve. Linux-only: Homebrew supplies python3/pip3 but not the bare
|
|
243
|
+
# python/pip aliases on darwin, so a laptop install is expected to lack them
|
|
244
|
+
# and the audit skips rather than false-failing a Mac in the manifest.
|
|
245
|
+
TOOLCHAIN_CHECK=$(cat <<'REMOTE'
|
|
246
|
+
set -uo pipefail
|
|
247
|
+
OS=$(uname -s)
|
|
248
|
+
if [[ "$OS" != "Linux" ]]; then
|
|
249
|
+
echo "toolchain-check skipped reason=non-linux os=$OS"
|
|
250
|
+
exit 0
|
|
251
|
+
fi
|
|
252
|
+
MISSING=""
|
|
253
|
+
for c in python python3 pip file; do
|
|
254
|
+
command -v "$c" >/dev/null 2>&1 || MISSING+="$c "
|
|
255
|
+
done
|
|
256
|
+
if [[ -n "$MISSING" ]]; then
|
|
257
|
+
echo "toolchain-missing: ${MISSING% }"
|
|
258
|
+
exit 1
|
|
259
|
+
fi
|
|
260
|
+
echo "toolchain-ok python python3 pip file all on PATH"
|
|
261
|
+
exit 0
|
|
262
|
+
REMOTE
|
|
263
|
+
)
|
|
264
|
+
|
|
265
|
+
set +e
|
|
266
|
+
run_ssh "$TARGET" "$PASS" "$TOOLCHAIN_CHECK" >>"$SUMMARY_LOG" 2>&1
|
|
267
|
+
TOOLCHAIN_RC=$?
|
|
268
|
+
set -e
|
|
269
|
+
|
|
270
|
+
if [[ $TOOLCHAIN_RC -ne 0 ]]; then
|
|
271
|
+
echo "FAIL $NAME — base toolchain command missing (rc=$TOOLCHAIN_RC, see $SUMMARY_LOG)" | tee -a "$SUMMARY_LOG"
|
|
272
|
+
FAILED=1
|
|
273
|
+
continue
|
|
274
|
+
fi
|
|
275
|
+
|
|
238
276
|
# Step 3 — standing Samba socket audit (Task 755). Reconcile the *actual*
|
|
239
277
|
# listening sockets against the bind invariant, independent of any install
|
|
240
278
|
# log, so this catches a drifted or re-opened box as well as a fresh
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAa3B,OAAO,EAgBL,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAA;AAsBzB,OAAO,KAAK,EAAE,SAAS,EAAyB,MAAM,iBAAiB,CAAA;AAEvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAgFhE,eAAO,MAAM,kBAAkB,QAA2B,CAAA;AAS1D,eAAO,MAAM,4BAA4B,QAAS,CAAA;AAIlD,MAAM,WAAW,QAAS,SAAQ,IAAI,CAAC,SAAS,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC7E;;qEAEiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,SAAS,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;IACzB,kBAAkB,EAAE,WAAW,CAAA;IAC/B,eAAe,EAAE,aAAa,CAAA;IAC9B;kFAC8E;IAC9E,cAAc,EAAE,cAAc,CAAA;IAC9B;;gFAE4E;IAC5E,cAAc,EAAE,cAAc,CAAA;IAC9B;;;6BAGyB;IACzB,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IACzC;;gFAE4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;
|
|
1
|
+
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAa3B,OAAO,EAgBL,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAA;AAsBzB,OAAO,KAAK,EAAE,SAAS,EAAyB,MAAM,iBAAiB,CAAA;AAEvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAgFhE,eAAO,MAAM,kBAAkB,QAA2B,CAAA;AAS1D,eAAO,MAAM,4BAA4B,QAAS,CAAA;AAIlD,MAAM,WAAW,QAAS,SAAQ,IAAI,CAAC,SAAS,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC7E;;qEAEiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,SAAS,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;IACzB,kBAAkB,EAAE,WAAW,CAAA;IAC/B,eAAe,EAAE,aAAa,CAAA;IAC9B;kFAC8E;IAC9E,cAAc,EAAE,cAAc,CAAA;IAC9B;;gFAE4E;IAC5E,cAAc,EAAE,cAAc,CAAA;IAC9B;;;6BAGyB;IACzB,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IACzC;;gFAE4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAgHD,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAEpG;AAgBD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D;AAUD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAMvE;AAMD,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,MAAM,CAER;AAkCD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe5F;AAwJD;;;kEAGkE;AAClE,MAAM,MAAM,OAAO,GAAG,IAAI,GAAG;IAC3B,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACpD;;;+CAG2C;IAC3C,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAChD,CAAA;AAmBD,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CA4xEpD"}
|
|
@@ -30,13 +30,13 @@ import { mergeTarget, isMultiTarget, targetKinds } from './channel-targets.js';
|
|
|
30
30
|
import { randomUUID } from 'node:crypto';
|
|
31
31
|
import { execFileSync } from 'node:child_process';
|
|
32
32
|
import { buildRcChildEnv, reapplyAdminLevers } from './rc-daemon.js';
|
|
33
|
-
import { isEffortLevel, isPermissionMode } from '../../../lib/models/dist/index.js';
|
|
33
|
+
import { isEffortLevel, isPermissionMode, SONNET_MODEL } from '../../../lib/models/dist/index.js';
|
|
34
34
|
import { spawnClaudeSession, stopSession, writeInputToPty, isLive, onPtyExit, livePtyCount, liveSessionIds, getPtyTrackerForTests, livePidForSession, priorExitedCountForSession, PERMISSION_MODES, openFdCount, registerRcSpawnPty, } from './pty-spawner.js';
|
|
35
35
|
import { writeScopeRecord, removeScopeRecord } from './scope-record.js';
|
|
36
36
|
import { writeReseatMarker, resolveReseatChain, clearReseatMarker } from './reseat-ledger.js';
|
|
37
37
|
import { getScopeMainPid, defaultProcessSignals, defaultSystemctlRunner } from './systemd-scope.js';
|
|
38
38
|
import { readSidecar, updateSidecar, appendBridgeId, writeSidecar } from './session-sidecar.js';
|
|
39
|
-
import { resolveSettingsPermissionMode } from './settings-permission-mode.js';
|
|
39
|
+
import { resolveSettingsPermissionMode, resolveSettingsModel, resolveSettingsEffort } from './settings-permission-mode.js';
|
|
40
40
|
import { emitRcLife } from './rc-life.js';
|
|
41
41
|
import { readJsonlSession } from './jsonl-enumerator.js';
|
|
42
42
|
import { watchInputSubmission, countUserEntries } from './input-postcondition.js';
|
|
@@ -739,9 +739,15 @@ export function buildHttpApp(deps) {
|
|
|
739
739
|
const specialist = typeof body.specialist === 'string' && /^[A-Za-z0-9_-]{1,64}$/.test(body.specialist)
|
|
740
740
|
? body.specialist
|
|
741
741
|
: undefined;
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
742
|
+
// Task 956 — public sessions are pinned to Sonnet 4.6 (operator decision:
|
|
743
|
+
// admin-only Bypass/Opus; public stays Sonnet + fail-closed dontAsk). The
|
|
744
|
+
// role==='public' force is the chokepoint covering every public spawn
|
|
745
|
+
// (webchat + WhatsApp); other roles keep their body-supplied model.
|
|
746
|
+
const model = role === 'public'
|
|
747
|
+
? SONNET_MODEL
|
|
748
|
+
: typeof body.model === 'string' && /^[A-Za-z0-9._-]{1,64}$/.test(body.model)
|
|
749
|
+
? body.model
|
|
750
|
+
: undefined;
|
|
745
751
|
const initialMessage = typeof body.initialMessage === 'string' && body.initialMessage.length > 0
|
|
746
752
|
? body.initialMessage
|
|
747
753
|
: undefined;
|
|
@@ -1190,6 +1196,11 @@ export function buildHttpApp(deps) {
|
|
|
1190
1196
|
model: enriched.model,
|
|
1191
1197
|
displayName: enriched.displayName,
|
|
1192
1198
|
titleSource: enriched.titleSource,
|
|
1199
|
+
// Task 956 — context-usage source (latest-turn token sum) + the
|
|
1200
|
+
// settings-resolved effort the session launched under, for the
|
|
1201
|
+
// /chat read-only params row.
|
|
1202
|
+
usedTokens: enriched.usedTokens,
|
|
1203
|
+
effortLevel: resolveSettingsEffort(deps.claudeConfigDir),
|
|
1193
1204
|
};
|
|
1194
1205
|
}
|
|
1195
1206
|
}
|
|
@@ -2202,6 +2213,13 @@ export function buildHttpApp(deps) {
|
|
|
2202
2213
|
// Task 928 — when the fork carries a picked mode, the argv flag governs (not
|
|
2203
2214
|
// settings.json), so the lifeline and the sidecar must report the picked mode.
|
|
2204
2215
|
const effectiveRcPermissionMode = forkFromSessionId !== null && reseatPermissionMode ? reseatPermissionMode : settingsPermissionMode;
|
|
2216
|
+
// Task 956 — the model/effort the rc session actually runs under. A non-fork
|
|
2217
|
+
// admin spawn carries no --model/effort argv, so the binary reads
|
|
2218
|
+
// settings.json (pinned to Opus/medium by the rc-daemon); a fork rides its
|
|
2219
|
+
// picked values. Surfaced on the lifeline so the admin-param audit can assert
|
|
2220
|
+
// model=claude-opus-4-8[1m] effort=medium without reconstructing the argv.
|
|
2221
|
+
const effectiveRcModel = forkFromSessionId !== null && reseatModel ? reseatModel : resolveSettingsModel(deps.claudeConfigDir);
|
|
2222
|
+
const effectiveRcEffort = forkFromSessionId !== null && reseatEffort ? reseatEffort : resolveSettingsEffort(deps.claudeConfigDir);
|
|
2205
2223
|
// Step 2 — the exact claude argv (the inner command). The systemd-run
|
|
2206
2224
|
// wrap is composed by the spawnPty adapter; logging the inner argv
|
|
2207
2225
|
// here is enough for an operator to reproduce by hand. The wrapped
|
|
@@ -2211,7 +2229,7 @@ export function buildHttpApp(deps) {
|
|
|
2211
2229
|
// argv (the trailing `initialMessage`, else 0) so a future oversized positional
|
|
2212
2230
|
// is visible without reconstructing it from the full argv dump.
|
|
2213
2231
|
const positionalBytes = initialMessage ? Buffer.byteLength(initialMessage, 'utf8') : 0;
|
|
2214
|
-
deps.logger(`[rc-spawn] op=argv unitToken=${unitToken} cwd=${deps.spawnCwd} permissionMode=${effectiveRcPermissionMode} positionalBytes=${positionalBytes} argv=${JSON.stringify([deps.claudeBin, ...argv])}`);
|
|
2232
|
+
deps.logger(`[rc-spawn] op=argv unitToken=${unitToken} cwd=${deps.spawnCwd} permissionMode=${effectiveRcPermissionMode} model=${effectiveRcModel ?? 'unset'} effort=${effectiveRcEffort ?? 'unset'} positionalBytes=${positionalBytes} argv=${JSON.stringify([deps.claudeBin, ...argv])}`);
|
|
2215
2233
|
emitRcLife(deps.logger, 'argv', 'rc-spawn', 'node-pty', rcLifeMode, unitToken, {
|
|
2216
2234
|
cwd: deps.spawnCwd,
|
|
2217
2235
|
argv: JSON.stringify([deps.claudeBin, ...argv]),
|