Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
19 changes: 10 additions & 9 deletions .github/pull_request_template.md
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
## Canonical change Artifact
## Canonical change bundle

Link the canonical `docs/sdlc/changes/<date>-<slug>/change.md`:
Link the canonical `docs/sdlc/changes/<date>-<slug>/` bundle:

- Change: <!-- docs/sdlc/changes/... -->
- Schema: <!-- 2 -->
- Lifecycle status: <!-- executing / failed / verified / ready-to-release / released / closed -->
- Intent/Spec approval: <!-- named approver plus user request, issue, ADR, or design source -->
- Risk and scope: <!-- low / medium / high / critical; exact files or directory prefixes -->
- Bundle: <!-- docs/sdlc/changes/... -->
- Schema: <!-- 3 -->
- Intent approval: <!-- named approver + source -->
- Spec approval: <!-- named approver -->
- Plan approval: <!-- named approver + scope summary -->
- Verification status: <!-- draft / passed / failed -->

## Outcome

Describe the observable product or repository result, not the implementation diary.

## Verification

- [ ] Every `AC-N` acceptance criterion is mapped to one actual command or linked evidence item.
- [ ] The Artifact records `Verdict:` and `Residual risk:` consistently with its status.
- [ ] Every `AC-N` acceptance criterion is mapped to one actual command or linked evidence item in `verification.md`.
- [ ] `verification.md` records `Verdict:` and residual risk consistently with its status.
- [ ] Verification mode, verifier, and date match the risk lane; high/critical verification is independent.
- [ ] Relevant Rust, desktop, documentation, packaging, or runtime checks passed.
- [ ] User-visible UI changes include real light, dark, and narrow evidence where applicable.
Expand Down
11 changes: 9 additions & 2 deletions AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,6 +8,11 @@ checkout.

