@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
@@ -7,7 +7,8 @@
7
7
  // kind: 'dir' (mkdir -p) | 'file' (write file with contents) | 'json'
8
8
  // (stringify + write).
9
9
 
10
- import { readFile } from 'node:fs/promises';
10
+ import { existsSync } from 'node:fs';
11
+ import { readFile, readdir } from 'node:fs/promises';
11
12
  import { dirname, join, resolve } from 'node:path';
12
13
  import { fileURLToPath } from 'node:url';
13
14
 
@@ -18,6 +19,14 @@ const __dirname = dirname(fileURLToPath(import.meta.url));
18
19
  /** Path to the CLAUDE.md template (relative to this module). */
19
20
  export const CLAUDE_MD_TEMPLATE_PATH = resolve(__dirname, '..', 'templates', 'CLAUDE.md.template');
20
21
 
22
+ /** Path to the root-CLAUDE.md pointer template (relative to this module). */
23
+ export const ROOT_CLAUDE_MD_TEMPLATE_PATH = resolve(
24
+ __dirname,
25
+ '..',
26
+ 'templates',
27
+ 'root-CLAUDE.md.template',
28
+ );
29
+
21
30
  /** Path to the operator README template (relative to this module). */
22
31
  export const OPERATOR_README_TEMPLATE_PATH = resolve(
23
32
  __dirname,
@@ -26,6 +35,65 @@ export const OPERATOR_README_TEMPLATE_PATH = resolve(
26
35
  'operator-README.md.template',
27
36
  );
28
37
 
38
+ /**
39
+ * Path to the `/research` slash-command doc, resolved out of the bundled
40
+ * engineering-pa-core package. Two candidates so this works both from the
41
+ * source monorepo (`packages/scaffold/src/generator.mjs` → `packages/core/…`)
42
+ * and from the packed tarball (`dist/engineering-pa-scaffold/src/generator.mjs`
43
+ * → `dist/engineering-pa-core/…`). The scaffold reads the file at plan time
44
+ * so the copy the colleague gets never drifts from the packaged canonical.
45
+ */
46
+ const RESEARCH_COMMAND_CANDIDATES = [
47
+ resolve(__dirname, '..', '..', 'engineering-pa-core', 'docs', 'commands', 'research.md'),
48
+ resolve(__dirname, '..', '..', 'core', 'docs', 'commands', 'research.md'),
49
+ ];
50
+
51
+ export const RESEARCH_COMMAND_TEMPLATE_PATH =
52
+ RESEARCH_COMMAND_CANDIDATES.find((p) => existsSync(p)) ?? RESEARCH_COMMAND_CANDIDATES[0];
53
+
54
+ /**
55
+ * Path to the bundled `workspace-extensions.md` PA-facing knowledge doc,
56
+ * resolved out of the packaged core. Two candidates so this works in both
57
+ * the source monorepo (`packages/scaffold/src/generator.mjs` -> `packages/core/...`)
58
+ * and the packed tarball (`dist/engineering-pa-scaffold/src/generator.mjs`
59
+ * -> `dist/engineering-pa-core/...`). The scaffold seeds the doc into
60
+ * `operator/knowledge/platform-tooling/workspace-extensions.md` so that
61
+ * `pa knowledge search "workspace extension"` reaches it in a fresh
62
+ * scaffolded solo instance (the retrieval graph scans `operator/knowledge/`
63
+ * and `core/knowledge/` under the repo root, and a solo scaffold ships
64
+ * neither of those trees populated by default).
65
+ */
66
+ const WORKSPACE_EXTENSIONS_KNOWLEDGE_CANDIDATES = [
67
+ resolve(__dirname, '..', '..', 'engineering-pa-core', 'knowledge', 'platform-tooling', 'workspace-extensions.md'),
68
+ resolve(__dirname, '..', '..', 'core', 'knowledge', 'platform-tooling', 'workspace-extensions.md'),
69
+ ];
70
+
71
+ export const WORKSPACE_EXTENSIONS_KNOWLEDGE_PATH =
72
+ WORKSPACE_EXTENSIONS_KNOWLEDGE_CANDIDATES.find((p) => existsSync(p))
73
+ ?? WORKSPACE_EXTENSIONS_KNOWLEDGE_CANDIDATES[0];
74
+
75
+ /**
76
+ * Path to the bundled `rcf-lite/` link-led knowledge bucket, resolved out
77
+ * of the packaged engineering role pack. Two candidates so this works in
78
+ * both the source monorepo (`packages/scaffold/src/generator.mjs` ->
79
+ * `packages/types/engineering/knowledge/rcf-lite/`) and the packed tarball
80
+ * (`dist/engineering-pa-scaffold/src/generator.mjs` ->
81
+ * `dist/engineering-pa-types-engineering/knowledge/rcf-lite/`). The
82
+ * scaffold seeds every `.md` file in this directory into
83
+ * `operator/knowledge/rcf-lite/` so `pa knowledge search "rcf-lite"`
84
+ * reaches the bucket in a fresh scaffolded solo instance (the retrieval
85
+ * graph scans `operator/knowledge/` and `core/knowledge/` under the repo
86
+ * root; a bundled-only copy would be invisible to the search verb).
87
+ */
88
+ const RCF_LITE_KNOWLEDGE_DIR_CANDIDATES = [
89
+ resolve(__dirname, '..', '..', 'engineering-pa-types-engineering', 'knowledge', 'rcf-lite'),
90
+ resolve(__dirname, '..', '..', 'types', 'engineering', 'knowledge', 'rcf-lite'),
91
+ ];
92
+
93
+ export const RCF_LITE_KNOWLEDGE_DIR_PATH =
94
+ RCF_LITE_KNOWLEDGE_DIR_CANDIDATES.find((p) => existsSync(p))
95
+ ?? RCF_LITE_KNOWLEDGE_DIR_CANDIDATES[0];
96
+
29
97
  /**
30
98
  * The base set of knowledge domains seeded into every fresh PA instance.
31
99
  * Per the methodology doc: engineering, ops, agent-ops, knowledge-meta,
@@ -78,6 +146,19 @@ export function renderClaudeMd(template, config) {
78
146
  .replaceAll('{COMMUNICATION_STYLE}', config.communicationStyle);
79
147
  }
80
148
 
149
+ /**
150
+ * Render the root-CLAUDE.md pointer with the config. The root file is a
151
+ * short quick-reference that points at the full agent CLAUDE.md — the
152
+ * split mirrors the established estate convention (root pointer +
153
+ * canonical agent file) so the two files never drift as byte-identical
154
+ * duplicates.
155
+ */
156
+ export function renderRootClaudeMd(template, config) {
157
+ return template
158
+ .replaceAll('{PA_NAME}', config.paName)
159
+ .replaceAll('{OPERATOR_NAME}', config.operatorName);
160
+ }
161
+
81
162
  /**
82
163
  * Render the operator-repo README template. Uses the same token set as
83
164
  * CLAUDE.md.template for consistency.
@@ -205,7 +286,13 @@ export function buildExtensionsManifest(config) {
205
286
  return {
206
287
  version: '1.0',
207
288
  generatedAt: config.generatedAt,
208
- extensions: [],
289
+ extensions: [
290
+ {
291
+ id: 'atlassian',
292
+ enabled: true,
293
+ note: 'Common-use Atlassian CLIs (jira, confluence, confluence-fetch). Configure with: secrets set JIRA_DOMAIN <site>; secrets set JIRA_EMAIL <email>; secrets set JIRA_API_TOKEN <token>.',
294
+ },
295
+ ],
209
296
  note: 'Extensions land in Phase 2. This manifest is the registration surface for promoted core extensions and operator-private extensions.',
210
297
  };
211
298
  }
@@ -302,6 +389,69 @@ export function buildGitkeep() {
302
389
  return '';
303
390
  }
304
391
 
392
+ /**
393
+ * Build the .claude/settings.json contents.
394
+ *
395
+ * Two things:
396
+ * 1. `permissions.deny` for the built-in `deep-research` skill and
397
+ * workflow. The core operating model (Bucket 4) directs the PA to
398
+ * the `/research` verb, which persists a session and promotes
399
+ * durable answers back into the knowledge library. The built-in
400
+ * `deep-research` skill produces no such trail and would silently
401
+ * short-circuit the discipline; deny is the correct default.
402
+ *
403
+ * 2. `hooks.PreToolUse` wiring `pa-coordinator-hook` for the matcher
404
+ * the coordinator-hook doc gives. The hook is a no-op unless the
405
+ * operator sets `PA_COORDINATOR_MODE=1` in their shell, so the
406
+ * scaffold ships the wiring inert. A per-repo overlay slot is
407
+ * scaffolded alongside as `.claude/coordinator-overlay.json`.
408
+ *
409
+ * SessionStart hooks (boot-context style injection) are deliberately
410
+ * NOT scaffolded — the boot-context tool lives in the HQ estate, not
411
+ * the published package. Scaffolding a hook that names a binary the
412
+ * colleague does not have would fire on every session boot with a
413
+ * non-blocking error. Documented in docs/onboarding-solo.md under
414
+ * "what is not included in solo mode".
415
+ */
416
+ export function buildClaudeSettingsJson() {
417
+ return {
418
+ permissions: {
419
+ deny: ['Skill(skill:deep-research)', 'Workflow(name:deep-research)'],
420
+ },
421
+ hooks: {
422
+ PreToolUse: [
423
+ {
424
+ matcher: '^(Bash|Read|Write|Edit|NotebookEdit|Grep|Glob|WebFetch|WebSearch)$',
425
+ hooks: [
426
+ {
427
+ type: 'command',
428
+ command: 'pa-coordinator-hook',
429
+ },
430
+ ],
431
+ },
432
+ ],
433
+ },
434
+ };
435
+ }
436
+
437
+ /**
438
+ * Build the .claude/coordinator-overlay.json starter. The overlay is a
439
+ * per-repo extension slot for `pa-coordinator-hook` — see the doc at
440
+ * packages/cli/docs/coordinator-hook.md for the merge contract. Only
441
+ * `tier2.<Bash|Read|Write>.allowPatterns` / `.allowPathPatterns` may be
442
+ * extended; the file ships empty so the presence of the overlay is
443
+ * documentation on its own without widening the default policy.
444
+ */
445
+ export function buildCoordinatorOverlayJson() {
446
+ return {
447
+ tier2: {
448
+ Bash: { allowPatterns: [] },
449
+ Read: { allowPathPatterns: [] },
450
+ Write: { allowPathPatterns: [] },
451
+ },
452
+ };
453
+ }
454
+
305
455
  /**
306
456
  * Compose the full plan. Returns an ordered list of `{ kind, path, contents }`
307
457
  * relative to `config.targetDir`. The runner resolves the paths and writes
@@ -309,8 +459,37 @@ export function buildGitkeep() {
309
459
  */
310
460
  export async function buildPlan(config) {
311
461
  const claudeTemplate = await readFile(CLAUDE_MD_TEMPLATE_PATH, 'utf8');
462
+ const rootClaudeTemplate = await readFile(ROOT_CLAUDE_MD_TEMPLATE_PATH, 'utf8');
312
463
  const operatorReadmeTemplate = await readFile(OPERATOR_README_TEMPLATE_PATH, 'utf8');
313
- return buildPlanFromTemplates(config, { claudeTemplate, operatorReadmeTemplate });
464
+ const researchCommand = await readFile(RESEARCH_COMMAND_TEMPLATE_PATH, 'utf8');
465
+ const workspaceExtensionsKnowledge = await readFile(WORKSPACE_EXTENSIONS_KNOWLEDGE_PATH, 'utf8');
466
+ const rcfLiteKnowledge = await readRcfLiteKnowledge(RCF_LITE_KNOWLEDGE_DIR_PATH);
467
+ return buildPlanFromTemplates(config, {
468
+ claudeTemplate,
469
+ rootClaudeTemplate,
470
+ operatorReadmeTemplate,
471
+ researchCommand,
472
+ workspaceExtensionsKnowledge,
473
+ rcfLiteKnowledge,
474
+ });
475
+ }
476
+
477
+ /**
478
+ * Read every `.md` file in the packaged rcf-lite knowledge directory and
479
+ * return a `{ filename: contents }` map for seeding into the scaffolded
480
+ * `operator/knowledge/rcf-lite/` tree. Returns `null` when the directory
481
+ * is absent so the pure-plan seam degrades to "skip the seed" rather than
482
+ * throwing, matching the workspace-extensions behaviour.
483
+ */
484
+ export async function readRcfLiteKnowledge(dirPath) {
485
+ if (!existsSync(dirPath)) return null;
486
+ const entries = await readdir(dirPath);
487
+ const files = entries.filter((n) => n.endsWith('.md')).sort();
488
+ const out = {};
489
+ for (const filename of files) {
490
+ out[filename] = await readFile(join(dirPath, filename), 'utf8');
491
+ }
492
+ return out;
314
493
  }
315
494
 
316
495
  /**
@@ -321,6 +500,13 @@ export async function buildPlan(config) {
321
500
  export function buildPlanFromTemplates(config, templates) {
322
501
  const { paName } = config;
323
502
  const claudeMd = renderClaudeMd(templates.claudeTemplate, config);
503
+ // Root-CLAUDE.md is a short pointer to the full agent file. Falling
504
+ // back to the agent file when the pointer template is absent keeps
505
+ // pure-plan tests that only pass `claudeTemplate` working, while the
506
+ // real buildPlan() path always supplies both.
507
+ const rootClaudeMd = templates.rootClaudeTemplate
508
+ ? renderRootClaudeMd(templates.rootClaudeTemplate, config)
509
+ : claudeMd;
324
510
  const readmeMd = renderOperatorReadme(templates.operatorReadmeTemplate, config);
325
511
  const pkg = buildOperatorPackageJson(config);
326
512
  const gitignore = buildGitignore();
@@ -348,20 +534,70 @@ export function buildPlanFromTemplates(config, templates) {
348
534
  'projects',
349
535
  'schedules',
350
536
  '.vault',
537
+ '.claude',
538
+ '.claude/commands',
351
539
  ];
352
540
 
353
541
  const plan = [];
354
542
  for (const d of dirs) plan.push({ kind: 'dir', path: d });
355
543
 
356
- plan.push({ kind: 'file', path: 'CLAUDE.md', contents: claudeMd });
544
+ plan.push({ kind: 'file', path: 'CLAUDE.md', contents: rootClaudeMd });
357
545
  plan.push({ kind: 'file', path: 'README.md', contents: readmeMd });
358
546
  plan.push({ kind: 'json', path: 'package.json', contents: pkg });
359
547
  plan.push({ kind: 'file', path: '.gitignore', contents: gitignore });
360
548
  plan.push({ kind: 'file', path: '.nvmrc', contents: '24\n' });
361
549
 
550
+ plan.push({ kind: 'json', path: '.claude/settings.json', contents: buildClaudeSettingsJson() });
551
+ // /research slash command: rendered from the packaged core doc so the
552
+ // command a colleague gets is exactly what the platform ships. The scaffold
553
+ // never re-authors it, and there is no template to drift.
554
+ if (templates.researchCommand) {
555
+ plan.push({
556
+ kind: 'file',
557
+ path: '.claude/commands/research.md',
558
+ contents: templates.researchCommand,
559
+ });
560
+ }
561
+ plan.push({
562
+ kind: 'json',
563
+ path: '.claude/coordinator-overlay.json',
564
+ contents: buildCoordinatorOverlayJson(),
565
+ });
566
+
362
567
  plan.push({ kind: 'file', path: 'operator/profile/profile.md', contents: profile });
363
568
  plan.push({ kind: 'json', path: 'operator/knowledge/domains.json', contents: domains });
364
569
  plan.push({ kind: 'json', path: 'operator/knowledge/index.json', contents: knowledgeIndex });
570
+ // Seed the PA-facing workspace-extensions knowledge doc into the operator
571
+ // tree so `pa knowledge search "workspace extension"` reaches it. The
572
+ // retrieval graph scans `operator/knowledge/` and `core/knowledge/` under
573
+ // the repo root; a solo scaffold ships neither of those trees populated
574
+ // by default, so a bundled-only copy would be invisible to the search
575
+ // verb. Kept in lockstep with the packaged canonical via the plan-time
576
+ // read at WORKSPACE_EXTENSIONS_KNOWLEDGE_PATH.
577
+ if (templates.workspaceExtensionsKnowledge) {
578
+ plan.push({
579
+ kind: 'file',
580
+ path: 'operator/knowledge/platform-tooling/workspace-extensions.md',
581
+ contents: templates.workspaceExtensionsKnowledge,
582
+ });
583
+ }
584
+ // Seed the link-led rcf-lite knowledge bucket into the operator tree so
585
+ // `pa knowledge search "rcf-lite"` reaches every file. Same rationale as
586
+ // the workspace-extensions doc above: the retrieval graph scans
587
+ // `operator/knowledge/` and `core/knowledge/` under the repo root, so a
588
+ // bundled-only copy is invisible to the search verb. `templates.rcfLiteKnowledge`
589
+ // is a `{ filename: contents }` map read by `readRcfLiteKnowledge` from
590
+ // the packaged types/engineering pack at plan time; pure-plan callers
591
+ // omit the field to skip the seed (backwards compatible).
592
+ if (templates.rcfLiteKnowledge) {
593
+ for (const [filename, contents] of Object.entries(templates.rcfLiteKnowledge)) {
594
+ plan.push({
595
+ kind: 'file',
596
+ path: `operator/knowledge/rcf-lite/${filename}`,
597
+ contents,
598
+ });
599
+ }
600
+ }
365
601
  plan.push({ kind: 'json', path: 'operator/config/preferences.json', contents: buildPreferencesJson(config) });
366
602
  plan.push({ kind: 'json', path: 'operator/extensions/manifest.json', contents: manifest });
367
603
 
@@ -10,7 +10,7 @@ You are a colleague, not a servant. You have opinions and you voice them -- with
10
10
 
11
11
  Your long-term goal is to learn {OPERATOR_NAME}'s judgement so thoroughly that you can operate autonomously on their behalf -- making decisions, managing tasks, running delegated work -- without needing to ask. Every interaction is training data. The measure of progress: how often can you act without escalating? Every question you have to ask that you could have answered is a gap.
12
12
 
13
- **PA operating mode — dispatch-first. This is the defining posture; re-read it every boot.** Your main thread exists for three things only: (1) orchestrating work, (2) keeping the work-trail current (work items, projects, spawn-log, journal, staging), and (3) interacting with {OPERATOR_NAME}. **ALL substantive work goes into a dispatch** — a subagent with a full 8-section brief. Research, writing, code, analysis, multi-file reads, anything that produces a work product: dispatched, not done inline. You lead the team by delegating, not by doing. Keeping the main thread clean is what keeps you available to {OPERATOR_NAME} and stops you burning context on work you could have handed off. The narrow inline exceptions (a one-line edit, a single file read, a status answer) are enumerated in Bucket 3 — treat them as the exception, never the reflex. When unsure: dispatch.
13
+ **PA operating mode. Dispatch-first. This is the defining posture; re-read it every boot.** Your main thread exists for three things only: (1) orchestrating work, (2) keeping the work-trail current (work items, projects, spawn-log, journal, staging), and (3) interacting with {OPERATOR_NAME}. **ALL substantive work goes into a dispatch**: a subagent with a full 8-section brief. Research, writing, code, analysis, multi-file reads, anything that produces a work product: dispatched, not done inline. You lead the team by delegating, not by doing. Keeping the main thread clean is what keeps you available to {OPERATOR_NAME} and stops you burning context on work you could have handed off. The narrow inline exceptions (a one-line edit, a single file read, a status answer) are enumerated in Bucket 3. Treat them as the exception, never the reflex. When unsure: dispatch.
14
14
 
15
15
  **Autonomy envelope.** Per-task-type approval state lives at `agents/{PA_NAME}/autonomy-envelope.md`. Three states: `fullyApproved` (act, don't ask), `checkBeforeCommitting` (draft, get sign-off before durable action), `needsFullSupervision` (do not act; escalate every step). {OPERATOR_NAME} promotes or demotes at any time via `pa autonomy set`. The envelope is the durable record; your judgement calibrates day-to-day, but the envelope is what you check when the reflex is unclear. See `@stravica-ai/engineering-pa-core/docs/autonomy-envelope-tracker.md`.
16
16
 
@@ -97,7 +97,7 @@ Right information at the right time. Repo is truth; memory is cache.
97
97
 
98
98
  Ship correct, safe, reversible changes. Never destroy {OPERATOR_NAME}'s work.
99
99
 
100
- 1. **Match the engineering role to the shape of work.** Base role ladder: `tool-developer` (shared internal CLI) → `web-developer` (content-led marketing site) → `product-engineer` (shippable single-app software) → `rcf-engineer` (enterprise product with full RCF traceability). Operator-side specialisations (site-cloner, seo-*, infographic-designer, etc.) layer above. Wrong tier ships wrong.
100
+ 1. **Match the engineering role to the shape of work.** Base role ladder: `tool-developer` (shared internal CLI) → `web-developer` (content-led marketing site) → `product-engineer` (prototypes, local apps and utilities) → `rcf-lite-engineer` (shippable greenfield apps up to small commercial SaaS on the rcf-lite spine; not brownfield/enterprise) → `rcf-engineer` (enterprise product with full RCF traceability). Operator-side specialisations (site-cloner, seo-*, infographic-designer, etc.) layer above. Wrong tier ships wrong. The `rcf-lite-engineer` role definition and its link-led knowledge bucket live at `operator/knowledge/rcf-lite/` (seeded from the packaged engineering role pack); rcf-lite installs per project via `npm install rcf-lite`.
101
101
  2. **Verify runtime behaviour, not just type-check + tests.** Tests verify code correctness, not feature correctness. If you can't test the UI, say so explicitly.
102
102
  3. **Blast-radius awareness.** Local reversible = free. Shared / hard-to-reverse / visible to others = confirm first. Match action scope to what was requested.
103
103
  4. **Investigate root causes.** Don't bypass safety checks (`--no-verify`) as a shortcut.
@@ -107,7 +107,7 @@ Ship correct, safe, reversible changes. Never destroy {OPERATOR_NAME}'s work.
107
107
  8. **Investigate unexpected state before overwriting.** Unfamiliar files / branches / config may represent {OPERATOR_NAME}'s in-progress work. `git status` before any command that could discard uncommitted changes.
108
108
  9. **When staging or committing, review what's included.** Never commit files that likely contain secrets. Suspicious filenames get their contents checked before push.
109
109
 
110
- **Deeper reference:** `operator/knowledge/engineering-discipline/` -- role-ladder + selection heuristics, git safety protocol, worktree-isolation patterns, verify skill catalogue, blast-radius examples, secret-scanning heuristics.
110
+ **Deeper reference:** `operator/knowledge/engineering-discipline/` -- role-ladder + selection heuristics, git safety protocol, worktree-isolation patterns, verify skill catalogue, blast-radius examples, secret-scanning heuristics. **rcf-lite:** `operator/knowledge/rcf-lite/` -- link-led bucket into `https://stravica.ai/docs/rcf/` (start here / wire your agent / how it works / driving / for agents / reference), plus the one local `create-a-small-app.md` command sequence.
111
111
 
112
112
  <!-- OPERATOR: list operator-side specialised engineering roles here (the role LIST beyond the base ladder), plus operator-specific engineering conventions (per-project git safety rules, CI-integration patterns, downstream-repo policies). -->
113
113
 
@@ -129,7 +129,7 @@ Content that lands in {OPERATOR_NAME}'s voice, not generic AI-speak. Route throu
129
129
 
130
130
  Use the estate's own tooling first. Consistent, dogfooded, learnable.
131
131
 
132
- 1. **Always use local tooling before reaching for others.** Discover the current surface every session -- don't rely on memory. Sources: `pnpm exec pa --help`, `pnpm exec desk --help`, `ls operator/extensions/tools/`. External tools only when nothing local fits.
132
+ 1. **Always use local tooling before reaching for others.** Discover the current surface every session -- don't rely on memory. Sources: `pnpm exec pa --help`, `pnpm exec desk --help`, `pnpm exec jira --help`, `pnpm exec confluence --help`, `pnpm exec confluence-fetch --help`, `ls operator/extensions/tools/`. External tools only when nothing local fits.
133
133
  2. **Environmental awareness.** `pa environment` runs on session boot -- lightweight core CLI that populates `.session/environment.json` in <2s (OS, tools, network reachability, workspace state, working directory). Default `pa environment` reads the cache; `pa environment refresh` rebuilds. Deeper diagnostics via `pa environment extended` (operator overlay) run on demand only. Factor environment into decisions -- dispatch target, tool availability, network access.
134
134
  3. **Platform CLIs invoked via `pnpm exec`** -- platform ships as `@stravica-ai/digital-operator-pa` npm package.
135
135
  4. **`desk` CLI is read-only.** Overview, today, work, projects. Never edit through desk.
@@ -137,9 +137,9 @@ Use the estate's own tooling first. Consistent, dogfooded, learnable.
137
137
  6. **Scheduling:** `schedules/{id}.json`. Default target host is an operator-configured field -- name it in your operator overlay.
138
138
  7. **MCP servers available on demand:** discover via `--help` on the tool surface. Use when the task fits; don't force.
139
139
  8. **Working directory ≠ project root.** cwd is `agents/{PA_NAME}/`; derive project root via `.session/environment.json:workingDirectory.projectRoot` or a `*_ROOT` env var. Never hard-code paths.
140
- 9. **Proactive tool proposal.** When a task pattern repeats or is complex enough that manual execution is error-prone, propose a tool to {OPERATOR_NAME}. On approval, dispatch tool-developer at the next convenient point. Don't wait for {OPERATOR_NAME} to suggest -- building a decent library of helpful tools is estate improvement work you own.
140
+ 9. **Proactive tool proposal.** When a task pattern repeats or is complex enough that manual execution is error-prone, propose a tool to {OPERATOR_NAME}. On approval, dispatch tool-developer at the next convenient point. Don't wait for {OPERATOR_NAME} to suggest -- building a decent library of helpful tools is estate improvement work you own. **Workspace pages count as a tool for this rule.** When {OPERATOR_NAME}'s habits fit the triggers in `operator/knowledge/platform-tooling/workspace-extensions.md` (repeated manual view, explicit ask for a dashboard, an installed tool with a natural page), propose a workspace extension and, on approval, invoke `pa-init workspace-extension <name>` for the skeleton before dispatching `tool-developer` for the real content.
141
141
 
142
- **Deeper reference:** `operator/knowledge/platform-tooling/` -- pa/desk/pnpm-exec/workspace reference, tool-discovery discipline, environment-awareness protocol (`pa environment` core + `extended` overlay), scheduling API, MCP server catalogue, proactive-tool-proposal pattern.
142
+ **Deeper reference:** `operator/knowledge/platform-tooling/` -- pa/desk/pnpm-exec/workspace reference, tool-discovery discipline, environment-awareness protocol (`pa environment` core + `extended` overlay), scheduling API, MCP server catalogue, proactive-tool-proposal pattern, workspace-extension prompting (`workspace-extensions.md`).
143
143
 
144
144
  <!-- OPERATOR: list your `operator/extensions/tools/` (custom operator tools you have built), your workspace port if not 4200, your scheduling default host, and MCP servers you rely on. -->
145
145
 
@@ -193,6 +193,6 @@ Stage observations, update journal, update work items, update spawn-log outcomes
193
193
 
194
194
  All paths are relative to the operator repo root. Resolve via `.session/environment.json:workingDirectory.projectRoot` or a `*_ROOT` env var, never hard-code absolutes.
195
195
 
196
- Symbolic `@stravica-ai/engineering-pa-core/<subpath>` references resolve on disk to `node_modules/@stravica-ai/digital-operator-pa/dist/engineering-pa-core/<subpath>` — the internal packages ship bundled inside the wrapper package, not under their own names in `node_modules`.
196
+ Symbolic `@stravica-ai/engineering-pa-core/<subpath>` references resolve on disk to `node_modules/@stravica-ai/digital-operator-pa/dist/engineering-pa-core/<subpath>`. The internal packages ship bundled inside the wrapper package, not under their own names in `node_modules`.
197
197
 
198
198
  <!-- OPERATOR: add any operator-specific paths that are frequently referenced (a vault path, a scratchpad convention, an integration credentials store). -->
@@ -1,8 +1,8 @@
1
- # {PA_NAME} — operator repo
1
+ # {PA_NAME}: operator repo
2
2
 
3
3
  Personal-assistant instance for {OPERATOR_NAME}, scaffolded with `pa-init`.
4
4
 
5
- This repo holds **only operator content** — your profile, knowledge, work items,
5
+ This repo holds **only operator content**: your profile, knowledge, work items,
6
6
  projects, agent run state, schedules, and secrets. The PA platform code is
7
7
  supplied by the `@stravica-ai/digital-operator-pa` npm package; you never edit it in
8
8
  place.
@@ -17,7 +17,7 @@ place.
17
17
  │ ├── profile/ # operator profile (distilled over time)
18
18
  │ ├── knowledge/ # domain-organised knowledge tree
19
19
  │ └── extensions/ # operator-private extensions (Phase 2+)
20
- ├── agents/{PA_NAME}/ # PA run folder — journal, staging, spawn-log
20
+ ├── agents/{PA_NAME}/ # PA run folder: journal, staging, spawn-log
21
21
  ├── work/ # work items (one JSON per item)
22
22
  ├── projects/ # projects (one folder per project)
23
23
  ├── schedules/ # scheduled-task definitions
@@ -28,7 +28,7 @@ place.
28
28
 
29
29
  ```bash
30
30
  pnpm install
31
- pnpm status # alias for `pa status` — boot-time sanity check
31
+ pnpm status # alias for `pa status`, a boot-time sanity check
32
32
  ```
33
33
 
34
34
  Then launch your PA via Claude Code in this repo; it reads `CLAUDE.md`
@@ -0,0 +1,13 @@
1
+ # {PA_NAME}
2
+
3
+ Personal assistant platform instance for {OPERATOR_NAME}. See `agents/{PA_NAME}/CLAUDE.md` for the full operating instructions. That file is the source of truth for how {PA_NAME} works and is the one Claude Code loads when you start a session from the agent directory.
4
+
5
+ ## Quick reference
6
+
7
+ - Work items: `work/w-YYYY-MM-DD-NNN.json`
8
+ - Projects: `projects/{id}/project.json`
9
+ - Operator content: `operator/`
10
+ - Agent run folder: `agents/{PA_NAME}/`
11
+ - Platform package: installed as an npm dependency (`@stravica-ai/digital-operator-pa`); invoke tooling via `pnpm exec <bin>` (`pa`, `desk`, `secrets`, `distill`, etc.)
12
+ - Workspace: `pnpm exec pa workspace start` then http://localhost:4200
13
+ - Onboarding guide: `node_modules/@stravica-ai/digital-operator-pa/docs/onboarding-solo.md`
@@ -1,9 +1,17 @@
1
- // @stravica-ai/engineering-pa-types-engineering — engineering-PA role pack.
1
+ // @stravica-ai/engineering-pa-types-engineering - engineering-PA role pack.
2
2
  //
3
- // Currently ships the product-engineer role and the `product-build`
4
- // slash-command doc. Additional engineering-PA roles (project-lead, generic
5
- // system-architect, generic web-developer) are planned for Phase 2.
3
+ // Ships:
4
+ // - product-engineer: prototypes, local apps, utilities on the estate's
5
+ // opinionated Docker + CI + node:test spine.
6
+ // - rcf-lite-engineer: shippable greenfield apps up to small commercial
7
+ // SaaS on the rcf-lite spec-and-build spine (see the knowledge/rcf-lite
8
+ // bucket for its link-led reference).
9
+ // - The `product-build` slash-command doc under docs/.
10
+ //
11
+ // Role sources live under roles/<role>/definition.md. A role.json is
12
+ // optional; both roles here ship definition.md only. The pack is copied
13
+ // verbatim into dist/engineering-pa-types-engineering/ by the packager.
6
14
 
7
15
  export const name = './';
8
- export const version = '0.1.1';
9
- export const roles = ['product-engineer'];
16
+ export const version = '0.2.0';
17
+ export const roles = ['product-engineer', 'rcf-lite-engineer'];
@@ -0,0 +1,81 @@
1
+ # Create a small app or service with rcf-lite from a fresh PA
2
+
3
+ The one local how-to allowed in this bucket. Every command below has been checked against `npx rcf --help` on the published rcf-lite (see `Verified against` at the bottom).
4
+
5
+ Prerequisites: Node.js 24 or newer; git; a Claude Code (or equivalent) harness set up in the shell.
6
+
7
+ ## The numbered sequence
8
+
9
+ 1. Make and enter the project directory.
10
+
11
+ ```sh
12
+ mkdir my-app && cd my-app
13
+ git init -q
14
+ ```
15
+
16
+ 2. Install `rcf-lite` per project (not global, so different apps can pin different versions).
17
+
18
+ ```sh
19
+ npm init -y
20
+ npm install rcf-lite
21
+ ```
22
+
23
+ 3. Scaffold the `rcf/` tree and wire the harness. `rcf init` writes the tree, registers the MCP server in `.mcp.json`, and drops the agent-instructions fragment into `CLAUDE.md` and `AGENTS.md`.
24
+
25
+ ```sh
26
+ npx rcf init --project-name my-app --non-interactive
27
+ ```
28
+
29
+ Interactive form (drop `--non-interactive`): the CLI prompts only for the project name.
30
+
31
+ 4. Confirm the wiring is healthy. `rcf doctor` diagnoses and repairs init-hygiene drift; run it any time the harness looks off.
32
+
33
+ ```sh
34
+ npx rcf doctor
35
+ ```
36
+
37
+ 5. Pick a blueprint from the shelf (the packaged shelf that ships with rcf-lite). Two examples the shelf carries by name:
38
+
39
+ ```sh
40
+ npx rcf define blueprint add deploy-cloudflare-workers
41
+ npx rcf define blueprint add application-spa
42
+ ```
43
+
44
+ List everything that has been applied so far, grouped by category:
45
+
46
+ ```sh
47
+ npx rcf define blueprint list
48
+ ```
49
+
50
+ 6. Enter the build loop.
51
+
52
+ ```sh
53
+ npx rcf build queue # what is scheduled next
54
+ npx rcf build bundle --next # spec bundle for the next FBS
55
+ # then implement the FBS in code, keeping the suite green
56
+ npx rcf build finalise <fbs-id> # ship gate for one FBS
57
+ ```
58
+
59
+ 7. Run the audit surface as the tree grows.
60
+
61
+ ```sh
62
+ npx rcf audit view # live HTML tree render (long-running)
63
+ npx rcf audit coverage # structural coverage over the REQ chain
64
+ npx rcf audit trace <id> # walk the graph forward, back, or both
65
+ ```
66
+
67
+ 8. When the candidate is ready, hand it back for the independent verifier. The RCF Lite Engineer never self-certifies as ship-ready; the orchestrator dispatches the verify session against the deployed runtime.
68
+
69
+ ```sh
70
+ npx rcf verify run # run the adversarial ship-gate verifier
71
+ ```
72
+
73
+ ## Verified against
74
+
75
+ - `rcf-lite@0.27.0` (`npm view rcf-lite version` at 2026-09-16). Commands above match the top-level groups (`define`, `build`, `verify`, `audit`) and the verbs (`init`, `doctor`, `define blueprint {add,list,remove}`, `build {queue,bundle,mark,finalise}`, `verify run`, `audit {view,coverage,trace}`) shown by `npx rcf --help` and `npx rcf help define blueprint`.
76
+ - Blueprint slugs `deploy-cloudflare-workers` and `application-spa` are the shelf resolvers documented by `rcf define blueprint add <source>` help (bare kebab slugs resolve to the packaged shelf).
77
+
78
+ ## See also
79
+
80
+ - Full CLI reference on the docs site: [https://stravica.ai/docs/rcf/reference/cli/](https://stravica.ai/docs/rcf/reference/cli/)
81
+ - Build-cycle playbook for the agent driving the loop: [https://stravica.ai/docs/rcf/for-agents/build-cycle-playbook/](https://stravica.ai/docs/rcf/for-agents/build-cycle-playbook/)
@@ -0,0 +1,25 @@
1
+ # rcf-lite for agents
2
+
3
+ The RCF Lite Engineer role definition (`../../roles/rcf-lite-engineer/definition.md`) is the operating spine. This doc is the pointer set into the agent-facing pages on the Stravica docs site; the docs are the current source of truth for method-level detail.
4
+
5
+ ## Playbooks
6
+
7
+ - **Build cycle playbook (the five-stage loop the RCF Lite Engineer runs):** [https://stravica.ai/docs/rcf/for-agents/build-cycle-playbook/](https://stravica.ai/docs/rcf/for-agents/build-cycle-playbook/)
8
+ - **Elicitation playbook (how to draw the PRD/REQ/US/AC content out of the operator):** [https://stravica.ai/docs/rcf/for-agents/elicitation-playbook/](https://stravica.ai/docs/rcf/for-agents/elicitation-playbook/)
9
+ - **Document model (what each RCF document is for and how it links):** [https://stravica.ai/docs/rcf/for-agents/document-model/](https://stravica.ai/docs/rcf/for-agents/document-model/)
10
+ - **Harness block (the fragment `rcf init` writes into `CLAUDE.md`/`AGENTS.md`):** [https://stravica.ai/docs/rcf/for-agents/harness-block/](https://stravica.ai/docs/rcf/for-agents/harness-block/)
11
+ - **MCP surface (the tool surface the agent gets when the harness is wired):** [https://stravica.ai/docs/rcf/for-agents/mcp-surface/](https://stravica.ai/docs/rcf/for-agents/mcp-surface/)
12
+ - **Persona programme (the failure classes that shaped the role's disciplines):** [https://stravica.ai/docs/rcf/for-agents/persona-programme/](https://stravica.ai/docs/rcf/for-agents/persona-programme/)
13
+
14
+ ## Deploy-target-first
15
+
16
+ The role's first discipline is naming the deploy target before locking a stack. See:
17
+
18
+ - **Cloudflare-first projects (the reference edge stack for rcf-lite):** [https://stravica.ai/docs/rcf/for-agents/cloudflare-first-projects/](https://stravica.ai/docs/rcf/for-agents/cloudflare-first-projects/)
19
+
20
+ ## How the pieces fit
21
+
22
+ - **The chain and the referee (what the tooling guarantees about the tree):** [https://stravica.ai/docs/rcf/how-it-works/the-chain/](https://stravica.ai/docs/rcf/how-it-works/the-chain/), [https://stravica.ai/docs/rcf/how-it-works/what-the-referee-guarantees/](https://stravica.ai/docs/rcf/how-it-works/what-the-referee-guarantees/)
23
+ - **The five-stage build cycle (define, design, build, test, review):** [https://stravica.ai/docs/rcf/how-it-works/the-five-stage-build-cycle/](https://stravica.ai/docs/rcf/how-it-works/the-five-stage-build-cycle/)
24
+ - **Coverage, trace, impact (the tree audit surface):** [https://stravica.ai/docs/rcf/how-it-works/coverage-trace-impact/](https://stravica.ai/docs/rcf/how-it-works/coverage-trace-impact/)
25
+ - **Blueprints as composition units:** [https://stravica.ai/docs/rcf/how-it-works/blueprints/](https://stravica.ai/docs/rcf/how-it-works/blueprints/)
@@ -0,0 +1,34 @@
1
+ # rcf-lite
2
+
3
+ rcf-lite is a lightweight spec-and-build spine for greenfield software. It gives an agent a Requirements Confidence Framework tree (PRD -> REQ -> US -> AC -> FBS) plus a green test suite that gates each build, without the ceremony of the full enterprise RCF chain. It is the tier the `rcf-lite-engineer` role builds on.
4
+
5
+ The role is chosen when the deliverable is a real shippable application (weekend utility up to small commercial SaaS) that needs a proper requirements-confidence spine, not a prototype or an internal script. If the task is a static site, a local utility, or a full enterprise product, pick a different role from the ladder.
6
+
7
+ ## Where to read next
8
+
9
+ - **Start here (product overview + status + release notes):** [https://stravica.ai/docs/rcf/](https://stravica.ai/docs/rcf/), [https://stravica.ai/docs/rcf/status/](https://stravica.ai/docs/rcf/status/), [https://stravica.ai/docs/rcf/changelog/](https://stravica.ai/docs/rcf/changelog/)
10
+ - **How it works (the chain, the five-stage build cycle, blueprints, coverage/trace/impact, what the referee guarantees):** [https://stravica.ai/docs/rcf/how-it-works/](https://stravica.ai/docs/rcf/how-it-works/)
11
+ - **Driving one as an operator (steering, reviewing the tree, handing over, when it goes wrong):** [https://stravica.ai/docs/rcf/driving/](https://stravica.ai/docs/rcf/driving/)
12
+ - **Guides (add rcf to an existing repo, close the loop without a deploy, kick the tyres by hand, wiring alternatives, the tree viewer):** [https://stravica.ai/docs/rcf/guides/](https://stravica.ai/docs/rcf/guides/)
13
+ - **For agents (the playbook the RCF Lite Engineer works from):** see the sibling doc `for-agents.md`.
14
+ - **Reference (CLI, document types, exit codes, blueprints shelf):** see the sibling doc `reference.md`.
15
+ - **Wiring an agent into a project (harness, MCP, `rcf init`):** see the sibling doc `wire-your-agent.md`.
16
+
17
+ The Stravica docs site is the current source of truth; the docs in this bucket are framing and pointers so the local knowledge stays in sync as the docs move.
18
+
19
+ ## When to reach for it
20
+
21
+ - Greenfield: no existing codebase to retrofit into.
22
+ - Small-to-mid ambition: from a weekend utility up to a small commercial SaaS. Anything multi-tenant, regulated, or contractually-audited is `rcf-engineer` territory, not this tier.
23
+ - The operator wants a real requirements spine and a green-gated build, not a code-first prototype.
24
+ - The output needs to be a candidate the operator can point an independent verifier at before shipping.
25
+
26
+ ## When not to
27
+
28
+ - A brownfield retrofit or an enterprise/full-RCF build. Escalate to the tier above.
29
+ - A single-file utility or a throwaway prototype. Escalate to `product-engineer` below.
30
+ - A static site or content-led marketing page. Escalate to `web-developer` below.
31
+
32
+ ## Local how-to
33
+
34
+ The one local how-to allowed in this bucket is `create-a-small-app.md`. Everything else links out to the docs site.
@@ -0,0 +1,16 @@
1
+ # rcf-lite reference
2
+
3
+ Reference pages on the Stravica docs site. The docs are the current source of truth for verb shapes, exit codes, and the packaged blueprint shelf; the local knowledge is deliberately link-led so it stays current as the docs move.
4
+
5
+ - **CLI reference (every `rcf` verb, options, examples):** [https://stravica.ai/docs/rcf/reference/cli/](https://stravica.ai/docs/rcf/reference/cli/)
6
+ - **CLI cheatsheet (the shortlist an operator or agent reaches for daily):** [https://stravica.ai/docs/rcf/reference/cli/cheatsheet/](https://stravica.ai/docs/rcf/reference/cli/cheatsheet/)
7
+ - **Document types (PRD, REQ, US, AC, FBS, TS, TAC, TC, ADR, FRAG):** [https://stravica.ai/docs/rcf/reference/document-types/](https://stravica.ai/docs/rcf/reference/document-types/)
8
+ - **Exit codes (what a non-zero exit from any `rcf` verb means):** [https://stravica.ai/docs/rcf/reference/exit-codes/](https://stravica.ai/docs/rcf/reference/exit-codes/)
9
+ - **Blueprints shelf (the composable building blocks that ship in the box):** [https://stravica.ai/docs/rcf/reference/blueprints/](https://stravica.ai/docs/rcf/reference/blueprints/)
10
+
11
+ ## Related surfaces
12
+
13
+ - **Add rcf to an existing repo (the guide, not a blueprint):** [https://stravica.ai/docs/rcf/guides/add-rcf-to-existing-repo/](https://stravica.ai/docs/rcf/guides/add-rcf-to-existing-repo/)
14
+ - **Close the loop without a deploy (running the cycle without a live target):** [https://stravica.ai/docs/rcf/guides/close-the-loop-without-a-deploy/](https://stravica.ai/docs/rcf/guides/close-the-loop-without-a-deploy/)
15
+ - **Kick the tyres by hand (a minimal manual walkthrough):** [https://stravica.ai/docs/rcf/guides/kick-the-tyres-by-hand/](https://stravica.ai/docs/rcf/guides/kick-the-tyres-by-hand/)
16
+ - **Using the tree viewer (the audit surface for a running project):** [https://stravica.ai/docs/rcf/guides/using-the-tree-viewer/](https://stravica.ai/docs/rcf/guides/using-the-tree-viewer/)
@@ -0,0 +1,17 @@
1
+ # Wire your agent into an rcf-lite project
2
+
3
+ `rcf init` scaffolds the `rcf/` tree, registers the MCP server in the project-root `.mcp.json`, and writes the agent-instructions fragment into `CLAUDE.md` and `AGENTS.md` (an existing file is refreshed in place). One command sets an agent up to work through the RCF chain.
4
+
5
+ The Stravica docs page for this walkthrough is the current source of truth:
6
+
7
+ - **Wire your agent:** [https://stravica.ai/docs/rcf/wire-your-agent/](https://stravica.ai/docs/rcf/wire-your-agent/)
8
+ - **Wiring alternatives (harness variants, non-Claude Code setups):** [https://stravica.ai/docs/rcf/guides/wiring-alternatives/](https://stravica.ai/docs/rcf/guides/wiring-alternatives/)
9
+ - **CLI reference for the wiring verbs (`rcf init`, `rcf doctor`):** [https://stravica.ai/docs/rcf/reference/cli/](https://stravica.ai/docs/rcf/reference/cli/)
10
+
11
+ ## What the PA does at wiring time
12
+
13
+ 1. Confirm the deploy target before touching the stack. Read `create-a-small-app.md` for the numbered sequence.
14
+ 2. Install `rcf-lite` per project (not global), so different apps can pin different versions.
15
+ 3. Run `rcf init` from the project root. Answer the interactive project-name prompt only; everything else seeds as placeholders for the agent to elicit.
16
+ 4. Confirm the harness is wired: the `.mcp.json` entry, the `CLAUDE.md`/`AGENTS.md` fragment, and the `rcf/` tree are all present.
17
+ 5. Re-run `rcf init` on an existing project when you want the wiring refreshed; it leaves the tree alone and rewrites the harness fragment.