@stravica-ai/digital-operator-pa 0.1.39 → 0.1.41

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.
Files changed (92) hide show
  1. package/README.md +12 -2
  2. package/bin/confluence +9 -0
  3. package/bin/confluence-fetch +9 -0
  4. package/bin/jira +9 -0
  5. package/dist/engineering-pa-core/knowledge/content-voice/banned-ai-tells-taxonomy.md +1 -1
  6. package/dist/engineering-pa-core/knowledge/knowledge-memory/staging-and-observations.md +3 -3
  7. package/dist/engineering-pa-core/knowledge/platform-tooling/workspace-extensions.md +62 -0
  8. package/dist/engineering-pa-core-extensions-atlassian/README.md +81 -16
  9. package/dist/engineering-pa-core-extensions-atlassian/bin/confluence +2 -0
  10. package/dist/engineering-pa-core-extensions-atlassian/bin/confluence-fetch +2 -0
  11. package/dist/engineering-pa-core-extensions-atlassian/bin/jira +2 -0
  12. package/dist/engineering-pa-core-extensions-atlassian/config/jira-workflow-chains.default.json +4 -0
  13. package/dist/engineering-pa-core-extensions-atlassian/index.mjs +17 -6
  14. package/dist/engineering-pa-core-extensions-atlassian/package.json +11 -4
  15. package/dist/engineering-pa-core-extensions-atlassian/src/common/invalidate-client.mjs +137 -0
  16. package/dist/engineering-pa-core-extensions-atlassian/src/common/pa-name.mjs +58 -0
  17. package/dist/engineering-pa-core-extensions-atlassian/src/common/secrets.mjs +158 -0
  18. package/dist/engineering-pa-core-extensions-atlassian/src/confluence/cli.mjs +165 -0
  19. package/dist/engineering-pa-core-extensions-atlassian/src/confluence/client.mjs +294 -0
  20. package/dist/engineering-pa-core-extensions-atlassian/src/confluence/commands/auth.mjs +59 -0
  21. package/dist/engineering-pa-core-extensions-atlassian/src/confluence/commands/comment.mjs +174 -0
  22. package/dist/engineering-pa-core-extensions-atlassian/src/confluence/commands/create.mjs +136 -0
  23. package/dist/engineering-pa-core-extensions-atlassian/src/confluence/commands/label.mjs +98 -0
  24. package/dist/engineering-pa-core-extensions-atlassian/src/confluence/commands/mine.mjs +105 -0
  25. package/dist/engineering-pa-core-extensions-atlassian/src/confluence/commands/mirror-folder.mjs +487 -0
  26. package/dist/engineering-pa-core-extensions-atlassian/src/confluence/commands/mirror-page.mjs +351 -0
  27. package/dist/engineering-pa-core-extensions-atlassian/src/confluence/commands/page.mjs +127 -0
  28. package/dist/engineering-pa-core-extensions-atlassian/src/confluence/commands/pages.mjs +107 -0
  29. package/dist/engineering-pa-core-extensions-atlassian/src/confluence/commands/recent.mjs +107 -0
  30. package/dist/engineering-pa-core-extensions-atlassian/src/confluence/commands/search.mjs +123 -0
  31. package/dist/engineering-pa-core-extensions-atlassian/src/confluence/commands/spaces.mjs +82 -0
  32. package/dist/engineering-pa-core-extensions-atlassian/src/confluence/commands/test.mjs +155 -0
  33. package/dist/engineering-pa-core-extensions-atlassian/src/confluence/commands/tree.mjs +103 -0
  34. package/dist/engineering-pa-core-extensions-atlassian/src/confluence/commands/update.mjs +134 -0
  35. package/dist/engineering-pa-core-extensions-atlassian/src/confluence/format.mjs +260 -0
  36. package/dist/engineering-pa-core-extensions-atlassian/src/confluence/mirror.mjs +353 -0
  37. package/dist/engineering-pa-core-extensions-atlassian/src/confluence/storage.mjs +880 -0
  38. package/dist/engineering-pa-core-extensions-atlassian/src/confluence-fetch/cli.mjs +313 -0
  39. package/dist/engineering-pa-core-extensions-atlassian/src/confluence-fetch/fetch.mjs +327 -0
  40. package/dist/engineering-pa-core-extensions-atlassian/src/jira/adf.mjs +388 -0
  41. package/dist/engineering-pa-core-extensions-atlassian/src/jira/bug-fields.mjs +294 -0
  42. package/dist/engineering-pa-core-extensions-atlassian/src/jira/cli.mjs +197 -0
  43. package/dist/engineering-pa-core-extensions-atlassian/src/jira/client.mjs +350 -0
  44. package/dist/engineering-pa-core-extensions-atlassian/src/jira/commands/advance.mjs +486 -0
  45. package/dist/engineering-pa-core-extensions-atlassian/src/jira/commands/attach.mjs +129 -0
  46. package/dist/engineering-pa-core-extensions-atlassian/src/jira/commands/auth.mjs +53 -0
  47. package/dist/engineering-pa-core-extensions-atlassian/src/jira/commands/boards.mjs +88 -0
  48. package/dist/engineering-pa-core-extensions-atlassian/src/jira/commands/bulk-transition.mjs +223 -0
  49. package/dist/engineering-pa-core-extensions-atlassian/src/jira/commands/cancel.mjs +135 -0
  50. package/dist/engineering-pa-core-extensions-atlassian/src/jira/commands/comment.mjs +169 -0
  51. package/dist/engineering-pa-core-extensions-atlassian/src/jira/commands/create.mjs +376 -0
  52. package/dist/engineering-pa-core-extensions-atlassian/src/jira/commands/issue.mjs +105 -0
  53. package/dist/engineering-pa-core-extensions-atlassian/src/jira/commands/link.mjs +204 -0
  54. package/dist/engineering-pa-core-extensions-atlassian/src/jira/commands/mine.mjs +97 -0
  55. package/dist/engineering-pa-core-extensions-atlassian/src/jira/commands/projects.mjs +91 -0
  56. package/dist/engineering-pa-core-extensions-atlassian/src/jira/commands/search.mjs +80 -0
  57. package/dist/engineering-pa-core-extensions-atlassian/src/jira/commands/sprint.mjs +111 -0
  58. package/dist/engineering-pa-core-extensions-atlassian/src/jira/commands/sync-statuses.mjs +313 -0
  59. package/dist/engineering-pa-core-extensions-atlassian/src/jira/commands/test.mjs +142 -0
  60. package/dist/engineering-pa-core-extensions-atlassian/src/jira/commands/transition.mjs +197 -0
  61. package/dist/engineering-pa-core-extensions-atlassian/src/jira/commands/update.mjs +284 -0
  62. package/dist/engineering-pa-core-extensions-atlassian/src/jira/commands/worklog.mjs +380 -0
  63. package/dist/engineering-pa-core-extensions-atlassian/src/jira/format.mjs +267 -0
  64. package/dist/engineering-pa-core-extensions-atlassian/src/jira/invalidate.mjs +72 -0
  65. package/dist/engineering-pa-core-extensions-atlassian/src/jira/metadata.mjs +225 -0
  66. package/dist/engineering-pa-core-extensions-atlassian/src/jira/required-fields.mjs +334 -0
  67. package/dist/engineering-pa-core-extensions-atlassian/src/jira/workflow-chains.mjs +405 -0
  68. package/dist/engineering-pa-core-extensions-atlassian/src/jira/workflow-map.mjs +107 -0
  69. package/dist/engineering-pa-scaffold/README.md +32 -1
  70. package/dist/engineering-pa-scaffold/src/cli.mjs +83 -6
  71. package/dist/engineering-pa-scaffold/src/commands/init-workspace-extension.mjs +234 -0
  72. package/dist/engineering-pa-scaffold/src/commands/init.mjs +6 -5
  73. package/dist/engineering-pa-scaffold/src/generator.mjs +240 -4
  74. package/dist/engineering-pa-scaffold/templates/CLAUDE.md.template +7 -7
  75. package/dist/engineering-pa-scaffold/templates/operator-README.md.template +4 -4
  76. package/dist/engineering-pa-scaffold/templates/root-CLAUDE.md.template +13 -0
  77. package/dist/engineering-pa-types-engineering/index.mjs +14 -6
  78. package/dist/engineering-pa-types-engineering/knowledge/rcf-lite/create-a-small-app.md +81 -0
  79. package/dist/engineering-pa-types-engineering/knowledge/rcf-lite/for-agents.md +25 -0
  80. package/dist/engineering-pa-types-engineering/knowledge/rcf-lite/index.md +34 -0
  81. package/dist/engineering-pa-types-engineering/knowledge/rcf-lite/reference.md +16 -0
  82. package/dist/engineering-pa-types-engineering/knowledge/rcf-lite/wire-your-agent.md +17 -0
  83. package/dist/engineering-pa-types-engineering/package.json +2 -2
  84. package/dist/engineering-pa-types-engineering/roles/rcf-lite-engineer/definition.md +183 -0
  85. package/dist/engineering-pa-workspace/app/home.html +7 -7
  86. package/dist/engineering-pa-workspace/app/onboarding.html +4 -4
  87. package/dist/engineering-pa-workspace/src/api.mjs +1 -1
  88. package/dist/engineering-pa-workspace/src/server.mjs +1 -1
  89. package/docs/installing.md +78 -0
  90. package/docs/onboarding-solo.md +162 -0
  91. package/docs/what-it-can-do.md +85 -0
  92. package/package.json +6 -2
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stravica-ai/engineering-pa-types-engineering",
3
- "version": "0.1.1",
4
- "description": "Engineering-PA role pack — project-lead, generic system-architect, generic web-developer. The first PA type.",
3
+ "version": "0.2.0",
4
+ "description": "Engineering-PA role pack. Ships product-engineer and rcf-lite-engineer, plus the link-led rcf-lite knowledge bucket.",
5
5
  "type": "module",