[`docs/sdlc/workflow.md`](docs/sdlc/workflow.md) is the single source of truth for material change
Artifacts, lifecycle states, Gates, verification evidence, release handoff, Incidents, and Evals.
Use [`docs/sdlc/development-workflow.md`](docs/sdlc/development-workflow.md) and
[`./script/devflow`](script/devflow) for daily change creation, approval recording, and validation.
Install the external [`sdlc-skill`](https://github.com/IchenDEV/sdlc-skill) `ai-native-sdlc` skill
when Bootstrap, audit, or incident-to-improvement guidance is needed; the repository checker remains
the enforcement source.

- A direct user implementation request may approve Intent. Record its source, constraints, named
approver, and observable acceptance in one change Artifact, then move it to `executing` before
Expand All@@ -19,8 +24,10 @@ Artifacts, lifecycle states, Gates, verification evidence, release handoff, Inci
always run `bun script/verify/docs.ts`, `bun script/verify/sdlc.ts`, and
`bun script/verify/sdlc.ts --worktree`. A PR that
changes repository files must change or add a schema-2 canonical
`docs/sdlc/changes/<date>-<slug>/change.md`; implementation differences require that Artifact to
be `executing` or later and every changed path to fall under its explicit scope.
`docs/sdlc/changes/<date>-<slug>/` with schema-3 stage files (`intent.md`, `spec.md`,
`plan.md`, `verification.md`); implementation differences require that bundle's
`intent.md`, `spec.md`, and `plan.md` to be `accepted` and every changed path to fall under its
explicit `plan.md` scope.
- Do not create `docs/superpowers`, a parallel specs/plans tree, or another lifecycle registry.
- Every file under `docs/` must match exactly one rule in `docs/catalog.json`; dated research and
completed plans belong under `docs/archive/`, and every documentation image must be referenced.
Expand Down
2 changes: 1 addition & 1 deletion docs/README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ The top level is organized by purpose. Start with the directory that matches the
| [`design/`](design/README.md) | Current design system plus accepted future product designs |
| [`adr/`](adr/0001-scenes-v2-dynamic-task-orchestration.md) | Accepted architecture decisions |
| [`screenshots/`](screenshots/README.md) | Images used by the README and published documentation |
| [`sdlc/`](sdlc/workflow.md) | Development workflow, change records, templates, and Evals |
| [`sdlc/`](sdlc/workflow.md) | Development workflow, change records, templates, Evals, and [`development-workflow.md`](sdlc/development-workflow.md) operator guide |
| [`archive/`](archive/README.md) | Historical research, completed plans, and old visual evidence |

The public user guide lives under [`../website`](../website/). Archived material is non-normative
Expand Down
27 changes: 23 additions & 4 deletions docs/catalog.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,16 +50,35 @@
"authority": "current",
"paths": [
"docs/sdlc/workflow.md",
"docs/sdlc/templates/change.md",
"docs/sdlc/development-workflow.md",
"docs/sdlc/references/artifact-contracts.md",
"docs/sdlc/templates/intent.md",
"docs/sdlc/templates/spec.md",
"docs/sdlc/templates/plan.md",
"docs/sdlc/templates/verification.md",
"docs/sdlc/templates/eval.md",
"docs/sdlc/templates/incident.md",
"docs/sdlc/evals/ai-native-sdlc-gates.md"
"docs/sdlc/templates/incident.md"
]
},
{
"classification": "incident-record-flat",
"authority": "historical-state",
"pattern": "^docs/sdlc/incidents/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\\.md$"
},
{
"classification": "eval-record",
"authority": "historical-state",
"pattern": "^docs/sdlc/evals/[a-z0-9-]+\\.md$"
},
{
"classification": "change-record",
"authority": "historical-state",
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*/change\\.md$"
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\/intent\\.md$"
},
{
"classification": "change-stage",
"authority": "historical-state",
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\/(spec|plan|verification)\\.md$"
},
{
"classification": "change-evidence",
Expand Down
95 changes: 0 additions & 95 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/change.md

This file was deleted.

51 changes: 51 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/intent.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: intent
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
source: #intent
risk: low
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Intent: Plugin hot reload and developer tools

## Problem

Plugin authors needed an opt-in way to reload an installed Bundle while developing it without
restarting C2 or disturbing unrelated plugin runtimes. The original source artifacts were the
retired `docs/superpowers/specs` and `docs/superpowers/plans` files preserved in Git history at
commits `59ed917` and `289e6f0`.

## Proposed outcome

Plugin authors needed an opt-in way to reload an installed Bundle while developing it without

## Affected users and systems

Migrated from legacy change.md.

## Constraints

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.

## Out of scope

Not recorded in the legacy single-file Artifact.

## Success signals

See Spec acceptance criteria.

## Open questions

None recorded in migration.

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
51 changes: 51 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/plan.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: plan
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
based_on: spec.md
risk: low
scope: crates/plugins, apps/desktop, docs/reference/plugins.md
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Plan: Plugin hot reload and developer tools

## Files and ownership

crates/plugins, apps/desktop, docs/reference/plugins.md

## Order of work

The implementation was split across targeted runtime reload, watcher/commands, desktop event and
bridge wiring, Developer settings, documentation, and focused Rust/Bun verification.

## Test-first proof

See legacy Verification section.

## Visual or integration proof

See legacy Verification section.

## Risks and mitigations

See legacy Decision and gates.

## Rollback

See legacy Review and release.

## Deviations

Implementation commit `dc177195221760f56b7ce6ddfc57708ea862c6ac` added the feature. Later Core
boundary refactors moved shared composition to `crates/plugins` without introducing a second
plugin-development path. Current behavior is documented in [`docs/reference/plugins.md`](../../../reference/plugins.md#developing-an-installed-bundle).

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
54 changes: 54 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/spec.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: spec
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
based_on: intent.md
risk: low
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Spec: Plugin hot reload and developer tools

## Requirements

The accepted design required a persisted global developer-mode switch, a native watcher over the
installed Bundle directory, debounced reload of only affected Bundle runtimes, explicit status and
manual reload commands, and a quiet accessible Developer settings surface. Native Rust plugins
remain on the rebuild-and-restart path.

## User experience

Not separately recorded in legacy change.md.

## Technical design

See Requirements and legacy Git history.

## Security and privacy

See migrated Decision and gates.

## Alternatives and non-goals

Not separately recorded in legacy change.md.

## Areas of concern

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.

## Acceptance criteria

- [x] AC-1: Targeted reload replaces the affected Bundle runtime without replacing an unrelated runtime.
- [x] AC-2: Developer mode persists, starts/stops watching, and leaves manual reload available.
- [x] AC-3: Desktop bridge and settings expose status, reload, error, and WebView DevTools behavior.
- [x] AC-4: The installed-directory and native-plugin boundaries are documented.

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
19 changes: 10 additions & 9 deletions .github/pull_request_template.md
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
## Canonical change Artifact
## Canonical change bundle

Link the canonical `docs/sdlc/changes/<date>-<slug>/change.md`:
Link the canonical `docs/sdlc/changes/<date>-<slug>/` bundle:

- Change: <!-- docs/sdlc/changes/... -->
- Schema: <!-- 2 -->
- Lifecycle status: <!-- executing / failed / verified / ready-to-release / released / closed -->
- Intent/Spec approval: <!-- named approver plus user request, issue, ADR, or design source -->
- Risk and scope: <!-- low / medium / high / critical; exact files or directory prefixes -->
- Bundle: <!-- docs/sdlc/changes/... -->
- Schema: <!-- 3 -->
- Intent approval: <!-- named approver + source -->
- Spec approval: <!-- named approver -->
- Plan approval: <!-- named approver + scope summary -->
- Verification status: <!-- draft / passed / failed -->

## Outcome

Describe the observable product or repository result, not the implementation diary.

## Verification

- [ ] Every `AC-N` acceptance criterion is mapped to one actual command or linked evidence item.
- [ ] The Artifact records `Verdict:` and `Residual risk:` consistently with its status.
- [ ] Every `AC-N` acceptance criterion is mapped to one actual command or linked evidence item in `verification.md`.
- [ ] `verification.md` records `Verdict:` and residual risk consistently with its status.
- [ ] Verification mode, verifier, and date match the risk lane; high/critical verification is independent.
- [ ] Relevant Rust, desktop, documentation, packaging, or runtime checks passed.
- [ ] User-visible UI changes include real light, dark, and narrow evidence where applicable.
Expand Down
11 changes: 9 additions & 2 deletions AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,6 +8,11 @@ checkout.

[`docs/sdlc/workflow.md`](docs/sdlc/workflow.md) is the single source of truth for material change
Artifacts, lifecycle states, Gates, verification evidence, release handoff, Incidents, and Evals.
Use [`docs/sdlc/development-workflow.md`](docs/sdlc/development-workflow.md) and
[`./script/devflow`](script/devflow) for daily change creation, approval recording, and validation.
Install the external [`sdlc-skill`](https://github.com/IchenDEV/sdlc-skill) `ai-native-sdlc` skill
when Bootstrap, audit, or incident-to-improvement guidance is needed; the repository checker remains
the enforcement source.

- A direct user implementation request may approve Intent. Record its source, constraints, named
approver, and observable acceptance in one change Artifact, then move it to `executing` before
Expand All@@ -19,8 +24,10 @@ Artifacts, lifecycle states, Gates, verification evidence, release handoff, Inci
always run `bun script/verify/docs.ts`, `bun script/verify/sdlc.ts`, and
`bun script/verify/sdlc.ts --worktree`. A PR that
changes repository files must change or add a schema-2 canonical
`docs/sdlc/changes/<date>-<slug>/change.md`; implementation differences require that Artifact to
be `executing` or later and every changed path to fall under its explicit scope.
`docs/sdlc/changes/<date>-<slug>/` with schema-3 stage files (`intent.md`, `spec.md`,
`plan.md`, `verification.md`); implementation differences require that bundle's
`intent.md`, `spec.md`, and `plan.md` to be `accepted` and every changed path to fall under its
explicit `plan.md` scope.
- Do not create `docs/superpowers`, a parallel specs/plans tree, or another lifecycle registry.
- Every file under `docs/` must match exactly one rule in `docs/catalog.json`; dated research and
completed plans belong under `docs/archive/`, and every documentation image must be referenced.
Expand Down
2 changes: 1 addition & 1 deletion docs/README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ The top level is organized by purpose. Start with the directory that matches the
| [`design/`](design/README.md) | Current design system plus accepted future product designs |
| [`adr/`](adr/0001-scenes-v2-dynamic-task-orchestration.md) | Accepted architecture decisions |
| [`screenshots/`](screenshots/README.md) | Images used by the README and published documentation |
| [`sdlc/`](sdlc/workflow.md) | Development workflow, change records, templates, and Evals |
| [`sdlc/`](sdlc/workflow.md) | Development workflow, change records, templates, Evals, and [`development-workflow.md`](sdlc/development-workflow.md) operator guide |
| [`archive/`](archive/README.md) | Historical research, completed plans, and old visual evidence |

The public user guide lives under [`../website`](../website/). Archived material is non-normative
Expand Down
27 changes: 23 additions & 4 deletions docs/catalog.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,16 +50,35 @@
"authority": "current",
"paths": [
"docs/sdlc/workflow.md",
"docs/sdlc/templates/change.md",
"docs/sdlc/development-workflow.md",
"docs/sdlc/references/artifact-contracts.md",
"docs/sdlc/templates/intent.md",
"docs/sdlc/templates/spec.md",
"docs/sdlc/templates/plan.md",
"docs/sdlc/templates/verification.md",
"docs/sdlc/templates/eval.md",
"docs/sdlc/templates/incident.md",
"docs/sdlc/evals/ai-native-sdlc-gates.md"
"docs/sdlc/templates/incident.md"
]
},
{
"classification": "incident-record-flat",
"authority": "historical-state",
"pattern": "^docs/sdlc/incidents/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\\.md$"
},
{
"classification": "eval-record",
"authority": "historical-state",
"pattern": "^docs/sdlc/evals/[a-z0-9-]+\\.md$"
},
{
"classification": "change-record",
"authority": "historical-state",
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*/change\\.md$"
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\/intent\\.md$"
},
{
"classification": "change-stage",
"authority": "historical-state",
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\/(spec|plan|verification)\\.md$"
},
{
"classification": "change-evidence",
Expand Down
95 changes: 0 additions & 95 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/change.md

This file was deleted.

51 changes: 51 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/intent.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: intent
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
source: #intent
risk: low
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Intent: Plugin hot reload and developer tools

## Problem

Plugin authors needed an opt-in way to reload an installed Bundle while developing it without
restarting C2 or disturbing unrelated plugin runtimes. The original source artifacts were the
retired `docs/superpowers/specs` and `docs/superpowers/plans` files preserved in Git history at
commits `59ed917` and `289e6f0`.

## Proposed outcome

Plugin authors needed an opt-in way to reload an installed Bundle while developing it without

## Affected users and systems

Migrated from legacy change.md.

## Constraints

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.

## Out of scope

Not recorded in the legacy single-file Artifact.

## Success signals

See Spec acceptance criteria.

## Open questions

None recorded in migration.

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
51 changes: 51 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/plan.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: plan
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
based_on: spec.md
risk: low
scope: crates/plugins, apps/desktop, docs/reference/plugins.md
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Plan: Plugin hot reload and developer tools

## Files and ownership

crates/plugins, apps/desktop, docs/reference/plugins.md

## Order of work

The implementation was split across targeted runtime reload, watcher/commands, desktop event and
bridge wiring, Developer settings, documentation, and focused Rust/Bun verification.

## Test-first proof

See legacy Verification section.

## Visual or integration proof

See legacy Verification section.

## Risks and mitigations

See legacy Decision and gates.

## Rollback

See legacy Review and release.

## Deviations

Implementation commit `dc177195221760f56b7ce6ddfc57708ea862c6ac` added the feature. Later Core
boundary refactors moved shared composition to `crates/plugins` without introducing a second
plugin-development path. Current behavior is documented in [`docs/reference/plugins.md`](../../../reference/plugins.md#developing-an-installed-bundle).

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
54 changes: 54 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/spec.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: spec
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
based_on: intent.md
risk: low
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Spec: Plugin hot reload and developer tools

## Requirements

The accepted design required a persisted global developer-mode switch, a native watcher over the
installed Bundle directory, debounced reload of only affected Bundle runtimes, explicit status and
manual reload commands, and a quiet accessible Developer settings surface. Native Rust plugins
remain on the rebuild-and-restart path.

## User experience

Not separately recorded in legacy change.md.

## Technical design

See Requirements and legacy Git history.

## Security and privacy

See migrated Decision and gates.

## Alternatives and non-goals

Not separately recorded in legacy change.md.

## Areas of concern

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.

## Acceptance criteria

- [x] AC-1: Targeted reload replaces the affected Bundle runtime without replacing an unrelated runtime.
- [x] AC-2: Developer mode persists, starts/stops watching, and leaves manual reload available.
- [x] AC-3: Desktop bridge and settings expose status, reload, error, and WebView DevTools behavior.
- [x] AC-4: The installed-directory and native-plugin boundaries are documented.

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
19 changes: 10 additions & 9 deletions .github/pull_request_template.md
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
## Canonical change Artifact
## Canonical change bundle

Link the canonical `docs/sdlc/changes/<date>-<slug>/change.md`:
Link the canonical `docs/sdlc/changes/<date>-<slug>/` bundle:

- Change: <!-- docs/sdlc/changes/... -->
- Schema: <!-- 2 -->
- Lifecycle status: <!-- executing / failed / verified / ready-to-release / released / closed -->
- Intent/Spec approval: <!-- named approver plus user request, issue, ADR, or design source -->
- Risk and scope: <!-- low / medium / high / critical; exact files or directory prefixes -->
- Bundle: <!-- docs/sdlc/changes/... -->
- Schema: <!-- 3 -->
- Intent approval: <!-- named approver + source -->
- Spec approval: <!-- named approver -->
- Plan approval: <!-- named approver + scope summary -->
- Verification status: <!-- draft / passed / failed -->

## Outcome

Describe the observable product or repository result, not the implementation diary.

## Verification

- [ ] Every `AC-N` acceptance criterion is mapped to one actual command or linked evidence item.
- [ ] The Artifact records `Verdict:` and `Residual risk:` consistently with its status.
- [ ] Every `AC-N` acceptance criterion is mapped to one actual command or linked evidence item in `verification.md`.
- [ ] `verification.md` records `Verdict:` and residual risk consistently with its status.
- [ ] Verification mode, verifier, and date match the risk lane; high/critical verification is independent.
- [ ] Relevant Rust, desktop, documentation, packaging, or runtime checks passed.
- [ ] User-visible UI changes include real light, dark, and narrow evidence where applicable.
Expand Down
11 changes: 9 additions & 2 deletions AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,6 +8,11 @@ checkout.

[`docs/sdlc/workflow.md`](docs/sdlc/workflow.md) is the single source of truth for material change
Artifacts, lifecycle states, Gates, verification evidence, release handoff, Incidents, and Evals.
Use [`docs/sdlc/development-workflow.md`](docs/sdlc/development-workflow.md) and
[`./script/devflow`](script/devflow) for daily change creation, approval recording, and validation.
Install the external [`sdlc-skill`](https://github.com/IchenDEV/sdlc-skill) `ai-native-sdlc` skill
when Bootstrap, audit, or incident-to-improvement guidance is needed; the repository checker remains
the enforcement source.

- A direct user implementation request may approve Intent. Record its source, constraints, named
approver, and observable acceptance in one change Artifact, then move it to `executing` before
Expand All@@ -19,8 +24,10 @@ Artifacts, lifecycle states, Gates, verification evidence, release handoff, Inci
always run `bun script/verify/docs.ts`, `bun script/verify/sdlc.ts`, and
`bun script/verify/sdlc.ts --worktree`. A PR that
changes repository files must change or add a schema-2 canonical
`docs/sdlc/changes/<date>-<slug>/change.md`; implementation differences require that Artifact to
be `executing` or later and every changed path to fall under its explicit scope.
`docs/sdlc/changes/<date>-<slug>/` with schema-3 stage files (`intent.md`, `spec.md`,
`plan.md`, `verification.md`); implementation differences require that bundle's
`intent.md`, `spec.md`, and `plan.md` to be `accepted` and every changed path to fall under its
explicit `plan.md` scope.
- Do not create `docs/superpowers`, a parallel specs/plans tree, or another lifecycle registry.
- Every file under `docs/` must match exactly one rule in `docs/catalog.json`; dated research and
completed plans belong under `docs/archive/`, and every documentation image must be referenced.
Expand Down
2 changes: 1 addition & 1 deletion docs/README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ The top level is organized by purpose. Start with the directory that matches the
| [`design/`](design/README.md) | Current design system plus accepted future product designs |
| [`adr/`](adr/0001-scenes-v2-dynamic-task-orchestration.md) | Accepted architecture decisions |
| [`screenshots/`](screenshots/README.md) | Images used by the README and published documentation |
| [`sdlc/`](sdlc/workflow.md) | Development workflow, change records, templates, and Evals |
| [`sdlc/`](sdlc/workflow.md) | Development workflow, change records, templates, Evals, and [`development-workflow.md`](sdlc/development-workflow.md) operator guide |
| [`archive/`](archive/README.md) | Historical research, completed plans, and old visual evidence |

The public user guide lives under [`../website`](../website/). Archived material is non-normative
Expand Down
27 changes: 23 additions & 4 deletions docs/catalog.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,16 +50,35 @@
"authority": "current",
"paths": [
"docs/sdlc/workflow.md",
"docs/sdlc/templates/change.md",
"docs/sdlc/development-workflow.md",
"docs/sdlc/references/artifact-contracts.md",
"docs/sdlc/templates/intent.md",
"docs/sdlc/templates/spec.md",
"docs/sdlc/templates/plan.md",
"docs/sdlc/templates/verification.md",
"docs/sdlc/templates/eval.md",
"docs/sdlc/templates/incident.md",
"docs/sdlc/evals/ai-native-sdlc-gates.md"
"docs/sdlc/templates/incident.md"
]
},
{
"classification": "incident-record-flat",
"authority": "historical-state",
"pattern": "^docs/sdlc/incidents/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\\.md$"
},
{
"classification": "eval-record",
"authority": "historical-state",
"pattern": "^docs/sdlc/evals/[a-z0-9-]+\\.md$"
},
{
"classification": "change-record",
"authority": "historical-state",
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*/change\\.md$"
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\/intent\\.md$"
},
{
"classification": "change-stage",
"authority": "historical-state",
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\/(spec|plan|verification)\\.md$"
},
{
"classification": "change-evidence",
Expand Down
95 changes: 0 additions & 95 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/change.md

This file was deleted.

51 changes: 51 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/intent.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: intent
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
source: #intent
risk: low
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Intent: Plugin hot reload and developer tools

## Problem

Plugin authors needed an opt-in way to reload an installed Bundle while developing it without
restarting C2 or disturbing unrelated plugin runtimes. The original source artifacts were the
retired `docs/superpowers/specs` and `docs/superpowers/plans` files preserved in Git history at
commits `59ed917` and `289e6f0`.

## Proposed outcome

Plugin authors needed an opt-in way to reload an installed Bundle while developing it without

## Affected users and systems

Migrated from legacy change.md.

## Constraints

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.

## Out of scope

Not recorded in the legacy single-file Artifact.

## Success signals

See Spec acceptance criteria.

## Open questions

None recorded in migration.

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
51 changes: 51 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/plan.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: plan
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
based_on: spec.md
risk: low
scope: crates/plugins, apps/desktop, docs/reference/plugins.md
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Plan: Plugin hot reload and developer tools

## Files and ownership

crates/plugins, apps/desktop, docs/reference/plugins.md

## Order of work

The implementation was split across targeted runtime reload, watcher/commands, desktop event and
bridge wiring, Developer settings, documentation, and focused Rust/Bun verification.

## Test-first proof

See legacy Verification section.

## Visual or integration proof

See legacy Verification section.

## Risks and mitigations

See legacy Decision and gates.

## Rollback

See legacy Review and release.

## Deviations

Implementation commit `dc177195221760f56b7ce6ddfc57708ea862c6ac` added the feature. Later Core
boundary refactors moved shared composition to `crates/plugins` without introducing a second
plugin-development path. Current behavior is documented in [`docs/reference/plugins.md`](../../../reference/plugins.md#developing-an-installed-bundle).

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
54 changes: 54 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/spec.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: spec
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
based_on: intent.md
risk: low
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Spec: Plugin hot reload and developer tools

## Requirements

The accepted design required a persisted global developer-mode switch, a native watcher over the
installed Bundle directory, debounced reload of only affected Bundle runtimes, explicit status and
manual reload commands, and a quiet accessible Developer settings surface. Native Rust plugins
remain on the rebuild-and-restart path.

## User experience

Not separately recorded in legacy change.md.

## Technical design

See Requirements and legacy Git history.

## Security and privacy

See migrated Decision and gates.

## Alternatives and non-goals

Not separately recorded in legacy change.md.

## Areas of concern

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.

## Acceptance criteria

- [x] AC-1: Targeted reload replaces the affected Bundle runtime without replacing an unrelated runtime.
- [x] AC-2: Developer mode persists, starts/stops watching, and leaves manual reload available.
- [x] AC-3: Desktop bridge and settings expose status, reload, error, and WebView DevTools behavior.
- [x] AC-4: The installed-directory and native-plugin boundaries are documented.

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
19 changes: 10 additions & 9 deletions .github/pull_request_template.md
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
## Canonical change Artifact
## Canonical change bundle

Link the canonical `docs/sdlc/changes/<date>-<slug>/change.md`:
Link the canonical `docs/sdlc/changes/<date>-<slug>/` bundle:

- Change: <!-- docs/sdlc/changes/... -->
- Schema: <!-- 2 -->
- Lifecycle status: <!-- executing / failed / verified / ready-to-release / released / closed -->
- Intent/Spec approval: <!-- named approver plus user request, issue, ADR, or design source -->
- Risk and scope: <!-- low / medium / high / critical; exact files or directory prefixes -->
- Bundle: <!-- docs/sdlc/changes/... -->
- Schema: <!-- 3 -->
- Intent approval: <!-- named approver + source -->
- Spec approval: <!-- named approver -->
- Plan approval: <!-- named approver + scope summary -->
- Verification status: <!-- draft / passed / failed -->

## Outcome

Describe the observable product or repository result, not the implementation diary.

## Verification

- [ ] Every `AC-N` acceptance criterion is mapped to one actual command or linked evidence item.
- [ ] The Artifact records `Verdict:` and `Residual risk:` consistently with its status.
- [ ] Every `AC-N` acceptance criterion is mapped to one actual command or linked evidence item in `verification.md`.
- [ ] `verification.md` records `Verdict:` and residual risk consistently with its status.
- [ ] Verification mode, verifier, and date match the risk lane; high/critical verification is independent.
- [ ] Relevant Rust, desktop, documentation, packaging, or runtime checks passed.
- [ ] User-visible UI changes include real light, dark, and narrow evidence where applicable.
Expand Down
11 changes: 9 additions & 2 deletions AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,6 +8,11 @@ checkout.

[`docs/sdlc/workflow.md`](docs/sdlc/workflow.md) is the single source of truth for material change
Artifacts, lifecycle states, Gates, verification evidence, release handoff, Incidents, and Evals.
Use [`docs/sdlc/development-workflow.md`](docs/sdlc/development-workflow.md) and
[`./script/devflow`](script/devflow) for daily change creation, approval recording, and validation.
Install the external [`sdlc-skill`](https://github.com/IchenDEV/sdlc-skill) `ai-native-sdlc` skill
when Bootstrap, audit, or incident-to-improvement guidance is needed; the repository checker remains
the enforcement source.

- A direct user implementation request may approve Intent. Record its source, constraints, named
approver, and observable acceptance in one change Artifact, then move it to `executing` before
Expand All@@ -19,8 +24,10 @@ Artifacts, lifecycle states, Gates, verification evidence, release handoff, Inci
always run `bun script/verify/docs.ts`, `bun script/verify/sdlc.ts`, and
`bun script/verify/sdlc.ts --worktree`. A PR that
changes repository files must change or add a schema-2 canonical
`docs/sdlc/changes/<date>-<slug>/change.md`; implementation differences require that Artifact to
be `executing` or later and every changed path to fall under its explicit scope.
`docs/sdlc/changes/<date>-<slug>/` with schema-3 stage files (`intent.md`, `spec.md`,
`plan.md`, `verification.md`); implementation differences require that bundle's
`intent.md`, `spec.md`, and `plan.md` to be `accepted` and every changed path to fall under its
explicit `plan.md` scope.
- Do not create `docs/superpowers`, a parallel specs/plans tree, or another lifecycle registry.
- Every file under `docs/` must match exactly one rule in `docs/catalog.json`; dated research and
completed plans belong under `docs/archive/`, and every documentation image must be referenced.
Expand Down
2 changes: 1 addition & 1 deletion docs/README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ The top level is organized by purpose. Start with the directory that matches the
| [`design/`](design/README.md) | Current design system plus accepted future product designs |
| [`adr/`](adr/0001-scenes-v2-dynamic-task-orchestration.md) | Accepted architecture decisions |
| [`screenshots/`](screenshots/README.md) | Images used by the README and published documentation |
| [`sdlc/`](sdlc/workflow.md) | Development workflow, change records, templates, and Evals |
| [`sdlc/`](sdlc/workflow.md) | Development workflow, change records, templates, Evals, and [`development-workflow.md`](sdlc/development-workflow.md) operator guide |
| [`archive/`](archive/README.md) | Historical research, completed plans, and old visual evidence |

The public user guide lives under [`../website`](../website/). Archived material is non-normative
Expand Down
27 changes: 23 additions & 4 deletions docs/catalog.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,16 +50,35 @@
"authority": "current",
"paths": [
"docs/sdlc/workflow.md",
"docs/sdlc/templates/change.md",
"docs/sdlc/development-workflow.md",
"docs/sdlc/references/artifact-contracts.md",
"docs/sdlc/templates/intent.md",
"docs/sdlc/templates/spec.md",
"docs/sdlc/templates/plan.md",
"docs/sdlc/templates/verification.md",
"docs/sdlc/templates/eval.md",
"docs/sdlc/templates/incident.md",
"docs/sdlc/evals/ai-native-sdlc-gates.md"
"docs/sdlc/templates/incident.md"
]
},
{
"classification": "incident-record-flat",
"authority": "historical-state",
"pattern": "^docs/sdlc/incidents/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\\.md$"
},
{
"classification": "eval-record",
"authority": "historical-state",
"pattern": "^docs/sdlc/evals/[a-z0-9-]+\\.md$"
},
{
"classification": "change-record",
"authority": "historical-state",
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*/change\\.md$"
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\/intent\\.md$"
},
{
"classification": "change-stage",
"authority": "historical-state",
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\/(spec|plan|verification)\\.md$"
},
{
"classification": "change-evidence",
Expand Down
95 changes: 0 additions & 95 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/change.md

This file was deleted.

51 changes: 51 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/intent.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: intent
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
source: #intent
risk: low
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Intent: Plugin hot reload and developer tools

## Problem

Plugin authors needed an opt-in way to reload an installed Bundle while developing it without
restarting C2 or disturbing unrelated plugin runtimes. The original source artifacts were the
retired `docs/superpowers/specs` and `docs/superpowers/plans` files preserved in Git history at
commits `59ed917` and `289e6f0`.

## Proposed outcome

Plugin authors needed an opt-in way to reload an installed Bundle while developing it without

## Affected users and systems

Migrated from legacy change.md.

## Constraints

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.

## Out of scope

Not recorded in the legacy single-file Artifact.

## Success signals

See Spec acceptance criteria.

## Open questions

None recorded in migration.

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
51 changes: 51 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/plan.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: plan
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
based_on: spec.md
risk: low
scope: crates/plugins, apps/desktop, docs/reference/plugins.md
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Plan: Plugin hot reload and developer tools

## Files and ownership

crates/plugins, apps/desktop, docs/reference/plugins.md

## Order of work

The implementation was split across targeted runtime reload, watcher/commands, desktop event and
bridge wiring, Developer settings, documentation, and focused Rust/Bun verification.

## Test-first proof

See legacy Verification section.

## Visual or integration proof

See legacy Verification section.

## Risks and mitigations

See legacy Decision and gates.

## Rollback

See legacy Review and release.

## Deviations

Implementation commit `dc177195221760f56b7ce6ddfc57708ea862c6ac` added the feature. Later Core
boundary refactors moved shared composition to `crates/plugins` without introducing a second
plugin-development path. Current behavior is documented in [`docs/reference/plugins.md`](../../../reference/plugins.md#developing-an-installed-bundle).

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
54 changes: 54 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/spec.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: spec
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
based_on: intent.md
risk: low
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Spec: Plugin hot reload and developer tools

## Requirements

The accepted design required a persisted global developer-mode switch, a native watcher over the
installed Bundle directory, debounced reload of only affected Bundle runtimes, explicit status and
manual reload commands, and a quiet accessible Developer settings surface. Native Rust plugins
remain on the rebuild-and-restart path.

## User experience

Not separately recorded in legacy change.md.

## Technical design

See Requirements and legacy Git history.

## Security and privacy

See migrated Decision and gates.

## Alternatives and non-goals

Not separately recorded in legacy change.md.

## Areas of concern

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.

## Acceptance criteria

- [x] AC-1: Targeted reload replaces the affected Bundle runtime without replacing an unrelated runtime.
- [x] AC-2: Developer mode persists, starts/stops watching, and leaves manual reload available.
- [x] AC-3: Desktop bridge and settings expose status, reload, error, and WebView DevTools behavior.
- [x] AC-4: The installed-directory and native-plugin boundaries are documented.

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
19 changes: 10 additions & 9 deletions .github/pull_request_template.md
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
## Canonical change Artifact
## Canonical change bundle

Link the canonical `docs/sdlc/changes/<date>-<slug>/change.md`:
Link the canonical `docs/sdlc/changes/<date>-<slug>/` bundle:

- Change: <!-- docs/sdlc/changes/... -->
- Schema: <!-- 2 -->
- Lifecycle status: <!-- executing / failed / verified / ready-to-release / released / closed -->
- Intent/Spec approval: <!-- named approver plus user request, issue, ADR, or design source -->
- Risk and scope: <!-- low / medium / high / critical; exact files or directory prefixes -->
- Bundle: <!-- docs/sdlc/changes/... -->
- Schema: <!-- 3 -->
- Intent approval: <!-- named approver + source -->
- Spec approval: <!-- named approver -->
- Plan approval: <!-- named approver + scope summary -->
- Verification status: <!-- draft / passed / failed -->

## Outcome

Describe the observable product or repository result, not the implementation diary.

## Verification

- [ ] Every `AC-N` acceptance criterion is mapped to one actual command or linked evidence item.
- [ ] The Artifact records `Verdict:` and `Residual risk:` consistently with its status.
- [ ] Every `AC-N` acceptance criterion is mapped to one actual command or linked evidence item in `verification.md`.
- [ ] `verification.md` records `Verdict:` and residual risk consistently with its status.
- [ ] Verification mode, verifier, and date match the risk lane; high/critical verification is independent.
- [ ] Relevant Rust, desktop, documentation, packaging, or runtime checks passed.
- [ ] User-visible UI changes include real light, dark, and narrow evidence where applicable.
Expand Down
11 changes: 9 additions & 2 deletions AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,6 +8,11 @@ checkout.

[`docs/sdlc/workflow.md`](docs/sdlc/workflow.md) is the single source of truth for material change
Artifacts, lifecycle states, Gates, verification evidence, release handoff, Incidents, and Evals.
Use [`docs/sdlc/development-workflow.md`](docs/sdlc/development-workflow.md) and
[`./script/devflow`](script/devflow) for daily change creation, approval recording, and validation.
Install the external [`sdlc-skill`](https://github.com/IchenDEV/sdlc-skill) `ai-native-sdlc` skill
when Bootstrap, audit, or incident-to-improvement guidance is needed; the repository checker remains
the enforcement source.

- A direct user implementation request may approve Intent. Record its source, constraints, named
approver, and observable acceptance in one change Artifact, then move it to `executing` before
Expand All@@ -19,8 +24,10 @@ Artifacts, lifecycle states, Gates, verification evidence, release handoff, Inci
always run `bun script/verify/docs.ts`, `bun script/verify/sdlc.ts`, and
`bun script/verify/sdlc.ts --worktree`. A PR that
changes repository files must change or add a schema-2 canonical
`docs/sdlc/changes/<date>-<slug>/change.md`; implementation differences require that Artifact to
be `executing` or later and every changed path to fall under its explicit scope.
`docs/sdlc/changes/<date>-<slug>/` with schema-3 stage files (`intent.md`, `spec.md`,
`plan.md`, `verification.md`); implementation differences require that bundle's
`intent.md`, `spec.md`, and `plan.md` to be `accepted` and every changed path to fall under its
explicit `plan.md` scope.
- Do not create `docs/superpowers`, a parallel specs/plans tree, or another lifecycle registry.
- Every file under `docs/` must match exactly one rule in `docs/catalog.json`; dated research and
completed plans belong under `docs/archive/`, and every documentation image must be referenced.
Expand Down
2 changes: 1 addition & 1 deletion docs/README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ The top level is organized by purpose. Start with the directory that matches the
| [`design/`](design/README.md) | Current design system plus accepted future product designs |
| [`adr/`](adr/0001-scenes-v2-dynamic-task-orchestration.md) | Accepted architecture decisions |
| [`screenshots/`](screenshots/README.md) | Images used by the README and published documentation |
| [`sdlc/`](sdlc/workflow.md) | Development workflow, change records, templates, and Evals |
| [`sdlc/`](sdlc/workflow.md) | Development workflow, change records, templates, Evals, and [`development-workflow.md`](sdlc/development-workflow.md) operator guide |
| [`archive/`](archive/README.md) | Historical research, completed plans, and old visual evidence |

The public user guide lives under [`../website`](../website/). Archived material is non-normative
Expand Down
27 changes: 23 additions & 4 deletions docs/catalog.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,16 +50,35 @@
"authority": "current",
"paths": [
"docs/sdlc/workflow.md",
"docs/sdlc/templates/change.md",
"docs/sdlc/development-workflow.md",
"docs/sdlc/references/artifact-contracts.md",
"docs/sdlc/templates/intent.md",
"docs/sdlc/templates/spec.md",
"docs/sdlc/templates/plan.md",
"docs/sdlc/templates/verification.md",
"docs/sdlc/templates/eval.md",
"docs/sdlc/templates/incident.md",
"docs/sdlc/evals/ai-native-sdlc-gates.md"
"docs/sdlc/templates/incident.md"
]
},
{
"classification": "incident-record-flat",
"authority": "historical-state",
"pattern": "^docs/sdlc/incidents/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\\.md$"
},
{
"classification": "eval-record",
"authority": "historical-state",
"pattern": "^docs/sdlc/evals/[a-z0-9-]+\\.md$"
},
{
"classification": "change-record",
"authority": "historical-state",
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*/change\\.md$"
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\/intent\\.md$"
},
{
"classification": "change-stage",
"authority": "historical-state",
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\/(spec|plan|verification)\\.md$"
},
{
"classification": "change-evidence",
Expand Down
95 changes: 0 additions & 95 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/change.md

This file was deleted.

51 changes: 51 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/intent.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: intent
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
source: #intent
risk: low
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Intent: Plugin hot reload and developer tools

## Problem

Plugin authors needed an opt-in way to reload an installed Bundle while developing it without
restarting C2 or disturbing unrelated plugin runtimes. The original source artifacts were the
retired `docs/superpowers/specs` and `docs/superpowers/plans` files preserved in Git history at
commits `59ed917` and `289e6f0`.

## Proposed outcome

Plugin authors needed an opt-in way to reload an installed Bundle while developing it without

## Affected users and systems

Migrated from legacy change.md.

## Constraints

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.

## Out of scope

Not recorded in the legacy single-file Artifact.

## Success signals

See Spec acceptance criteria.

## Open questions

None recorded in migration.

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
51 changes: 51 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/plan.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: plan
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
based_on: spec.md
risk: low
scope: crates/plugins, apps/desktop, docs/reference/plugins.md
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Plan: Plugin hot reload and developer tools

## Files and ownership

crates/plugins, apps/desktop, docs/reference/plugins.md

## Order of work

The implementation was split across targeted runtime reload, watcher/commands, desktop event and
bridge wiring, Developer settings, documentation, and focused Rust/Bun verification.

## Test-first proof

See legacy Verification section.

## Visual or integration proof

See legacy Verification section.

## Risks and mitigations

See legacy Decision and gates.

## Rollback

See legacy Review and release.

## Deviations

Implementation commit `dc177195221760f56b7ce6ddfc57708ea862c6ac` added the feature. Later Core
boundary refactors moved shared composition to `crates/plugins` without introducing a second
plugin-development path. Current behavior is documented in [`docs/reference/plugins.md`](../../../reference/plugins.md#developing-an-installed-bundle).

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
54 changes: 54 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/spec.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: spec
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
based_on: intent.md
risk: low
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Spec: Plugin hot reload and developer tools

## Requirements

The accepted design required a persisted global developer-mode switch, a native watcher over the
installed Bundle directory, debounced reload of only affected Bundle runtimes, explicit status and
manual reload commands, and a quiet accessible Developer settings surface. Native Rust plugins
remain on the rebuild-and-restart path.

## User experience

Not separately recorded in legacy change.md.

## Technical design

See Requirements and legacy Git history.

## Security and privacy

See migrated Decision and gates.

## Alternatives and non-goals

Not separately recorded in legacy change.md.

## Areas of concern

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.

## Acceptance criteria

- [x] AC-1: Targeted reload replaces the affected Bundle runtime without replacing an unrelated runtime.
- [x] AC-2: Developer mode persists, starts/stops watching, and leaves manual reload available.
- [x] AC-3: Desktop bridge and settings expose status, reload, error, and WebView DevTools behavior.
- [x] AC-4: The installed-directory and native-plugin boundaries are documented.

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
19 changes: 10 additions & 9 deletions .github/pull_request_template.md
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
## Canonical change Artifact
## Canonical change bundle

Link the canonical `docs/sdlc/changes/<date>-<slug>/change.md`:
Link the canonical `docs/sdlc/changes/<date>-<slug>/` bundle:

- Change: <!-- docs/sdlc/changes/... -->
- Schema: <!-- 2 -->
- Lifecycle status: <!-- executing / failed / verified / ready-to-release / released / closed -->
- Intent/Spec approval: <!-- named approver plus user request, issue, ADR, or design source -->
- Risk and scope: <!-- low / medium / high / critical; exact files or directory prefixes -->
- Bundle: <!-- docs/sdlc/changes/... -->
- Schema: <!-- 3 -->
- Intent approval: <!-- named approver + source -->
- Spec approval: <!-- named approver -->
- Plan approval: <!-- named approver + scope summary -->
- Verification status: <!-- draft / passed / failed -->

## Outcome

Describe the observable product or repository result, not the implementation diary.

## Verification

- [ ] Every `AC-N` acceptance criterion is mapped to one actual command or linked evidence item.
- [ ] The Artifact records `Verdict:` and `Residual risk:` consistently with its status.
- [ ] Every `AC-N` acceptance criterion is mapped to one actual command or linked evidence item in `verification.md`.
- [ ] `verification.md` records `Verdict:` and residual risk consistently with its status.
- [ ] Verification mode, verifier, and date match the risk lane; high/critical verification is independent.
- [ ] Relevant Rust, desktop, documentation, packaging, or runtime checks passed.
- [ ] User-visible UI changes include real light, dark, and narrow evidence where applicable.
Expand Down
11 changes: 9 additions & 2 deletions AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,6 +8,11 @@ checkout.

[`docs/sdlc/workflow.md`](docs/sdlc/workflow.md) is the single source of truth for material change
Artifacts, lifecycle states, Gates, verification evidence, release handoff, Incidents, and Evals.
Use [`docs/sdlc/development-workflow.md`](docs/sdlc/development-workflow.md) and
[`./script/devflow`](script/devflow) for daily change creation, approval recording, and validation.
Install the external [`sdlc-skill`](https://github.com/IchenDEV/sdlc-skill) `ai-native-sdlc` skill
when Bootstrap, audit, or incident-to-improvement guidance is needed; the repository checker remains
the enforcement source.

- A direct user implementation request may approve Intent. Record its source, constraints, named
approver, and observable acceptance in one change Artifact, then move it to `executing` before
Expand All@@ -19,8 +24,10 @@ Artifacts, lifecycle states, Gates, verification evidence, release handoff, Inci
always run `bun script/verify/docs.ts`, `bun script/verify/sdlc.ts`, and
`bun script/verify/sdlc.ts --worktree`. A PR that
changes repository files must change or add a schema-2 canonical
`docs/sdlc/changes/<date>-<slug>/change.md`; implementation differences require that Artifact to
be `executing` or later and every changed path to fall under its explicit scope.
`docs/sdlc/changes/<date>-<slug>/` with schema-3 stage files (`intent.md`, `spec.md`,
`plan.md`, `verification.md`); implementation differences require that bundle's
`intent.md`, `spec.md`, and `plan.md` to be `accepted` and every changed path to fall under its
explicit `plan.md` scope.
- Do not create `docs/superpowers`, a parallel specs/plans tree, or another lifecycle registry.
- Every file under `docs/` must match exactly one rule in `docs/catalog.json`; dated research and
completed plans belong under `docs/archive/`, and every documentation image must be referenced.
Expand Down
2 changes: 1 addition & 1 deletion docs/README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ The top level is organized by purpose. Start with the directory that matches the
| [`design/`](design/README.md) | Current design system plus accepted future product designs |
| [`adr/`](adr/0001-scenes-v2-dynamic-task-orchestration.md) | Accepted architecture decisions |
| [`screenshots/`](screenshots/README.md) | Images used by the README and published documentation |
| [`sdlc/`](sdlc/workflow.md) | Development workflow, change records, templates, and Evals |
| [`sdlc/`](sdlc/workflow.md) | Development workflow, change records, templates, Evals, and [`development-workflow.md`](sdlc/development-workflow.md) operator guide |
| [`archive/`](archive/README.md) | Historical research, completed plans, and old visual evidence |

The public user guide lives under [`../website`](../website/). Archived material is non-normative
Expand Down
27 changes: 23 additions & 4 deletions docs/catalog.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,16 +50,35 @@
"authority": "current",
"paths": [
"docs/sdlc/workflow.md",
"docs/sdlc/templates/change.md",
"docs/sdlc/development-workflow.md",
"docs/sdlc/references/artifact-contracts.md",
"docs/sdlc/templates/intent.md",
"docs/sdlc/templates/spec.md",
"docs/sdlc/templates/plan.md",
"docs/sdlc/templates/verification.md",
"docs/sdlc/templates/eval.md",
"docs/sdlc/templates/incident.md",
"docs/sdlc/evals/ai-native-sdlc-gates.md"
"docs/sdlc/templates/incident.md"
]
},
{
"classification": "incident-record-flat",
"authority": "historical-state",
"pattern": "^docs/sdlc/incidents/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\\.md$"
},
{
"classification": "eval-record",
"authority": "historical-state",
"pattern": "^docs/sdlc/evals/[a-z0-9-]+\\.md$"
},
{
"classification": "change-record",
"authority": "historical-state",
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*/change\\.md$"
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\/intent\\.md$"
},
{
"classification": "change-stage",
"authority": "historical-state",
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\/(spec|plan|verification)\\.md$"
},
{
"classification": "change-evidence",
Expand Down
95 changes: 0 additions & 95 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/change.md

This file was deleted.

51 changes: 51 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/intent.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: intent
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
source: #intent
risk: low
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Intent: Plugin hot reload and developer tools

## Problem

Plugin authors needed an opt-in way to reload an installed Bundle while developing it without
restarting C2 or disturbing unrelated plugin runtimes. The original source artifacts were the
retired `docs/superpowers/specs` and `docs/superpowers/plans` files preserved in Git history at
commits `59ed917` and `289e6f0`.

## Proposed outcome

Plugin authors needed an opt-in way to reload an installed Bundle while developing it without

## Affected users and systems

Migrated from legacy change.md.

## Constraints

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.

## Out of scope

Not recorded in the legacy single-file Artifact.

## Success signals

See Spec acceptance criteria.

## Open questions

None recorded in migration.

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
51 changes: 51 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/plan.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: plan
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
based_on: spec.md
risk: low
scope: crates/plugins, apps/desktop, docs/reference/plugins.md
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Plan: Plugin hot reload and developer tools

## Files and ownership

crates/plugins, apps/desktop, docs/reference/plugins.md

## Order of work

The implementation was split across targeted runtime reload, watcher/commands, desktop event and
bridge wiring, Developer settings, documentation, and focused Rust/Bun verification.

## Test-first proof

See legacy Verification section.

## Visual or integration proof

See legacy Verification section.

## Risks and mitigations

See legacy Decision and gates.

## Rollback

See legacy Review and release.

## Deviations

Implementation commit `dc177195221760f56b7ce6ddfc57708ea862c6ac` added the feature. Later Core
boundary refactors moved shared composition to `crates/plugins` without introducing a second
plugin-development path. Current behavior is documented in [`docs/reference/plugins.md`](../../../reference/plugins.md#developing-an-installed-bundle).

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
54 changes: 54 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/spec.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: spec
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
based_on: intent.md
risk: low
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Spec: Plugin hot reload and developer tools

## Requirements

The accepted design required a persisted global developer-mode switch, a native watcher over the
installed Bundle directory, debounced reload of only affected Bundle runtimes, explicit status and
manual reload commands, and a quiet accessible Developer settings surface. Native Rust plugins
remain on the rebuild-and-restart path.

## User experience

Not separately recorded in legacy change.md.

## Technical design

See Requirements and legacy Git history.

## Security and privacy

See migrated Decision and gates.

## Alternatives and non-goals

Not separately recorded in legacy change.md.

## Areas of concern

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.

## Acceptance criteria

- [x] AC-1: Targeted reload replaces the affected Bundle runtime without replacing an unrelated runtime.
- [x] AC-2: Developer mode persists, starts/stops watching, and leaves manual reload available.
- [x] AC-3: Desktop bridge and settings expose status, reload, error, and WebView DevTools behavior.
- [x] AC-4: The installed-directory and native-plugin boundaries are documented.

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
19 changes: 10 additions & 9 deletions .github/pull_request_template.md
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
## Canonical change Artifact
## Canonical change bundle

Link the canonical `docs/sdlc/changes/<date>-<slug>/change.md`:
Link the canonical `docs/sdlc/changes/<date>-<slug>/` bundle:

- Change: <!-- docs/sdlc/changes/... -->
- Schema: <!-- 2 -->
- Lifecycle status: <!-- executing / failed / verified / ready-to-release / released / closed -->
- Intent/Spec approval: <!-- named approver plus user request, issue, ADR, or design source -->
- Risk and scope: <!-- low / medium / high / critical; exact files or directory prefixes -->
- Bundle: <!-- docs/sdlc/changes/... -->
- Schema: <!-- 3 -->
- Intent approval: <!-- named approver + source -->
- Spec approval: <!-- named approver -->
- Plan approval: <!-- named approver + scope summary -->
- Verification status: <!-- draft / passed / failed -->

## Outcome

Describe the observable product or repository result, not the implementation diary.

## Verification

- [ ] Every `AC-N` acceptance criterion is mapped to one actual command or linked evidence item.
- [ ] The Artifact records `Verdict:` and `Residual risk:` consistently with its status.
- [ ] Every `AC-N` acceptance criterion is mapped to one actual command or linked evidence item in `verification.md`.
- [ ] `verification.md` records `Verdict:` and residual risk consistently with its status.
- [ ] Verification mode, verifier, and date match the risk lane; high/critical verification is independent.
- [ ] Relevant Rust, desktop, documentation, packaging, or runtime checks passed.
- [ ] User-visible UI changes include real light, dark, and narrow evidence where applicable.
Expand Down
11 changes: 9 additions & 2 deletions AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,6 +8,11 @@ checkout.

[`docs/sdlc/workflow.md`](docs/sdlc/workflow.md) is the single source of truth for material change
Artifacts, lifecycle states, Gates, verification evidence, release handoff, Incidents, and Evals.
Use [`docs/sdlc/development-workflow.md`](docs/sdlc/development-workflow.md) and
[`./script/devflow`](script/devflow) for daily change creation, approval recording, and validation.
Install the external [`sdlc-skill`](https://github.com/IchenDEV/sdlc-skill) `ai-native-sdlc` skill
when Bootstrap, audit, or incident-to-improvement guidance is needed; the repository checker remains
the enforcement source.

- A direct user implementation request may approve Intent. Record its source, constraints, named
approver, and observable acceptance in one change Artifact, then move it to `executing` before
Expand All@@ -19,8 +24,10 @@ Artifacts, lifecycle states, Gates, verification evidence, release handoff, Inci
always run `bun script/verify/docs.ts`, `bun script/verify/sdlc.ts`, and
`bun script/verify/sdlc.ts --worktree`. A PR that
changes repository files must change or add a schema-2 canonical
`docs/sdlc/changes/<date>-<slug>/change.md`; implementation differences require that Artifact to
be `executing` or later and every changed path to fall under its explicit scope.
`docs/sdlc/changes/<date>-<slug>/` with schema-3 stage files (`intent.md`, `spec.md`,
`plan.md`, `verification.md`); implementation differences require that bundle's
`intent.md`, `spec.md`, and `plan.md` to be `accepted` and every changed path to fall under its
explicit `plan.md` scope.
- Do not create `docs/superpowers`, a parallel specs/plans tree, or another lifecycle registry.
- Every file under `docs/` must match exactly one rule in `docs/catalog.json`; dated research and
completed plans belong under `docs/archive/`, and every documentation image must be referenced.
Expand Down
2 changes: 1 addition & 1 deletion docs/README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ The top level is organized by purpose. Start with the directory that matches the
| [`design/`](design/README.md) | Current design system plus accepted future product designs |
| [`adr/`](adr/0001-scenes-v2-dynamic-task-orchestration.md) | Accepted architecture decisions |
| [`screenshots/`](screenshots/README.md) | Images used by the README and published documentation |
| [`sdlc/`](sdlc/workflow.md) | Development workflow, change records, templates, and Evals |
| [`sdlc/`](sdlc/workflow.md) | Development workflow, change records, templates, Evals, and [`development-workflow.md`](sdlc/development-workflow.md) operator guide |
| [`archive/`](archive/README.md) | Historical research, completed plans, and old visual evidence |

The public user guide lives under [`../website`](../website/). Archived material is non-normative
Expand Down
27 changes: 23 additions & 4 deletions docs/catalog.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,16 +50,35 @@
"authority": "current",
"paths": [
"docs/sdlc/workflow.md",
"docs/sdlc/templates/change.md",
"docs/sdlc/development-workflow.md",
"docs/sdlc/references/artifact-contracts.md",
"docs/sdlc/templates/intent.md",
"docs/sdlc/templates/spec.md",
"docs/sdlc/templates/plan.md",
"docs/sdlc/templates/verification.md",
"docs/sdlc/templates/eval.md",
"docs/sdlc/templates/incident.md",
"docs/sdlc/evals/ai-native-sdlc-gates.md"
"docs/sdlc/templates/incident.md"
]
},
{
"classification": "incident-record-flat",
"authority": "historical-state",
"pattern": "^docs/sdlc/incidents/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\\.md$"
},
{
"classification": "eval-record",
"authority": "historical-state",
"pattern": "^docs/sdlc/evals/[a-z0-9-]+\\.md$"
},
{
"classification": "change-record",
"authority": "historical-state",
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*/change\\.md$"
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\/intent\\.md$"
},
{
"classification": "change-stage",
"authority": "historical-state",
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\/(spec|plan|verification)\\.md$"
},
{
"classification": "change-evidence",
Expand Down
95 changes: 0 additions & 95 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/change.md

This file was deleted.

51 changes: 51 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/intent.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: intent
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
source: #intent
risk: low
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Intent: Plugin hot reload and developer tools

## Problem

Plugin authors needed an opt-in way to reload an installed Bundle while developing it without
restarting C2 or disturbing unrelated plugin runtimes. The original source artifacts were the
retired `docs/superpowers/specs` and `docs/superpowers/plans` files preserved in Git history at
commits `59ed917` and `289e6f0`.

## Proposed outcome

Plugin authors needed an opt-in way to reload an installed Bundle while developing it without

## Affected users and systems

Migrated from legacy change.md.

## Constraints

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.

## Out of scope

Not recorded in the legacy single-file Artifact.

## Success signals

See Spec acceptance criteria.

## Open questions

None recorded in migration.

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
51 changes: 51 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/plan.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: plan
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
based_on: spec.md
risk: low
scope: crates/plugins, apps/desktop, docs/reference/plugins.md
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Plan: Plugin hot reload and developer tools

## Files and ownership

crates/plugins, apps/desktop, docs/reference/plugins.md

## Order of work

The implementation was split across targeted runtime reload, watcher/commands, desktop event and
bridge wiring, Developer settings, documentation, and focused Rust/Bun verification.

## Test-first proof

See legacy Verification section.

## Visual or integration proof

See legacy Verification section.

## Risks and mitigations

See legacy Decision and gates.

## Rollback

See legacy Review and release.

## Deviations

Implementation commit `dc177195221760f56b7ce6ddfc57708ea862c6ac` added the feature. Later Core
boundary refactors moved shared composition to `crates/plugins` without introducing a second
plugin-development path. Current behavior is documented in [`docs/reference/plugins.md`](../../../reference/plugins.md#developing-an-installed-bundle).

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
54 changes: 54 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/spec.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: spec
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
based_on: intent.md
risk: low
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Spec: Plugin hot reload and developer tools

## Requirements

The accepted design required a persisted global developer-mode switch, a native watcher over the
installed Bundle directory, debounced reload of only affected Bundle runtimes, explicit status and
manual reload commands, and a quiet accessible Developer settings surface. Native Rust plugins
remain on the rebuild-and-restart path.

## User experience

Not separately recorded in legacy change.md.

## Technical design

See Requirements and legacy Git history.

## Security and privacy

See migrated Decision and gates.

## Alternatives and non-goals

Not separately recorded in legacy change.md.

## Areas of concern

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.

## Acceptance criteria

- [x] AC-1: Targeted reload replaces the affected Bundle runtime without replacing an unrelated runtime.
- [x] AC-2: Developer mode persists, starts/stops watching, and leaves manual reload available.
- [x] AC-3: Desktop bridge and settings expose status, reload, error, and WebView DevTools behavior.
- [x] AC-4: The installed-directory and native-plugin boundaries are documented.

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
19 changes: 10 additions & 9 deletions .github/pull_request_template.md
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
## Canonical change Artifact
## Canonical change bundle

Link the canonical `docs/sdlc/changes/<date>-<slug>/change.md`:
Link the canonical `docs/sdlc/changes/<date>-<slug>/` bundle:

- Change: <!-- docs/sdlc/changes/... -->
- Schema: <!-- 2 -->
- Lifecycle status: <!-- executing / failed / verified / ready-to-release / released / closed -->
- Intent/Spec approval: <!-- named approver plus user request, issue, ADR, or design source -->
- Risk and scope: <!-- low / medium / high / critical; exact files or directory prefixes -->
- Bundle: <!-- docs/sdlc/changes/... -->
- Schema: <!-- 3 -->
- Intent approval: <!-- named approver + source -->
- Spec approval: <!-- named approver -->
- Plan approval: <!-- named approver + scope summary -->
- Verification status: <!-- draft / passed / failed -->

## Outcome

Describe the observable product or repository result, not the implementation diary.

## Verification

- [ ] Every `AC-N` acceptance criterion is mapped to one actual command or linked evidence item.
- [ ] The Artifact records `Verdict:` and `Residual risk:` consistently with its status.
- [ ] Every `AC-N` acceptance criterion is mapped to one actual command or linked evidence item in `verification.md`.
- [ ] `verification.md` records `Verdict:` and residual risk consistently with its status.
- [ ] Verification mode, verifier, and date match the risk lane; high/critical verification is independent.
- [ ] Relevant Rust, desktop, documentation, packaging, or runtime checks passed.
- [ ] User-visible UI changes include real light, dark, and narrow evidence where applicable.
Expand Down
11 changes: 9 additions & 2 deletions AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,6 +8,11 @@ checkout.

[`docs/sdlc/workflow.md`](docs/sdlc/workflow.md) is the single source of truth for material change
Artifacts, lifecycle states, Gates, verification evidence, release handoff, Incidents, and Evals.
Use [`docs/sdlc/development-workflow.md`](docs/sdlc/development-workflow.md) and
[`./script/devflow`](script/devflow) for daily change creation, approval recording, and validation.
Install the external [`sdlc-skill`](https://github.com/IchenDEV/sdlc-skill) `ai-native-sdlc` skill
when Bootstrap, audit, or incident-to-improvement guidance is needed; the repository checker remains
the enforcement source.

- A direct user implementation request may approve Intent. Record its source, constraints, named
approver, and observable acceptance in one change Artifact, then move it to `executing` before
Expand All@@ -19,8 +24,10 @@ Artifacts, lifecycle states, Gates, verification evidence, release handoff, Inci
always run `bun script/verify/docs.ts`, `bun script/verify/sdlc.ts`, and
`bun script/verify/sdlc.ts --worktree`. A PR that
changes repository files must change or add a schema-2 canonical
`docs/sdlc/changes/<date>-<slug>/change.md`; implementation differences require that Artifact to
be `executing` or later and every changed path to fall under its explicit scope.
`docs/sdlc/changes/<date>-<slug>/` with schema-3 stage files (`intent.md`, `spec.md`,
`plan.md`, `verification.md`); implementation differences require that bundle's
`intent.md`, `spec.md`, and `plan.md` to be `accepted` and every changed path to fall under its
explicit `plan.md` scope.
- Do not create `docs/superpowers`, a parallel specs/plans tree, or another lifecycle registry.
- Every file under `docs/` must match exactly one rule in `docs/catalog.json`; dated research and
completed plans belong under `docs/archive/`, and every documentation image must be referenced.
Expand Down
2 changes: 1 addition & 1 deletion docs/README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,7 +10,7 @@ The top level is organized by purpose. Start with the directory that matches the
| [`design/`](design/README.md) | Current design system plus accepted future product designs |
| [`adr/`](adr/0001-scenes-v2-dynamic-task-orchestration.md) | Accepted architecture decisions |
| [`screenshots/`](screenshots/README.md) | Images used by the README and published documentation |
| [`sdlc/`](sdlc/workflow.md) | Development workflow, change records, templates, and Evals |
| [`sdlc/`](sdlc/workflow.md) | Development workflow, change records, templates, Evals, and [`development-workflow.md`](sdlc/development-workflow.md) operator guide |
| [`archive/`](archive/README.md) | Historical research, completed plans, and old visual evidence |

The public user guide lives under [`../website`](../website/). Archived material is non-normative
Expand Down
27 changes: 23 additions & 4 deletions docs/catalog.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,16 +50,35 @@
"authority": "current",
"paths": [
"docs/sdlc/workflow.md",
"docs/sdlc/templates/change.md",
"docs/sdlc/development-workflow.md",
"docs/sdlc/references/artifact-contracts.md",
"docs/sdlc/templates/intent.md",
"docs/sdlc/templates/spec.md",
"docs/sdlc/templates/plan.md",
"docs/sdlc/templates/verification.md",
"docs/sdlc/templates/eval.md",
"docs/sdlc/templates/incident.md",
"docs/sdlc/evals/ai-native-sdlc-gates.md"
"docs/sdlc/templates/incident.md"
]
},
{
"classification": "incident-record-flat",
"authority": "historical-state",
"pattern": "^docs/sdlc/incidents/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\\.md$"
},
{
"classification": "eval-record",
"authority": "historical-state",
"pattern": "^docs/sdlc/evals/[a-z0-9-]+\\.md$"
},
{
"classification": "change-record",
"authority": "historical-state",
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*/change\\.md$"
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\/intent\\.md$"
},
{
"classification": "change-stage",
"authority": "historical-state",
"pattern": "^docs/sdlc/changes/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*\/(spec|plan|verification)\\.md$"
},
{
"classification": "change-evidence",
Expand Down
95 changes: 0 additions & 95 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/change.md

This file was deleted.

51 changes: 51 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/intent.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: intent
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
source: #intent
risk: low
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Intent: Plugin hot reload and developer tools

## Problem

Plugin authors needed an opt-in way to reload an installed Bundle while developing it without
restarting C2 or disturbing unrelated plugin runtimes. The original source artifacts were the
retired `docs/superpowers/specs` and `docs/superpowers/plans` files preserved in Git history at
commits `59ed917` and `289e6f0`.

## Proposed outcome

Plugin authors needed an opt-in way to reload an installed Bundle while developing it without

## Affected users and systems

Migrated from legacy change.md.

## Constraints

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.

## Out of scope

Not recorded in the legacy single-file Artifact.

## Success signals

See Spec acceptance criteria.

## Open questions

None recorded in migration.

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
51 changes: 51 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/plan.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: plan
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
based_on: spec.md
risk: low
scope: crates/plugins, apps/desktop, docs/reference/plugins.md
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Plan: Plugin hot reload and developer tools

## Files and ownership

crates/plugins, apps/desktop, docs/reference/plugins.md

## Order of work

The implementation was split across targeted runtime reload, watcher/commands, desktop event and
bridge wiring, Developer settings, documentation, and focused Rust/Bun verification.

## Test-first proof

See legacy Verification section.

## Visual or integration proof

See legacy Verification section.

## Risks and mitigations

See legacy Decision and gates.

## Rollback

See legacy Review and release.

## Deviations

Implementation commit `dc177195221760f56b7ce6ddfc57708ea862c6ac` added the feature. Later Core
boundary refactors moved shared composition to `crates/plugins` without introducing a second
plugin-development path. Current behavior is documented in [`docs/reference/plugins.md`](../../../reference/plugins.md#developing-an-installed-bundle).

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
54 changes: 54 additions & 0 deletions docs/sdlc/changes/2026-08-26-plugin-hot-reload/spec.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
---
id: "2026-08-26-plugin-hot-reload"
stage: spec
schema: 3
status: accepted
owner: repository maintainers
created: 2026-08-26
based_on: intent.md
risk: low
approved_by: "#decision-and-gates"
approved_at: "2026-08-26"
---

# Spec: Plugin hot reload and developer tools

## Requirements

The accepted design required a persisted global developer-mode switch, a native watcher over the
installed Bundle directory, debounced reload of only affected Bundle runtimes, explicit status and
manual reload commands, and a quiet accessible Developer settings surface. Native Rust plugins
remain on the rebuild-and-restart path.

## User experience

Not separately recorded in legacy change.md.

## Technical design

See Requirements and legacy Git history.

## Security and privacy

See migrated Decision and gates.

## Alternatives and non-goals

Not separately recorded in legacy change.md.

## Areas of concern

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.

## Acceptance criteria

- [x] AC-1: Targeted reload replaces the affected Bundle runtime without replacing an unrelated runtime.
- [x] AC-2: Developer mode persists, starts/stops watching, and leaves manual reload available.
- [x] AC-3: Desktop bridge and settings expose status, reload, error, and WebView DevTools behavior.
- [x] AC-4: The installed-directory and native-plugin boundaries are documented.

## Decision

The design and implementation were accepted through GitHub PR #110. Trust remains an execution
Gate for installed process runtimes, and this developer switch does not expand bundle permissions.
Loading