@lifeaitools/rdc-skills 0.21.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rdc",
3
- "version": "0.21.0",
3
+ "version": "0.22.0",
4
4
  "description": "RDC typed-agent dispatch skill suite for Claude Code — plan, build, review, overnight unattended builds with work-item tracking and TDD enforcement.",
5
5
  "author": {
6
6
  "name": "LIFEAI",
@@ -53,7 +53,23 @@
53
53
  "flags": []
54
54
  },
55
55
  "requires": [],
56
- "produces": []
56
+ "produces": [],
57
+ "default_model": "inherit",
58
+ "triggers": [
59
+ "format this for linkedin",
60
+ "write a tweet",
61
+ "social media post",
62
+ "draft an email",
63
+ "make this a slide",
64
+ "format for slack",
65
+ "reformat this for"
66
+ ],
67
+ "follows": [],
68
+ "leads_to": [],
69
+ "sandbox_aware": true,
70
+ "output_contract": "guides/output-contract.md",
71
+ "enabled_default": true,
72
+ "codeflow_required": false
57
73
  },
58
74
  "brochure": {
59
75
  "name": "brochure",
package/git-sha.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "sha": "e772addf91d7db4eff73fb14b43977f1aa578c26"
2
+ "sha": "00a9e253509122dd9948e1e558756f8f317f1b20"
3
3
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifeaitools/rdc-skills",
3
- "version": "0.21.0",
3
+ "version": "0.22.0",
4
4
  "description": "RDC typed-agent dispatch skill suite for Claude Code - plan, build, review, overnight builds",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: rdc:channel-formatter
3
- description: "Usage `rdc:channel-formatter <channel> [content]` — Apply precise, channel-native formatting to any output: LinkedIn, Twitter/X, Slack/Teams, Email (external/internal), Pitch Deck slides, Word/DOCX, PDF Report, and Web/Landing Page. Use EVERY TIME the user names an output channel/platform/document type, or asks to 'write a post', 'draft an email', 'format this for', 'make this a slide', 'send to LinkedIn', 'write a tweet', 'social media post', or 'reformat this for [channel]'. Each channel has its own Unicode strategy, emphasis system, length limits, and structure — never apply generic markdown to channel-specific output. Self-contained: all channel rules are inlined below (no external reference files)."
3
+ description: "Usage `rdc:channel-formatter <channel> [content]` — Apply precise, channel-native formatting to any output: LinkedIn, Twitter/X, Slack/Teams, Email (external/internal), Pitch Deck slides, Word/DOCX, PDF Report, and Web/Landing Page. Use EVERY TIME the user names an output channel/platform/document type, or asks to 'write a post', 'draft an email', 'format this for', 'make this a slide', 'send to LinkedIn', 'write a tweet', 'social media post', or 'reformat this for [channel]'. Each channel has its own Unicode strategy, emphasis system, length limits, and structure — never apply generic markdown to channel-specific output. This skill FORMATS/STRUCTURES text only — for actual .docx/.pptx ↔ Markdown FILE conversion (either direction) use `rdc:convert` (build-corpus), not this skill. Self-contained: all channel rules are inlined below (no external reference files)."
4
4
  ---
5
5
 
6
6
  > **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
@@ -52,6 +52,15 @@ apply its rules exactly. Never apply generic markdown to a channel that doesn't
52
52
  - Always match the tone register of the channel (formal ≠ casual ≠ punchy).
53
53
  - For LIFEAI/PRT/RDC content, maintain REGEN-MODE voice unless Author-Mode is active.
54
54
 
55
+ > ## ⛔ Scope boundary — this skill FORMATS text; it does NOT convert files
56
+ > This skill governs **how to structure and format content** for a channel. It never
57
+ > reads or writes binary office files. For the actual **Word ↔ Markdown (and .pptx/.ppt)
58
+ > file conversion — in either direction — use `build-corpus` / the `rdc:convert` skill**,
59
+ > never this one. So: "convert this .docx to markdown" / "turn this markdown into a Word
60
+ > doc" → **`rdc:convert`**. "format this content the Word way / write it for LinkedIn" →
61
+ > this skill. The Word/DOCX and PDF sections below describe target structure only; producing
62
+ > the actual `.docx`/`.pdf` artifact is `rdc:convert` / `rdc:brochure`, not channel-formatter.
63
+
55
64
  ---
56
65
 
57
66
  ## § LinkedIn
@@ -232,6 +241,10 @@ Typography (for JSX/design): Headline 28-36pt bold · Bullets 18-22pt · Data la
232
241
 
233
242
  ## § Word / DOCX
234
243
 
244
+ > **This section = how to STRUCTURE Word content (Styles, hierarchy, tables).** To
245
+ > generate an actual `.docx` file, or convert `.docx ↔ .md`, hand off to **`rdc:convert`
246
+ > (build-corpus)** — channel-formatter does not produce or parse binary files.
247
+
235
248
  ### Core Principles
236
249
  - All formatting via **Word Styles** (never raw bold alone). Heading hierarchy is semantic (Heading 1/2/3, not font size). Tables use Word Table Styles, not markdown. Equations via Equation Editor (OMML). Explicit page structure (section breaks, headers/footers, page numbers).
237
250
 
@@ -160,12 +160,25 @@ Write to `.rdc/reports/YYYY-MM-DD-housekeeping.md`:
160
160
 
161
161
  ## Lessons triage (weekly)
162
162
 
163
- Read all `.rdc/lessons/*.md` with `status: open` (schema + procedure: `.rdc/guides/lessons-learned-spec.md` § Triage procedure). Cluster by `area` + root-cause similarity (dedupe repeats into one fix). For each cluster:
163
+ Read all `.rdc/lessons/*.md` with `status: open` (schema + procedure: `.rdc/guides/lessons-learned-spec.md` § Triage procedure). Cluster by `area` + root-cause similarity (dedupe repeats into one fix).
164
+
165
+ ### Attended mode (default — a human is present)
166
+
167
+ For each cluster:
164
168
 
165
169
  - `scope: simple` → apply the fix directly (rule line, skill-doc edit, config, guard), commit it, set the lesson(s) `status: applied` with the commit linked.
166
170
  - `scope: architectural` → do NOT edit. Present the issue + options via `AskUserQuestion` (per `.claude/rules/architectural-change-approval.md`). On approval, apply via the correct lifecycle (rdc-skills tag/push for skills; cited commit for rules) and set `status: applied`. If deferred, set `status: triaged` and spawn a `work_item`.
167
171
  - Not worth fixing → `status: wont-fix` with a one-line reason.
168
172
 
173
+ ### Unattended mode (no human — overnight / cron / `rdc:overnight`)
174
+
175
+ When the weekly triage runs unattended, follow `.rdc/guides/lessons-learned-spec.md` § **Triage procedure — UNATTENDED weekly mode** — do not run `AskUserQuestion`. In brief (the spec is authoritative):
176
+
177
+ - **Per-difficulty model routing** (reuses the `rdc:build` table): the run is led by `claude-opus-4-8` for clustering + scope/difficulty triage; mechanical apply → `claude-sonnet-4-6`; harder multi-file/migration fix → `claude-opus-4-6`; design/architectural fix → `claude-opus-4-8`.
178
+ - `scope: simple` → apply directly or via `rdc:fixit`, commit, `status: applied`.
179
+ - `scope: architectural` with a single clear correct fix (records an already-learned lesson — e.g. "document X", "add a gate", update a guide) → route through `rdc:plan` → `rdc:build` (or `rdc:fixit` if genuinely <5 files), update the documentation, set `status: applied`/`triaged`.
180
+ - `scope: architectural` **and genuinely ambiguous** (multiple valid approaches, real tradeoffs) → write a `human_items` row (`item_type='decision'`, with options in `suggested_agent_prompt`, `source_type='lesson'`, `source_fingerprint` for dedupe), set `status: triaged`, spawn + link a `work_item`. Decided in the morning. This is the asynchronous equivalent of the attended interview and honors `.claude/rules/architectural-change-approval.md`.
181
+
169
182
  Never delete lesson files — `applied` and `wont-fix` stay as the audit trail. Report captured / applied / escalated / deferred counts in the housekeeping report.
170
183
 
171
184
  ## Rules
@@ -0,0 +1,107 @@
1
+ ---
2
+ description: "Generated RPMS file map — RULE #1, canonical homes, and Context Export pointers served from regen-root manifest."
3
+ slash: "rdc:rpms-filemap"
4
+ category: "tooling"
5
+ usage: "rdc:rpms-filemap"
6
+ requires: []
7
+ triggers:
8
+ - "rpms file map"
9
+ - "rule #1"
10
+ - "context export"
11
+ - "where does this file belong"
12
+ - "where should pm artifacts go"
13
+ ---
14
+ # RPMS File Map
15
+ > GENERATED FILE - DO NOT HAND-EDIT.
16
+ > Source of truth: `docs/architecture/rpms.locations.json`
17
+ > Regenerate: `pnpm rpms:gen-filemap`
18
+
19
+ ## RULE #1
20
+
21
+ **Name the entity -> read its `_context.md` -> you are oriented.**
22
+
23
+ The operational door is pinned in `docs/architecture/CONTEXT-EXPORT.md` and in RPMS section 8.1.
24
+ If you are touching an entity, read its generated `_context.md` before any local reasoning, and never hand-edit that projection.
25
+
26
+ ## Pointers
27
+
28
+ - RPMS section 6a: Asset lens and branch-store split
29
+ - RPMS section 6b: Corpus disk layout
30
+ - RPMS section 8.1: Session-start ritual and locked-decision read order
31
+
32
+ ## Canonical Map
33
+
34
+ ### Canonical Sources
35
+
36
+ | Artifact | Home | RW | Law | Enforcement | Owner | Status |
37
+ |----------|------|----|-----|-------------|-------|--------|
38
+ | `canon.rpms.architecture` | `docs/architecture/regenerative-project-management-system.md` | `read_only` | One Home Per Fact, One Door | `block_wrong_home`<br />`path_conformance` | docs/architecture/regenerative-project-management-system.md | `active` |
39
+ | `canon.context-export.single-door` | `docs/architecture/CONTEXT-EXPORT.md` | `read_only` | One Direction, One Door | `block_wrong_home`<br />`path_conformance` | docs/architecture/CONTEXT-EXPORT.md | `active` |
40
+
41
+ ### Session Start
42
+
43
+ | Artifact | Home | RW | Law | Enforcement | Owner | Status |
44
+ |----------|------|----|-----|-------------|-------|--------|
45
+ | `session-start.claude-ai.root` | `CLAUDE.ai.md` | `read_only` | One Door | `block_wrong_home`<br />`path_conformance` | repo-root | `active` |
46
+ | `session-start.claude.root` | `CLAUDE.md` | `read_only` | One Door | `block_wrong_home`<br />`path_conformance` | repo-root | `active` |
47
+ | `session-start.decision.spine-lock` | `.rdc/plans/project-relationship-graph-approval.md` | `read_only` | One Spine, One Door | `block_wrong_home`<br />`path_conformance` | .rdc/plans/project-relationship-graph-approval.md | `active` |
48
+ | `session-start.decision.cs2-lock` | `.rdc/plans/mdk-knowledge-decisions-and-workitems-2026-06-02.md` | `read_only` | One Direction, One Door | `block_wrong_home`<br />`path_conformance` | .rdc/plans/mdk-knowledge-decisions-and-workitems-2026-06-02.md | `active` |
49
+ | `session-start.glossary.layer-model` | `docs/systems/cs2/LAYER-MODEL-AND-VOCABULARY.md` | `read_only` | One Door | `block_wrong_home`<br />`path_conformance` | docs/systems/cs2/LAYER-MODEL-AND-VOCABULARY.md | `active` |
50
+
51
+ ### Database Gates
52
+
53
+ | Artifact | Home | RW | Law | Enforcement | Owner | Status |
54
+ |----------|------|----|-----|-------------|-------|--------|
55
+ | `session-start.work-items.queue` | `table:work_items via rpc:get_open_epics` | `rpc_only` | One Home Per Fact, One Door | `rpc_only`<br />`rpc_contract`<br />CRUD stays behind insert_work_item/update_work_item_status/update_checklist_item/submit_implementation_report. | public.work_items + RPC gate | `active` |
56
+
57
+ ### Place Corpus
58
+
59
+ | Artifact | Home | RW | Law | Enforcement | Owner | Status |
60
+ |----------|------|----|-----|-------------|-------|--------|
61
+ | `session-start.entity-context.place` | `places/*/_context.md`<br />created_by: `apps/studio/src/lib/context-export-writer.ts` | `generated` | One Direction, One Door | `block_manual_edit`<br />`projection_drift` | context-export writer | `active` |
62
+ | `place.identity.place-md` | `places/*/PLACE.md` | `authored` | One Home Per Fact, One Door | `allow_declared_home`<br />`path_conformance` | place stewards | `active` |
63
+ | `place.history.history-md` | `places/*/HISTORY.md` | `append_only` | One Direction, One Home Per Fact | `allow_declared_home`<br />`path_conformance` | place stewards | `active` |
64
+ | `place.corpus.index` | `places/*/corpus/INDEX.md` | `authored` | One Home Per Fact, One Door | `allow_declared_home`<br />`path_conformance` | place corpus | `active` |
65
+ | `place.corpus.documents` | `places/*/corpus/**` | `authored` | One Home Per Fact | `block_binary_commit`<br />`binary_ban`<br />Text and markdown live here; binaries route to branch stores. | place corpus | `active` |
66
+ | `place.artifacts.outputs` | `places/*/artifacts/**` | `generated` | One Direction | `allow_declared_home`<br />`path_conformance` | render pipelines | `active` |
67
+ | `place.legacy.asset-bundles` | `places/*/*.assets/**` | `legacy_frozen` | One Direction, One Home Per Fact | `block_manual_edit`<br />`path_conformance`<br />Bridge-state allowlist for current repo reality; no new writes here. | legacy bridge until asset-lens migration | `active` |
68
+ | `place.tracker.pm-docs` | `places/*/tracker/**` | `authored` | One Home Per Fact | `block_binary_commit`<br />`binary_ban` | place operators | `active` |
69
+
70
+ ### Shared Corpus
71
+
72
+ | Artifact | Home | RW | Law | Enforcement | Owner | Status |
73
+ |----------|------|----|-----|-------------|-------|--------|
74
+ | `session-start.entity-context.project-node` | `corpus/_shared/*/_context.md`<br />created_by: `apps/studio/src/lib/context-export-writer.ts` | `generated` | One Direction, One Door | `block_manual_edit`<br />`projection_drift` | context-export writer | `active` |
75
+ | `shared.index` | `corpus/_shared/*/INDEX.md` | `authored` | One Home Per Fact, One Door | `allow_declared_home`<br />`path_conformance` | shared corpus | `active` |
76
+ | `shared.framework.documents` | `corpus/_shared/*/framework/**` | `authored` | One Home Per Fact | `block_binary_commit`<br />`binary_ban` | shared corpus | `active` |
77
+ | `shared.research.documents` | `corpus/_shared/*/research/**` | `authored` | One Home Per Fact | `block_binary_commit`<br />`binary_ban` | shared corpus | `active` |
78
+ | `shared.legacy.design-assets` | `corpus/_shared/*/design/**/assets/**` | `legacy_frozen` | One Direction, One Home Per Fact | `block_manual_edit`<br />`path_conformance`<br />Bridge-state allowlist for current repo reality; no new writes here. | legacy bridge until asset-lens migration | `active` |
79
+ | `shared.corpus.documents` | `corpus/_shared/` | `authored` | One Home Per Fact | `block_binary_commit`<br />`binary_ban`<br />Generated _context.md remains separately governed by projection drift. | shared corpus | `active` |
80
+
81
+ ### Asset Lens
82
+
83
+ | Artifact | Home | RW | Law | Enforcement | Owner | Status |
84
+ |----------|------|----|-----|-------------|-------|--------|
85
+ | `asset-lens.entity-assets.registry` | `table:entity_assets` | `deferred` | One Spine, One Home Per Fact | `deferred`<br />`deferred`<br />Manifest records the canonical home now; implementation remains deferred per plan section 6a E7. | RPMS E7 | `deferred` |
86
+
87
+ ### Operational Door
88
+
89
+ | Artifact | Home | RW | Law | Enforcement | Owner | Status |
90
+ |----------|------|----|-----|-------------|-------|--------|
91
+ | `operational-door.rdc.plans` | `.rdc/plans/**` | `authored` | One Home Per Fact, One Direction | `allow_declared_home`<br />`path_conformance` | RDC planning workflow | `active` |
92
+ | `operational-door.rdc.reports` | `.rdc/reports/**` | `generated` | One Direction | `allow_declared_home`<br />`path_conformance` | rdc:report | `active` |
93
+ | `operational-door.rdc.lessons` | `.rdc/lessons/**` | `append_only` | One Direction, One Home Per Fact | `allow_declared_home`<br />`path_conformance` | RDC lesson capture workflow | `active` |
94
+ | `operational-door.rpms-filemap.rule` | `.claude/rules/rpms-filemap.md`<br />created_by: `scripts/rpms/gen-filemap.ts` | `generated` | One Home Per Fact, One Direction, One Door | `block_manual_edit`<br />`projection_drift` | scripts/rpms/gen-filemap.ts | `active` |
95
+
96
+ ### App Guides
97
+
98
+ | Artifact | Home | RW | Law | Enforcement | Owner | Status |
99
+ |----------|------|----|-----|-------------|-------|--------|
100
+ | `session-start.app-guide` | `apps/*/CLAUDE.md` | `read_only` | One Door | `block_wrong_home`<br />`path_conformance` | app-local architecture guides | `active` |
101
+
102
+ ## Projection Contract
103
+
104
+ - Generated projections (`_context.md`, this rule) are never hand-edited.
105
+ - Authored markdown stays in its declared home; do not create second homes elsewhere.
106
+ - `work_items` stays RPC-only even when the location is documented here.
107
+ - Corpus homes are text-first; binaries route to branch stores, not git under `places/` or `corpus/`.
@@ -0,0 +1,107 @@
1
+ ---
2
+ description: "Generated RPMS file map — RULE #1, canonical homes, and Context Export pointers served from regen-root manifest."
3
+ slash: "rdc:rpms-filemap"
4
+ category: "tooling"
5
+ usage: "rdc:rpms-filemap"
6
+ requires: []
7
+ triggers:
8
+ - "rpms file map"
9
+ - "rule #1"
10
+ - "context export"
11
+ - "where does this file belong"
12
+ - "where should pm artifacts go"
13
+ ---
14
+ # RPMS File Map
15
+ > GENERATED FILE - DO NOT HAND-EDIT.
16
+ > Source of truth: `docs/architecture/rpms.locations.json`
17
+ > Regenerate: `pnpm rpms:gen-filemap`
18
+
19
+ ## RULE #1
20
+
21
+ **Name the entity -> read its `_context.md` -> you are oriented.**
22
+
23
+ The operational door is pinned in `docs/architecture/CONTEXT-EXPORT.md` and in RPMS section 8.1.
24
+ If you are touching an entity, read its generated `_context.md` before any local reasoning, and never hand-edit that projection.
25
+
26
+ ## Pointers
27
+
28
+ - RPMS section 6a: Asset lens and branch-store split
29
+ - RPMS section 6b: Corpus disk layout
30
+ - RPMS section 8.1: Session-start ritual and locked-decision read order
31
+
32
+ ## Canonical Map
33
+
34
+ ### Canonical Sources
35
+
36
+ | Artifact | Home | RW | Law | Enforcement | Owner | Status |
37
+ |----------|------|----|-----|-------------|-------|--------|
38
+ | `canon.rpms.architecture` | `docs/architecture/regenerative-project-management-system.md` | `read_only` | One Home Per Fact, One Door | `block_wrong_home`<br />`path_conformance` | docs/architecture/regenerative-project-management-system.md | `active` |
39
+ | `canon.context-export.single-door` | `docs/architecture/CONTEXT-EXPORT.md` | `read_only` | One Direction, One Door | `block_wrong_home`<br />`path_conformance` | docs/architecture/CONTEXT-EXPORT.md | `active` |
40
+
41
+ ### Session Start
42
+
43
+ | Artifact | Home | RW | Law | Enforcement | Owner | Status |
44
+ |----------|------|----|-----|-------------|-------|--------|
45
+ | `session-start.claude-ai.root` | `CLAUDE.ai.md` | `read_only` | One Door | `block_wrong_home`<br />`path_conformance` | repo-root | `active` |
46
+ | `session-start.claude.root` | `CLAUDE.md` | `read_only` | One Door | `block_wrong_home`<br />`path_conformance` | repo-root | `active` |
47
+ | `session-start.decision.spine-lock` | `.rdc/plans/project-relationship-graph-approval.md` | `read_only` | One Spine, One Door | `block_wrong_home`<br />`path_conformance` | .rdc/plans/project-relationship-graph-approval.md | `active` |
48
+ | `session-start.decision.cs2-lock` | `.rdc/plans/mdk-knowledge-decisions-and-workitems-2026-06-02.md` | `read_only` | One Direction, One Door | `block_wrong_home`<br />`path_conformance` | .rdc/plans/mdk-knowledge-decisions-and-workitems-2026-06-02.md | `active` |
49
+ | `session-start.glossary.layer-model` | `docs/systems/cs2/LAYER-MODEL-AND-VOCABULARY.md` | `read_only` | One Door | `block_wrong_home`<br />`path_conformance` | docs/systems/cs2/LAYER-MODEL-AND-VOCABULARY.md | `active` |
50
+
51
+ ### Database Gates
52
+
53
+ | Artifact | Home | RW | Law | Enforcement | Owner | Status |
54
+ |----------|------|----|-----|-------------|-------|--------|
55
+ | `session-start.work-items.queue` | `table:work_items via rpc:get_open_epics` | `rpc_only` | One Home Per Fact, One Door | `rpc_only`<br />`rpc_contract`<br />CRUD stays behind insert_work_item/update_work_item_status/update_checklist_item/submit_implementation_report. | public.work_items + RPC gate | `active` |
56
+
57
+ ### Place Corpus
58
+
59
+ | Artifact | Home | RW | Law | Enforcement | Owner | Status |
60
+ |----------|------|----|-----|-------------|-------|--------|
61
+ | `session-start.entity-context.place` | `places/*/_context.md`<br />created_by: `apps/studio/src/lib/context-export-writer.ts` | `generated` | One Direction, One Door | `block_manual_edit`<br />`projection_drift` | context-export writer | `active` |
62
+ | `place.identity.place-md` | `places/*/PLACE.md` | `authored` | One Home Per Fact, One Door | `allow_declared_home`<br />`path_conformance` | place stewards | `active` |
63
+ | `place.history.history-md` | `places/*/HISTORY.md` | `append_only` | One Direction, One Home Per Fact | `allow_declared_home`<br />`path_conformance` | place stewards | `active` |
64
+ | `place.corpus.index` | `places/*/corpus/INDEX.md` | `authored` | One Home Per Fact, One Door | `allow_declared_home`<br />`path_conformance` | place corpus | `active` |
65
+ | `place.corpus.documents` | `places/*/corpus/**` | `authored` | One Home Per Fact | `block_binary_commit`<br />`binary_ban`<br />Text and markdown live here; binaries route to branch stores. | place corpus | `active` |
66
+ | `place.artifacts.outputs` | `places/*/artifacts/**` | `generated` | One Direction | `allow_declared_home`<br />`path_conformance` | render pipelines | `active` |
67
+ | `place.legacy.asset-bundles` | `places/*/*.assets/**` | `legacy_frozen` | One Direction, One Home Per Fact | `block_manual_edit`<br />`path_conformance`<br />Bridge-state allowlist for current repo reality; no new writes here. | legacy bridge until asset-lens migration | `active` |
68
+ | `place.tracker.pm-docs` | `places/*/tracker/**` | `authored` | One Home Per Fact | `block_binary_commit`<br />`binary_ban` | place operators | `active` |
69
+
70
+ ### Shared Corpus
71
+
72
+ | Artifact | Home | RW | Law | Enforcement | Owner | Status |
73
+ |----------|------|----|-----|-------------|-------|--------|
74
+ | `session-start.entity-context.project-node` | `corpus/_shared/*/_context.md`<br />created_by: `apps/studio/src/lib/context-export-writer.ts` | `generated` | One Direction, One Door | `block_manual_edit`<br />`projection_drift` | context-export writer | `active` |
75
+ | `shared.index` | `corpus/_shared/*/INDEX.md` | `authored` | One Home Per Fact, One Door | `allow_declared_home`<br />`path_conformance` | shared corpus | `active` |
76
+ | `shared.framework.documents` | `corpus/_shared/*/framework/**` | `authored` | One Home Per Fact | `block_binary_commit`<br />`binary_ban` | shared corpus | `active` |
77
+ | `shared.research.documents` | `corpus/_shared/*/research/**` | `authored` | One Home Per Fact | `block_binary_commit`<br />`binary_ban` | shared corpus | `active` |
78
+ | `shared.legacy.design-assets` | `corpus/_shared/*/design/**/assets/**` | `legacy_frozen` | One Direction, One Home Per Fact | `block_manual_edit`<br />`path_conformance`<br />Bridge-state allowlist for current repo reality; no new writes here. | legacy bridge until asset-lens migration | `active` |
79
+ | `shared.corpus.documents` | `corpus/_shared/` | `authored` | One Home Per Fact | `block_binary_commit`<br />`binary_ban`<br />Generated _context.md remains separately governed by projection drift. | shared corpus | `active` |
80
+
81
+ ### Asset Lens
82
+
83
+ | Artifact | Home | RW | Law | Enforcement | Owner | Status |
84
+ |----------|------|----|-----|-------------|-------|--------|
85
+ | `asset-lens.entity-assets.registry` | `table:entity_assets` | `deferred` | One Spine, One Home Per Fact | `deferred`<br />`deferred`<br />Manifest records the canonical home now; implementation remains deferred per plan section 6a E7. | RPMS E7 | `deferred` |
86
+
87
+ ### Operational Door
88
+
89
+ | Artifact | Home | RW | Law | Enforcement | Owner | Status |
90
+ |----------|------|----|-----|-------------|-------|--------|
91
+ | `operational-door.rdc.plans` | `.rdc/plans/**` | `authored` | One Home Per Fact, One Direction | `allow_declared_home`<br />`path_conformance` | RDC planning workflow | `active` |
92
+ | `operational-door.rdc.reports` | `.rdc/reports/**` | `generated` | One Direction | `allow_declared_home`<br />`path_conformance` | rdc:report | `active` |
93
+ | `operational-door.rdc.lessons` | `.rdc/lessons/**` | `append_only` | One Direction, One Home Per Fact | `allow_declared_home`<br />`path_conformance` | RDC lesson capture workflow | `active` |
94
+ | `operational-door.rpms-filemap.rule` | `.claude/rules/rpms-filemap.md`<br />created_by: `scripts/rpms/gen-filemap.ts` | `generated` | One Home Per Fact, One Direction, One Door | `block_manual_edit`<br />`projection_drift` | scripts/rpms/gen-filemap.ts | `active` |
95
+
96
+ ### App Guides
97
+
98
+ | Artifact | Home | RW | Law | Enforcement | Owner | Status |
99
+ |----------|------|----|-----|-------------|-------|--------|
100
+ | `session-start.app-guide` | `apps/*/CLAUDE.md` | `read_only` | One Door | `block_wrong_home`<br />`path_conformance` | app-local architecture guides | `active` |
101
+
102
+ ## Projection Contract
103
+
104
+ - Generated projections (`_context.md`, this rule) are never hand-edited.
105
+ - Authored markdown stays in its declared home; do not create second homes elsewhere.
106
+ - `work_items` stays RPC-only even when the location is documented here.
107
+ - Corpus homes are text-first; binaries route to branch stores, not git under `places/` or `corpus/`.