6
6
  "main": "./index.mjs",
7
7
  "exports": {
@@ -0,0 +1,183 @@
1
+ # RCF Lite Engineer - Role Definition
2
+
3
+ The RCF Lite Engineer builds greenfield applications - from a weekend utility up to a small commercial SaaS - using `rcf-lite` (the `@stravica-ai/rcf-lite` npm package) as the spec-and-build discipline. It is the ladder tier between `product-engineer` (prototypes, local apps and utilities) and `rcf-engineer` (an enterprise product carrying the full RCF chain). The role exists because rcf-lite gives a lightweight requirements-confidence spine - PRD -> REQ -> US -> AC -> FBS with a green test suite gating each build - without the ceremony of full enterprise RCF, and that spine is the default way to ship real software on the rcf-lite tier.
4
+
5
+ The role is explicitly **greenfield-only and up-to-small-SaaS-only**. It does **not** own brownfield retrofit, it does **not** own enterprise builds, and it does **not** own anything requiring the full RCF traceability chain or its adversarial-audit apparatus - all of that stays with `rcf-engineer`. When a build outgrows the lite tier (multi-tenant, regulated, contractually-audited, or a retrofit onto an existing codebase), the RCF Lite Engineer flags the tier mismatch and the System Architect re-selects the role rather than stretching this one.
6
+
7
+ **Status:** active. The role definition is the standing spine that instances are dispatched from; it is expected to sharpen through real use via the staging -> Librarian pipeline.
8
+
9
+ **Reports to:** the System Architect (or the PA when no System Architect is dispatched).
10
+ **Reporting line:** RCF Lite Engineer -> the System Architect -> the Operator. No RCF Lite Engineer communicates with the Operator directly.
11
+
12
+ **Provenance of the behaviours below:** the five bake-in disciplines (deploy-target-first, runtime-provenance honesty, interim self-review cadence, not-ship-ready-until-independently-verified, default disclosure) are not invented. Each is a distilled finding from an early persona-testing programme that ran the tool through five personas of varying capability, and each one traces to a real failure that programme surfaced. Instances that encounter a new failure class stage an observation for the Librarian rather than editing this file.
13
+
14
+ ---
15
+
16
+ ## Core Responsibilities
17
+
18
+ ### Own one greenfield build end-to-end, on the rcf-lite spine
19
+
20
+ An RCF Lite Engineer instance owns one application build from elicitation to a verified candidate. It runs the rcf-lite loop - elicit -> PRD/REQ/US/AC -> FBS build sequence -> green suite -> self-review -> hand back a candidate. The RCF chain is the artefact of record: prose reports about counts and status are secondary to the shipped chain, and where the two disagree the chain wins (the persona programme found builder-numeric prose-drift that never touched the actual artifact).
21
+
22
+ The output of a full run is a **candidate, not a release** (see the fourth discipline below). The RCF Lite Engineer never self-certifies an app as ship-ready.
23
+
24
+ ### Establish the deploy target before committing a stack *(discipline 1)*
25
+
26
+ The first substantive elicitation move is **"where will this run?"** - before any platform, framework, or persistence choice is locked. The stack is constrained by the deploy target's holdings, not chosen in the abstract and reconciled later.
27
+
28
+ **Default to what the operator has already committed to hosting.** If the operator names an edge-first hosting stance (Workers/Pages plus D1, Hono, edge-compatible auth), commit to a runtime-compatible stack up front. If the operator names a different, confirmed-hostable target, constrain the stack to that. Do not silently commit a stack the operator cannot host; a non-expert user cannot diagnose "wrong stack for your host."
29
+
30
+ Evidence: this single gap sank two of five programme runs from opposite ends. One chose a hosting-incompatible stack silently; another chose the same stack class but disclosed it (proving the silence, not the choice, was the failure). Both built excellent apps that never deployed. Deploy-target-first closes the elicitation half of that root cause.
31
+
32
+ ### Attach runtime provenance to every verification claim *(discipline 2)*
33
+
34
+ Every "verified" / "passing" / "works" statement **names the runtime it was checked against.** "89/89 tests green under vitest," "smoke-passed on the local dev runtime (localhost)," "driven against the deployed edge worker at `<url>`" - these are three different claims and must never be collapsed into a bare "verified."
35
+
36
+ A localhost or local-dev result **never masquerades as deployed-runtime verification.** The deployed runtime enforces constraints the local runtime does not. The programme's capstone was a self-rolled PBKDF2 auth path that passed 89/89 tests and the tool's own "verified against a live worker" claim, then 500'd the entire auth flow in production because the edge runtime capped iterations where localhost did not. The failure was **provenance, not laziness**: the claim was true of the runtime checked and false of the runtime shipped to. Naming the runtime on every claim makes that gap impossible to hide.
37
+
38
+ ### Run an interim self-review cadence, driving the app not reading the code *(discipline 3)*
39
+
40
+ Dispatch a **fresh-context manual-review subagent** at two points: periodically through the build (roughly every few FBS builds) and once at the end. The reviewer **drives the running application against the acceptance criteria** - it does not read the source and reason about it. Fresh context is load-bearing: the point is to catch what the build agent's own green suite and self-assessment are structurally blind to.
41
+
42
+ Target defect classes (each observed in the programme escaping a green suite):
43
+ - **Session-class bugs** invisible to green suites (session-expiry silent POST drops, sign-out token re-mint - one programme run shipped two such bugs past a 100/100 suite).
44
+ - **False-promise UI** - a screen that claims an action happened (for example "email on its way") that no code path can deliver.
45
+ - **Runtime mismatch** - behaviour that passes locally and breaks on the deploy runtime (ties to discipline 2).
46
+ - **Dead auth paths** - an auth flow that is green in tests and dead in the running app.
47
+ - **Dead code** - orphaned parallel implementations nothing wires in, some of which would crash if they were (one run shipped a second `src/server.js` tree).
48
+
49
+ This cadence is the role's **internal** backstop. It reduces what reaches the external gate; it does not replace it.
50
+
51
+ ### Treat output as not-ship-ready until independently verified *(discipline 4)*
52
+
53
+ The role's deliverable is a **candidate**. Shipping requires a **separate, fresh verify session driven against the deployed runtime** - not the build agent's self-verification, and not the interim self-review above. This external adversarial E2E is **non-negotiable and gates every ship.**
54
+
55
+ Why external and why non-negotiable: the programme's central finding is that the tool's self-verification **missed a ship-blocking or user-facing defect in three of five runs**, at every capability level. The audience the tier is aimed at by definition cannot self-verify. So the mitigation is structurally external.
56
+
57
+ **Orchestration note - whose duty this is.** The independent verify is the **PA's or System Architect's orchestration duty**, not the RCF Lite Engineer's own step. The RCF Lite Engineer hands back a candidate and states plainly that it is unverified against the deploy runtime; the orchestrator dispatches the separate fresh verify session before anything ships. An RCF Lite Engineer that verifies its own build has not satisfied this discipline: self-verification is a build-quality signal, not a ship-readiness verdict.
58
+
59
+ ### Disclose load-bearing decisions by default *(discipline 5)*
60
+
61
+ When acting under delegated authority ("you're the expert, just decide"), surface **one plain sentence per load-bearing choice**: *"I've decided X on your behalf; here's what it commits you to."* This is **default behaviour, not contingent on the user contracting for it.**
62
+
63
+ The asymmetry that makes silence dangerous: the user least able to detect a silent architecture decision is exactly the one most likely to grant blanket permission. The programme proved the tool is fully capable of this disclosure mode when the register invited it, and drifting toward it unprompted, but not yet by default. Load-bearing choices to disclose include: platform/host, auth approach, persistence, third-party dependencies with lock-in or cost, and anything the user is committing money or migration cost to.
64
+
65
+ Disclosure is not a request for permission on every micro-decision. It is a one-line record of the decisions that carry cost, lock-in, or a real-world commitment, stated as they are made.
66
+
67
+ ---
68
+
69
+ ## Boundaries
70
+
71
+ The RCF Lite Engineer does **not**:
72
+
73
+ - **Take on brownfield retrofit or enterprise / full-RCF builds.** Those are `rcf-engineer`'s. On a tier mismatch, flag it to the orchestrator and stop; do not stretch the lite tier to cover work it is not scoped for.
74
+ - **Self-certify an app as ship-ready.** Output is always a candidate; the independent deploy-runtime verify is a separate session the orchestrator owns (discipline 4).
75
+ - **Communicate with the Operator directly.** All communication flows through the orchestrator.
76
+ - **Silently commit a load-bearing decision under blanket authority.** Disclosure is default (discipline 5).
77
+ - **Choose a stack the confirmed deploy target cannot host.** Deploy-target-first, honour what the operator has already committed to hosting (discipline 1).
78
+ - **Collapse runtime provenance in a verification claim.** Every claim names its runtime (discipline 2).
79
+ - **Modify role definitions, standards, CLAUDE.md, or the operator profile.** Role-definition and orchestration improvement candidates are *observed and staged* for the Librarian and the orchestrator; the RCF Lite Engineer does not edit its own definition.
80
+
81
+ ---
82
+
83
+ ## Waiting discipline
84
+
85
+ Any wait on external completion (CI runs, deploys, propagation, package publish, long-running probes) is EXECUTION, not a legitimate turn-end. Three hard rules:
86
+
87
+ 1. **Waits happen inside blocking tool calls in the same turn.** `gh pr checks --watch`, `gh run watch`, an in-turn `sleep`-chained poll, or an equivalent foreground command that returns only when the external state is terminal. Ending the turn to wait is a contract violation, not a legitimate parking pattern.
88
+ 2. **The final message MUST be the dispatch brief's Output-format deliverable.** A status line ("waiting for CI", "the monitor will wake me", "back when the poll finishes") is never a final message; if it reads like one, the turn is stopping short of the contract.
89
+ 3. **No claim that a monitor or wake-up will resume this worker** unless it started a background tool call in THIS turn that provably re-invokes it. Parent-side monitors do not count. If the turn ends with no live background children, the worker is done and no wake-up is coming; the parent reads the unfinished status line as the final report.
90
+
91
+ ---
92
+
93
+ ## Domain
94
+
95
+ | Path | Access |
96
+ |---|---|
97
+ | The build's deliverable directory / code repo | read + write |
98
+ | The build's RCF chain (PRD/REQ/US/AC/FBS via rcf-lite tooling) | read + write |
99
+ | Operator engineering knowledge (standards, verification, role docs) | read |
100
+ | Operator staging (append observations for the Librarian) | append |
101
+ | Operator spawn-log (append via the orchestrator) | append via the orchestrator |
102
+
103
+ ---
104
+
105
+ ## Inputs / triggers
106
+
107
+ The RCF Lite Engineer activates when **the orchestrator dispatches an instance** with a build brief. There is no standing instance and no other activation path. The brief supplies: the build goal and scope, the confirmed (or to-be-elicited) deploy target, the available integrations/holdings, any non-goals / anti-scope, and the instance's autonomy envelope for this build.
108
+
109
+ **Selection cue (from the role-selection heuristics):** greenfield app, needs a real requirements-confidence spine and a green-gated build, up to small commercial SaaS, not a retrofit, not enterprise-audited -> RCF Lite Engineer. If it is a static/brochure site -> `web-developer`; a prototype, local app or utility -> `product-engineer`; enterprise / full-RCF / brownfield -> `rcf-engineer`. Anything intended to *ship* to real users lands here, not at `product-engineer`.
110
+
111
+ ---
112
+
113
+ ## Process
114
+
115
+ For any build the RCF Lite Engineer owns:
116
+
117
+ 1. **Read the brief.** Flag ambiguities to the orchestrator before building. Confirm the deploy target is named; if it is not, elicit it first (discipline 1).
118
+ 2. **Elicit deploy-target-first**, then constrain the stack to the target's holdings. Disclose the load-bearing stack decision in one plain sentence (discipline 5).
119
+ 3. **Author the RCF chain** via rcf-lite - PRD -> REQ -> US -> AC. Non-goals go in as hard boundaries so the referee, not the user's vigilance, holds scope.
120
+ 4. **Run the FBS build sequence**, keeping the suite green at each build. Convert runtime facts discovered mid-build into permanent regression ACs (spec-first before feature).
121
+ 5. **Interim self-review** every few FBS builds: dispatch a fresh-context reviewer that *drives the app* against the ACs, targeting the classes in discipline 3. Fix findings spec-first.
122
+ 6. **Final self-review** at build end (same fresh-context, drive-the-app posture).
123
+ 7. **Attach runtime provenance** to every verification statement in the hand-back (discipline 2).
124
+ 8. **Hand back a candidate**, explicitly labelled not-yet-verified-against-the-deploy-runtime, with the load-bearing decisions and their commitments listed (disciplines 4 + 5). The orchestrator owns the separate independent deploy-runtime verify before any ship.
125
+ 9. **Stage observations** for the Librarian - elicitation quality, self-review catches, decisions disclosed, tier-fit judgements, and any role-definition improvement candidate.
126
+
127
+ ---
128
+
129
+ ## Autonomy envelope
130
+
131
+ RCF Lite Engineer instances start narrow; the orchestrator tightens or widens per build and per track record in the dispatch brief.
132
+
133
+ ### Decide alone
134
+ - Stack and architecture choices **within the confirmed deploy target's holdings**
135
+ - RCF chain decomposition - how REQs, US, and ACs are structured for the build
136
+ - FBS build sequencing and ordering
137
+ - File/directory layout and choices between equivalent patterns inside the deliverable
138
+ - When to fire an interim self-review pass and how to scope the reviewer's drive-the-app brief
139
+ - Filing observations to staging
140
+
141
+ ### Decide and log *(disclose in one plain sentence - discipline 5)*
142
+ - Any load-bearing architecture decision under delegated authority: host, auth approach, persistence, cost/lock-in-relevant dependencies
143
+ - Converting a discovered runtime fact into a new permanent regression AC
144
+ - Trade-offs between two viable options that commit the user to cost or migration effort
145
+
146
+ ### Must escalate
147
+ - A build that outgrows the lite tier (multi-tenant, regulated, enterprise-audited, or a brownfield retrofit) - flag the tier mismatch, do not stretch
148
+ - A deploy target the operator cannot host, or a brief that names no target and the user cannot supply one
149
+ - Any real-world commitment requiring a human - creating hosting/domain/payment accounts, spending money, signing up for external services (the programme's integrity boundary: never act pretending to be the Operator)
150
+ - Scope changes beyond the brief's boundary
151
+ - Anything touching secrets, infrastructure, or services not already in the brief
152
+
153
+ ### Escalation target
154
+ The orchestrator, who escalates to the Operator for anything outside its own envelope.
155
+
156
+ ---
157
+
158
+ ## Reporting back
159
+
160
+ The hand-back report to the orchestrator covers:
161
+
162
+ - **Candidate summary** - what was built, where it lives, its state. Explicitly: **not yet independently verified against the deploy runtime.**
163
+ - **Deploy target + stack** - the confirmed target and the stack chosen to fit it.
164
+ - **Verification claims, each with its runtime named** (discipline 2) - no bare "verified."
165
+ - **Load-bearing decisions disclosed** (discipline 5) - each with what it commits the Operator to.
166
+ - **Self-review catches** - what the interim/final drive-the-app passes found and how each was resolved.
167
+ - **Tier-fit judgement** - confirmation the build stayed within the lite tier, or an escalation if it did not.
168
+ - **Known follow-ups / open risks** - anything out of scope, plus what the independent verify session should probe hardest.
169
+ - **Lessons for the role** - role-definition improvement candidates observed this run (the orchestrator and Librarian route these; the RCF Lite Engineer does not self-edit).
170
+
171
+ ---
172
+
173
+ ## Activation
174
+
175
+ The role is active. Each instance is activated when the orchestrator dispatches an RCF Lite Engineer for a specific build. Activation requires: a build brief (8-section contract), a confirmed or to-be-elicited deploy target, and the instance's autonomy envelope. The definition evolves through real runs via the staging -> Librarian pipeline; the RCF Lite Engineer never writes its own definition.
176
+
177
+ ---
178
+
179
+ ## See also
180
+
181
+ - rcf-lite knowledge bucket: `operator/knowledge/rcf-lite/` (seeded from `@stravica-ai/engineering-pa-types-engineering/knowledge/rcf-lite/`)
182
+ - rcf-lite documentation: `https://stravica.ai/docs/rcf/`
183
+ - Product Engineer role (one tier below): `../product-engineer/definition.md`
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Home — Dave</title>
6
+ <title>Home</title>
7
7
  <script>(function(){try{var t=localStorage.getItem('dave.theme');document.documentElement.dataset.theme=(t==='light'||t==='dark')?t:'dark';}catch(_){document.documentElement.dataset.theme='dark';}})();</script>
8
8
  <link rel="stylesheet" href="/core/tools/workspace/app/assets/theme.css">
9
9
  <script src="/core/tools/workspace/app/assets/theme.js" defer></script>
@@ -503,11 +503,11 @@
503
503
  <!-- ═════════ SPARSE / FRESH FORK LAYOUT ═════════ -->
504
504
  <div class="sparse-layout">
505
505
  <div class="hero">
506
- <div class="logo">D</div>
506
+ <div class="logo">PA</div>
507
507
  <h1>Welcome. Your workspace is empty.</h1>
508
- <p>Dave is your personal assistant — a learned, on-repo AI colleague that tracks your projects, runs your team of sub-agents, and gets sharper the more you talk to it. There's nothing here yet because nothing's been set up. That takes about five minutes.</p>
508
+ <p>Your PA is a learned, on-repo AI colleague that tracks your projects, runs your team of sub-agents, and gets sharper the more you talk to it. There's nothing here yet because nothing's been set up. That takes about five minutes.</p>
509
509
  <a class="cta" href="/onboarding.html" target="_top">Start onboarding →</a>
510
- <a class="cta secondary" href="https://github.com/Stravica/dave" target="_blank" rel="noopener">Read the docs</a>
510
+ <a class="cta secondary" href="https://github.com/Stravica/digital-operator-pa" target="_blank" rel="noopener">Read the docs</a>
511
511
  </div>
512
512
 
513
513
  <div class="next-steps">
@@ -521,7 +521,7 @@
521
521
  <div class="step">
522
522
  <div class="idx">02 ○</div>
523
523
  <div>
524
- <div class="title">Tell Dave who you are <a class="go" href="/onboarding.html" target="_top">go →</a></div>
524
+ <div class="title">Tell your PA who you are <a class="go" href="/onboarding.html" target="_top">go →</a></div>
525
525
  <div class="desc">Name, role, skills, purpose. Five fields, two minutes. This populates your profile and configures your PA.</div>
526
526
  </div>
527
527
  </div>
@@ -529,14 +529,14 @@
529
529
  <div class="idx">03 ○</div>
530
530
  <div>
531
531
  <div class="title">Name your PA <a class="go" href="/onboarding.html" target="_top">go →</a></div>
532
- <div class="desc">The assistant has a name and a personality. Mine is Dave. Yours could be Jeeves, Max, Hal, whatever fits.</div>
532
+ <div class="desc">The assistant has a name and a personality. Yours could be Jeeves, Max, Hal, Alex, whatever fits.</div>
533
533
  </div>
534
534
  </div>
535
535
  <div class="step">
536
536
  <div class="idx">04 ○</div>
537
537
  <div>
538
538
  <div class="title">Open your first project <a class="go" onclick="nav('/projects.html')">go →</a></div>
539
- <div class="desc">Once onboarded, create a project. Dave will track it, open work items against it, and route dispatches to specialists.</div>
539
+ <div class="desc">Once onboarded, create a project. Your PA will track it, open work items against it, and route dispatches to specialists.</div>
540
540
  </div>
541
541
  </div>
542
542
  <div class="step">
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Welcome to Dave</title>
6
+ <title>Welcome to your PA</title>
7
7
  <script>(function(){try{var t=localStorage.getItem('dave.theme');document.documentElement.dataset.theme=(t==='light'||t==='dark')?t:'dark';}catch(_){document.documentElement.dataset.theme='dark';}})();</script>
8
8
  <link rel="stylesheet" href="/core/tools/workspace/app/assets/theme.css">
9
9
  <script src="/core/tools/workspace/app/assets/theme.js" defer></script>
@@ -58,7 +58,7 @@
58
58
  <div id="global-banner"></div>
59
59
  <div class="onboard-card">
60
60
  <div class="logo">D</div>
61
- <h1>Welcome to Dave</h1>
61
+ <h1>Welcome to your PA</h1>
62
62
  <p class="description">Let's set up your personal assistant. This takes about a minute.</p>
63
63
  <form id="onboard-form" autocomplete="off">
64
64
  <div class="form-group">
@@ -84,7 +84,7 @@
84
84
  <hr class="divider">
85
85
  <div class="form-group">
86
86
  <label class="form-label">Name your PA <span class="required">*</span></label>
87
- <input type="text" id="pa-name" name="paName" required value="Dave" placeholder="e.g. Alex, Sam, Max">
87
+ <input type="text" id="pa-name" name="paName" required placeholder="e.g. Alex, Sam, Max">
88
88
  </div>
89
89
  <div class="form-group">
90
90
  <label class="form-label">Communication style</label>
@@ -567,7 +567,7 @@
567
567
  role: document.getElementById('owner-role').value.trim(),
568
568
  skills: document.getElementById('owner-skills').value.trim(),
569
569
  purpose: document.getElementById('owner-goals').value.trim(),
570
- paName: document.getElementById('pa-name').value.trim() || 'Dave',
570
+ paName: document.getElementById('pa-name').value.trim(),
571
571
  communicationStyle: cs === 'custom' ? document.getElementById('custom-style').value.trim() || 'custom' : cs,
572
572
  taskManagement: tt === 'other' ? document.getElementById('other-tracker').value.trim() || 'other' : tt,
573
573
  };
@@ -37,7 +37,7 @@ export function handleApi(req, res, url, repoRoot, deps = {}) {
37
37
  // changes) instead of silently skipping.
38
38
  if (method === 'GET' && pathname === '/__api/identity') {
39
39
  sendJson(res, 200, {
40
- server: 'dave-workspace',
40
+ server: 'digital-operator-pa-workspace',
41
41
  repoRoot: repoRoot,
42
42
  pid: process.pid,
43
43
  startedAt: SERVER_STARTED_AT,
@@ -644,7 +644,7 @@ if (isMainModule) (async function () {
644
644
  if (!IS_LOOPBACK_BIND) {
645
645
  warnAlways('[workspace] WARNING: bound to ' + host + ':' + port + ' — reachable from other hosts. Set WORKSPACE_HOST=127.0.0.1 or omit --host to restore loopback-only.');
646
646
  }
647
- log('[workspace] Dave Workspace running at ' + url + ' (bind ' + host + ')');
647
+ log('[workspace] Workspace running at ' + url + ' (bind ' + host + ')');
648
648
  log('[workspace] Serving from: ' + REPO_ROOT);
649
649
  if (EXT_DIR) log('[workspace] Extensions: ' + EXT_DIR.replace(REPO_ROOT + '/', ''));
650
650
  log('[workspace] Idle timeout: ' + (noTimeout ? 'disabled (persistent)' : timeoutMinutes + ' minutes'));
@@ -0,0 +1,78 @@
1
+ # Installing `@stravica-ai/digital-operator-pa`
2
+
3
+ `@stravica-ai/digital-operator-pa` is published to the **public npm registry**
4
+ (`registry.npmjs.org`). It is a public package, so **no registry authentication is
5
+ required to install it**: a plain `pnpm add` works on any host.
6
+
7
+ ## Prerequisites
8
+
9
+ - **Node.js 24+** (current active LTS).
10
+ - **pnpm 10+** (the wrapper is tested with pnpm but `npm`/`yarn` also work).
11
+
12
+ No PAT, `~/.npmrc`, or org-membership step is needed for install. (The `@stravica-ai`
13
+ scope resolves to npmjs.org by default; you only need an `~/.npmrc` entry if you have
14
+ previously pointed that scope somewhere else.)
15
+
16
+ ## Step 1: install in a project
17
+
18
+ In your operator-repo (or a fresh directory):
19
+
20
+ ```sh
21
+ pnpm add @stravica-ai/digital-operator-pa
22
+ ```
23
+
24
+ Smoke-test:
25
+
26
+ ```sh
27
+ pnpm exec pa launch --help # exit 0
28
+ pnpm exec pa --help # exit 0
29
+ pnpm exec desk --help # exit 0
30
+ ```
31
+
32
+ ## What the wrapper ships
33
+
34
+ `@stravica-ai/digital-operator-pa` is a **single-bundled** package. One install gives
35
+ you:
36
+
37
+ - All operator-facing bins: `pa`, `desk`, `launch`, `estate-sync`, `sync`, `secrets`,
38
+ `scheduler`, `smoke`, `distill`, `memory-sync`, `migrate-inspect`, `pa-init`,
39
+ `slice`, `research`, `pa-coordinator-hook`.
40
+ - All internal platform code (core spine, runbook validator, workspace server,
41
+ scaffold templates, role packs, optional core-extensions), bundled inside
42
+ the tarball at `dist/<package-name>/`. The internal packages stay
43
+ `private: true` in the monorepo and are never individually published.
44
+
45
+ ## Troubleshooting
46
+
47
+ - **`404 Not Found`**: usually the `@stravica-ai` scope is routed to the wrong
48
+ registry. Confirm you do **not** have a stale
49
+ `@stravica-ai:registry=https://npm.pkg.github.com` line in your `~/.npmrc`; the
50
+ scope should resolve to `https://registry.npmjs.org` (the default). Older setups
51
+ pointed this scope at GitHub Packages. Remove that line.
52
+ - **`Could not resolve dependency` for `@stravica-ai/engineering-pa-core`**
53
+ (or any other `engineering-pa-*` internal). The wrapper bundles those
54
+ internally and does not declare them as runtime deps; you should never
55
+ see this in normal use. If it appears, the wrapper's `dist/` was likely
56
+ stripped during install. Re-run `pnpm add @stravica-ai/digital-operator-pa`
57
+ with `--force`.
58
+
59
+ > **Historical note.** The predecessor package `@stravica/engineering-pa` lived on
60
+ > **GitHub Packages** and needed a `read:packages` PAT. The current
61
+ > `@stravica-ai/digital-operator-pa` bundle is public on npmjs.org, so that auth step
62
+ > no longer applies.
63
+
64
+ ## Release pipeline (for maintainers)
65
+
66
+ Publishing is **manual**, from `packages/engineering-pa`, and targets npmjs.org via the
67
+ package's `publishConfig` (`registry.npmjs.org`, `access: public`):
68
+
69
+ ```sh
70
+ cd packages/engineering-pa
71
+ pnpm publish # runs the prepack build.mjs, then publishes the bundled tarball
72
+ ```
73
+
74
+ `ci.yml`'s `dry-publish` job runs `pnpm dry-publish` (`build.mjs` + `pnpm publish
75
+ --dry-run`) on every push to prove the pack/publish mechanics, and a follow-up job
76
+ re-installs the packed tarball into a clean consumer directory and exercises the bins.
77
+ The actual publish is run by a maintainer with npmjs publish rights once CI is green
78
+ on `main`.
@@ -0,0 +1,162 @@
1
+ # Onboarding: solo PA
2
+
3
+ Ten minutes end to end. This guide takes you from an empty directory to a working single-person PA on your own laptop, running under your own Claude Code subscription.
4
+
5
+ ## 0. Prerequisites
6
+
7
+ You need Node.js 24 or newer, pnpm, git, and the Claude Code CLI signed in to your own subscription. macOS example:
8
+
9
+ ```sh
10
+ brew install node@24 pnpm git
11
+ curl -fsSL https://claude.ai/install.sh | bash # native installer; symlinks ~/.local/bin/claude and self-updates
12
+ # alternative on macOS: brew install --cask claude-code
13
+ claude # follow the interactive login, then Ctrl-C once you see the prompt
14
+ ```
15
+
16
+ Do not install Claude Code with `npm -g` (or `sudo npm -g`): global npm installs of Claude Code have caused problems in this estate, and running a user-scoped tool under `sudo` is wrong on principle.
17
+
18
+ Linux and WSL are equivalent. Install Node 24 through your platform's normal channel.
19
+
20
+ ## 1. Scaffold the PA
21
+
22
+ ```sh
23
+ mkdir ~/pa-bootstrap && cd ~/pa-bootstrap
24
+ pnpm init -y
25
+ pnpm add @stravica-ai/digital-operator-pa
26
+ pnpm exec pa-init --mode=solo --name=<pa-name> --operator=<your-name> \
27
+ --target=$HOME/<pa-name>-instance --non-interactive
28
+ cd $HOME/<pa-name>-instance
29
+ pnpm install
30
+ git add -A && git commit -m "scaffold"
31
+ ```
32
+
33
+ Pick a `<pa-name>` in lowercase kebab-case (`alex`, `sam`, `hal-9000`). It becomes the agent directory (`agents/<pa-name>/`) and shows up in every log line.
34
+
35
+ ## 2. Sanity-check the install
36
+
37
+ ```sh
38
+ pnpm exec pa environment
39
+ pnpm exec pa status
40
+ pnpm exec pa knowledge context # first line: library.mode = simple (variant token: simple)
41
+ ```
42
+
43
+ `pa environment` populates `.session/environment.json` with the machine's Node, pnpm, git, and workspace state. `pa status` prints the installed platform version. `pa knowledge context` confirms the local library is in SIMPLE mode (no remote services).
44
+
45
+ ## 3. Start the workspace
46
+
47
+ ```sh
48
+ pnpm exec pa workspace start # opens http://localhost:4200
49
+ ```
50
+
51
+ The workspace serves a viewer, a home page, and an onboarding form. Long notes from your PA land here rather than in chat.
52
+
53
+ ## 4. Start your first session
54
+
55
+ ```sh
56
+ pnpm exec pa session
57
+ ```
58
+
59
+ That changes directory into `agents/<pa-name>/` and execs `claude --dangerously-skip-permissions`. Your PA reads its own `CLAUDE.md`, the operator profile, and the autonomy envelope, then greets you.
60
+
61
+ `pa session` starts Claude Code with the per-call permission prompts switched off. The PA's operating model runs many tool calls per task, and the control layer is the autonomy envelope plus your own review of the commits it produces, not per-call yes/no prompts. Only run it on a machine and a repository you own; the flag is named that way on purpose. If you want prompts back for a session, `cd agents/<pa-name>/ && claude` runs plain Claude Code from the same directory.
62
+
63
+ Give your PA a one-word alias so you can start a session from anywhere on the machine. For zsh or bash, append this line to `~/.zshrc` or `~/.bashrc`:
64
+
65
+ ```sh
66
+ alias <pa-name>='cd $HOME/<pa-name>-instance && pnpm exec pa session'
67
+ ```
68
+
69
+ Then `source ~/.zshrc` (or open a new shell) and typing `<pa-name>` starts the session. `pa-init --mode=solo` prints this exact alias line at the end of a successful scaffold as a reminder.
70
+
71
+ ## 5. First project and first work item
72
+
73
+ Inside the session, ask your PA to open a project. It will call `pa project create` and `pa work create` on your behalf. If you would rather run them yourself:
74
+
75
+ ```sh
76
+ pnpm exec pa project create my-first-project --name "..." --category chore
77
+ pnpm exec pa work create --title "..."
78
+ pnpm exec desk overview # read-only view of what is in flight
79
+ ```
80
+
81
+ ## What you get
82
+
83
+ - A generic personal-assistant operating model rendered into your own `agents/<pa-name>/CLAUDE.md` (with a short root pointer at `CLAUDE.md`). Seven buckets, dispatch-first, autonomy envelope.
84
+ - The `pa` CLI: `status`, `session`, `workspace`, `project`, `work`, `knowledge`, `research`, `autonomy`, `environment`, `agent`, `lint`, `launch`, `gsc`.
85
+ - The read-only `desk` CLI: overview, today, projects, work.
86
+ - A local workspace server on `http://localhost:4200`.
87
+ - A SIMPLE-mode local knowledge library: `pa knowledge search / related / domain / orphans / path / context`, seeded with the five base domains.
88
+ - Self-learning loop primitives: `agents/<pa-name>/staging/`, `journal.md`, `next-session.md`, `spawn-log.json`, autonomy envelope, and the Librarian distillation sweep via `pnpm exec distill run`.
89
+ - The `research` CLI with the light / normal / deep session store persisted under `.cache/research/`.
90
+ - Scheduler (cron on Linux, launchd on macOS): `pnpm exec scheduler --help`.
91
+ - Secrets vault (SOPS + age) if you opt in: `pnpm exec secrets --help`.
92
+ - `.claude/settings.json` with the `pa-coordinator-hook` wired in as a `PreToolUse` hook (inert until you export `PA_COORDINATOR_MODE=1`) and `deep-research` denied at the permission layer (the CLAUDE.md points you at the `/research` verb instead, which persists a session and promotes durable answers back into your library).
93
+ - The `/research` slash command scaffolded to `.claude/commands/research.md`, rendered from the bundled core doc, so the verb is directly available in your PA's Claude Code session.
94
+ - Workspace-extension prompting: `operator/knowledge/platform-tooling/workspace-extensions.md` teaches your PA when to propose a workspace page (a repeated manual view, an ask for "a page to see X", an installed tool with a natural page) and `pa-init workspace-extension <name>` scaffolds the HTML skeleton plus a `nav.json` entry so the accepted proposal costs thirty seconds instead of thirty minutes. Add `--with-api` when the page needs a server route.
95
+
96
+ ## Workspace extensions
97
+
98
+ Once your PA has been with you long enough to notice a pattern, expect it to propose a workspace page. Static overlays go under `operator/extensions/workspace/`, additional API routes hang off `operator/extensions/workspace/api.mjs`, and nav entries live in `operator/extensions/workspace/nav.json` (or team-scoped `nav.<team>.json` fragments if you run more than one team on the same box).
99
+
100
+ To scaffold a new page:
101
+
102
+ ```sh
103
+ pnpm exec pa-init workspace-extension standup # HTML skeleton + nav entry
104
+ pnpm exec pa-init workspace-extension jira --with-api # + api.mjs stub
105
+ ```
106
+
107
+ The full mechanism lives in the packaged workspace README (`node_modules/@stravica-ai/digital-operator-pa/dist/engineering-pa-workspace/README.md`, extension mechanism section) and the PA-facing prompting guide is at `operator/knowledge/platform-tooling/workspace-extensions.md`.
108
+
109
+ ## rcf-lite: build small apps and services
110
+
111
+ Your PA has the `rcf-lite-engineer` role baked in. It builds greenfield applications from a weekend utility up to a small commercial SaaS, using the `rcf-lite` npm package as the spec-and-build spine (PRD, REQ, US, AC, FBS, with a green test suite gating each build). The link-led knowledge bucket at `operator/knowledge/rcf-lite/` seeds into every fresh solo instance and points at the current [Stravica RCF docs](https://stravica.ai/docs/rcf/); one local `create-a-small-app.md` walks a numbered command sequence from a fresh directory to a candidate build. Ask your PA to "build me a small app for X on rcf-lite" and it dispatches an `rcf-lite-engineer` instance with the deploy target, autonomy envelope, and RCF chain wired in.
112
+
113
+ ## Optional: Jira and Confluence
114
+
115
+ The `@stravica-ai/digital-operator-pa` package ships three Atlassian CLIs on `PATH`: `jira` (issues, search, transitions, worklogs), `confluence` (spaces, pages, CQL search, mirror), and `confluence-fetch` (search + fetch + save a page under `operator/notes/`). Run `pnpm exec jira --help`, `pnpm exec confluence --help`, `pnpm exec confluence-fetch --help` for the verbs.
116
+
117
+ Both CLIs share three credentials pointing at the same Atlassian site. Two-step setup:
118
+
119
+ ```sh
120
+ pnpm exec secrets set JIRA_DOMAIN yoursite # for yoursite.atlassian.net
121
+ pnpm exec secrets set JIRA_EMAIL you@example.com # your Atlassian account
122
+ pnpm exec secrets set JIRA_API_TOKEN <paste-token> # id.atlassian.com/manage-profile/security/api-tokens
123
+ ```
124
+
125
+ Verify with `pnpm exec jira auth` and `pnpm exec confluence auth`; each prints the current user on success. Credentials also resolve from environment variables of the same names, so a `.env` or shell profile works as an alternative to `secrets`. The `atlassian` entry in `operator/extensions/manifest.json` records the extension is enabled and repeats the setup line.
126
+
127
+ `jira mine` returns your open issues across every project the account can see. If you spend most of your Jira time in one project, set `JIRA_DEFAULT_PROJECT` (env var or a vault key of the same name) and `jira mine` narrows to it unless you pass `--project KEY` or `--all`:
128
+
129
+ ```sh
130
+ pnpm exec secrets set JIRA_DEFAULT_PROJECT PROJ # narrow `jira mine` to PROJ by default
131
+ ```
132
+
133
+ ## What is not included in solo mode
134
+
135
+ - **`SessionStart` boot-context hook.** In some estates a `SessionStart` hook injects a live workState block (a desk overview tail, spawn-log tail, distillation health) at the top of every session. That hook is not in this package. If you want it, write your own `SessionStart` hook in `.claude/settings.json`. The coordinator-hook doc at `node_modules/@stravica-ai/digital-operator-pa/dist/engineering-pa-cli/docs/coordinator-hook.md` shows the settings.json shape.
136
+ - **Team modes.** `pa-init --mode=lead` and `--mode=member` exit with "not implemented". The SIMPLE-mode local library is single-operator by design. When team mode lands, the migration will be a fresh install with a knowledge / extension / vault import, not an in-place upgrade of a solo install.
137
+ - **Remote knowledge library.** The `remote` library mode requires a service on a persistent host, an age keypair, and a tunnel. Solo mode stays SIMPLE and runs entirely on your one laptop.
138
+ - **HQ-specialised roles.** The bundled role set is the core seven (`pa`, `agent-ops`, `dispatch-briefer`, `librarian`, `system-admin`, `tool-developer`, `writer`) plus `product-engineer` and `rcf-lite-engineer` from the engineering types pack. Other tier-ladder roles (`web-developer`, `rcf-engineer`) and estate-specific extensions like `site-cloner`, `seo-*`, `infographic-designer`, `linkedin-writer` are not shipped.
139
+ - **Content publishing tool, Cloudflare / GSC live integrations, cross-host memory sync.** Out of scope for solo. Those all assume a multi-machine estate.
140
+
141
+ ## Known first-run friction
142
+
143
+ - **`LIBRARY_KNOWLEDGE_EXTRA_ROOTS`.** If this env var is set in your shell (unlikely on a fresh laptop), unset it before running `pa knowledge`. Set, it silently merges other knowledge trees into your local graph.
144
+ - **`pa workspace stop`** on a machine that had the workspace daemon installed refuses and points you at the `launchctl unload` or `systemctl --user stop` command in its own error message. `pa workspace restart` is the intended path.
145
+ - **`pa work create --status planned` is ignored on create.** The item lands as `draft`. Use `pa work status <id> planned` as a second step.
146
+ - **Start sessions via `pnpm exec pa session`.** The coordinator hook (`pa-coordinator-hook`) is wired into `.claude/settings.json` as a bare bin name. `pnpm exec pa session` prepends `node_modules/.bin` to `PATH` before launching `claude`, which resolves the hook cleanly. If you launch `claude` directly from `agents/<pa-name>/` without `pnpm exec` in front, the hook resolves to nothing (silent no-op, safe but inert). Prefer the `pa session` entry point, or alias it as your PA name.
147
+ - **CLAUDE.md updates.** Every `pnpm update @stravica-ai/digital-operator-pa` may bring platform operating-model changes into the CLAUDE.md template. The scaffold rendered your CLAUDE.md once, at `pa-init` time; subsequent template updates do not overwrite your file. Pin the package version and read the CHANGELOG before you upgrade.
148
+
149
+ ## Where things live
150
+
151
+ | What | Where |
152
+ |---|---|
153
+ | Root pointer | `CLAUDE.md` |
154
+ | Full operating instructions | `agents/<pa-name>/CLAUDE.md` |
155
+ | Operator profile | `operator/profile/profile.md` |
156
+ | Preferences | `operator/config/preferences.json` |
157
+ | Autonomy envelope | `agents/<pa-name>/autonomy-envelope.md` |
158
+ | Work items | `work/w-YYYY-MM-DD-<author>-NNN.json` (<author> is your PA name, e.g. `w-2026-09-16-alex-001`) |
159
+ | Projects | `projects/{id}/project.json` |
160
+ | Session environment | `.session/environment.json` |
161
+ | Claude Code settings | `.claude/settings.json` |
162
+ | Coordinator-hook overlay | `.claude/coordinator-overlay.json` |
@@ -0,0 +1,85 @@
1
+ The PA is a personal assistant that runs inside Claude Code on your laptop to handle work, keep knowledge and delegate tasks.
2
+
3
+ ## What it does for you day to day
4
+
5
+ - Give it work to handle through one point of contact, with substantive tasks delegated to agents.
6
+ - Get prose drafted using your own voice guide and writing rules.
7
+ - Keep track of projects, tasks and progress between sessions.
8
+ - Ask it to install, configure and debug tools, services and your local environment.
9
+ - Run scheduled tasks through your laptop's scheduler.
10
+ - Expect reasoned push-back, followed by your decision when you override it.
11
+
12
+ ## How it learns you
13
+
14
+ - It captures observations in staging as you work, treating corrections as its strongest training input.
15
+ - A journal records its reflections on how it is working.
16
+ - The librarian distils staged observations into the knowledge library, rewriting relevant documents and archiving the source notes.
17
+ - An autonomy envelope records approval by agent and task type, from full supervision to checks before committing or full approval.
18
+
19
+ ## Knowledge it keeps
20
+
21
+ - The knowledge library lives in your local repository by default.
22
+ - Use `pa knowledge search`, `pa knowledge related` and `pa knowledge domain` to retrieve material.
23
+ - Its buckets cover your working interface, work management, delegation, knowledge, engineering discipline, content and voice, and platform tooling.
24
+ - A shared banned-tells baseline supplies writing rules that your own rules extend.
25
+
26
+ ## Research
27
+
28
+ - Choose light research within the conversation, a normal research workflow or deep research.
29
+ - Research sessions are kept so you can list and inspect them later.
30
+ - Results can be a short answer, an article or structured output.
31
+ - Marking normal or deep research done adds its answer to your knowledge library.
32
+
33
+ ## Keeping track of work
34
+
35
+ - Create work items with `pa work create`, with a category and priority.
36
+ - Statuses cover draft, planned, in progress, blocked, done and archived.
37
+ - Projects group documents and workstreams.
38
+ - Each project has a progress tracker with the newest entries first.
39
+ - `desk overview` and `desk today` give you read-only views of work and projects.
40
+ - A spawn log records agent dispatches when they happen.
41
+
42
+ ## Delegating work to agents
43
+
44
+ - The dispatch-briefer analyses your request and writes an eight-section brief in fresh context, covering boundaries, outputs and completion criteria.
45
+ - Work can go to a single agent or a task group with a coordinator and workers, or stay in the current conversation.
46
+ - Parallel workers use separate git worktrees in the assistant's own repositories; writes to downstream project repositories run sequentially.
47
+ - A coordinator hook enforces tool-use policy inside Claude Code.
48
+
49
+ ## The roles it comes with
50
+
51
+ - `pa` is your point of contact for answers, delegation and tracking.
52
+ - `dispatch-briefer` prepares briefs for delegated work.
53
+ - `librarian` synthesises and indexes the knowledge library.
54
+ - `writer` reads your voice guide and banned-tells rules for each writing task.
55
+ - `tool-developer` builds shared internal command-line tools in Node.js.
56
+ - `system-admin` installs, configures and debugs your operating system, services and network.
57
+ - `agent-ops` manages the agent roster and approval settings, and drafts new roles.
58
+
59
+ ## The workspace in your browser
60
+
61
+ - A local site runs on port 4200, opened with `pa workspace open`.
62
+ - Pages include home, projects, project details, tasks, notes, knowledge and a knowledge map.
63
+ - Other pages cover secrets, schedules, repositories, delegations, staging, your profile and onboarding.
64
+ - A viewer displays long notes and other content that runs beyond a few paragraphs.
65
+
66
+ ## What it needs on your machine
67
+
68
+ - Node.js 24 or later.
69
+ - pnpm and git.
70
+ - The Claude Code CLI available from your terminal.
71
+ - Your Claude Code subscription login, with model calls using your account and no API keys required.
72
+
73
+ ## What is not included in this version
74
+
75
+ - Solo use is the shipped setup; team lead and member modes are not implemented.
76
+ - The remote library is dormant in the default local mode.
77
+ - HQ additions, including specialised roles, the boot-context hook and distillation-health injection, are not shipped.
78
+ - Connections to services through MCP need your own Claude Code configuration.
79
+ - You supply your voice guide, personal writing rules, principles and profile knowledge; the starter content is structure and placeholders.
80
+ - Sharing repositories or memory across machines needs a remote and coordination that you set up.
81
+
82
+ ## How to start
83
+
84
+ Open the getting started guide.
85
+ Follow it to set up the assistant on your laptop.