From 237ff491f56b7bdf01d75ab0f7e7596197677a6d Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 16:26:46 +0200 Subject: [PATCH 01/55] chore(wave3): seed @netscript/plugin host run docs Seed run docs for the Wave 3 generator (Research -> Plan & Design): context-pack (points to umbrella deep-dive; MEASURE-FIRST; OQ-A..OQ-F), worklog, drift (stale-canonical + Wave-2 caveats), commits. Branch forked off umbrella 89071df; targets the umbrella PR. Co-Authored-By: Claude Opus 4.8 --- .../commits.md | 10 ++ .../context-pack.md | 96 +++++++++++++++++++ .../drift.md | 25 +++++ .../worklog.md | 21 ++++ 4 files changed, 152 insertions(+) create mode 100644 .llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md create mode 100644 .llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md create mode 100644 .llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md create mode 100644 .llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md new file mode 100644 index 000000000..334a00d8e --- /dev/null +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -0,0 +1,10 @@ +# Commits — feat-package-quality-wave3-plugin--host + +Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-quality-wave3-plugin` + +| # | SHA | Subject | Slice(s) | +|---|-----|---------|----------| +| seed | (this commit) | chore(wave3): seed @netscript/plugin host run docs | — | + +(append one row per slice during Implement; pair each slice commit with its +`docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md new file mode 100644 index 000000000..baeb06556 --- /dev/null +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -0,0 +1,96 @@ +# Context Pack — Wave 3 host: `@netscript/plugin` (A4) + +Run ID: `feat-package-quality-wave3-plugin--host` +Branch: `feat/package-quality-wave3-plugin-host` +Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` (= track `f2a7ff2` + umbrella seed) +PR target: `feat/package-quality-wave3-plugin` (umbrella) — **not** the track. +Role: SEED for the Research → Plan & Design phases, authored by the SUPERVISOR +session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. + +> Read the **umbrella context-pack** first — it holds the full deep-dive: +> `.llm/tmp/run/feat-package-quality-wave3-plugin--umbrella/context-pack.md`. +> This file is the generator-facing entry point and does not duplicate it. + +## One-unit wave + +`@netscript/plugin` only. Archetype **A4 — DSL/Builder (plugin host)**. Gate set +**F-1..F-12, F-14..F-18** (F-13 n/a) + required consumer-import validation + static +gates, per `.llm/harness/gates/archetype-gate-matrix.md`. No sub-wave split. + +## Phase 0 reading (read only what the task needs) + +1. Umbrella context-pack (above) — scope, baseline, deltas, caveats, Concept of Done. +2. `.llm/harness/archetypes/ARCHETYPE-4-*.md` + `gates/archetype-gate-matrix.md` (A4 row). +3. `.llm/harness/lessons/{package-quality-archetype,validation,sub-wave-orchestration,platform}.md` + — the Wave 2 playbook. **package-quality is architectural, not type/lint cleanup.** +4. Canonical (stale, structural intent only): + `…/copilot-evaluate-…/plan_plugin.md` §§2–5, `evaluate_plugin.md`. Treat all + numbers as pre-rewrite. +5. Focused code: `packages/plugin/deno.json`, `mod.ts`, `src/public/mod.ts`, the 8 + exports entrypoints, `loader.ts`, `src/config/builders/plugin-builder.ts`, + `src/sdk/runtime/*`, `src/diagnostics/inspect-plugin.ts`. + +For internal API shape prefer `deno doc packages/plugin/mod.ts` and +`deno doc --filter ` over reading whole files. + +## Research step (MEASURE-FIRST — mandatory before locking the plan) + +The canonical evaluate (5 files, 33 slow types, 0 tests) is **stale**; the package +is already hexagonal with docs + tests. Re-measure at base `89071df` and record real +numbers in `research.md` / `drift.md`: + +- `deno publish --dry-run --allow-dirty` from `packages/plugin` (real slow-type count). +- Full-export `deno doc --lint` over **all 8** entrypoints (`.`, `./abstracts`, + `./config`, `./cli`, `./loader`, `./sdk`, `./testing`, `./templates`) — root-only + undercounts; see `lessons/validation.md`. +- README length / 14-section coverage (currently 139 LOC). +- Test adequacy vs A4 layers (doctest · domain · port-contract · adapter conformance · + runtime lifecycle · DSL/builder ergonomics). +- `deno check --unstable-kv` over all entrypoints (the shipped `tasks.check` only + covers `mod.ts` — F-6 gap). + +## Open questions for Plan & Design (resolve in the plan; do not pre-decide) + +- **OQ-A `./loader` dynamic import:** does `loader.ts`'s `await import(source)` still + block publish (slow types / unanalyzable) ? Keep `./loader` public, internalize it, + or document the runtime-resolvability caveat? Decide with dry-run evidence. +- **OQ-B vocabulary reconciliation:** canonical `plan_plugin.md` §2 wants + `src/{public,domain,ports,application,adapters,runtime,presentation,diagnostics, + testing,internal}`. Repo already has most, plus `config/`, `cli/`, `sdk/`, + `abstracts/`, `kernel/`. Align names or accept the rewrite's vocabulary? Verify + zero external consumers before any subpath/folder rename (alpha = no shims, but + prove it first). F-11 forbids `utils/`/`interfaces/`; F-16 cardinality must hold. +- **OQ-C file-size (F-1):** `plugin-builder.ts` 344 LOC and `docs/plugin-author-guide.md` + 372 LOC vs the doctrine cap — split, or accept with debt? +- **OQ-D `e2e:cli` triggers-health:** is the `localhost:8093/health` failure a + plugin-host bootstrap defect (in `src/sdk/runtime/`) or downstream `plugin-triggers` + (Wave 4)? Investigate before scoping; if downstream, record as carried-forward, do + not fix here. +- **OQ-E `./testing` + defensive I/O:** the host owns watchers/timers + (`sdk/discovery/watcher.ts`, `presets/start-watcher.ts`). Plan an abort/cleanup test + and confirm the `./testing` contract surface is exercised. +- **OQ-F diagnostic axis:** confirm `inspectPlugin` is exported from `mod.ts` and + returns a structured `InspectionReport`. + +## Concept of Done + +See the umbrella context-pack § "Concept of Done". In short: dry-run 0 slow types; +full-export doc-lint 0; README/docs at STANDARDS bar + doctested; A4 test layers; +F-1..F-18 (minus F-13) green or accepted-debt; consumer-import validation green; +task hygiene (`check` all entrypoints + `lint`/`fmt`/`publish:dry-run`). + +## Slice discipline (carry the Wave 2 cadence) + +One commit per slice, each with a single named gate, paired with a +`docs(wave3): record …` run-doc commit. Renames as `git mv`-only slices with the +static gate deferred to the retarget slice (record the transient-failure expectation +in `drift.md`). Final slices: consumer-import gate, then `deno task e2e:cli` once as +merge-readiness (escalate out-of-scope runtime failures, do not block — see +`lessons/validation.md`). + +## Process boundaries (Harness v2) + +- Generator, PLAN-EVAL, IMPL-EVAL are each a SEPARATE session. Evaluator ≠ generator. +- Never delete lock files/caches; never `deno cache --reload` without approval. +- Record every plan deviation in `drift.md`. +- Targeted `deno check` must pass `--unstable-kv`. diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md new file mode 100644 index 000000000..f93a107d1 --- /dev/null +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md @@ -0,0 +1,25 @@ +# Drift Log — feat-package-quality-wave3-plugin--host + +> Record every deviation from the locked `plan.md`, every subpath/folder rename, and +> every MEASURE-FIRST re-baseline finding here. + +## Re-baseline drift (seed) + +| Date | Severity | Item | Evidence | Action | +|------|----------|------|----------|--------| +| 2026-06-08 | note | Canonical `evaluate_plugin.md`/`plan_plugin.md` are pre-rewrite/stale | Canonical: 5 files / 1956 LOC / 33 slow types / 0 tests / no docs. Reality at `89071df`: full hexagonal `src/` layout, 8 exports, README 139 LOC, `docs/` present, 4 test files, `inspectPlugin` shipped. | **MEASURE-FIRST**: re-run full-export `deno doc --lint` (all 8 entrypoints) + `deno publish --dry-run` at base; record real numbers in `research.md` before locking slice effort. | +| 2026-06-08 | note | `plugins/hello-world` removed | Replaced by `packages/plugin/src/templates/skeleton/` (the `netscript plugin scaffold` template). | Canonical hello-world references in `plan_plugin.md` do not apply. No hello-world slice. | + +## Carried-in caveats (from Wave 2 closeout) + +| Item | Decision | Impact | +|------|----------|--------| +| `e2e:cli` `behavior.triggers-health` | Investigate ownership during Research (OQ-D): plugin-host bootstrap (`src/sdk/runtime/*`) vs downstream `plugin-triggers` (Wave 4). | If host defect → fix in-scope; if downstream → carry forward, do not block. | +| `cli-maintainer-sync-isolated-declarations` | Out of scope (Wave 6 CLI). | Recorded in `.llm/harness/debt/arch-debt.md`. Not this wave. | + +## Implementation drift + +(append during Plan + Implement) + +| Date | Severity | Item | Evidence | Action | +|------|----------|------|----------|--------| diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md new file mode 100644 index 000000000..3b9ac32ef --- /dev/null +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -0,0 +1,21 @@ +# Worklog — feat-package-quality-wave3-plugin--host + +Branch: `feat/package-quality-wave3-plugin-host` +Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` + +## Phase log + +| Date | Phase | Session | Notes | +|------|-------|---------|-------| +| 2026-06-08 | Bootstrap | supervisor | Worktree `.worktrees/wave3-plugin-host` + branch forked off umbrella `89071df`. Seed run docs authored (context-pack.md, worklog.md, drift.md, commits.md). Draft PR opened into the umbrella. | +| | Research | generator | (pending) MEASURE-FIRST re-baseline at `89071df`: full-export `deno doc --lint` (all 8 entrypoints) + `deno publish --dry-run` + README/test adequacy. Record real numbers. | +| | Plan & Design | generator | (pending) Lock the slice list + resolve OQ-A..OQ-F. | +| | PLAN-EVAL | evaluator | (pending) Separate session. Hard stop before implementation. | +| | Implement | generator | (pending) Sliced, one commit + paired doc-record per slice. | +| | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | +| | IMPL-EVAL | evaluator | (pending) Separate session. | +| | Close | supervisor | (pending) | + +## Readiness note + +(append at each phase boundary) From 22557b8ec19c229ede7cdb2adc00f7c0d73b7dcd Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 17:18:00 +0200 Subject: [PATCH 02/55] docs(wave3): record @netscript/plugin research, plan, and design checkpoint - research.md: MEASURE-FIRST re-baseline at 89071df - dry-run: 0 slow types, SUCCESS - doc-lint: 93 errors (84 missing-jsdoc + 9 private-type-ref) - README: 138 LOC, 12 sections - tests: 4 files, 13 passing - plan.md: 24 locked slices across Phase A-D - Phase A: doc-lint to zero (8 slices) - Phase B: README + docs (3 slices) - Phase C: task hygiene + testing (7 slices) - Phase D: debt + consumer + merge-readiness (6 slices) - worklog.md: Design checkpoint with public surface, domain vocabulary, ports, constants, slices, deferred scope, contributor path, gate evidence - drift.md: OQ-A..OQ-F resolved with evidence and locked decisions Ready for PLAN-EVAL. --- .../doc-lint-out.txt | 715 ++++++++++++++++++ .../drift.md | 6 + .../dry-run-out.txt | 130 ++++ .../plan.md | 219 ++++++ .../research.md | 172 +++++ .../worklog.md | 141 +++- 6 files changed, 1381 insertions(+), 2 deletions(-) create mode 100644 .llm/tmp/run/feat-package-quality-wave3-plugin--host/doc-lint-out.txt create mode 100644 .llm/tmp/run/feat-package-quality-wave3-plugin--host/dry-run-out.txt create mode 100644 .llm/tmp/run/feat-package-quality-wave3-plugin--host/plan.md create mode 100644 .llm/tmp/run/feat-package-quality-wave3-plugin--host/research.md diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/doc-lint-out.txt b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/doc-lint-out.txt new file mode 100644 index 000000000..1e30d8e8b --- /dev/null +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/doc-lint-out.txt @@ -0,0 +1,715 @@ +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\config\builders\plugin-builder.ts:51:3 +  |  +51 |  constructor(state: PluginBuilderState = { contributions: {} }) { +  |  ^ + + +error[private-type-ref]: public type 'PluginBuilder.prototype.withService' references private type 'ContributionInput' + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\config\builders\plugin-builder.ts:137:3 +  |  +137 |  withService( +  |  ^ + = hint: make the referenced type public or remove the reference +  |  + 22 | type ContributionInput = +  | - this is the referenced type +  |  + + info: to ensure documentation is complete all types that are exposed in the public API must be public + + +error[private-type-ref]: public type 'PluginMetadata' references private type 'PluginMetadataValue' + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\config\domain\plugin-metadata.ts:4:1 +  |  + 4 | export type PluginMetadata = Record; +  | ^ + = hint: make the referenced type public or remove the reference +  |  +19 | export type PluginMetadataValue = +  | - this is the referenced type +  |  + + info: to ensure documentation is complete all types that are exposed in the public API must be public + + +error[private-type-ref]: public type 'PluginType' references private type 'PLUGIN_TYPES' + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\domain\core-types.ts:7:1 +  |  +7 | export type PluginType = (typeof PLUGIN_TYPES)[number]; +  | ^ + = hint: make the referenced type public or remove the reference +  |  +5 | export const PLUGIN_TYPES = ['background-processor', 'api', 'frontend', 'utility'] as const; +  |  - this is the referenced type +  |  + + info: to ensure documentation is complete all types that are exposed in the public API must be public + + +error[private-type-ref]: public type 'PluginContribution.prototype.axis' references private type 'ContributionAxis' + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-contribution.ts:5:3 +  |  +5 |  abstract readonly axis: ContributionAxis; +  |  ^ + = hint: make the referenced type public or remove the reference +  |  +4 | export type ContributionAxis = (typeof CONTRIBUTION_AXES)[number]; +  | - this is the referenced type +  |  + + info: to ensure documentation is complete all types that are exposed in the public API must be public + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-contribution.ts:5:3 +  |  +5 |  abstract readonly axis: ContributionAxis; +  |  ^ + + +error[private-type-ref]: public type 'inspectPlugin' references private type 'InspectablePluginManifest' + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\diagnostics\inspect-plugin.ts:35:1 +  |  +35 | export function inspectPlugin( +  | ^ + = hint: make the referenced type public or remove the reference +  |  + 2 | export interface InspectablePluginManifest { +  | - this is the referenced type +  |  + + info: to ensure documentation is complete all types that are exposed in the public API must be public + + +error[private-type-ref]: public type 'inspectPlugin' references private type 'InspectablePluginRegistry' + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\diagnostics\inspect-plugin.ts:35:1 +  |  +35 | export function inspectPlugin( +  | ^ + = hint: make the referenced type public or remove the reference +  |  +12 | export interface InspectablePluginRegistry { +  | - this is the referenced type +  |  + + info: to ensure documentation is complete all types that are exposed in the public API must be public + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-stream-topic-contribution.ts:8:3 +  |  +8 |  readonly axis = 'stream-topic' as const; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-stream-topic-contribution.ts:9:3 +  |  +9 |  abstract readonly name: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-stream-topic-contribution.ts:10:3 +  |  +10 |  abstract readonly subject: string; +  |  ^ + + +error[private-type-ref]: public type 'PluginStreamTopicContribution.prototype.schema' references private type 'StandardSchemaV1' + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-stream-topic-contribution.ts:11:3 +  |  +11 |  abstract readonly schema: StandardSchemaV1; +  |  ^ + = hint: make the referenced type public or remove the reference +  |  +29 | interface StandardSchemaV1 { +  | - this is the referenced type +  |  + + info: to ensure documentation is complete all types that are exposed in the public API must be public + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-stream-topic-contribution.ts:11:3 +  |  +11 |  abstract readonly schema: StandardSchemaV1; +  |  ^ + + +error[private-type-ref]: public type 'PluginManifestSchema' references private type 'ZodType' + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\config\validators\manifest-schema.ts:4:14 +  |  +4 | export const PluginManifestSchema: z.ZodType = z.object({ +  |  ^ + = hint: make the referenced type public or remove the reference +  |  +6 | export interface ZodType = core.$ZodTypeInternals> extends core.$ZodType { +  | - this is the referenced type +  |  + + info: to ensure documentation is complete all types that are exposed in the public API must be public + + +error[private-type-ref]: public type 'MemoryFileSystemAdapter' references private type 'FileSystemPort' + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\adapters\memory-file-system-adapter.ts:4:1 +  |  +4 | export class MemoryFileSystemAdapter implements FileSystemPort { +  | ^ + = hint: make the referenced type public or remove the reference +  |  +2 | export interface FileSystemPort { +  | - this is the referenced type +  |  + + info: to ensure documentation is complete all types that are exposed in the public API must be public + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\adapters\memory-file-system-adapter.ts:5:3 +  |  +5 |  readonly files: Map = new Map(); +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\adapters\memory-file-system-adapter.ts:7:3 +  |  +7 |  async readText(path: string): Promise { +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\adapters\memory-file-system-adapter.ts:11:3 +  |  +11 |  async writeText(path: string, text: string): Promise { +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\adapters\memory-file-system-adapter.ts:15:3 +  |  +15 |  async exists(path: string): Promise { +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\domain\errors.ts:3:3 +  |  +3 |  constructor(message: string, options?: ErrorOptions) { +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\domain\errors.ts:11:3 +  |  +11 |  constructor(message: string, readonly issues: readonly string[] = []) { +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\domain\errors.ts:19:3 +  |  +19 |  constructor(name: string) { +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-aspire-contribution.ts:5:3 +  |  +5 |  readonly axis = 'aspire' as const; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-aspire-contribution.ts:6:3 +  |  +6 |  abstract readonly modulePath: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-background-processor-contribution.ts:5:3 +  |  +5 |  readonly axis = 'background-processor' as const; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-background-processor-contribution.ts:6:3 +  |  +6 |  abstract readonly name: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-background-processor-contribution.ts:7:3 +  |  +7 |  abstract readonly entrypoint: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-contract-version-contribution.ts:5:3 +  |  +5 |  readonly axis = 'contract-version' as const; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-contract-version-contribution.ts:6:3 +  |  +6 |  abstract readonly version: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-contract-version-contribution.ts:7:3 +  |  +7 |  abstract readonly loader: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-db-schema-contribution.ts:5:3 +  |  +5 |  readonly axis = 'database-schema' as const; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-db-schema-contribution.ts:6:3 +  |  +6 |  abstract readonly path: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-db-schema-contribution.ts:7:3 +  |  +7 |  abstract readonly engine?: 'postgres' | 'mysql' | 'mssql' | 'sqlite'; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-e2e-contribution.ts:5:3 +  |  +5 |  readonly axis = 'e2e' as const; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-e2e-contribution.ts:6:3 +  |  +6 |  abstract readonly name: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-e2e-contribution.ts:7:3 +  |  +7 |  abstract readonly command: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-migration-contribution.ts:5:3 +  |  +5 |  readonly axis = 'migration' as const; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-migration-contribution.ts:6:3 +  |  +6 |  abstract readonly name: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-migration-contribution.ts:7:3 +  |  +7 |  abstract readonly path: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-runtime-config-topic-contribution.ts:5:3 +  |  +5 |  readonly axis = 'runtime-config-topic' as const; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-runtime-config-topic-contribution.ts:6:3 +  |  +6 |  abstract readonly name: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-runtime-config-topic-contribution.ts:7:3 +  |  +7 |  abstract readonly schemaPath?: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-service-contribution.ts:5:3 +  |  +5 |  readonly axis = 'service' as const; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-service-contribution.ts:6:3 +  |  +6 |  abstract readonly name: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-service-contribution.ts:7:3 +  |  +7 |  abstract readonly entrypoint: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-telemetry-contribution.ts:5:3 +  |  +5 |  readonly axis = 'telemetry' as const; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-telemetry-contribution.ts:6:3 +  |  +6 |  abstract readonly name: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\abstracts\plugin-telemetry-contribution.ts:7:3 +  |  +7 |  abstract readonly module: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\cli\types.ts:3:3 +  |  +3 |  readonly command: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\cli\types.ts:4:3 +  |  +4 |  readonly flags?: Record; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\cli\types.ts:5:3 +  |  +5 |  readonly values?: readonly string[]; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\cli\types.ts:10:3 +  |  +10 |  readonly code: number; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\cli\types.ts:11:3 +  |  +11 |  readonly message?: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\cli\types.ts:12:3 +  |  +12 |  readonly data?: unknown; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\cli\types.ts:17:3 +  |  +17 |  readonly name: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\cli\types.ts:18:3 +  |  +18 |  readonly description: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\cli\types.ts:19:3 +  |  +19 |  readonly run: (args: PluginCliArgs) => PluginCliResult | Promise; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\cli\base\plugin-cli.ts:5:3 +  |  +5 |  abstract readonly name: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\cli\base\plugin-cli.ts:6:3 +  |  +6 |  abstract readonly description: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\cli\base\plugin-item-scaffolder.ts:3:3 +  |  +3 |  readonly files: readonly string[]; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\cli\base\plugin-item-scaffolder.ts:4:3 +  |  +4 |  readonly warnings?: readonly string[]; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\cli\base\plugin-item-scaffolder.ts:9:3 +  |  +9 |  abstract readonly itemName: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\cli\base\plugin-runtime-config-cli.ts:5:3 +  |  +5 |  abstract readonly topic: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\cli\base\doctor-report.ts:3:3 +  |  +3 |  readonly name: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\cli\base\doctor-report.ts:4:3 +  |  +4 |  readonly ok: boolean; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\cli\base\doctor-report.ts:5:3 +  |  +5 |  readonly message?: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\cli\base\doctor-report.ts:10:3 +  |  +10 |  readonly plugin: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\cli\base\doctor-report.ts:11:3 +  |  +11 |  readonly checks: readonly DoctorCheck[]; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\discovery\ast-extractor.ts:12:3 +  |  +12 |  async extract(files: readonly WalkedFile[]): Promise { +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\discovery\manifest-resolver.ts:8:3 +  |  +8 |  constructor(private readonly manifest: PluginManifest | undefined = undefined) {} +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\discovery\manifest-resolver.ts:10:3 +  |  +10 |  async resolve(_spec: string): Promise { +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\discovery\manifest-resolver.ts:23:3 +  |  +23 |  constructor(private readonly options: ModuleManifestResolverOptions) {} +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\discovery\registry-emitter.ts:6:3 +  |  +6 |  async emit( +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\discovery\source-graph.ts:6:3 +  |  +6 |  readonly files: readonly WalkedFile[]; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\discovery\source-graph.ts:7:3 +  |  +7 |  readonly contributions: readonly ExtractedContribution[]; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\discovery\watcher.ts:3:3 +  |  +3 |  readonly stop: () => Promise; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\discovery\ports\emitter-port.ts:5:3 +  |  +5 |  readonly path: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\discovery\ports\emitter-port.ts:6:3 +  |  +6 |  readonly text: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\discovery\ports\emitter-port.ts:11:3 +  |  +11 |  emit(contributions: readonly ExtractedContribution[]): Promise; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\discovery\ports\extractor-port.ts:5:3 +  |  +5 |  readonly file: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\discovery\ports\extractor-port.ts:6:3 +  |  +6 |  readonly symbol: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\discovery\ports\extractor-port.ts:7:3 +  |  +7 |  readonly axis: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\discovery\ports\extractor-port.ts:12:3 +  |  +12 |  extract(files: readonly WalkedFile[]): Promise; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\discovery\ports\manifest-resolver-port.ts:5:3 +  |  +5 |  resolve(spec: string): Promise; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\discovery\ports\walker-port.ts:3:3 +  |  +3 |  readonly path: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\discovery\ports\walker-port.ts:4:3 +  |  +4 |  readonly text: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\discovery\ports\walker-port.ts:9:3 +  |  +9 |  walk(root: string): Promise; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\application\run-walker-pipeline.ts:7:3 +  |  +7 |  readonly root: string; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\application\run-walker-pipeline.ts:8:3 +  |  +8 |  readonly walker: WalkerPort; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\application\run-walker-pipeline.ts:9:3 +  |  +9 |  readonly extractor: ExtractorPort; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\application\run-walker-pipeline.ts:10:3 +  |  +10 |  readonly emitter: EmitterPort; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\runtime\instrumentation-bridge.ts:3:3 +  |  +3 |  readonly register: (name: string) => void; +  |  ^ + + +error[missing-jsdoc]: exported symbol is missing JSDoc documentation + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\runtime\plugin-host-bootstrap.ts:5:3 +  |  +5 |  readonly plugins: readonly PluginManifest[]; +  |  ^ + + +error: Found 93 documentation lint errors. diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md index f93a107d1..82b9e9cd1 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md @@ -23,3 +23,9 @@ | Date | Severity | Item | Evidence | Action | |------|----------|------|----------|--------| +| 2026-06-08 | note | OQ-A resolved: `./loader` has no dynamic import | `loader.ts` is 64 LOC, exports `PluginLogger` + `createPluginLogger`. The `unanalyzable-dynamic-import` warning is in `src/sdk/discovery/manifest-resolver.ts` ( `./sdk` entrypoint). | Keep `./loader` public. Document `./sdk` runtime caveat in module JSDoc. | +| 2026-06-08 | note | OQ-B resolved: accept rewrite vocabulary | Current folders: `abstracts/`, `adapters/`, `application/`, `cli/`, `config/`, `diagnostics/`, `domain/`, `kernel/`, `ports/`, `public/`, `sdk/`, `templates/`, `testing/`. No `utils/`/`interfaces/`. F-16 cardinality holds. | No renames. Record as locked decision LD-2. | +| 2026-06-08 | note | OQ-C resolved: accept `plugin-builder.ts` 343 LOC with debt | Typestate-generic builder; splitting risks breaking compile-time chain. | Create debt entry in `arch-debt.md` with closing gate "pre-beta builder refactor". | +| 2026-06-08 | note | OQ-D resolved: `e2e:cli` triggers-health is downstream | `src/sdk/runtime/*` are stubs (bootstrap 13 LOC, context 17 LOC, service-context 20 LOC). Failure is in generated trigger service, not host bootstrap. | Carry forward to Wave 4. Do not fix here. | +| 2026-06-08 | note | OQ-E resolved: `./testing` is exercised | Memory adapters used by `walker-ports_test.ts` and `plugin-registry_test.ts`. | Add `tests/sdk/watcher-cleanup_test.ts` as defensive I/O proof. | +| 2026-06-08 | note | OQ-F resolved: `inspectPlugin` exported and typed | Exported from `mod.ts` line 43, returns `InspectionReport`. `private-type-ref` on `InspectablePluginManifest`/`InspectablePluginRegistry` because not re-exported through barrel. | Export through `src/diagnostics/mod.ts` and `mod.ts` in Slice 1. | diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/dry-run-out.txt b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/dry-run-out.txt new file mode 100644 index 000000000..53a910695 --- /dev/null +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/dry-run-out.txt @@ -0,0 +1,130 @@ +Checking for slow types in the public API... +warning[unanalyzable-dynamic-import]: unable to analyze dynamic import + --> C:\Dev\repos\netscript\output\test-app\worktrees\repo-genesis\.genesis\netscript\.worktrees\wave3-plugin-host\packages\plugin\src\sdk\discovery\manifest-resolver.ts:30:29 +  |  +30 |  module = await import(specifier) as { readonly default?: PluginManifest }; +  |  ^^^^^^^^^ the unanalyzable dynamic import +  |  + + info: after publishing this package, imports from the local import map / package.json do not work + info: dynamic imports that can not be analyzed at publish time will not be rewritten automatically + info: make sure the dynamic import is resolvable at runtime without an import map / package.json + +Simulating publish of @netscript/plugin@0.0.1-alpha.0 with files: + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/README.md (4.76KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/deno.json (1.46KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/docs/README.md (162B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/docs/architecture.md (297B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/docs/concepts.md (293B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/docs/getting-started.md (223B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/docs/plugin-author-guide.md (11.27KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/docs/recipes/create-plugin.md (173B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/docs/reference/README.md (108B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/loader.ts (2.31KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/mod.ts (1.48KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/abstracts/mod.ts (930B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/abstracts/plugin-aspire-contribution.ts (285B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/abstracts/plugin-background-processor-contribution.ts (361B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/abstracts/plugin-contract-version-contribution.ts (348B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/abstracts/plugin-contribution.ts (212B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/abstracts/plugin-db-schema-contribution.ts (372B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/abstracts/plugin-e2e-contribution.ts (315B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/abstracts/plugin-migration-contribution.ts (323B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/abstracts/plugin-runtime-config-topic-contribution.ts (361B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/abstracts/plugin-service-contribution.ts (323B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/abstracts/plugin-stream-topic-contribution.ts (489B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/abstracts/plugin-telemetry-contribution.ts (325B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/adapters/filesystem-scaffolder.ts (1.02KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/adapters/memory-file-system-adapter.ts (544B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/adapters/mod.ts (295B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/adapters/string-template-adapter.ts (342B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/application/mod.ts (114B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/application/plugin-loader.ts (358B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/application/plugin-registry.ts (785B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/cli/base/doctor-report.ts (522B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/cli/base/plugin-cli.ts (989B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/cli/base/plugin-item-scaffolder.ts (591B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/cli/base/plugin-runtime-config-cli.ts (476B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/cli/composition/cliffy-runner.ts (512B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/cli/composition/mount-plugin-cli.ts (423B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/cli/mod.ts (777B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/cli/presentation/help-formatter.ts (293B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/cli/presentation/verb-router.ts (433B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/cli/types.ts (625B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/application/contribution-merger.ts (1.11KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/builders/define-plugin.ts (386B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/builders/plugin-builder.ts (12.02KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/domain/background-processor-contribution.ts (314B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/domain/contract-version-contribution.ts (270B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/domain/contribution-axes.ts (58B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/domain/db-schema-contribution.ts (285B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/domain/e2e-contribution.ts (223B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/domain/migration-contribution.ts (219B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/domain/plugin-contributions.ts (2KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/domain/plugin-dependencies.ts (210B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/domain/plugin-lifecycle-hooks.ts (674B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/domain/plugin-manifest.ts (1.4KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/domain/plugin-metadata.ts (181B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/domain/runtime-config-topic-contribution.ts (263B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/domain/service-contribution.ts (269B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/domain/stream-topic-contribution.ts (219B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/domain/telemetry-contribution.ts (249B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/mod.ts (1.66KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/validators/contribution-axis-validator.ts (272B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/validators/manifest-schema.ts (889B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/config/validators/reserved-names.ts (252B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/diagnostics/inspect-plugin.ts (2.22KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/diagnostics/inspect-walker-output.ts (280B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/diagnostics/mod.ts (183B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/domain/constants.ts (999B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/domain/core-types.ts (1.88KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/domain/errors.ts (746B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/domain/installed-version.ts (175B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/domain/mod.ts (529B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/kernel/assets/template-registry.ts (1.26KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/ports/file-system-port.ts (243B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/ports/mod.ts (180B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/ports/scaffolder-port.ts (159B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/ports/template-port.ts (164B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/public/mod.ts (321B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/sdk/application/run-walker-pipeline.ts (820B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/sdk/discovery/ast-extractor.ts (3.56KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/sdk/discovery/filesystem-walker.ts (1.72KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/sdk/discovery/manifest-resolver.ts (2.42KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/sdk/discovery/ports/emitter-port.ts (401B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/sdk/discovery/ports/extractor-port.ts (426B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/sdk/discovery/ports/manifest-resolver-port.ts (253B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/sdk/discovery/ports/walker-port.ts (278B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/sdk/discovery/registry-emitter.ts (2.89KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/sdk/discovery/source-graph.ts (591B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/sdk/discovery/watcher.ts (299B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/sdk/mod.ts (1.78KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/sdk/presets/start-walker.ts (667B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/sdk/presets/start-watcher.ts (276B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/sdk/runtime/doctor-runner.ts (262B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/sdk/runtime/instrumentation-bridge.ts (462B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/sdk/runtime/plugin-context.ts (453B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/sdk/runtime/plugin-host-bootstrap.ts (390B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/sdk/runtime/plugin-service-context.ts (801B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/templates/mod.ts (248B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/templates/skeleton/README.md.template (4.67KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/templates/skeleton/deno.json.template (1.36KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/templates/skeleton/docs/architecture.md.template (735B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/templates/skeleton/mod.ts.template (1.35KB) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/templates/skeleton/src/aspire/%7B%7Bplugin-name%7D%7D-contribution.ts.template (294B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/templates/skeleton/src/aspire/mod.ts.template (191B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/templates/skeleton/src/cli/%7B%7Bplugin-name%7D%7D-cli.ts.template (479B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/templates/skeleton/src/cli/composition/main.ts.template (409B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/templates/skeleton/src/e2e/mod.ts.template (451B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/templates/skeleton/src/public/mod.ts.template (233B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/templates/skeleton/src/scaffolding/mod.ts.template (254B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/templates/skeleton/src/testing/mod.ts.template (279B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/templates/skeleton/tests/_fixtures/readme-examples_test.ts.template (205B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/testing/manifest-fixtures.ts (373B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/testing/memory-emitter.ts (67B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/testing/memory-manifest-resolver.ts (57B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/testing/memory-walker.ts (67B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/testing/mod.ts (444B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/testing/plugin-cli-contract.ts (247B) + file:///C:/Dev/repos/netscript/output/test-app/worktrees/repo-genesis/.genesis/netscript/.worktrees/wave3-plugin-host/packages/plugin/src/testing/walker-fixtures.ts (215B) +Success Dry run complete diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/plan.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/plan.md new file mode 100644 index 000000000..02400bcad --- /dev/null +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/plan.md @@ -0,0 +1,219 @@ +# Plan: `@netscript/plugin` (A4 — DSL/Builder, plugin host) + +## Run Metadata + +| Field | Value | +| -------------- | ----------------------------------- | +| Run ID | `feat-package-quality-wave3-plugin--host` | +| Branch | `feat/package-quality-wave3-plugin-host` | +| Phase | `plan` | +| Target | `@netscript/plugin` | +| Archetype | **A4 — Public DSL/Builder** | +| Scope overlays | none | + +## Archetype + +**A4 — Public DSL/Builder** is the correct archetype because the package's primary product is the `definePlugin()` fluent builder and the `PluginBuilder` typestate-generic class. The package also owns a registry (`PluginRegistry`), abstract contribution bases (`PluginContribution` hierarchy), CLI contracts (`PluginCli`), SDK discovery ports, and diagnostics (`inspectPlugin`). The builder is the 80% path; everything else supports it. + +## Current Doctrine Verdict + +From `docs/architecture/doctrine/10-codebase-verdict-and-handoff.md`: + +> `packages/plugin` — **Refactor** (AP-1: pre-rewrite `types.ts` was 1,005 LOC). The package has since been restructured into a full hexagonal `src/` layout with role-named folders. The remaining concern is file-size discipline on the builder (343 LOC vs 300 cap). + +**Action:** Close the old `types.ts` debt entry; open a new one for `plugin-builder.ts` size. + +## Axioms in Play + +| Axiom | Why it matters | +|-------|---------------| +| A1 | Public types first — the builder's generic state must be stable before any implementation slice. | +| A2 | Simple over easy at published boundaries — `definePlugin(name, version)` is one call; the chain is optional. | +| A3 | 80% path is one chained call — `definePlugin(...).withService(...).build()`. | +| A6 | Helpers must be justified — `safeStringifyMetadata` in `loader.ts` is a narrow, justified helper. | +| A8 | One concern per folder — `config/`, `cli/`, `sdk/`, `adapters/`, `testing/` are each single-concern. | +| A9 | Archetype drives package shape — A4 requires builder split by concern; we accept debt on the single-file builder. | +| A10 | Composition root over container — `mountPluginCli`, `runWalkerPipeline` are composition functions, not DI containers. | +| A14 | Tests and gates preserve doctrine — every slice is gated. | + +## Goal + +Bring `@netscript/plugin` to the A4 enterprise bar: + +- `deno publish --dry-run` 0 slow types (already ✅) +- Full-export `deno doc --lint` 0 errors across all 8 entrypoints +- README ≥150 LOC / 14 sections, doctested +- A4 test layers present and passing +- F-1..F-12, F-14..F-18 green or accepted-debt +- Consumer-import validation green +- Task hygiene: `check` enumerates all 8 entrypoints + `lint`/`fmt`/`publish:dry-run` + +## Scope + +- Fix 93 `deno doc --lint` errors (84 missing-jsdoc + 9 private-type-ref) +- Expand README from 138 → ≥150 LOC, add missing sections +- Add `lint` and `fmt` tasks to `deno.json` +- Expand `tasks.check` to enumerate all 8 exports entrypoints +- Add domain unit tests (`tests/domain/errors_test.ts`, `tests/domain/core-types_test.ts`) +- Add adapter conformance test (`tests/adapters/memory-file-system_test.ts`) +- Add defensive I/O watcher cleanup test (`tests/sdk/watcher-cleanup_test.ts`) +- Export `InspectablePluginManifest` / `InspectablePluginRegistry` through public barrel +- Document `./sdk` dynamic-import runtime caveat in module JSDoc +- Update `arch-debt.md`: close old `types.ts` entry, open `plugin-builder.ts` size entry + +## Non-Scope + +- Split `plugin-builder.ts` (deferred to pre-beta; recorded as debt) +- Fix `e2e:cli` `behavior.triggers-health` (downstream Wave 4) +- Rename folders (`config/`, `cli/`, `sdk/`, `abstracts/`, `kernel/` are accepted vocabulary) +- Add new contribution axes or builder methods +- Runtime lifecycle implementation (stubs remain stubs) +- AST extractor precision improvements (PLG-WALKER-AST debt) + +## Hidden Scope + +- `mod.ts` may need additional type re-exports as `private-type-ref` fixes surface new public types +- `src/diagnostics/mod.ts` barrel expansion to re-export inspection interfaces +- `src/config/mod.ts` may need `ContributionInput` export +- `src/domain/mod.ts` may need `PLUGIN_TYPES` and `PluginMetadataValue` re-exports + +## Locked Decisions + +| ID | Decision | Rationale | +|----|----------|-----------| +| LD-1 | Keep `./loader` public | No dynamic import in `loader.ts`; exports stable `PluginLogger` + `createPluginLogger`. Warning is in `./sdk`'s `ModuleManifestResolver`. | +| LD-2 | Accept rewrite vocabulary (`config/`, `cli/`, `sdk/`, `abstracts/`, `kernel/`) | Satisfies F-11 (no forbidden folders) and F-16 (cardinality). Zero external consumers of subpaths that would break. Canonical tree was intent, not mandate. | +| LD-3 | Accept `plugin-builder.ts` 343 LOC with debt | Typestate-generic builder; splitting risks breaking compile-time chain. Target pre-beta refactor. | +| LD-4 | `e2e:cli` triggers-health is downstream (Wave 4) | `src/sdk/runtime/*` are stubs; failure is in generated trigger service, not host bootstrap. | +| LD-5 | `./testing` surface is exercised | Memory adapters used by `walker-ports_test.ts` and `plugin-registry_test.ts`. Add trivial cleanup test. | +| LD-6 | `inspectPlugin` is correctly exported and typed | Returns `InspectionReport`. Fix `private-type-ref` by exporting `InspectablePluginManifest`/`InspectablePluginRegistry` through barrels. | +| LD-7 | Group doc-lint fixes into 3 mechanical slices | `private-type-ref` (9), abstracts JSDoc (~33), remaining JSDoc (~51). All additive, no API changes. | + +## Open-Decision Sweep + +| Decision | Status | Notes | +|----------|--------|-------| +| README section ordering | safe to defer | Can reorder during README expansion slice; no code dependencies. | +| Whether to add `@example` to every abstract property | safe to defer | JSDoc slice can decide per-symbol; no structural impact. | +| `plugin-builder.ts` pre-beta split strategy | safe to defer | Debt entry captures this; implementation not in this wave. | + +**No decisions marked "must resolve now" — all load-bearing questions are locked above.** + +## Risk Register + +| Risk | Mitigation | +|------|-----------| +| Doc-lint 93 errors takes more slices than planned | Grouped into 3 additive slices; no API changes; each is independently gateable. | +| `e2e:cli` fails on unrelated runtime at merge-readiness | Escalate to Wave 4; do not block. Record in drift. | +| Consumer-import gate surfaces pre-existing CLI slow types | Attribution rule: diff against base; byte-identical = pre-existing debt (`cli-maintainer-sync-isolated-declarations`). | +| README expansion accidentally changes API examples | Doctest slice validates; `readme-examples_test.ts` must pass after README edits. | + +## Anti-Patterns to Resolve or Avoid + +| AP | Status | Plan | +|----|--------|------| +| AP-1 (builder barrel contains all concerns) | **existing / accepted-debt** | `plugin-builder.ts` is 343 LOC; recorded as debt. Not fixed in this wave. | +| AP-7 (long positional constructor args) | **not present** | `PluginBuilder` constructor takes a single state object. | +| AP-9 (typestate before broken-order problem) | **not present** | Typestate enforces `name` + `version` before `build()`; justified. | +| AP-14 (re-exporting upstream DSL deps) | **not present** | Zod types are not re-exported at root. | +| AP-15 (names expose implementation roles) | **not present** | `withService`, `withDbSchemas` use caller vocabulary. | + +## Fitness Gates + +| Gate | Required | Expected evidence | +|------|----------|-------------------| +| F-1 File-size lint | yes | `plugin-builder.ts` = 343 LOC; **DEBT_ACCEPTED** with registry entry | +| F-2 Helper-reinvention scan | yes | Manual: `safeStringifyMetadata` is justified; no `@std/*` equivalent for circular-safe JSON. | +| F-3 Layering check | yes | Manual: `domain/` imports no implementation; `ports/` imports `domain/` only; `application/` imports `domain/` + `ports/`; `adapters/` imports `domain/` + `ports/` + external; `presentation/` (CLI) imports `application/` + `domain/`. | +| F-4 Inheritance audit | yes | Manual: `PluginContribution` is abstract base; 11 derived classes co-located in `src/abstracts/`. No deep hierarchies. | +| F-5 Public surface audit | yes | Manual: 8 entrypoints, curated root barrel, no root leakage of implementation. | +| F-6 JSR publishability | yes | `deno publish --dry-run --allow-dirty` = SUCCESS (0 slow types) | +| F-7 Doc-score gate | yes | Full-export `deno doc --lint` = 0 errors across all 8 entrypoints | +| F-8 Workspace lib check | yes | `deno check --unstable-kv` passes all 8 entrypoints | +| F-9 Permission decl check | yes | `tests/sdk/walker-ports_test.ts` declares `{ permissions: { read: true, write: true } }` | +| F-10 Test-shape audit | yes | 13 tests across 4 files + new tests; no Jest/Vitest globals; no "happy path" names. | +| F-11 Forbidden-folder lint | yes | No `utils/`, `interfaces/`, `helpers/`, `common/`, `lib/`. | +| F-12 Naming-convention lint | yes | Manual: `withNoun`, `createNoun`, `isAdjective`, `runVerb` patterns. No `get`/`find`/`sort`/`merge` prefixes on public API. | +| F-14 Console-log lint | yes | Manual: `loader.ts` uses `console.log`/`warn`/`error` inside `writePluginLog` — justified as a logger sink adapter. No stray `console.log` in library code. | +| F-15 Re-export-upstream lint | yes | Manual: No Zod/Cliffy/StandardSchema re-exports at root. | +| F-16 Folder-cardinality lint | yes | Manual: Every role folder has ≥2 siblings or subfolders. `public/` (1 file) and `kernel/` (1 subfolder) are justified. | +| F-17 Abstract-derived co-location | yes | Manual: `PluginContribution` + 11 derived classes all in `src/abstracts/`. | +| F-18 Sub-barrel lint | yes | Manual: No nested `mod.ts` barrels that re-export from sibling barrels. Each `mod.ts` is a leaf barrel for its folder. | + +## Arch-Debt Implications + +| Entry | Action | Notes | +|-------|--------|-------| +| `packages/plugin — AP-1 / doctrine verdict Restructure (types.ts 1,005 LOC)` | **close** | `types.ts` no longer exists; package restructured. | +| `packages/plugin/src/config/builders/plugin-builder.ts — F-1 size` | **create** | 343 LOC vs 300 cap. Closing gate: "pre-beta builder refactor". Owner: Wave 3 generator. | +| `packages/plugin/src/sdk/discovery/ast-extractor.ts — PLG-WALKER-AST` | **leave open** | Extractor precision; not this wave. | + +## Validation Plan + +| Order | Gate | Command or check | Expected result | +|-------|------|-----------------|-----------------| +| 1 | Static | `deno check --unstable-kv mod.ts src/abstracts/mod.ts src/config/mod.ts src/cli/mod.ts loader.ts src/sdk/mod.ts src/testing/mod.ts src/templates/mod.ts` | 0 errors | +| 2 | Static | `deno publish --dry-run --allow-dirty` | SUCCESS, 0 slow types | +| 3 | F-7 | `deno doc --lint mod.ts src/abstracts/mod.ts src/config/mod.ts src/cli/mod.ts loader.ts src/sdk/mod.ts src/testing/mod.ts src/templates/mod.ts` | 0 errors | +| 4 | F-10 | `deno test --allow-all` | All tests pass | +| 5 | F-6/F-7 | `deno task publish:dry-run` | SUCCESS | +| 6 | Consumer | `deno check --unstable-kv` on consumers importing `@netscript/plugin` | 0 errors (attributed to this wave) | +| 7 | Merge-readiness | `deno task e2e:cli` | Run once; escalate unrelated runtime failures | + +## Dependencies + +- `packages/cli` imports `@netscript/plugin` root — consumer-import gate must validate +- `plugins/triggers`, `plugins/workers`, `plugins/streams`, `plugins/sagas` may import `@netscript/plugin` — verify during consumer gate +- No external dependencies beyond `@std/*`, `zod`, `@standard-schema/spec` + +## Slice List (24 slices) + +### Phase A: Doc-lint to zero (slices 1–8) + +| # | Slice | Gate | Files | +|---|-------|------|-------| +| 1 | Export private types for `private-type-ref` fix | F-7 | `src/config/builders/plugin-builder.ts`, `src/config/domain/plugin-metadata.ts`, `src/domain/core-types.ts`, `src/abstracts/plugin-contribution.ts`, `src/diagnostics/inspect-plugin.ts`, `src/diagnostics/mod.ts`, `src/abstracts/plugin-stream-topic-contribution.ts`, `src/config/validators/manifest-schema.ts`, `mod.ts` | +| 2 | JSDoc abstract contribution classes (part 1) | F-7 | `src/abstracts/plugin-aspire-contribution.ts`, `plugin-background-processor-contribution.ts`, `plugin-contract-version-contribution.ts`, `plugin-db-schema-contribution.ts`, `plugin-e2e-contribution.ts` | +| 3 | JSDoc abstract contribution classes (part 2) | F-7 | `src/abstracts/plugin-migration-contribution.ts`, `plugin-runtime-config-topic-contribution.ts`, `plugin-service-contribution.ts`, `plugin-stream-topic-contribution.ts`, `plugin-telemetry-contribution.ts`, `plugin-contribution.ts` | +| 4 | JSDoc builder + errors + adapters | F-7 | `src/config/builders/plugin-builder.ts`, `src/domain/errors.ts`, `src/adapters/memory-file-system-adapter.ts` | +| 5 | JSDoc remaining SDK + runtime + diagnostics | F-7 | `src/sdk/discovery/*.ts`, `src/sdk/runtime/*.ts`, `src/sdk/presets/*.ts`, `src/diagnostics/inspect-walker-output.ts` | +| 6 | JSDoc CLI + application + ports | F-7 | `src/cli/**/*.ts`, `src/application/*.ts`, `src/ports/*.ts` | +| 7 | JSDoc config domain + validators + testing | F-7 | `src/config/domain/*.ts`, `src/config/validators/*.ts`, `src/config/application/*.ts`, `src/testing/*.ts` | +| 8 | Verify full-export doc-lint = 0 | F-7 | Run gate; record result | + +### Phase B: README + docs (slices 9–11) + +| # | Slice | Gate | Files | +|---|-------|------|-------| +| 9 | Expand README to ≥150 LOC, add missing sections | F-7 | `README.md` | +| 10 | Doctest README examples | F-10 | `tests/_fixtures/readme-examples_test.ts` | +| 11 | Document `./sdk` dynamic-import caveat | F-7 | `src/sdk/mod.ts` module JSDoc | + +### Phase C: Task hygiene + testing (slices 12–18) + +| # | Slice | Gate | Files | +|---|-------|------|-------| +| 12 | Add `lint`/`fmt` tasks to `deno.json` | F-6 | `deno.json` | +| 13 | Expand `tasks.check` to all 8 entrypoints | F-6 | `deno.json` | +| 14 | Add domain unit tests (errors, core-types) | F-10 | `tests/domain/errors_test.ts`, `tests/domain/core-types_test.ts` | +| 15 | Add adapter conformance test (memory file system) | F-10 | `tests/adapters/memory-file-system_test.ts` | +| 16 | Add defensive I/O watcher cleanup test | F-10 | `tests/sdk/watcher-cleanup_test.ts` | +| 17 | Add `tests/application/plugin-loader_test.ts` | F-10 | `tests/application/plugin-loader_test.ts` | +| 18 | Run full test suite | F-10 | `deno test --allow-all` | + +### Phase D: Debt + consumer + merge-readiness (slices 19–24) + +| # | Slice | Gate | Files | +|---|-------|------|-------| +| 19 | Update `arch-debt.md`: close old entry, open builder size entry | F-1 (debt) | `.llm/harness/debt/arch-debt.md` | +| 20 | Verify F-1..F-18 manual evidence | Static | `worklog.md` evidence table | +| 21 | Consumer-import validation: `packages/cli` | Consumer | `deno check` on CLI files importing `@netscript/plugin` | +| 22 | Consumer-import validation: plugins | Consumer | `deno check` on `plugins/*` importing `@netscript/plugin` | +| 23 | Final publish dry-run + static gate sweep | F-6/F-7/F-8 | `deno task publish:dry-run`, `deno task check`, `deno task lint`, `deno task fmt --check` | +| 24 | Merge-readiness: `deno task e2e:cli` | Runtime | Run once; escalate unrelated failures | + +## Drift Watch + +- If `deno doc --lint` surfaces new errors after any slice, append to drift and add a catch-up slice +- If consumer gate fails on a file byte-identical to base, record as pre-existing debt +- If `e2e:cli` fails on `behavior.triggers-health`, record as Wave 4 carry-forward diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/research.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/research.md new file mode 100644 index 000000000..db609b2f0 --- /dev/null +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/research.md @@ -0,0 +1,172 @@ +# Research — `@netscript/plugin` (A4) at base `89071df` + +> Re-baseline of canonical `evaluate_plugin.md`/`plan_plugin.md` (pre-rewrite, 5 files / 33 slow types / 0 tests). All canonical numbers are stale; the package was fully restructured into a hexagonal `src/` layout. + +## 1. `deno publish --dry-run --allow-dirty` + +| Metric | Value | +|--------|-------| +| Slow types | **0** | +| Errors | **0** | +| Warnings | 1 (`unanalyzable-dynamic-import` in `src/sdk/discovery/manifest-resolver.ts:30`) | +| Verdict | **SUCCESS** | + +**Delta from canonical:** canonical reported 33 slow types + FAIL. The rewrite already eliminated all slow types. The remaining warning is a benign runtime-resolvability notice on `ModuleManifestResolver` (not `./loader`). + +## 2. Full-export `deno doc --lint` (all 8 entrypoints) + +| Metric | Value | +|--------|-------| +| Total errors | **93** | +| `missing-jsdoc` | **84** | +| `private-type-ref` | **9** | +| Verdict | **FAIL** (must reach 0) | + +**Per-category breakdown:** + +### `private-type-ref` (9 errors — mechanical fixes) +| File | Private type | Fix | +|------|-------------|-----| +| `src/config/builders/plugin-builder.ts` | `ContributionInput` | Export the type | +| `src/config/domain/plugin-metadata.ts` | `PluginMetadataValue` | Export the type | +| `src/domain/core-types.ts` | `PLUGIN_TYPES` | Export the const | +| `src/abstracts/plugin-contribution.ts` | `ContributionAxis` | Export the type (already exported via domain/mod.ts, but barrel needs re-export) | +| `src/diagnostics/inspect-plugin.ts` | `InspectablePluginManifest` | Export the interface | +| `src/diagnostics/inspect-plugin.ts` | `InspectablePluginRegistry` | Export the interface | +| `src/abstracts/plugin-stream-topic-contribution.ts` | `StandardSchemaV1` | Export the interface | +| `src/config/validators/manifest-schema.ts` | `ZodType` | Use explicit annotation or re-export | + +### `missing-jsdoc` (84 errors — mechanical JSDoc sweep) +| File group | Count | Notes | +|-----------|-------|-------| +| 11 abstract contribution classes (`src/abstracts/plugin-*-contribution.ts`) | ~33 | Each has `axis`, `name`, and 1-2 other abstract properties | +| `src/config/builders/plugin-builder.ts` | 1 | Constructor | +| `src/domain/errors.ts` | 3 | Error constructors | +| `src/adapters/memory-file-system-adapter.ts` | 4 | Class properties + methods | +| Remaining scattered across abstracts + other | ~43 | Second-pass sweep required | + +**Root-only undercount evidence:** running `deno doc --lint` on `mod.ts` alone reports far fewer errors. The full-export sweep is mandatory per `lessons/validation.md`. + +## 3. `deno check --unstable-kv` over all 8 entrypoints + +| Entrypoint | Result | +|-----------|--------| +| `.` (mod.ts) | ✅ | +| `./abstracts` | ✅ | +| `./config` | ✅ | +| `./cli` | ✅ | +| `./loader` | ✅ | +| `./sdk` | ✅ | +| `./testing` | ✅ | +| `./templates` | ✅ | + +**Verdict:** All pass. No type errors. + +## 4. README / docs baseline + +| Metric | Value | Target | +|--------|-------|--------| +| README LOC | **138** | ≥150 | +| README sections | **12** | 14 STANDARDS sections | +| `docs/` present | ✅ | README, architecture, concepts, getting-started, plugin-author-guide, recipes/, reference/ | +| `docs/plugin-author-guide.md` | 371 LOC | docs exempt from F-1 | + +**Missing sections (vs 14 STANDARDS):** "Observability" and "Compatibility" are not present as standalone H2s. Can be added as sub-sections or merged. + +## 5. Test adequacy vs A4 layers + +| Layer | Present | Evidence | +|-------|---------|----------| +| Doctest | ✅ | `tests/_fixtures/readme-examples_test.ts` (2 tests) | +| Domain | ⚠️ partial | Error classes tested via registry_test; no dedicated domain unit tests | +| Port-contract | ✅ | `tests/sdk/walker-ports_test.ts` (walker, extractor, emitter, manifest-resolver, pipeline) | +| Adapter conformance | ⚠️ partial | `MemoryFileSystemAdapter` not directly tested against `FileSystemPort` | +| Runtime lifecycle | ⚠️ minimal | `plugin-host-bootstrap.ts`, `plugin-context.ts` are stubs; no lifecycle tests | +| DSL/builder ergonomics | ✅ | `readme-examples_test.ts` exercises `definePlugin` chain + `inspectPlugin` | +| CLI contract | ✅ | `tests/cli/plugin-cli_test.ts` (4 tests) | +| Registry behavior | ✅ | `tests/application/plugin-registry_test.ts` (2 tests) | + +**Total:** 4 test files, 13 tests, all passing. + +## 6. File-size audit (F-1) + +| File | LOC | Cap | Status | +|------|-----|-----|--------| +| `src/config/builders/plugin-builder.ts` | **343** | 300 | **Over by 14%** | +| `src/sdk/discovery/ast-extractor.ts` | 126 | 300 | ✅ | +| `src/sdk/discovery/registry-emitter.ts` | 87 | 300 | ✅ | +| `src/diagnostics/inspect-plugin.ts` | 69 | 300 | ✅ | +| `docs/plugin-author-guide.md` | 371 | N/A (docs) | ✅ | + +**Finding:** `plugin-builder.ts` is the only F-1 violation. It is the classic A4 hotspot — a typestate-generic fluent builder. Splitting it risks breaking the generic chain. Recommendation: accept with debt, target pre-beta refactor. + +## 7. Folder vocabulary / cardinality (F-11 / F-16) + +| Folder | Role | Siblings | Status | +|--------|------|----------|--------| +| `src/abstracts/` | contribution bases | 11 files | ✅ | +| `src/adapters/` | port implementations | 3 files | ✅ | +| `src/application/` | orchestration | 2 files | ✅ | +| `src/cli/` | CLI surface | subfolders + types | ✅ | +| `src/config/` | DSL/builder + domain + validators | subfolders | ✅ | +| `src/diagnostics/` | inspectPlugin | 2 files | ✅ | +| `src/domain/` | core types, errors, constants | 5 files | ✅ | +| `src/kernel/` | template assets | 1 subfolder | ⚠️ borderline | +| `src/ports/` | port contracts | 3 files | ✅ | +| `src/public/` | curated re-exports | 1 file | ⚠️ borderline | +| `src/sdk/` | discovery + runtime + presets | subfolders | ✅ | +| `src/templates/` | skeleton templates | 1 file + skeleton/ | ✅ | +| `src/testing/` | test fixtures + memory adapters | 6 files | ✅ | + +**F-11:** No `utils/`, `interfaces/`, `helpers/`, `common/`, or `lib/` folders. ✅ **Clean.** + +**F-16:** Every role folder has ≥2 meaningful siblings or subfolders. `src/public/` (1 file) and `src/kernel/` (1 subfolder) are borderline but justified: `public/` is the canonical barrel re-export file, and `kernel/` is a narrow asset registry. No action needed. + +## 8. Open Questions — Evidence + +### OQ-A `./loader` dynamic import +**Finding:** `./loader` (`loader.ts`) has **no dynamic import**. The `unanalyzable-dynamic-import` warning is in `src/sdk/discovery/manifest-resolver.ts` (the `./sdk` entrypoint), not `./loader`. + +**Decision:** Keep `./loader` public. It exports `createPluginLogger` and `PluginLogger` — stable host-side contracts. The dynamic import warning belongs to `./sdk`'s `ModuleManifestResolver`, which is runtime-resolvable by design (it imports plugin modules at runtime). Document this in the `./sdk` module doc. + +### OQ-B vocabulary reconciliation +**Finding:** The repo has `config/`, `cli/`, `sdk/`, `abstracts/`, `kernel/` in addition to the canonical `domain/ports/application/adapters/diagnostics/testing/public`. All names are role-specific and doctrine-allowed. No `utils/` or `interfaces/`. + +**Decision:** **Accept the rewrite vocabulary.** The canonical `plan_plugin.md` §2 folder tree was a structural intent, not a mandate. The current tree satisfies F-11 and F-16. Zero external consumers import subpaths that would break (verified: `packages/cli` imports `@netscript/plugin` root only; no workspace code imports `@netscript/plugin/config` etc. directly except via the package's own exports). + +### OQ-C file-size (F-1) +**Finding:** `plugin-builder.ts` = 343 LOC (cap 300). It is a typestate-generic fluent builder with 20+ methods. + +**Decision:** **Accept with debt.** Splitting a typestate builder mid-wave risks breaking the generic chain and consumer compile-time contracts. Record in `arch-debt.md` with closing gate "pre-beta builder refactor". + +### OQ-D `e2e:cli` triggers-health +**Finding:** `src/sdk/runtime/*` files are stubs (bootstrap 13 LOC, context 17 LOC, service-context 20 LOC). The `localhost:8093/health` failure is in a generated trigger service, not in these stubs. + +**Decision:** **Downstream / Wave 4.** Record as carried-forward in `drift.md`. Do not fix in this wave. + +### OQ-E `./testing` + defensive I/O +**Finding:** `./testing` exports memory adapters and fixtures. `watcher.ts` and `start-watcher.ts` are no-op stubs. The `./testing` surface IS exercised by `tests/sdk/walker-ports_test.ts` and `tests/application/plugin-registry_test.ts`. + +**Decision:** Add a trivial `watcher-cleanup_test.ts` proving `WatcherHandle.stop()` resolves. No real resources to leak. + +### OQ-F diagnostic +**Finding:** `inspectPlugin` is exported from `mod.ts` (line 43) and returns `InspectionReport` (line 44). However, `deno doc --lint` reports `private-type-ref` on `InspectablePluginManifest` and `InspectablePluginRegistry` because they are not re-exported through the public barrel. + +**Decision:** Export `InspectablePluginManifest` and `InspectablePluginRegistry` from `src/diagnostics/mod.ts` and/or `mod.ts` as part of the private-type-ref fix slice. + +## 9. Arch-debt implications + +| Entry | Current status | Action | +|-------|---------------|--------| +| `packages/plugin — AP-1 / doctrine verdict Restructure (types.ts 1,005 LOC)` | `types.ts` no longer exists; package was restructured | **Close** this debt entry | +| `packages/plugin/src/sdk/discovery/ast-extractor.ts — PLG-WALKER-AST` | Still open (extractor precision) | **Leave open** (not this wave) | +| `plugin-builder.ts 343 LOC` | New finding | **Create** debt entry with closing gate "pre-beta builder refactor" | + +## 10. Risk summary + +| Risk | Severity | Mitigation | +|------|----------|------------| +| Doc-lint 93 errors is larger than expected | Medium | Group into 3 mechanical slices (private-type-ref, abstracts JSDoc, remaining JSDoc). All are additive, no API changes. | +| `plugin-builder.ts` split deferred | Low | Recorded as debt. No functional impact. | +| `e2e:cli` may fail on unrelated runtime | Low | Escalate, don't block. Record in drift. | +| Consumer-import gate may surface pre-existing CLI errors | Low | Attribution rule from `lessons/validation.md`: diff failing file against base; byte-identical = pre-existing debt. | diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index 3b9ac32ef..55bafb922 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -8,8 +8,8 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | Date | Phase | Session | Notes | |------|-------|---------|-------| | 2026-06-08 | Bootstrap | supervisor | Worktree `.worktrees/wave3-plugin-host` + branch forked off umbrella `89071df`. Seed run docs authored (context-pack.md, worklog.md, drift.md, commits.md). Draft PR opened into the umbrella. | -| | Research | generator | (pending) MEASURE-FIRST re-baseline at `89071df`: full-export `deno doc --lint` (all 8 entrypoints) + `deno publish --dry-run` + README/test adequacy. Record real numbers. | -| | Plan & Design | generator | (pending) Lock the slice list + resolve OQ-A..OQ-F. | +| 2026-06-08 | Research | generator | MEASURE-FIRST complete. Real numbers: dry-run 0 slow types (SUCCESS), doc-lint 93 errors (84 missing-jsdoc + 9 private-type-ref), README 138 LOC, tests 4 files/13 passing. All OQ-A..OQ-F resolved with evidence. | +| 2026-06-08 | Plan & Design | generator | Locked plan.md (24 slices), Design checkpoint in worklog.md. Ready for PLAN-EVAL. | | | PLAN-EVAL | evaluator | (pending) Separate session. Hard stop before implementation. | | | Implement | generator | (pending) Sliced, one commit + paired doc-record per slice. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | @@ -19,3 +19,140 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` ## Readiness note (append at each phase boundary) + +## Design Checkpoint + +### 1. Public surface + +**8 exports entrypoints** (from `deno.json`): + +| Entrypoint | Purpose | Key exports | +|-----------|---------|-------------| +| `.` | Authoring API + diagnostics | `definePlugin`, `inspectPlugin`, `PluginError`, `PluginContribution`, manifest types | +| `./abstracts` | Contribution base classes | `PluginContribution`, `PluginServiceContribution`, `PluginStreamTopicContribution`, etc. | +| `./config` | Builder + validators + domain | `PluginBuilder`, `definePlugin`, `PluginManifestSchema`, contribution types | +| `./cli` | CLI contracts + composition | `PluginCli`, `mountPluginCli`, `runMountedCommand`, `formatPluginHelp` | +| `./loader` | Host-side logger | `createPluginLogger`, `PluginLogger` | +| `./sdk` | Discovery ports + runtime stubs | `FilesystemWalker`, `AstExtractor`, `RegistryEmitter`, `ModuleManifestResolver`, `runWalkerPipeline` | +| `./testing` | Test fixtures + memory adapters | `createPluginManifestFixture`, `MemoryManifestResolver`, `MemoryWalker`, `MemoryEmitter`, `runPluginCliContract` | +| `./templates` | Skeleton template registry | `PLUGIN_SKELETON_TEMPLATES` | + +**Root barrel (`mod.ts`)** is curated — only authoring API, errors, `PluginContribution`, and `inspectPlugin`. No implementation leakage. + +### 2. Domain vocabulary + +**Core types (finite domains as constants with derived unions):** + +```ts +const PLUGIN_TYPES = ['background-processor', 'api', 'frontend', 'utility'] as const; +type PluginType = typeof PLUGIN_TYPES[number]; + +const CONTRIBUTION_AXES = [ + 'services', 'backgroundProcessors', 'streamTopics', 'databaseSchemas', + 'runtimeConfigTopics', 'contractVersions', 'e2e', 'telemetry', 'migrations', 'aspire', +] as const; +type ContributionAxis = typeof CONTRIBUTION_AXES[number]; + +const LIFECYCLE_HOOK_NAMES = ['beforeInstall', 'afterInstall', 'beforeUninstall', 'afterUninstall'] as const; +type LifecycleHookName = typeof LIFECYCLE_HOOK_NAMES[number]; +``` + +**Builder state:** + +```ts +interface PluginBuilderState { + readonly name?: string; + readonly version?: string; + readonly description?: string; + readonly displayName?: string; + readonly type?: PluginType; + readonly author?: string; + readonly license?: string; + readonly tags?: readonly string[]; + readonly permissions?: readonly string[]; + readonly metadata?: PluginMetadata; + readonly contributions: PluginContributions; + readonly hooks?: PluginLifecycleHooks; + readonly dependencies?: TDependencies; +} +``` + +**Definition object:** `PluginManifest` — immutable, frozen, Zod-validated at `build()` time. + +### 3. Ports + +| Port | File | Consumers | +|------|------|-----------| +| `FileSystemPort` | `src/ports/file-system-port.ts` | `FilesystemScaffolder`, `MemoryFileSystemAdapter` | +| `ScaffolderPort` | `src/ports/scaffolder-port.ts` | CLI composition | +| `TemplatePort` | `src/ports/template-port.ts` | `StringTemplateAdapter` | +| `WalkerPort` | `src/sdk/discovery/ports/walker-port.ts` | `FilesystemWalker`, `MemoryWalker` | +| `ExtractorPort` | `src/sdk/discovery/ports/extractor-port.ts` | `AstExtractor` | +| `EmitterPort` | `src/sdk/discovery/ports/emitter-port.ts` | `RegistryEmitter` | +| `ManifestResolverPort` | `src/sdk/discovery/ports/manifest-resolver-port.ts` | `ModuleManifestResolver`, `MemoryManifestResolver` | + +### 4. Constants + +| Name | Value | Location | +|------|-------|----------| +| `PLUGIN_ALPHA_VERSION` | `'0.0.1-alpha.0'` | `src/domain/constants.ts` | +| `PLUGIN_MANIFEST_FILES` | `['netscript.plugin.json', 'plugin.json']` | `src/domain/constants.ts` | +| `RESERVED_PLUGIN_NAMES` | `['netscript', 'plugin', 'core']` | `src/domain/constants.ts` | + +### 5. Commit slices (24, ordered) + +See `plan.md` § "Slice List" for the full table. Summary: + +- **Phase A (1–8):** Fix 93 doc-lint errors — private-type-ref exports, then JSDoc sweeps by folder group, then verification. +- **Phase B (9–11):** README expansion + doctest + `./sdk` module doc caveat. +- **Phase C (12–18):** Task hygiene (`lint`/`fmt`/`check` all entrypoints) + new tests (domain, adapter, watcher, loader). +- **Phase D (19–24):** Debt update + manual gate evidence + consumer-import validation + final dry-run + merge-readiness `e2e:cli`. + +### 6. Deferred scope + +- `plugin-builder.ts` split to <300 LOC — pre-beta refactor (debt) +- AST extractor precision — PLG-WALKER-AST debt +- `e2e:cli` triggers-health fix — Wave 4 +- Runtime lifecycle implementation beyond stubs — later wave + +### 7. Contributor path + +To add a new contribution axis: + +1. Add the axis string to `CONTRIBUTION_AXES` in `src/config/domain/contribution-axes.ts` +2. Add the contribution type in `src/config/domain/-contribution.ts` +3. Add the abstract base in `src/abstracts/plugin--contribution.ts` +4. Add `with()` method to `PluginBuilder` in `src/config/builders/plugin-builder.ts` +5. Update `src/config/domain/plugin-contributions.ts` to include the axis +6. Add JSDoc to the new abstract base properties +7. Export from `src/abstracts/mod.ts` and `src/config/mod.ts` +8. Add a test in `tests/sdk/walker-ports_test.ts` if the axis affects discovery + +To add a new builder method: + +1. Define the method in `PluginBuilder` using `#withArrayContribution` or `#withArrayContributions` +2. Add JSDoc with `@param` and `@returns` +3. Verify `deno doc --lint` passes +4. Add a doctest or unit test + +### 8. Gate evidence summary (pre-implementation) + +| Gate | Pre-implementation status | +|------|--------------------------| +| F-1 | DEBT_ACCEPTED (`plugin-builder.ts` 343 LOC) | +| F-2 | Manual pass (`safeStringifyMetadata` justified) | +| F-3 | Manual pass (layering verified) | +| F-4 | Manual pass (abstracts co-located) | +| F-5 | Manual pass (8 entrypoints, curated root) | +| F-6 | PASS (dry-run SUCCESS, 0 slow types) | +| F-7 | FAIL (93 doc-lint errors — target of Phase A) | +| F-8 | PASS (`deno check` all 8 entrypoints) | +| F-9 | PASS (permissions declared in walker tests) | +| F-10 | PASS (13 tests, all green) | +| F-11 | PASS (no forbidden folders) | +| F-12 | Manual pass (naming conventions verified) | +| F-14 | Manual pass (console use justified in logger) | +| F-15 | Manual pass (no upstream re-exports at root) | +| F-16 | Manual pass (cardinality verified) | +| F-17 | Manual pass (abstracts co-located) | +| F-18 | Manual pass (no nested sub-barrels) | From 6ee9c61dad82345a64efec763fdd9c5517539261 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 19:07:31 +0200 Subject: [PATCH 03/55] docs(wave3): append commit log for research + plan phase --- .llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index 334a00d8e..e3cca602f 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -5,6 +5,7 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | # | SHA | Subject | Slice(s) | |---|-----|---------|----------| | seed | (this commit) | chore(wave3): seed @netscript/plugin host run docs | — | +| 1 | 22557b8 | docs(wave3): record @netscript/plugin research, plan, and design checkpoint | Research + Plan & Design | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) From 10da21ef3a392414897f3f7a71bbcd9d92ad3a8d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 8 Jun 2026 17:57:35 +0000 Subject: [PATCH 04/55] docs(wave3): record PLAN-EVAL PASS + lock LD-8 for @netscript/plugin host Co-authored-by: rickylabs <129366361+rickylabs@users.noreply.github.com> --- .../context-pack.md | 8 +++ .../drift.md | 6 ++ .../plan-eval.md | 58 +++++++++++++++++++ .../plan.md | 7 ++- .../research.md | 4 +- .../worklog.md | 2 +- 6 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 .llm/tmp/run/feat-package-quality-wave3-plugin--host/plan-eval.md diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index baeb06556..1bce38fb1 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -11,6 +11,14 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. > `.llm/tmp/run/feat-package-quality-wave3-plugin--umbrella/context-pack.md`. > This file is the generator-facing entry point and does not duplicate it. +## Phase status + +- Research + Plan & Design: complete (committed). +- **PLAN-EVAL: PASS** (2026-06-08, separate session) — see `plan-eval.md`. One + rework-forcing decision resolved in-line as **LD-8** (upstream-typed `private-type-ref` + → package-owned structural types, not upstream re-export; preserves F-15/AP-14). Carry + LD-8 into slice 1. **Implementation may now begin.** + ## One-unit wave `@netscript/plugin` only. Archetype **A4 — DSL/Builder (plugin host)**. Gate set diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md index 82b9e9cd1..652d0411b 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md @@ -29,3 +29,9 @@ | 2026-06-08 | note | OQ-D resolved: `e2e:cli` triggers-health is downstream | `src/sdk/runtime/*` are stubs (bootstrap 13 LOC, context 17 LOC, service-context 20 LOC). Failure is in generated trigger service, not host bootstrap. | Carry forward to Wave 4. Do not fix here. | | 2026-06-08 | note | OQ-E resolved: `./testing` is exercised | Memory adapters used by `walker-ports_test.ts` and `plugin-registry_test.ts`. | Add `tests/sdk/watcher-cleanup_test.ts` as defensive I/O proof. | | 2026-06-08 | note | OQ-F resolved: `inspectPlugin` exported and typed | Exported from `mod.ts` line 43, returns `InspectionReport`. `private-type-ref` on `InspectablePluginManifest`/`InspectablePluginRegistry` because not re-exported through barrel. | Export through `src/diagnostics/mod.ts` and `mod.ts` in Slice 1. | + +## PLAN-EVAL drift + +| Date | Severity | Item | Evidence | Action | +|------|----------|------|----------|--------| +| 2026-06-08 | note | PLAN-EVAL surfaced rework-forcing decision not flagged by plan: upstream-typed `private-type-ref` fix | 2 of 9 `private-type-ref` errors are on upstream types in public signatures — `z.ZodType` (`src/config/validators/manifest-schema.ts:4`) and `StandardSchemaV1` (`src/abstracts/plugin-stream-topic-contribution.ts:11`). Naive barrel re-export violates F-15/AP-14. | Resolved in-line during PLAN-EVAL: locked as LD-8 (package-owned structural types, not upstream re-export); slice 1, research private-type-ref table, and F-15 evidence amended. Verdict PASS in `plan-eval.md`. | diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/plan-eval.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/plan-eval.md new file mode 100644 index 000000000..6cb312923 --- /dev/null +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/plan-eval.md @@ -0,0 +1,58 @@ +# PLAN-EVAL — feat-package-quality-wave3-plugin--host + +- Plan evaluator session: PLAN-EVAL (separate session) / 2026-06-08 +- Run: `feat-package-quality-wave3-plugin--host` +- Surface / archetype: `@netscript/plugin` — **A4 — Public DSL/Builder** +- Scope overlays: none + +## Checklist results + +| Plan-Gate item | Result | Evidence / location | +| --------------------------------------- | ------ | ------------------- | +| Research present and current | PASS | `research.md` re-baselines the stale canonical `evaluate_plugin.md`/`plan_plugin.md` (5 files / 33 slow types / 0 tests) against the umbrella base `89071df` (the integration point for this stacked sub-branch). Spot-checked load-bearing findings against the tree: `deno.json` has 8 exports entrypoints; `plugin-builder.ts` = 343 LOC; `README.md` = 138 LOC; `doc-lint-out.txt` = 93 errors (84 missing-jsdoc + 9 private-type-ref). All match. | +| Decisions locked | PASS | LD-1..LD-8 each stated with rationale (`plan.md` §Locked Decisions). | +| Open-decision sweep | PASS (after direct fix) | Evaluator sweep found one rework-forcing decision the plan left implicit (see below). Resolved directly and locked as LD-8 per the author's "proceed with minor adjustments directly" instruction. Remaining open decisions are correctly marked safe-to-defer. | +| Commit slices (< 30, gate + files each) | PASS | 24 slices, ordered Phase A→D; each names its proving gate and touched files (`plan.md` §Slice List). | +| Risk register | PASS | 4 risks with mitigations (`plan.md` §Risk Register); plus per-OQ risk table in `research.md` §10. | +| Gate set selected | PASS | Arch 4 column of `gates/archetype-gate-matrix.md`: F-1..F-12, F-14..F-18 (F-13 n/a) + Static + Consumer-import (required for Arch 4). Plan enumerates all of these. Note: `ARCHETYPE-4-dsl-builder.md`'s inline list stops at F-15 and is stale; the plan correctly follows the gate matrix (source of truth), consistent with the same tension recorded for Arch 2. | +| Deferred scope explicit | PASS | `plan.md` §Non-Scope + worklog §6 (builder split, AST precision, e2e:cli triggers-health → Wave 4, runtime lifecycle). | +| jsr-audit surface scan (pkg/plugin) | PASS | `deno publish --dry-run` SUCCESS / 0 slow types (`dry-run-out.txt`); full-export doc-lint surfaced; every named publishability/surface risk (private-type-ref incl. the upstream-type leak) has a slice (slice 1). | + +## Open-decision sweep (evaluator-run) + +One rework-forcing decision was surfaced that the plan did not flag: + +- **Upstream-typed `private-type-ref` fix.** 2 of the 9 `private-type-ref` errors are on **upstream** + types used in public signatures — `z.ZodType` in `src/config/validators/manifest-schema.ts:4` and + `StandardSchemaV1` in `src/abstracts/plugin-stream-topic-contribution.ts:11`. The + original slice 1 said to "export the interface" / "use explicit annotation or re-export" them. A + naive barrel re-export would violate **F-15** (re-export-upstream lint) and **AP-14**, directly + contradicting this plan's own F-15 "pass" claim — forcing rework after slice 1. The doctrine- + preferred fix is a package-owned minimal structural type (precedent: + `packages/database/prisma-tracing.ts:37-63`, which mirrors OpenTelemetry's span rather than + re-exporting it). + + **Resolution (applied directly):** locked as **LD-8**; slice 1, the research private-type-ref + table, and the F-15 evidence row were amended to require package-owned structural types for the + two upstream-typed errors and barrel exports only for the 7 package-owned types. + +No other open decision would force rework if deferred. The remaining open items (README section +ordering, per-symbol `@example`, builder pre-beta split strategy) are correctly safe-to-defer. + +## Verdict + +`PASS` + +Implementation may begin. The single rework-forcing gap was resolved in-line (LD-8) rather than +returned as `FAIL_PLAN`, per the author's standing instruction to apply non-significant adjustments +directly. Carry LD-8 into slice 1. + +## Notes + +- Debt handling is sound: the old `packages/plugin — AP-1 (types.ts 1,005 LOC)` entry + (`arch-debt.md:193`) is open and closeable (slice 19); the new `plugin-builder.ts` 343 LOC entry + is a valid create with owner/target/closing-gate named. +- Consumer-import validation (required for Arch 4) is covered by slices 21–22 (`packages/cli` + + `plugins/*`). +- "Research present and current" is satisfied against the umbrella base `89071df` rather than + literal `main`; for a stacked sub-branch the umbrella is the correct integration baseline. diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/plan.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/plan.md index 02400bcad..a860bcb07 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/plan.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/plan.md @@ -88,6 +88,7 @@ Bring `@netscript/plugin` to the A4 enterprise bar: | LD-5 | `./testing` surface is exercised | Memory adapters used by `walker-ports_test.ts` and `plugin-registry_test.ts`. Add trivial cleanup test. | | LD-6 | `inspectPlugin` is correctly exported and typed | Returns `InspectionReport`. Fix `private-type-ref` by exporting `InspectablePluginManifest`/`InspectablePluginRegistry` through barrels. | | LD-7 | Group doc-lint fixes into 3 mechanical slices | `private-type-ref` (9), abstracts JSDoc (~33), remaining JSDoc (~51). All additive, no API changes. | +| LD-8 | Fix the 2 **upstream-typed** `private-type-ref` errors (`z.ZodType` in `manifest-schema.ts`, `StandardSchemaV1` in `plugin-stream-topic-contribution.ts`) with **package-owned minimal structural types**, NOT by re-exporting the upstream types | Re-exporting `ZodType`/`StandardSchemaV1` from a barrel would violate F-15 (re-export-upstream lint) and AP-14, contradicting this plan's own F-15 "pass" claim. Doctrine-preferred pattern is a package-owned structural interface in `src/domain/` (precedent: `packages/database/prisma-tracing.ts:37-63` mirrors OpenTelemetry's span instead of re-exporting it). The other 7 `private-type-ref` errors are on package-owned types and are fixed by barrel exports as planned. | ## Open-Decision Sweep @@ -99,6 +100,8 @@ Bring `@netscript/plugin` to the A4 enterprise bar: **No decisions marked "must resolve now" — all load-bearing questions are locked above.** +> PLAN-EVAL note (2026-06-08): the evaluator's open-decision sweep surfaced one rework-forcing decision the original plan left implicit — how to fix the 2 **upstream-typed** `private-type-ref` errors without violating F-15/AP-14. Resolved directly and locked as **LD-8**; slice 1 amended accordingly. + ## Risk Register | Risk | Mitigation | @@ -135,7 +138,7 @@ Bring `@netscript/plugin` to the A4 enterprise bar: | F-11 Forbidden-folder lint | yes | No `utils/`, `interfaces/`, `helpers/`, `common/`, `lib/`. | | F-12 Naming-convention lint | yes | Manual: `withNoun`, `createNoun`, `isAdjective`, `runVerb` patterns. No `get`/`find`/`sort`/`merge` prefixes on public API. | | F-14 Console-log lint | yes | Manual: `loader.ts` uses `console.log`/`warn`/`error` inside `writePluginLog` — justified as a logger sink adapter. No stray `console.log` in library code. | -| F-15 Re-export-upstream lint | yes | Manual: No Zod/Cliffy/StandardSchema re-exports at root. | +| F-15 Re-export-upstream lint | yes | Manual: No Zod/Cliffy/StandardSchema re-exports at root. **The 2 upstream-typed `private-type-ref` errors are fixed via package-owned structural types (LD-8), not by re-exporting `ZodType`/`StandardSchemaV1`.** | | F-16 Folder-cardinality lint | yes | Manual: Every role folder has ≥2 siblings or subfolders. `public/` (1 file) and `kernel/` (1 subfolder) are justified. | | F-17 Abstract-derived co-location | yes | Manual: `PluginContribution` + 11 derived classes all in `src/abstracts/`. | | F-18 Sub-barrel lint | yes | Manual: No nested `mod.ts` barrels that re-export from sibling barrels. Each `mod.ts` is a leaf barrel for its folder. | @@ -172,7 +175,7 @@ Bring `@netscript/plugin` to the A4 enterprise bar: | # | Slice | Gate | Files | |---|-------|------|-------| -| 1 | Export private types for `private-type-ref` fix | F-7 | `src/config/builders/plugin-builder.ts`, `src/config/domain/plugin-metadata.ts`, `src/domain/core-types.ts`, `src/abstracts/plugin-contribution.ts`, `src/diagnostics/inspect-plugin.ts`, `src/diagnostics/mod.ts`, `src/abstracts/plugin-stream-topic-contribution.ts`, `src/config/validators/manifest-schema.ts`, `mod.ts` | +| 1 | Fix 9 `private-type-ref`: barrel-export the 7 package-owned types; replace the 2 upstream-typed signatures (`z.ZodType`, `StandardSchemaV1`) with package-owned structural types per **LD-8** (no upstream re-export — preserves F-15) | F-7 (+F-15) | `src/config/builders/plugin-builder.ts`, `src/config/domain/plugin-metadata.ts`, `src/domain/core-types.ts`, `src/abstracts/plugin-contribution.ts`, `src/diagnostics/inspect-plugin.ts`, `src/diagnostics/mod.ts`, `src/abstracts/plugin-stream-topic-contribution.ts`, `src/config/validators/manifest-schema.ts`, `src/domain/*` (new package-owned structural type), `mod.ts` | | 2 | JSDoc abstract contribution classes (part 1) | F-7 | `src/abstracts/plugin-aspire-contribution.ts`, `plugin-background-processor-contribution.ts`, `plugin-contract-version-contribution.ts`, `plugin-db-schema-contribution.ts`, `plugin-e2e-contribution.ts` | | 3 | JSDoc abstract contribution classes (part 2) | F-7 | `src/abstracts/plugin-migration-contribution.ts`, `plugin-runtime-config-topic-contribution.ts`, `plugin-service-contribution.ts`, `plugin-stream-topic-contribution.ts`, `plugin-telemetry-contribution.ts`, `plugin-contribution.ts` | | 4 | JSDoc builder + errors + adapters | F-7 | `src/config/builders/plugin-builder.ts`, `src/domain/errors.ts`, `src/adapters/memory-file-system-adapter.ts` | diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/research.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/research.md index db609b2f0..dff118140 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/research.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/research.md @@ -33,8 +33,8 @@ | `src/abstracts/plugin-contribution.ts` | `ContributionAxis` | Export the type (already exported via domain/mod.ts, but barrel needs re-export) | | `src/diagnostics/inspect-plugin.ts` | `InspectablePluginManifest` | Export the interface | | `src/diagnostics/inspect-plugin.ts` | `InspectablePluginRegistry` | Export the interface | -| `src/abstracts/plugin-stream-topic-contribution.ts` | `StandardSchemaV1` | Export the interface | -| `src/config/validators/manifest-schema.ts` | `ZodType` | Use explicit annotation or re-export | +| `src/abstracts/plugin-stream-topic-contribution.ts` | `StandardSchemaV1` | **Upstream type — do NOT re-export (F-15/AP-14). Replace with package-owned structural type (LD-8).** | +| `src/config/validators/manifest-schema.ts` | `ZodType` | **Upstream type — do NOT re-export (F-15/AP-14). Annotate `PluginManifestSchema` with a package-owned structural type (LD-8).** | ### `missing-jsdoc` (84 errors — mechanical JSDoc sweep) | File group | Count | Notes | diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index 55bafb922..ffddc08f5 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -10,7 +10,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Bootstrap | supervisor | Worktree `.worktrees/wave3-plugin-host` + branch forked off umbrella `89071df`. Seed run docs authored (context-pack.md, worklog.md, drift.md, commits.md). Draft PR opened into the umbrella. | | 2026-06-08 | Research | generator | MEASURE-FIRST complete. Real numbers: dry-run 0 slow types (SUCCESS), doc-lint 93 errors (84 missing-jsdoc + 9 private-type-ref), README 138 LOC, tests 4 files/13 passing. All OQ-A..OQ-F resolved with evidence. | | 2026-06-08 | Plan & Design | generator | Locked plan.md (24 slices), Design checkpoint in worklog.md. Ready for PLAN-EVAL. | -| | PLAN-EVAL | evaluator | (pending) Separate session. Hard stop before implementation. | +| | PLAN-EVAL | evaluator | **PASS** (2026-06-08). Separate session. Full Plan-Gate checklist walked; load-bearing findings spot-checked against tree (8 entrypoints, builder 343 LOC, README 138 LOC, doc-lint 93). One rework-forcing decision surfaced and resolved in-line as LD-8 (upstream-typed `private-type-ref` → package-owned structural types, not upstream re-export, to preserve F-15/AP-14). Verdict in `plan-eval.md`. Implementation may begin. | | | Implement | generator | (pending) Sliced, one commit + paired doc-record per slice. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | From a3c93c4c1e7ced57bec9f1e4ea5f16423792a25c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 8 Jun 2026 17:57:49 +0000 Subject: [PATCH 05/55] docs(wave3): append PLAN-EVAL commit to commits.md Co-authored-by: rickylabs <129366361+rickylabs@users.noreply.github.com> --- .llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index e3cca602f..ab738137e 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -9,3 +9,4 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) +- 10da21e: docs(wave3): record PLAN-EVAL PASS + lock LD-8 for @netscript/plugin host From 0c1b2a11c159c6f72e1cc3c95b13962547943fec Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 20:37:48 +0200 Subject: [PATCH 06/55] fix(plugin): clear private type refs Co-Authored-By: Claude Opus 4.8 --- packages/plugin/mod.ts | 15 ++++++- packages/plugin/src/abstracts/mod.ts | 6 +++ .../plugin-stream-topic-contribution.ts | 8 ++-- .../src/config/builders/plugin-builder.ts | 18 +++++---- packages/plugin/src/config/mod.ts | 8 ++++ .../src/config/validators/manifest-schema.ts | 3 +- packages/plugin/src/diagnostics/mod.ts | 6 ++- packages/plugin/src/domain/mod.ts | 6 +++ packages/plugin/src/domain/schema-types.ts | 40 +++++++++++++++++++ packages/plugin/src/testing/mod.ts | 1 + 10 files changed, 94 insertions(+), 17 deletions(-) create mode 100644 packages/plugin/src/domain/schema-types.ts diff --git a/packages/plugin/mod.ts b/packages/plugin/mod.ts index 4c4f234f0..0128644b8 100644 --- a/packages/plugin/mod.ts +++ b/packages/plugin/mod.ts @@ -19,18 +19,24 @@ */ export { definePlugin } from './src/config/mod.ts'; +export { PLUGIN_TYPES } from './src/config/mod.ts'; export type { BackgroundProcessorContribution, ContractVersionContribution, + ContributionInput, DbSchemaContribution, + DependencyContext, E2eContribution, MigrationContribution, PluginBuilder, + PluginBuilderState, PluginContributions, PluginDependencies, PluginLifecycleHooks, PluginManifest, + PluginManifestParser, PluginMetadata, + PluginMetadataValue, PluginType, RuntimeConfigTopicContribution, ServiceContribution, @@ -40,5 +46,10 @@ export type { export type { PluginContext, PluginLogger } from './src/domain/mod.ts'; export { DuplicatePluginError, PluginError, PluginValidationError } from './src/domain/mod.ts'; export { PluginContribution } from './src/abstracts/mod.ts'; -export { inspectPlugin } from './src/diagnostics/inspect-plugin.ts'; -export type { InspectionReport } from './src/diagnostics/inspect-plugin.ts'; +export type { ContributionAxis } from './src/abstracts/mod.ts'; +export { inspectPlugin } from './src/diagnostics/mod.ts'; +export type { + InspectablePluginManifest, + InspectablePluginRegistry, + InspectionReport, +} from './src/diagnostics/mod.ts'; diff --git a/packages/plugin/src/abstracts/mod.ts b/packages/plugin/src/abstracts/mod.ts index 41b519224..9fd618890 100644 --- a/packages/plugin/src/abstracts/mod.ts +++ b/packages/plugin/src/abstracts/mod.ts @@ -1,6 +1,12 @@ export { PluginAspireContribution } from './plugin-aspire-contribution.ts'; export { PluginBackgroundProcessorContribution } from './plugin-background-processor-contribution.ts'; export { PluginContribution } from './plugin-contribution.ts'; +export type { + ContributionAxis, + PluginPayloadSchema, + PluginSchemaIssue, + PluginSchemaResult, +} from '../domain/mod.ts'; export { PluginContractVersionContribution } from './plugin-contract-version-contribution.ts'; export { PluginDbSchemaContribution } from './plugin-db-schema-contribution.ts'; export { PluginE2eContribution } from './plugin-e2e-contribution.ts'; diff --git a/packages/plugin/src/abstracts/plugin-stream-topic-contribution.ts b/packages/plugin/src/abstracts/plugin-stream-topic-contribution.ts index a6c0d055a..a5676ada2 100644 --- a/packages/plugin/src/abstracts/plugin-stream-topic-contribution.ts +++ b/packages/plugin/src/abstracts/plugin-stream-topic-contribution.ts @@ -1,12 +1,10 @@ -import type { StandardSchemaV1 } from '@standard-schema/spec'; - +import type { PluginPayloadSchema } from '../domain/mod.ts'; import { PluginContribution } from './plugin-contribution.ts'; /** Base class for stream topic contribution implementations. */ -export abstract class PluginStreamTopicContribution - extends PluginContribution { +export abstract class PluginStreamTopicContribution extends PluginContribution { readonly axis = 'stream-topic' as const; abstract readonly name: string; abstract readonly subject: string; - abstract readonly schema: StandardSchemaV1; + abstract readonly schema: PluginPayloadSchema; } diff --git a/packages/plugin/src/config/builders/plugin-builder.ts b/packages/plugin/src/config/builders/plugin-builder.ts index 34e67a21f..2c26499c4 100644 --- a/packages/plugin/src/config/builders/plugin-builder.ts +++ b/packages/plugin/src/config/builders/plugin-builder.ts @@ -15,15 +15,18 @@ import type { StreamTopicContribution } from '../domain/stream-topic-contributio import type { TelemetryContribution } from '../domain/telemetry-contribution.ts'; import { PluginManifestSchema } from '../validators/manifest-schema.ts'; -type DependencyContext = { +/** Dependency context supplied to contribution callback inputs. */ +export type DependencyContext = { readonly deps: TDependencies; }; -type ContributionInput = +/** Contribution value or callback resolved by the plugin builder. */ +export type ContributionInput = | TValue | ((ctx: DependencyContext) => TValue); -interface PluginBuilderState { +/** Immutable state accumulated by the plugin builder chain. */ +export interface PluginBuilderState { readonly name?: string; readonly version?: string; readonly description?: string; @@ -285,11 +288,10 @@ export class PluginBuilder< dependencies: this.#state.dependencies, }; - return Object.freeze(PluginManifestSchema.parse(manifest) as PluginManifest) as TName extends never - ? never - : TVersion extends never - ? never - : PluginManifest; + return Object.freeze(PluginManifestSchema.parse(manifest) as PluginManifest) as TName extends + never ? never + : TVersion extends never ? never + : PluginManifest; } #withArrayContribution< diff --git a/packages/plugin/src/config/mod.ts b/packages/plugin/src/config/mod.ts index f9e03ee19..45b079a9f 100644 --- a/packages/plugin/src/config/mod.ts +++ b/packages/plugin/src/config/mod.ts @@ -1,7 +1,13 @@ export { mergeContributions } from './application/contribution-merger.ts'; export { definePlugin } from './builders/define-plugin.ts'; export { PluginBuilder } from './builders/plugin-builder.ts'; +export type { + ContributionInput, + DependencyContext, + PluginBuilderState, +} from './builders/plugin-builder.ts'; export { CONTRIBUTION_AXES } from './domain/contribution-axes.ts'; +export { PLUGIN_TYPES } from '../domain/mod.ts'; export type { BackgroundProcessorContribution } from './domain/background-processor-contribution.ts'; export type { ContractVersionContribution } from './domain/contract-version-contribution.ts'; export type { DbSchemaContribution } from './domain/db-schema-contribution.ts'; @@ -13,6 +19,8 @@ export type { PluginLifecycleHooks } from './domain/plugin-lifecycle-hooks.ts'; export type { PluginType } from '../domain/mod.ts'; export type { PluginManifest } from './domain/plugin-manifest.ts'; export type { PluginMetadata } from './domain/plugin-metadata.ts'; +export type { PluginMetadataValue } from '../domain/mod.ts'; +export type { PluginManifestParser } from '../domain/mod.ts'; export type { RuntimeConfigTopicContribution } from './domain/runtime-config-topic-contribution.ts'; export type { ServiceContribution } from './domain/service-contribution.ts'; export type { StreamTopicContribution } from './domain/stream-topic-contribution.ts'; diff --git a/packages/plugin/src/config/validators/manifest-schema.ts b/packages/plugin/src/config/validators/manifest-schema.ts index b4607ac5e..2f7e605f9 100644 --- a/packages/plugin/src/config/validators/manifest-schema.ts +++ b/packages/plugin/src/config/validators/manifest-schema.ts @@ -1,7 +1,8 @@ import { z } from 'zod'; +import type { PluginManifestParser } from '../../domain/mod.ts'; /** Zod schema for plugin manifests. */ -export const PluginManifestSchema: z.ZodType = z.object({ +export const PluginManifestSchema: PluginManifestParser = z.object({ name: z.string().min(1), version: z.string().min(1), description: z.string().optional(), diff --git a/packages/plugin/src/diagnostics/mod.ts b/packages/plugin/src/diagnostics/mod.ts index 255457b1e..adc9883a6 100644 --- a/packages/plugin/src/diagnostics/mod.ts +++ b/packages/plugin/src/diagnostics/mod.ts @@ -1,3 +1,7 @@ export { inspectPlugin } from './inspect-plugin.ts'; -export type { InspectionReport } from './inspect-plugin.ts'; +export type { + InspectablePluginManifest, + InspectablePluginRegistry, + InspectionReport, +} from './inspect-plugin.ts'; export { inspectWalkerOutput } from './inspect-walker-output.ts'; diff --git a/packages/plugin/src/domain/mod.ts b/packages/plugin/src/domain/mod.ts index 284143eaf..4bdf09f81 100644 --- a/packages/plugin/src/domain/mod.ts +++ b/packages/plugin/src/domain/mod.ts @@ -10,6 +10,12 @@ export type { } from './core-types.ts'; export { DuplicatePluginError, PluginError, PluginValidationError } from './errors.ts'; export type { InstalledPluginVersion } from './installed-version.ts'; +export type { + PluginManifestParser, + PluginPayloadSchema, + PluginSchemaIssue, + PluginSchemaResult, +} from './schema-types.ts'; export { CONTRIBUTION_AXES, LIFECYCLE_HOOK_NAMES, diff --git a/packages/plugin/src/domain/schema-types.ts b/packages/plugin/src/domain/schema-types.ts new file mode 100644 index 000000000..c06275a61 --- /dev/null +++ b/packages/plugin/src/domain/schema-types.ts @@ -0,0 +1,40 @@ +/** Minimal parser shape for manifest validators exposed by this package. */ +export interface PluginManifestParser { + /** Parse an unknown manifest candidate into the validator output type. */ + readonly parse: (input: unknown) => TOutput; +} + +/** Validation issue reported by package-owned schema contracts. */ +export interface PluginSchemaIssue { + /** Human-readable validation failure message. */ + readonly message: string; + /** Optional issue path supplied by the schema implementation. */ + readonly path?: readonly unknown[]; +} + +/** Validation result returned by package-owned schema contracts. */ +export type PluginSchemaResult = + | { readonly value: TOutput } + | { readonly issues: readonly PluginSchemaIssue[] }; + +/** Minimal Standard Schema-compatible shape accepted by plugin contribution contracts. */ +export interface PluginPayloadSchema { + /** Standard Schema v1 compatibility metadata and validator. */ + readonly '~standard': { + /** Standard Schema version marker. */ + readonly version: 1; + /** Schema library vendor name. */ + readonly vendor: string; + /** Validate a payload candidate. */ + readonly validate: ( + value: TInput, + ) => PluginSchemaResult | Promise>; + /** Optional type carrier used by Standard Schema-compatible libraries. */ + readonly types?: { + /** Input type accepted by the schema. */ + readonly input: TInput; + /** Output type produced by the schema. */ + readonly output: TOutput; + }; + }; +} diff --git a/packages/plugin/src/testing/mod.ts b/packages/plugin/src/testing/mod.ts index 506aca425..986d423e3 100644 --- a/packages/plugin/src/testing/mod.ts +++ b/packages/plugin/src/testing/mod.ts @@ -5,3 +5,4 @@ export { MemoryEmitter } from './memory-emitter.ts'; export { runPluginCliContract } from './plugin-cli-contract.ts'; export { createWalkedFileFixture } from './walker-fixtures.ts'; export { MemoryFileSystemAdapter } from '../adapters/mod.ts'; +export type { FileSystemPort } from '../ports/mod.ts'; From 19f2915373adc70432054233227f90ef315da834 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 20:38:28 +0200 Subject: [PATCH 07/55] docs(wave3): record slice 1 private-type-ref fix Co-Authored-By: Claude Opus 4.8 --- .../commits.md | 2 ++ .../context-pack.md | 3 +++ .../worklog.md | 11 +++++++++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index ab738137e..ed2a6ae71 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -6,6 +6,8 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual |---|-----|---------|----------| | seed | (this commit) | chore(wave3): seed @netscript/plugin host run docs | — | | 1 | 22557b8 | docs(wave3): record @netscript/plugin research, plan, and design checkpoint | Research + Plan & Design | +| 2 | 0c1b2a1 | fix(plugin): clear private type refs | Slice 1 | +| 3 | (this commit) | docs(wave3): record slice 1 private-type-ref fix | Slice 1 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index 1bce38fb1..cf1154698 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -18,6 +18,9 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. rework-forcing decision resolved in-line as **LD-8** (upstream-typed `private-type-ref` → package-owned structural types, not upstream re-export; preserves F-15/AP-14). Carry LD-8 into slice 1. **Implementation may now begin.** +- Implementation: slice 1 complete. Commit `0c1b2a1` fixes all `private-type-ref` errors; full-export + doc-lint now has no `private-type-ref` matches and 100 planned `missing-jsdoc` errors for slices + 2-7. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index ffddc08f5..a715f68b8 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -11,14 +11,21 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Research | generator | MEASURE-FIRST complete. Real numbers: dry-run 0 slow types (SUCCESS), doc-lint 93 errors (84 missing-jsdoc + 9 private-type-ref), README 138 LOC, tests 4 files/13 passing. All OQ-A..OQ-F resolved with evidence. | | 2026-06-08 | Plan & Design | generator | Locked plan.md (24 slices), Design checkpoint in worklog.md. Ready for PLAN-EVAL. | | | PLAN-EVAL | evaluator | **PASS** (2026-06-08). Separate session. Full Plan-Gate checklist walked; load-bearing findings spot-checked against tree (8 entrypoints, builder 343 LOC, README 138 LOC, doc-lint 93). One rework-forcing decision surfaced and resolved in-line as LD-8 (upstream-typed `private-type-ref` → package-owned structural types, not upstream re-export, to preserve F-15/AP-14). Verdict in `plan-eval.md`. Implementation may begin. | -| | Implement | generator | (pending) Sliced, one commit + paired doc-record per slice. | +| 2026-06-08 | Implement | generator | Slice 1 complete: fixed all 9 private-type-ref errors, including LD-8 package-owned structural schema types for Zod/Standard Schema signatures. Code commit `0c1b2a1`; paired docs commit follows. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | ## Readiness note -(append at each phase boundary) +- Slice 1 validation: `deno check --unstable-kv mod.ts src/abstracts/mod.ts src/config/mod.ts src/cli/mod.ts loader.ts src/sdk/mod.ts src/testing/mod.ts src/templates/mod.ts` passes from `packages/plugin`. +- Slice 1 doc-lint evidence: full-export `deno doc --lint ...` reports **0 `private-type-ref` errors** and 100 remaining `missing-jsdoc` errors. The remaining doc-lint work belongs to slices 2-7. + +## Implementation Evidence + +| Slice | Commit | Gate | Result | Notes | +|-------|--------|------|--------|-------| +| 1 | `0c1b2a1` | F-7 + F-15 | PASS for private-type-ref scope | Re-exported package-owned referenced types through the relevant entrypoints; replaced `z.ZodType` and `StandardSchemaV1` public annotations with package-owned structural contracts in `src/domain/schema-types.ts`; no upstream type re-export introduced. | ## Design Checkpoint From 1a7e71ee3a6c6278d3a6ede42047749d5fa017ba Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 20:40:18 +0200 Subject: [PATCH 08/55] docs(plugin): document abstract contributions part one Co-Authored-By: Claude Opus 4.8 --- packages/plugin/src/abstracts/plugin-aspire-contribution.ts | 2 ++ .../src/abstracts/plugin-background-processor-contribution.ts | 3 +++ .../src/abstracts/plugin-contract-version-contribution.ts | 3 +++ packages/plugin/src/abstracts/plugin-db-schema-contribution.ts | 3 +++ packages/plugin/src/abstracts/plugin-e2e-contribution.ts | 3 +++ 5 files changed, 14 insertions(+) diff --git a/packages/plugin/src/abstracts/plugin-aspire-contribution.ts b/packages/plugin/src/abstracts/plugin-aspire-contribution.ts index c50bf459a..6be6792f0 100644 --- a/packages/plugin/src/abstracts/plugin-aspire-contribution.ts +++ b/packages/plugin/src/abstracts/plugin-aspire-contribution.ts @@ -2,6 +2,8 @@ import { PluginContribution } from './plugin-contribution.ts'; /** Base class for Aspire contribution implementations. */ export abstract class PluginAspireContribution extends PluginContribution { + /** Contribution axis for Aspire host modules. */ readonly axis = 'aspire' as const; + /** Module path that exports the Aspire contribution. */ abstract readonly modulePath: string; } diff --git a/packages/plugin/src/abstracts/plugin-background-processor-contribution.ts b/packages/plugin/src/abstracts/plugin-background-processor-contribution.ts index f6b655b12..b91111ebd 100644 --- a/packages/plugin/src/abstracts/plugin-background-processor-contribution.ts +++ b/packages/plugin/src/abstracts/plugin-background-processor-contribution.ts @@ -2,7 +2,10 @@ import { PluginContribution } from './plugin-contribution.ts'; /** Base class for background processor contribution implementations. */ export abstract class PluginBackgroundProcessorContribution extends PluginContribution { + /** Contribution axis for background processors. */ readonly axis = 'background-processor' as const; + /** Stable processor name registered by the plugin. */ abstract readonly name: string; + /** Module entrypoint that starts or defines the processor. */ abstract readonly entrypoint: string; } diff --git a/packages/plugin/src/abstracts/plugin-contract-version-contribution.ts b/packages/plugin/src/abstracts/plugin-contract-version-contribution.ts index 43df448f8..3b771291b 100644 --- a/packages/plugin/src/abstracts/plugin-contract-version-contribution.ts +++ b/packages/plugin/src/abstracts/plugin-contract-version-contribution.ts @@ -2,7 +2,10 @@ import { PluginContribution } from './plugin-contribution.ts'; /** Base class for contract version contribution implementations. */ export abstract class PluginContractVersionContribution extends PluginContribution { + /** Contribution axis for contract version loaders. */ readonly axis = 'contract-version' as const; + /** Contract version identifier provided by the plugin. */ abstract readonly version: string; + /** Module path for loading the contract version. */ abstract readonly loader: string; } diff --git a/packages/plugin/src/abstracts/plugin-db-schema-contribution.ts b/packages/plugin/src/abstracts/plugin-db-schema-contribution.ts index 2d0e1e9b4..358ad2a00 100644 --- a/packages/plugin/src/abstracts/plugin-db-schema-contribution.ts +++ b/packages/plugin/src/abstracts/plugin-db-schema-contribution.ts @@ -2,7 +2,10 @@ import { PluginContribution } from './plugin-contribution.ts'; /** Base class for database schema contribution implementations. */ export abstract class PluginDbSchemaContribution extends PluginContribution { + /** Contribution axis for database schemas. */ readonly axis = 'database-schema' as const; + /** Path to the contributed schema file. */ abstract readonly path: string; + /** Optional database engine the schema targets. */ abstract readonly engine?: 'postgres' | 'mysql' | 'mssql' | 'sqlite'; } diff --git a/packages/plugin/src/abstracts/plugin-e2e-contribution.ts b/packages/plugin/src/abstracts/plugin-e2e-contribution.ts index 821e42bd2..c95c69021 100644 --- a/packages/plugin/src/abstracts/plugin-e2e-contribution.ts +++ b/packages/plugin/src/abstracts/plugin-e2e-contribution.ts @@ -2,7 +2,10 @@ import { PluginContribution } from './plugin-contribution.ts'; /** Base class for end-to-end contribution implementations. */ export abstract class PluginE2eContribution extends PluginContribution { + /** Contribution axis for end-to-end gates. */ readonly axis = 'e2e' as const; + /** Stable gate name exposed by the plugin. */ abstract readonly name: string; + /** Command that runs the contributed end-to-end gate. */ abstract readonly command: string; } From 2beed40f1a645ac2a8ebd1ddcd20f09fb00839d5 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 20:40:51 +0200 Subject: [PATCH 09/55] docs(wave3): record slice 2 abstract docs Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 2 ++ .../run/feat-package-quality-wave3-plugin--host/worklog.md | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index ed2a6ae71..7a800f2b5 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -7,7 +7,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | seed | (this commit) | chore(wave3): seed @netscript/plugin host run docs | — | | 1 | 22557b8 | docs(wave3): record @netscript/plugin research, plan, and design checkpoint | Research + Plan & Design | | 2 | 0c1b2a1 | fix(plugin): clear private type refs | Slice 1 | -| 3 | (this commit) | docs(wave3): record slice 1 private-type-ref fix | Slice 1 docs | +| 3 | 19f2915 | docs(wave3): record slice 1 private-type-ref fix | Slice 1 docs | +| 4 | 1a7e71e | docs(plugin): document abstract contributions part one | Slice 2 | +| 5 | (this commit) | docs(wave3): record slice 2 abstract docs | Slice 2 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index cf1154698..41fceb291 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -21,6 +21,8 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. - Implementation: slice 1 complete. Commit `0c1b2a1` fixes all `private-type-ref` errors; full-export doc-lint now has no `private-type-ref` matches and 100 planned `missing-jsdoc` errors for slices 2-7. +- Implementation: slice 2 complete. Commit `1a7e71e` documents the first abstract contribution + group and reduces full-export doc-lint to 86 remaining missing-JSDoc errors. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index a715f68b8..c5166ff5e 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -12,6 +12,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Plan & Design | generator | Locked plan.md (24 slices), Design checkpoint in worklog.md. Ready for PLAN-EVAL. | | | PLAN-EVAL | evaluator | **PASS** (2026-06-08). Separate session. Full Plan-Gate checklist walked; load-bearing findings spot-checked against tree (8 entrypoints, builder 343 LOC, README 138 LOC, doc-lint 93). One rework-forcing decision surfaced and resolved in-line as LD-8 (upstream-typed `private-type-ref` → package-owned structural types, not upstream re-export, to preserve F-15/AP-14). Verdict in `plan-eval.md`. Implementation may begin. | | 2026-06-08 | Implement | generator | Slice 1 complete: fixed all 9 private-type-ref errors, including LD-8 package-owned structural schema types for Zod/Standard Schema signatures. Code commit `0c1b2a1`; paired docs commit follows. | +| 2026-06-08 | Implement | generator | Slice 2 complete: documented first abstract contribution group. Code commit `1a7e71e`; paired docs commit follows. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -20,12 +21,14 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 1 validation: `deno check --unstable-kv mod.ts src/abstracts/mod.ts src/config/mod.ts src/cli/mod.ts loader.ts src/sdk/mod.ts src/testing/mod.ts src/templates/mod.ts` passes from `packages/plugin`. - Slice 1 doc-lint evidence: full-export `deno doc --lint ...` reports **0 `private-type-ref` errors** and 100 remaining `missing-jsdoc` errors. The remaining doc-lint work belongs to slices 2-7. +- Slice 2 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` reports **0 `private-type-ref` errors** and 86 remaining `missing-jsdoc` errors. ## Implementation Evidence | Slice | Commit | Gate | Result | Notes | |-------|--------|------|--------|-------| | 1 | `0c1b2a1` | F-7 + F-15 | PASS for private-type-ref scope | Re-exported package-owned referenced types through the relevant entrypoints; replaced `z.ZodType` and `StandardSchemaV1` public annotations with package-owned structural contracts in `src/domain/schema-types.ts`; no upstream type re-export introduced. | +| 2 | `1a7e71e` | F-7 | PASS for slice scope | Added JSDoc to `PluginAspireContribution`, `PluginBackgroundProcessorContribution`, `PluginContractVersionContribution`, `PluginDbSchemaContribution`, and `PluginE2eContribution`; doc-lint remaining count dropped to 86. | ## Design Checkpoint From b598f3b923d09b245b870dec6293997c041dfea3 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 20:42:21 +0200 Subject: [PATCH 10/55] docs(plugin): document abstract contributions part two Co-Authored-By: Claude Opus 4.8 --- packages/plugin/src/abstracts/plugin-contribution.ts | 1 + .../plugin/src/abstracts/plugin-migration-contribution.ts | 3 +++ .../src/abstracts/plugin-runtime-config-topic-contribution.ts | 3 +++ packages/plugin/src/abstracts/plugin-service-contribution.ts | 3 +++ .../plugin/src/abstracts/plugin-stream-topic-contribution.ts | 4 ++++ .../plugin/src/abstracts/plugin-telemetry-contribution.ts | 3 +++ 6 files changed, 17 insertions(+) diff --git a/packages/plugin/src/abstracts/plugin-contribution.ts b/packages/plugin/src/abstracts/plugin-contribution.ts index 5c2ccdd5f..3c566a9c9 100644 --- a/packages/plugin/src/abstracts/plugin-contribution.ts +++ b/packages/plugin/src/abstracts/plugin-contribution.ts @@ -2,5 +2,6 @@ import type { ContributionAxis } from '../domain/mod.ts'; /** Base class for plugin contribution extension axes. */ export abstract class PluginContribution { + /** Contribution axis implemented by the concrete contribution. */ abstract readonly axis: ContributionAxis; } diff --git a/packages/plugin/src/abstracts/plugin-migration-contribution.ts b/packages/plugin/src/abstracts/plugin-migration-contribution.ts index 02fa99383..a210de7e1 100644 --- a/packages/plugin/src/abstracts/plugin-migration-contribution.ts +++ b/packages/plugin/src/abstracts/plugin-migration-contribution.ts @@ -2,7 +2,10 @@ import { PluginContribution } from './plugin-contribution.ts'; /** Base class for migration contribution implementations. */ export abstract class PluginMigrationContribution extends PluginContribution { + /** Contribution axis for migration modules. */ readonly axis = 'migration' as const; + /** Stable migration name exposed by the plugin. */ abstract readonly name: string; + /** Path to the migration module or artifact. */ abstract readonly path: string; } diff --git a/packages/plugin/src/abstracts/plugin-runtime-config-topic-contribution.ts b/packages/plugin/src/abstracts/plugin-runtime-config-topic-contribution.ts index 7045afcba..41358132b 100644 --- a/packages/plugin/src/abstracts/plugin-runtime-config-topic-contribution.ts +++ b/packages/plugin/src/abstracts/plugin-runtime-config-topic-contribution.ts @@ -2,7 +2,10 @@ import { PluginContribution } from './plugin-contribution.ts'; /** Base class for runtime config topic contribution implementations. */ export abstract class PluginRuntimeConfigTopicContribution extends PluginContribution { + /** Contribution axis for runtime configuration topics. */ readonly axis = 'runtime-config-topic' as const; + /** Runtime configuration topic name. */ abstract readonly name: string; + /** Optional schema module path for validating the topic. */ abstract readonly schemaPath?: string; } diff --git a/packages/plugin/src/abstracts/plugin-service-contribution.ts b/packages/plugin/src/abstracts/plugin-service-contribution.ts index b6412b0e8..b916ff462 100644 --- a/packages/plugin/src/abstracts/plugin-service-contribution.ts +++ b/packages/plugin/src/abstracts/plugin-service-contribution.ts @@ -2,7 +2,10 @@ import { PluginContribution } from './plugin-contribution.ts'; /** Base class for service contribution implementations. */ export abstract class PluginServiceContribution extends PluginContribution { + /** Contribution axis for service modules. */ readonly axis = 'service' as const; + /** Stable service name registered by the plugin. */ abstract readonly name: string; + /** Module entrypoint that exports the service. */ abstract readonly entrypoint: string; } diff --git a/packages/plugin/src/abstracts/plugin-stream-topic-contribution.ts b/packages/plugin/src/abstracts/plugin-stream-topic-contribution.ts index a5676ada2..78640ed3d 100644 --- a/packages/plugin/src/abstracts/plugin-stream-topic-contribution.ts +++ b/packages/plugin/src/abstracts/plugin-stream-topic-contribution.ts @@ -3,8 +3,12 @@ import { PluginContribution } from './plugin-contribution.ts'; /** Base class for stream topic contribution implementations. */ export abstract class PluginStreamTopicContribution extends PluginContribution { + /** Contribution axis for stream topics. */ readonly axis = 'stream-topic' as const; + /** Stable stream topic name. */ abstract readonly name: string; + /** Transport subject or topic identifier. */ abstract readonly subject: string; + /** Payload schema accepted for this stream topic. */ abstract readonly schema: PluginPayloadSchema; } diff --git a/packages/plugin/src/abstracts/plugin-telemetry-contribution.ts b/packages/plugin/src/abstracts/plugin-telemetry-contribution.ts index e19dec0c2..fb8980760 100644 --- a/packages/plugin/src/abstracts/plugin-telemetry-contribution.ts +++ b/packages/plugin/src/abstracts/plugin-telemetry-contribution.ts @@ -2,7 +2,10 @@ import { PluginContribution } from './plugin-contribution.ts'; /** Base class for telemetry contribution implementations. */ export abstract class PluginTelemetryContribution extends PluginContribution { + /** Contribution axis for telemetry modules. */ readonly axis = 'telemetry' as const; + /** Stable telemetry integration name. */ abstract readonly name: string; + /** Module path for the telemetry integration. */ abstract readonly module: string; } From c4abbde989f466d6f194ba50ff87b970e7ba42dc Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 20:42:54 +0200 Subject: [PATCH 11/55] docs(wave3): record slice 3 abstract docs Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 2 ++ .../run/feat-package-quality-wave3-plugin--host/worklog.md | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index 7a800f2b5..da68d46e1 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -9,7 +9,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 2 | 0c1b2a1 | fix(plugin): clear private type refs | Slice 1 | | 3 | 19f2915 | docs(wave3): record slice 1 private-type-ref fix | Slice 1 docs | | 4 | 1a7e71e | docs(plugin): document abstract contributions part one | Slice 2 | -| 5 | (this commit) | docs(wave3): record slice 2 abstract docs | Slice 2 docs | +| 5 | 2beed40 | docs(wave3): record slice 2 abstract docs | Slice 2 docs | +| 6 | b598f3b | docs(plugin): document abstract contributions part two | Slice 3 | +| 7 | (this commit) | docs(wave3): record slice 3 abstract docs | Slice 3 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index 41fceb291..7589f46fb 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -23,6 +23,8 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. 2-7. - Implementation: slice 2 complete. Commit `1a7e71e` documents the first abstract contribution group and reduces full-export doc-lint to 86 remaining missing-JSDoc errors. +- Implementation: slice 3 complete. Commit `b598f3b` documents the remaining abstract contribution + group and reduces full-export doc-lint to 69 remaining missing-JSDoc errors. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index c5166ff5e..417c23e53 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -13,6 +13,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | | PLAN-EVAL | evaluator | **PASS** (2026-06-08). Separate session. Full Plan-Gate checklist walked; load-bearing findings spot-checked against tree (8 entrypoints, builder 343 LOC, README 138 LOC, doc-lint 93). One rework-forcing decision surfaced and resolved in-line as LD-8 (upstream-typed `private-type-ref` → package-owned structural types, not upstream re-export, to preserve F-15/AP-14). Verdict in `plan-eval.md`. Implementation may begin. | | 2026-06-08 | Implement | generator | Slice 1 complete: fixed all 9 private-type-ref errors, including LD-8 package-owned structural schema types for Zod/Standard Schema signatures. Code commit `0c1b2a1`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 2 complete: documented first abstract contribution group. Code commit `1a7e71e`; paired docs commit follows. | +| 2026-06-08 | Implement | generator | Slice 3 complete: documented remaining abstract contribution group and base axis contract. Code commit `b598f3b`; paired docs commit follows. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -22,6 +23,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 1 validation: `deno check --unstable-kv mod.ts src/abstracts/mod.ts src/config/mod.ts src/cli/mod.ts loader.ts src/sdk/mod.ts src/testing/mod.ts src/templates/mod.ts` passes from `packages/plugin`. - Slice 1 doc-lint evidence: full-export `deno doc --lint ...` reports **0 `private-type-ref` errors** and 100 remaining `missing-jsdoc` errors. The remaining doc-lint work belongs to slices 2-7. - Slice 2 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` reports **0 `private-type-ref` errors** and 86 remaining `missing-jsdoc` errors. +- Slice 3 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` reports **0 `private-type-ref` errors** and 69 remaining `missing-jsdoc` errors. ## Implementation Evidence @@ -29,6 +31,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` |-------|--------|------|--------|-------| | 1 | `0c1b2a1` | F-7 + F-15 | PASS for private-type-ref scope | Re-exported package-owned referenced types through the relevant entrypoints; replaced `z.ZodType` and `StandardSchemaV1` public annotations with package-owned structural contracts in `src/domain/schema-types.ts`; no upstream type re-export introduced. | | 2 | `1a7e71e` | F-7 | PASS for slice scope | Added JSDoc to `PluginAspireContribution`, `PluginBackgroundProcessorContribution`, `PluginContractVersionContribution`, `PluginDbSchemaContribution`, and `PluginE2eContribution`; doc-lint remaining count dropped to 86. | +| 3 | `b598f3b` | F-7 | PASS for slice scope | Added JSDoc to remaining abstract contribution contracts and `PluginContribution.axis`; doc-lint remaining count dropped to 69. | ## Design Checkpoint From a308a2eea7d1402b88cec4e0722997e0146fe734 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 20:44:23 +0200 Subject: [PATCH 12/55] docs(plugin): document builder errors and memory adapter Co-Authored-By: Claude Opus 4.8 --- .../src/adapters/memory-file-system-adapter.ts | 4 ++++ .../plugin/src/config/builders/plugin-builder.ts | 15 +++++++++++++++ packages/plugin/src/domain/errors.ts | 3 +++ 3 files changed, 22 insertions(+) diff --git a/packages/plugin/src/adapters/memory-file-system-adapter.ts b/packages/plugin/src/adapters/memory-file-system-adapter.ts index 2fd4611db..27d127930 100644 --- a/packages/plugin/src/adapters/memory-file-system-adapter.ts +++ b/packages/plugin/src/adapters/memory-file-system-adapter.ts @@ -2,16 +2,20 @@ import type { FileSystemPort } from '../ports/mod.ts'; /** In-memory file system adapter for plugin tests. */ export class MemoryFileSystemAdapter implements FileSystemPort { + /** Mutable in-memory file contents keyed by path. */ readonly files: Map = new Map(); + /** Read text content from an in-memory path. */ async readText(path: string): Promise { return this.files.get(path) ?? ''; } + /** Write text content to an in-memory path. */ async writeText(path: string, text: string): Promise { this.files.set(path, text); } + /** Check whether an in-memory path exists. */ async exists(path: string): Promise { return this.files.has(path); } diff --git a/packages/plugin/src/config/builders/plugin-builder.ts b/packages/plugin/src/config/builders/plugin-builder.ts index 2c26499c4..d443b577c 100644 --- a/packages/plugin/src/config/builders/plugin-builder.ts +++ b/packages/plugin/src/config/builders/plugin-builder.ts @@ -17,6 +17,7 @@ import { PluginManifestSchema } from '../validators/manifest-schema.ts'; /** Dependency context supplied to contribution callback inputs. */ export type DependencyContext = { + /** Typed dependencies registered on the builder. */ readonly deps: TDependencies; }; @@ -27,18 +28,31 @@ export type ContributionInput /** Immutable state accumulated by the plugin builder chain. */ export interface PluginBuilderState { + /** Plugin package name. */ readonly name?: string; + /** Plugin semantic version. */ readonly version?: string; + /** Plugin description. */ readonly description?: string; + /** Display name shown in host UI surfaces. */ readonly displayName?: string; + /** Plugin category. */ readonly type?: PluginType; + /** Plugin author name or organization. */ readonly author?: string; + /** Plugin license identifier. */ readonly license?: string; + /** Discovery tags attached to the manifest. */ readonly tags?: readonly string[]; + /** Host permissions requested by the plugin. */ readonly permissions?: readonly string[]; + /** Runtime-safe metadata attached to the manifest. */ readonly metadata?: PluginMetadata; + /** Contributions accumulated by builder methods. */ readonly contributions: PluginContributions; + /** Lifecycle hooks supplied by the plugin. */ readonly hooks?: PluginLifecycleHooks; + /** Typed dependencies available to contribution callbacks. */ readonly dependencies?: TDependencies; } @@ -51,6 +65,7 @@ export class PluginBuilder< > { readonly #state: PluginBuilderState; + /** Create a builder from an existing immutable state snapshot. */ constructor(state: PluginBuilderState = { contributions: {} }) { this.#state = state; } diff --git a/packages/plugin/src/domain/errors.ts b/packages/plugin/src/domain/errors.ts index c4816bd65..063a34b09 100644 --- a/packages/plugin/src/domain/errors.ts +++ b/packages/plugin/src/domain/errors.ts @@ -1,5 +1,6 @@ /** Base error for plugin package failures. */ export class PluginError extends Error { + /** Create a plugin package error. */ constructor(message: string, options?: ErrorOptions) { super(message, options); this.name = 'PluginError'; @@ -8,6 +9,7 @@ export class PluginError extends Error { /** Error thrown when a plugin definition is invalid. */ export class PluginValidationError extends PluginError { + /** Create a validation error with optional issue details. */ constructor(message: string, readonly issues: readonly string[] = []) { super(message); this.name = 'PluginValidationError'; @@ -16,6 +18,7 @@ export class PluginValidationError extends PluginError { /** Error thrown when a plugin name is registered more than once. */ export class DuplicatePluginError extends PluginError { + /** Create a duplicate-plugin error for the conflicting name. */ constructor(name: string) { super(`Plugin "${name}" is already registered.`); this.name = 'DuplicatePluginError'; From 9cadaa4411d1199804d6b82a4bc825ba07b777dc Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 20:44:54 +0200 Subject: [PATCH 13/55] docs(wave3): record slice 4 builder docs Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 2 ++ .../run/feat-package-quality-wave3-plugin--host/worklog.md | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index da68d46e1..55013988f 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -11,7 +11,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 4 | 1a7e71e | docs(plugin): document abstract contributions part one | Slice 2 | | 5 | 2beed40 | docs(wave3): record slice 2 abstract docs | Slice 2 docs | | 6 | b598f3b | docs(plugin): document abstract contributions part two | Slice 3 | -| 7 | (this commit) | docs(wave3): record slice 3 abstract docs | Slice 3 docs | +| 7 | c4abbde | docs(wave3): record slice 3 abstract docs | Slice 3 docs | +| 8 | a308a2e | docs(plugin): document builder errors and memory adapter | Slice 4 | +| 9 | (this commit) | docs(wave3): record slice 4 builder docs | Slice 4 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index 7589f46fb..0419643ff 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -25,6 +25,8 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. group and reduces full-export doc-lint to 86 remaining missing-JSDoc errors. - Implementation: slice 3 complete. Commit `b598f3b` documents the remaining abstract contribution group and reduces full-export doc-lint to 69 remaining missing-JSDoc errors. +- Implementation: slice 4 complete. Commit `a308a2e` documents builder/error/adapter exports and + reduces full-export doc-lint to 48 remaining missing-JSDoc errors. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index 417c23e53..12b5e34e8 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -14,6 +14,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Implement | generator | Slice 1 complete: fixed all 9 private-type-ref errors, including LD-8 package-owned structural schema types for Zod/Standard Schema signatures. Code commit `0c1b2a1`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 2 complete: documented first abstract contribution group. Code commit `1a7e71e`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 3 complete: documented remaining abstract contribution group and base axis contract. Code commit `b598f3b`; paired docs commit follows. | +| 2026-06-08 | Implement | generator | Slice 4 complete: documented builder state/constructor, plugin errors, and memory file-system adapter. Code commit `a308a2e`; paired docs commit follows. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -24,6 +25,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 1 doc-lint evidence: full-export `deno doc --lint ...` reports **0 `private-type-ref` errors** and 100 remaining `missing-jsdoc` errors. The remaining doc-lint work belongs to slices 2-7. - Slice 2 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` reports **0 `private-type-ref` errors** and 86 remaining `missing-jsdoc` errors. - Slice 3 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` reports **0 `private-type-ref` errors** and 69 remaining `missing-jsdoc` errors. +- Slice 4 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` reports **0 `private-type-ref` errors** and 48 remaining `missing-jsdoc` errors. ## Implementation Evidence @@ -32,6 +34,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 1 | `0c1b2a1` | F-7 + F-15 | PASS for private-type-ref scope | Re-exported package-owned referenced types through the relevant entrypoints; replaced `z.ZodType` and `StandardSchemaV1` public annotations with package-owned structural contracts in `src/domain/schema-types.ts`; no upstream type re-export introduced. | | 2 | `1a7e71e` | F-7 | PASS for slice scope | Added JSDoc to `PluginAspireContribution`, `PluginBackgroundProcessorContribution`, `PluginContractVersionContribution`, `PluginDbSchemaContribution`, and `PluginE2eContribution`; doc-lint remaining count dropped to 86. | | 3 | `b598f3b` | F-7 | PASS for slice scope | Added JSDoc to remaining abstract contribution contracts and `PluginContribution.axis`; doc-lint remaining count dropped to 69. | +| 4 | `a308a2e` | F-7 | PASS for slice scope | Added JSDoc to exported builder state/constructor, plugin error constructors, and `MemoryFileSystemAdapter`; doc-lint remaining count dropped to 48. | ## Design Checkpoint From d4262ad5a3a5df94573379464da42725d840d65e Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 20:47:09 +0200 Subject: [PATCH 14/55] docs(plugin): document sdk discovery contracts Co-Authored-By: Claude Opus 4.8 --- packages/plugin/src/sdk/application/run-walker-pipeline.ts | 4 ++++ packages/plugin/src/sdk/discovery/ast-extractor.ts | 1 + packages/plugin/src/sdk/discovery/manifest-resolver.ts | 3 +++ packages/plugin/src/sdk/discovery/ports/emitter-port.ts | 3 +++ packages/plugin/src/sdk/discovery/ports/extractor-port.ts | 4 ++++ .../plugin/src/sdk/discovery/ports/manifest-resolver-port.ts | 1 + packages/plugin/src/sdk/discovery/ports/walker-port.ts | 3 +++ packages/plugin/src/sdk/discovery/registry-emitter.ts | 1 + packages/plugin/src/sdk/discovery/source-graph.ts | 2 ++ packages/plugin/src/sdk/discovery/watcher.ts | 1 + packages/plugin/src/sdk/runtime/instrumentation-bridge.ts | 1 + packages/plugin/src/sdk/runtime/plugin-host-bootstrap.ts | 1 + 12 files changed, 25 insertions(+) diff --git a/packages/plugin/src/sdk/application/run-walker-pipeline.ts b/packages/plugin/src/sdk/application/run-walker-pipeline.ts index 76ead4116..6a910f4f0 100644 --- a/packages/plugin/src/sdk/application/run-walker-pipeline.ts +++ b/packages/plugin/src/sdk/application/run-walker-pipeline.ts @@ -4,9 +4,13 @@ import type { WalkerPort } from '../discovery/ports/walker-port.ts'; /** Options for running the SDK walker pipeline. */ export interface RunWalkerPipelineOptions { + /** Root directory to walk. */ readonly root: string; + /** Source walker used to discover files. */ readonly walker: WalkerPort; + /** Extractor used to identify contribution declarations. */ readonly extractor: ExtractorPort; + /** Emitter used to produce registry files. */ readonly emitter: EmitterPort; } diff --git a/packages/plugin/src/sdk/discovery/ast-extractor.ts b/packages/plugin/src/sdk/discovery/ast-extractor.ts index 6d2d87deb..d556addd1 100644 --- a/packages/plugin/src/sdk/discovery/ast-extractor.ts +++ b/packages/plugin/src/sdk/discovery/ast-extractor.ts @@ -9,6 +9,7 @@ const CONTRIBUTION_BUILDERS = [ /** Extractor for exported plugin contribution builder call sites. */ export class AstExtractor implements ExtractorPort { + /** Extract contribution candidates from walked source files. */ async extract(files: readonly WalkedFile[]): Promise { const contributions = files.flatMap((file) => extractFromFile(file)); return contributions.sort((left, right) => diff --git a/packages/plugin/src/sdk/discovery/manifest-resolver.ts b/packages/plugin/src/sdk/discovery/manifest-resolver.ts index 9a168a182..b706411f2 100644 --- a/packages/plugin/src/sdk/discovery/manifest-resolver.ts +++ b/packages/plugin/src/sdk/discovery/manifest-resolver.ts @@ -5,8 +5,10 @@ import type { ManifestResolverPort } from './ports/manifest-resolver-port.ts'; /** In-memory manifest resolver used by tests and alpha SDK stubs. */ export class MemoryManifestResolver implements ManifestResolverPort { + /** Create a resolver that always returns the provided manifest. */ constructor(private readonly manifest: PluginManifest | undefined = undefined) {} + /** Resolve a manifest from the in-memory value. */ async resolve(_spec: string): Promise { return this.manifest; } @@ -20,6 +22,7 @@ export interface ModuleManifestResolverOptions { /** Manifest resolver backed by dynamic imports. */ export class ModuleManifestResolver implements ManifestResolverPort { + /** Create a module resolver with project-root options. */ constructor(private readonly options: ModuleManifestResolverOptions) {} /** Resolve a plugin manifest module by package or file specifier. */ diff --git a/packages/plugin/src/sdk/discovery/ports/emitter-port.ts b/packages/plugin/src/sdk/discovery/ports/emitter-port.ts index c6a20c527..ca7688223 100644 --- a/packages/plugin/src/sdk/discovery/ports/emitter-port.ts +++ b/packages/plugin/src/sdk/discovery/ports/emitter-port.ts @@ -2,11 +2,14 @@ import type { ExtractedContribution } from './extractor-port.ts'; /** Output emitted by the registry emitter. */ export interface RegistryEmission { + /** Generated file path. */ readonly path: string; + /** Generated file text. */ readonly text: string; } /** Port for emitting generated plugin registry files. */ export interface EmitterPort { + /** Emit registry files for extracted contributions. */ emit(contributions: readonly ExtractedContribution[]): Promise; } diff --git a/packages/plugin/src/sdk/discovery/ports/extractor-port.ts b/packages/plugin/src/sdk/discovery/ports/extractor-port.ts index 54e324c1e..0b99e2e4c 100644 --- a/packages/plugin/src/sdk/discovery/ports/extractor-port.ts +++ b/packages/plugin/src/sdk/discovery/ports/extractor-port.ts @@ -2,12 +2,16 @@ import type { WalkedFile } from './walker-port.ts'; /** Extracted contribution candidate from source. */ export interface ExtractedContribution { + /** Source file that declared the contribution. */ readonly file: string; + /** Exported symbol name for the contribution. */ readonly symbol: string; + /** Contribution axis inferred from the declaration. */ readonly axis: string; } /** Port for extracting plugin contributions from walked files. */ export interface ExtractorPort { + /** Extract contribution candidates from walked files. */ extract(files: readonly WalkedFile[]): Promise; } diff --git a/packages/plugin/src/sdk/discovery/ports/manifest-resolver-port.ts b/packages/plugin/src/sdk/discovery/ports/manifest-resolver-port.ts index bf2813bbe..e228711e9 100644 --- a/packages/plugin/src/sdk/discovery/ports/manifest-resolver-port.ts +++ b/packages/plugin/src/sdk/discovery/ports/manifest-resolver-port.ts @@ -2,5 +2,6 @@ import type { PluginManifest } from '../../../config/mod.ts'; /** Port for resolving a plugin manifest from a package or module specifier. */ export interface ManifestResolverPort { + /** Resolve a manifest for a package or module specifier. */ resolve(spec: string): Promise; } diff --git a/packages/plugin/src/sdk/discovery/ports/walker-port.ts b/packages/plugin/src/sdk/discovery/ports/walker-port.ts index b841c3e1c..6fe46ffd0 100644 --- a/packages/plugin/src/sdk/discovery/ports/walker-port.ts +++ b/packages/plugin/src/sdk/discovery/ports/walker-port.ts @@ -1,10 +1,13 @@ /** File discovered by a plugin source walker. */ export interface WalkedFile { + /** Path to the discovered source file. */ readonly path: string; + /** Text content of the discovered source file. */ readonly text: string; } /** Port for discovering plugin source files. */ export interface WalkerPort { + /** Walk a root directory and return source files. */ walk(root: string): Promise; } diff --git a/packages/plugin/src/sdk/discovery/registry-emitter.ts b/packages/plugin/src/sdk/discovery/registry-emitter.ts index 0daf5c0c4..cb721976d 100644 --- a/packages/plugin/src/sdk/discovery/registry-emitter.ts +++ b/packages/plugin/src/sdk/discovery/registry-emitter.ts @@ -3,6 +3,7 @@ import type { ExtractedContribution } from './ports/extractor-port.ts'; /** Registry emitter that writes one generated TypeScript module per contribution axis. */ export class RegistryEmitter implements EmitterPort { + /** Emit generated registry modules for extracted contributions. */ async emit( contributions: readonly ExtractedContribution[], ): Promise { diff --git a/packages/plugin/src/sdk/discovery/source-graph.ts b/packages/plugin/src/sdk/discovery/source-graph.ts index 12ee99864..886e817de 100644 --- a/packages/plugin/src/sdk/discovery/source-graph.ts +++ b/packages/plugin/src/sdk/discovery/source-graph.ts @@ -3,7 +3,9 @@ import type { WalkedFile } from './ports/walker-port.ts'; /** Source graph snapshot produced by discovery. */ export interface SourceGraph { + /** Source files included in the snapshot. */ readonly files: readonly WalkedFile[]; + /** Contributions extracted from the source files. */ readonly contributions: readonly ExtractedContribution[]; } diff --git a/packages/plugin/src/sdk/discovery/watcher.ts b/packages/plugin/src/sdk/discovery/watcher.ts index 312a0e886..ac37cde5e 100644 --- a/packages/plugin/src/sdk/discovery/watcher.ts +++ b/packages/plugin/src/sdk/discovery/watcher.ts @@ -1,5 +1,6 @@ /** Watcher handle returned by SDK watch presets. */ export interface WatcherHandle { + /** Stop the watcher and release any owned resources. */ readonly stop: () => Promise; } diff --git a/packages/plugin/src/sdk/runtime/instrumentation-bridge.ts b/packages/plugin/src/sdk/runtime/instrumentation-bridge.ts index f0e8a7b3a..a00190909 100644 --- a/packages/plugin/src/sdk/runtime/instrumentation-bridge.ts +++ b/packages/plugin/src/sdk/runtime/instrumentation-bridge.ts @@ -1,5 +1,6 @@ /** Bridge between plugin runtime and telemetry instrumentation. */ export interface InstrumentationBridge { + /** Register a plugin or contribution name with instrumentation. */ readonly register: (name: string) => void; } diff --git a/packages/plugin/src/sdk/runtime/plugin-host-bootstrap.ts b/packages/plugin/src/sdk/runtime/plugin-host-bootstrap.ts index 7eb2a07a3..f1d9f84ac 100644 --- a/packages/plugin/src/sdk/runtime/plugin-host-bootstrap.ts +++ b/packages/plugin/src/sdk/runtime/plugin-host-bootstrap.ts @@ -2,6 +2,7 @@ import type { PluginManifest } from '../../config/mod.ts'; /** Result of bootstrapping plugin host state. */ export interface PluginHostBootstrap { + /** Plugin manifests loaded into the host snapshot. */ readonly plugins: readonly PluginManifest[]; } From 02feec4423d48f1dd59eb7dde0f08c9625110447 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 20:47:45 +0200 Subject: [PATCH 15/55] docs(wave3): record slice 5 sdk docs Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 2 ++ .../run/feat-package-quality-wave3-plugin--host/worklog.md | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index 55013988f..5ea51fd2d 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -13,7 +13,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 6 | b598f3b | docs(plugin): document abstract contributions part two | Slice 3 | | 7 | c4abbde | docs(wave3): record slice 3 abstract docs | Slice 3 docs | | 8 | a308a2e | docs(plugin): document builder errors and memory adapter | Slice 4 | -| 9 | (this commit) | docs(wave3): record slice 4 builder docs | Slice 4 docs | +| 9 | 9cadaa4 | docs(wave3): record slice 4 builder docs | Slice 4 docs | +| 10 | d4262ad | docs(plugin): document sdk discovery contracts | Slice 5 | +| 11 | (this commit) | docs(wave3): record slice 5 sdk docs | Slice 5 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index 0419643ff..0e1fb5a9b 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -27,6 +27,8 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. group and reduces full-export doc-lint to 69 remaining missing-JSDoc errors. - Implementation: slice 4 complete. Commit `a308a2e` documents builder/error/adapter exports and reduces full-export doc-lint to 48 remaining missing-JSDoc errors. +- Implementation: slice 5 complete. Commit `d4262ad` documents SDK discovery/application/runtime + members and reduces full-export doc-lint to 23 remaining missing-JSDoc errors. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index 12b5e34e8..fbfbec740 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -15,6 +15,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Implement | generator | Slice 2 complete: documented first abstract contribution group. Code commit `1a7e71e`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 3 complete: documented remaining abstract contribution group and base axis contract. Code commit `b598f3b`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 4 complete: documented builder state/constructor, plugin errors, and memory file-system adapter. Code commit `a308a2e`; paired docs commit follows. | +| 2026-06-08 | Implement | generator | Slice 5 complete: documented SDK discovery/application/runtime public members. Code commit `d4262ad`; paired docs commit follows. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -26,6 +27,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 2 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` reports **0 `private-type-ref` errors** and 86 remaining `missing-jsdoc` errors. - Slice 3 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` reports **0 `private-type-ref` errors** and 69 remaining `missing-jsdoc` errors. - Slice 4 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` reports **0 `private-type-ref` errors** and 48 remaining `missing-jsdoc` errors. +- Slice 5 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` reports **0 `private-type-ref` errors** and 23 remaining `missing-jsdoc` errors. ## Implementation Evidence @@ -35,6 +37,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2 | `1a7e71e` | F-7 | PASS for slice scope | Added JSDoc to `PluginAspireContribution`, `PluginBackgroundProcessorContribution`, `PluginContractVersionContribution`, `PluginDbSchemaContribution`, and `PluginE2eContribution`; doc-lint remaining count dropped to 86. | | 3 | `b598f3b` | F-7 | PASS for slice scope | Added JSDoc to remaining abstract contribution contracts and `PluginContribution.axis`; doc-lint remaining count dropped to 69. | | 4 | `a308a2e` | F-7 | PASS for slice scope | Added JSDoc to exported builder state/constructor, plugin error constructors, and `MemoryFileSystemAdapter`; doc-lint remaining count dropped to 48. | +| 5 | `d4262ad` | F-7 | PASS for slice scope | Added JSDoc to SDK discovery ports/classes, walker pipeline options, watcher handle, and runtime bootstrap/bridge members; doc-lint remaining count dropped to 23. | ## Design Checkpoint From 177ed3cc3f0ad20fbdf7274178ac353f610a300e Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 20:49:48 +0200 Subject: [PATCH 16/55] docs(plugin): document cli and port contracts Co-Authored-By: Claude Opus 4.8 --- packages/plugin/src/cli/base/doctor-report.ts | 5 +++++ packages/plugin/src/cli/base/plugin-cli.ts | 2 ++ packages/plugin/src/cli/base/plugin-item-scaffolder.ts | 3 +++ .../plugin/src/cli/base/plugin-runtime-config-cli.ts | 1 + packages/plugin/src/cli/types.ts | 9 +++++++++ packages/plugin/src/ports/file-system-port.ts | 3 +++ 6 files changed, 23 insertions(+) diff --git a/packages/plugin/src/cli/base/doctor-report.ts b/packages/plugin/src/cli/base/doctor-report.ts index 414a1e4f6..a1e1fe35a 100644 --- a/packages/plugin/src/cli/base/doctor-report.ts +++ b/packages/plugin/src/cli/base/doctor-report.ts @@ -1,13 +1,18 @@ /** Diagnostic entry produced by plugin doctor commands. */ export interface DoctorCheck { + /** Check name shown in doctor output. */ readonly name: string; + /** Whether the check passed. */ readonly ok: boolean; + /** Optional failure or warning message. */ readonly message?: string; } /** Aggregate doctor report for a plugin CLI. */ export interface DoctorReport { + /** Plugin name covered by the report. */ readonly plugin: string; + /** Checks included in the report. */ readonly checks: readonly DoctorCheck[]; } diff --git a/packages/plugin/src/cli/base/plugin-cli.ts b/packages/plugin/src/cli/base/plugin-cli.ts index 71ad337ce..c5d4a5dad 100644 --- a/packages/plugin/src/cli/base/plugin-cli.ts +++ b/packages/plugin/src/cli/base/plugin-cli.ts @@ -2,7 +2,9 @@ import type { PluginCliArgs, PluginCliCommand, PluginCliResult } from '../types. /** Abstract base class for plugin-owned CLI command groups. */ export abstract class PluginCli { + /** Plugin CLI group name. */ abstract readonly name: string; + /** Plugin CLI group description. */ abstract readonly description: string; /** diff --git a/packages/plugin/src/cli/base/plugin-item-scaffolder.ts b/packages/plugin/src/cli/base/plugin-item-scaffolder.ts index 4e0d65a11..56639e98d 100644 --- a/packages/plugin/src/cli/base/plugin-item-scaffolder.ts +++ b/packages/plugin/src/cli/base/plugin-item-scaffolder.ts @@ -1,11 +1,14 @@ /** Result returned by plugin item scaffolders. */ export interface PluginScaffoldResult { + /** Files written or planned by the scaffolder. */ readonly files: readonly string[]; + /** Non-fatal warnings reported by the scaffolder. */ readonly warnings?: readonly string[]; } /** Abstract base for plugin `add ` scaffolders. */ export abstract class PluginItemScaffolder { + /** Item name accepted by the scaffolder. */ abstract readonly itemName: string; /** diff --git a/packages/plugin/src/cli/base/plugin-runtime-config-cli.ts b/packages/plugin/src/cli/base/plugin-runtime-config-cli.ts index 14714bfe0..356e8cb4a 100644 --- a/packages/plugin/src/cli/base/plugin-runtime-config-cli.ts +++ b/packages/plugin/src/cli/base/plugin-runtime-config-cli.ts @@ -2,6 +2,7 @@ import type { PluginCliArgs, PluginCliResult } from '../types.ts'; /** Abstract base for plugin runtime configuration commands. */ export abstract class PluginRuntimeConfigCli { + /** Runtime configuration topic managed by this CLI. */ abstract readonly topic: string; /** Read the runtime config topic. */ diff --git a/packages/plugin/src/cli/types.ts b/packages/plugin/src/cli/types.ts index 8d4338568..a449306a7 100644 --- a/packages/plugin/src/cli/types.ts +++ b/packages/plugin/src/cli/types.ts @@ -1,20 +1,29 @@ /** Command arguments passed to plugin CLI handlers. */ export interface PluginCliArgs { + /** Command name selected by the host CLI. */ readonly command: string; + /** Parsed option flags passed to the command. */ readonly flags?: Record; + /** Positional values passed to the command. */ readonly values?: readonly string[]; } /** Result returned by plugin CLI handlers. */ export interface PluginCliResult { + /** Process-style exit code for the command result. */ readonly code: number; + /** Optional human-readable result message. */ readonly message?: string; + /** Optional structured payload for programmatic callers. */ readonly data?: unknown; } /** A mounted CLI command handler. */ export interface PluginCliCommand { + /** Command name exposed under the plugin CLI. */ readonly name: string; + /** Short command description for help output. */ readonly description: string; + /** Run the command with parsed arguments. */ readonly run: (args: PluginCliArgs) => PluginCliResult | Promise; } diff --git a/packages/plugin/src/ports/file-system-port.ts b/packages/plugin/src/ports/file-system-port.ts index a3bcbbe11..d35dbf254 100644 --- a/packages/plugin/src/ports/file-system-port.ts +++ b/packages/plugin/src/ports/file-system-port.ts @@ -1,6 +1,9 @@ /** Minimal file system port used by plugin scaffolding. */ export interface FileSystemPort { + /** Read text content from a path. */ readText(path: string): Promise; + /** Write text content to a path. */ writeText(path: string, text: string): Promise; + /** Check whether a path exists. */ exists(path: string): Promise; } From 5e51001a79047d85f8aadc3a6a3974935ea05ac7 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 20:50:31 +0200 Subject: [PATCH 17/55] docs(wave3): record slice 6 cli docs Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 4 ++++ .llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md | 1 + .../run/feat-package-quality-wave3-plugin--host/worklog.md | 3 +++ 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index 5ea51fd2d..10cfdb709 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -15,7 +15,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 8 | a308a2e | docs(plugin): document builder errors and memory adapter | Slice 4 | | 9 | 9cadaa4 | docs(wave3): record slice 4 builder docs | Slice 4 docs | | 10 | d4262ad | docs(plugin): document sdk discovery contracts | Slice 5 | -| 11 | (this commit) | docs(wave3): record slice 5 sdk docs | Slice 5 docs | +| 11 | 02feec4 | docs(wave3): record slice 5 sdk docs | Slice 5 docs | +| 12 | 177ed3c | docs(plugin): document cli and port contracts | Slice 6 | +| 13 | (this commit) | docs(wave3): record slice 6 cli docs | Slice 6 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index 0e1fb5a9b..102327f23 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -29,6 +29,10 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. reduces full-export doc-lint to 48 remaining missing-JSDoc errors. - Implementation: slice 5 complete. Commit `d4262ad` documents SDK discovery/application/runtime members and reduces full-export doc-lint to 23 remaining missing-JSDoc errors. +- Implementation: slice 6 complete. Commit `177ed3c` documents CLI/base contracts and + `FileSystemPort`; full-export `deno doc --lint` now passes across all 8 entrypoints. Slice 7 is + a no-op verification/doc-record slice because the planned config/testing JSDoc targets already + have no remaining lint errors. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md index 652d0411b..63a33a55f 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md @@ -35,3 +35,4 @@ | Date | Severity | Item | Evidence | Action | |------|----------|------|----------|--------| | 2026-06-08 | note | PLAN-EVAL surfaced rework-forcing decision not flagged by plan: upstream-typed `private-type-ref` fix | 2 of 9 `private-type-ref` errors are on upstream types in public signatures — `z.ZodType` (`src/config/validators/manifest-schema.ts:4`) and `StandardSchemaV1` (`src/abstracts/plugin-stream-topic-contribution.ts:11`). Naive barrel re-export violates F-15/AP-14. | Resolved in-line during PLAN-EVAL: locked as LD-8 (package-owned structural types, not upstream re-export); slice 1, research private-type-ref table, and F-15 evidence amended. Verdict PASS in `plan-eval.md`. | +| 2026-06-08 | note | Phase A doc-lint reached 0 in slice 6 instead of slice 7 | After slice 6, full-export `deno doc --lint mod.ts src/abstracts/mod.ts src/config/mod.ts src/cli/mod.ts loader.ts src/sdk/mod.ts src/testing/mod.ts src/templates/mod.ts` returns `Checked 8 files`. The planned slice 7 target files (`config` domain/validators/application and `testing`) had no remaining doc-lint errors. | Keep the locked slice order; treat slice 7 as no-op verification/doc-record rather than adding unnecessary code. Slice 8 remains the full-export doc-lint verification gate. | diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index fbfbec740..15b27b625 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -16,6 +16,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Implement | generator | Slice 3 complete: documented remaining abstract contribution group and base axis contract. Code commit `b598f3b`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 4 complete: documented builder state/constructor, plugin errors, and memory file-system adapter. Code commit `a308a2e`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 5 complete: documented SDK discovery/application/runtime public members. Code commit `d4262ad`; paired docs commit follows. | +| 2026-06-08 | Implement | generator | Slice 6 complete: documented CLI/base contracts and `FileSystemPort`; full-export doc-lint is now 0. Code commit `177ed3c`; paired docs commit follows. Slice 7 will record no-op verification because no config/testing JSDoc errors remain. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -28,6 +29,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 3 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` reports **0 `private-type-ref` errors** and 69 remaining `missing-jsdoc` errors. - Slice 4 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` reports **0 `private-type-ref` errors** and 48 remaining `missing-jsdoc` errors. - Slice 5 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` reports **0 `private-type-ref` errors** and 23 remaining `missing-jsdoc` errors. +- Slice 6 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files` with 0 errors. ## Implementation Evidence @@ -38,6 +40,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 3 | `b598f3b` | F-7 | PASS for slice scope | Added JSDoc to remaining abstract contribution contracts and `PluginContribution.axis`; doc-lint remaining count dropped to 69. | | 4 | `a308a2e` | F-7 | PASS for slice scope | Added JSDoc to exported builder state/constructor, plugin error constructors, and `MemoryFileSystemAdapter`; doc-lint remaining count dropped to 48. | | 5 | `d4262ad` | F-7 | PASS for slice scope | Added JSDoc to SDK discovery ports/classes, walker pipeline options, watcher handle, and runtime bootstrap/bridge members; doc-lint remaining count dropped to 23. | +| 6 | `177ed3c` | F-7 | PASS | Added JSDoc to CLI/base contracts and `FileSystemPort`; full-export doc-lint reached 0 errors. | ## Design Checkpoint From 65a7c4170a6ae886ff1384ee2a015ce74391dde4 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 20:52:10 +0200 Subject: [PATCH 18/55] docs(plugin): verify config and testing docs Co-Authored-By: Claude Opus 4.8 From 290de8076bfabb3f7d8d38fa6414a03850bfd9b8 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 20:52:53 +0200 Subject: [PATCH 19/55] docs(wave3): record slice 7 doc verification Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 2 ++ .../run/feat-package-quality-wave3-plugin--host/worklog.md | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index 10cfdb709..67d058a3f 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -17,7 +17,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 10 | d4262ad | docs(plugin): document sdk discovery contracts | Slice 5 | | 11 | 02feec4 | docs(wave3): record slice 5 sdk docs | Slice 5 docs | | 12 | 177ed3c | docs(plugin): document cli and port contracts | Slice 6 | -| 13 | (this commit) | docs(wave3): record slice 6 cli docs | Slice 6 docs | +| 13 | 5e51001 | docs(wave3): record slice 6 cli docs | Slice 6 docs | +| 14 | 65a7c41 | docs(plugin): verify config and testing docs | Slice 7 | +| 15 | (this commit) | docs(wave3): record slice 7 doc verification | Slice 7 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index 102327f23..2fb99212a 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -33,6 +33,8 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. `FileSystemPort`; full-export `deno doc --lint` now passes across all 8 entrypoints. Slice 7 is a no-op verification/doc-record slice because the planned config/testing JSDoc targets already have no remaining lint errors. +- Implementation: slice 7 complete. Empty commit `65a7c41` records the no-op verification for + config-domain/validators/testing JSDoc targets; full-export doc-lint remains clean. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index 15b27b625..3f5fc307e 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -17,6 +17,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Implement | generator | Slice 4 complete: documented builder state/constructor, plugin errors, and memory file-system adapter. Code commit `a308a2e`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 5 complete: documented SDK discovery/application/runtime public members. Code commit `d4262ad`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 6 complete: documented CLI/base contracts and `FileSystemPort`; full-export doc-lint is now 0. Code commit `177ed3c`; paired docs commit follows. Slice 7 will record no-op verification because no config/testing JSDoc errors remain. | +| 2026-06-08 | Implement | generator | Slice 7 complete: no-op verification for config-domain/validators/testing JSDoc targets. Empty slice commit `65a7c41`; paired docs commit follows. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -30,6 +31,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 4 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` reports **0 `private-type-ref` errors** and 48 remaining `missing-jsdoc` errors. - Slice 5 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` reports **0 `private-type-ref` errors** and 23 remaining `missing-jsdoc` errors. - Slice 6 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files` with 0 errors. +- Slice 7 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files` with 0 errors; no config-domain/validators/testing code edits were needed. ## Implementation Evidence @@ -41,6 +43,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 4 | `a308a2e` | F-7 | PASS for slice scope | Added JSDoc to exported builder state/constructor, plugin error constructors, and `MemoryFileSystemAdapter`; doc-lint remaining count dropped to 48. | | 5 | `d4262ad` | F-7 | PASS for slice scope | Added JSDoc to SDK discovery ports/classes, walker pipeline options, watcher handle, and runtime bootstrap/bridge members; doc-lint remaining count dropped to 23. | | 6 | `177ed3c` | F-7 | PASS | Added JSDoc to CLI/base contracts and `FileSystemPort`; full-export doc-lint reached 0 errors. | +| 7 | `65a7c41` | F-7 | PASS | Empty no-op verification slice for config-domain/validators/testing JSDoc targets; full-export doc-lint remained 0 errors. | ## Design Checkpoint From bd1e594d1761f901ff7623b755c9880f5d4a2f34 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 20:53:46 +0200 Subject: [PATCH 20/55] test(plugin): verify full export doc lint Co-Authored-By: Claude Opus 4.8 From 2fda337a8712aa1e5a16a5786d7841014799e89e Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 20:54:25 +0200 Subject: [PATCH 21/55] docs(wave3): record slice 8 doc-lint gate Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 2 ++ .../run/feat-package-quality-wave3-plugin--host/worklog.md | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index 67d058a3f..f2cb53831 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -19,7 +19,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 12 | 177ed3c | docs(plugin): document cli and port contracts | Slice 6 | | 13 | 5e51001 | docs(wave3): record slice 6 cli docs | Slice 6 docs | | 14 | 65a7c41 | docs(plugin): verify config and testing docs | Slice 7 | -| 15 | (this commit) | docs(wave3): record slice 7 doc verification | Slice 7 docs | +| 15 | 290de80 | docs(wave3): record slice 7 doc verification | Slice 7 docs | +| 16 | bd1e594 | test(plugin): verify full export doc lint | Slice 8 | +| 17 | (this commit) | docs(wave3): record slice 8 doc-lint gate | Slice 8 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index 2fb99212a..9b6290ae9 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -35,6 +35,8 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. have no remaining lint errors. - Implementation: slice 7 complete. Empty commit `65a7c41` records the no-op verification for config-domain/validators/testing JSDoc targets; full-export doc-lint remains clean. +- Implementation: slice 8 complete. Empty commit `bd1e594` verifies full-export doc-lint remains + clean across all 8 entrypoints. Phase A is complete. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index 3f5fc307e..dc38f26f4 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -18,6 +18,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Implement | generator | Slice 5 complete: documented SDK discovery/application/runtime public members. Code commit `d4262ad`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 6 complete: documented CLI/base contracts and `FileSystemPort`; full-export doc-lint is now 0. Code commit `177ed3c`; paired docs commit follows. Slice 7 will record no-op verification because no config/testing JSDoc errors remain. | | 2026-06-08 | Implement | generator | Slice 7 complete: no-op verification for config-domain/validators/testing JSDoc targets. Empty slice commit `65a7c41`; paired docs commit follows. | +| 2026-06-08 | Implement | generator | Slice 8 complete: full-export doc-lint verification passed across all 8 entrypoints. Empty verification commit `bd1e594`; paired docs commit follows. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -32,6 +33,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 5 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` reports **0 `private-type-ref` errors** and 23 remaining `missing-jsdoc` errors. - Slice 6 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files` with 0 errors. - Slice 7 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files` with 0 errors; no config-domain/validators/testing code edits were needed. +- Slice 8 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files` with 0 errors. ## Implementation Evidence @@ -44,6 +46,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 5 | `d4262ad` | F-7 | PASS for slice scope | Added JSDoc to SDK discovery ports/classes, walker pipeline options, watcher handle, and runtime bootstrap/bridge members; doc-lint remaining count dropped to 23. | | 6 | `177ed3c` | F-7 | PASS | Added JSDoc to CLI/base contracts and `FileSystemPort`; full-export doc-lint reached 0 errors. | | 7 | `65a7c41` | F-7 | PASS | Empty no-op verification slice for config-domain/validators/testing JSDoc targets; full-export doc-lint remained 0 errors. | +| 8 | `bd1e594` | F-7 | PASS | Empty verification slice for full-export doc-lint; Phase A doc-lint gate is green. | ## Design Checkpoint From f6e7189771447c33666ccb1c56b6b0f55aee4298 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 20:55:46 +0200 Subject: [PATCH 22/55] docs(plugin): expand readme quality sections Co-Authored-By: Claude Opus 4.8 --- packages/plugin/README.md | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/plugin/README.md b/packages/plugin/README.md index 9f1b84c22..99c114c2c 100644 --- a/packages/plugin/README.md +++ b/packages/plugin/README.md @@ -124,7 +124,34 @@ for doctor commands. Tests use Deno test APIs and cover CLI contracts, SDK ports, registry behavior, scaffolding, and README examples. -## 12. Architecture And Stability +## 12. Observability + +The package does not emit telemetry by itself. Plugin manifests may describe telemetry contribution +modules with `.withTelemetry(...)`, and host packages decide how those modules are loaded, +registered, and connected to a telemetry backend. + +Diagnostics are explicit data contracts. `inspectPlugin` and `inspectWalkerOutput` return +JSON-stable objects so CLI doctor commands and tests can render or assert them without scraping log +text. + +## 13. Compatibility + +The package is ESM-only and targets Deno/JSR publication. Source imports use `jsr:`, `npm:`, and +relative specifiers; CommonJS `require()` and `module.exports` are not supported. + +The `./sdk` subpath includes a dynamic module resolver for runtime plugin manifests. Static publish +checks may warn about that dynamic import, but it is intentionally runtime-resolved by host tooling. + +## 14. Required Permissions + +The root builder and diagnostic entrypoint require no permissions. CLI and SDK consumers grant +permissions to the host process that walks files, writes generated registries, or dynamically imports +local plugin modules. + +Tests in this package run with `deno test --allow-all` because the SDK and scaffolding ports include +filesystem-shaped adapters and dynamic module loading contracts. + +## 15. Architecture And Stability `@netscript/plugin` follows the Arch-4 DSL/builder archetype. Public exports are curated; role-named implementation folders keep config, domain, CLI, SDK, adapters, testing, and diagnostics separate. From 63976f5c1d99048793bf0fa0281208402f004213 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 20:56:21 +0200 Subject: [PATCH 23/55] docs(wave3): record slice 9 readme expansion Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 2 ++ .../run/feat-package-quality-wave3-plugin--host/worklog.md | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index f2cb53831..f0c60cf7e 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -21,7 +21,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 14 | 65a7c41 | docs(plugin): verify config and testing docs | Slice 7 | | 15 | 290de80 | docs(wave3): record slice 7 doc verification | Slice 7 docs | | 16 | bd1e594 | test(plugin): verify full export doc lint | Slice 8 | -| 17 | (this commit) | docs(wave3): record slice 8 doc-lint gate | Slice 8 docs | +| 17 | 2fda337 | docs(wave3): record slice 8 doc-lint gate | Slice 8 docs | +| 18 | f6e7189 | docs(plugin): expand readme quality sections | Slice 9 | +| 19 | (this commit) | docs(wave3): record slice 9 readme expansion | Slice 9 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index 9b6290ae9..704e545b2 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -37,6 +37,8 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. config-domain/validators/testing JSDoc targets; full-export doc-lint remains clean. - Implementation: slice 8 complete. Empty commit `bd1e594` verifies full-export doc-lint remains clean across all 8 entrypoints. Phase A is complete. +- Implementation: slice 9 complete. Commit `f6e7189` expands README to 165 LOC and adds + Observability, Compatibility, and Required Permissions sections. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index dc38f26f4..4c2f68fb5 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -19,6 +19,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Implement | generator | Slice 6 complete: documented CLI/base contracts and `FileSystemPort`; full-export doc-lint is now 0. Code commit `177ed3c`; paired docs commit follows. Slice 7 will record no-op verification because no config/testing JSDoc errors remain. | | 2026-06-08 | Implement | generator | Slice 7 complete: no-op verification for config-domain/validators/testing JSDoc targets. Empty slice commit `65a7c41`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 8 complete: full-export doc-lint verification passed across all 8 entrypoints. Empty verification commit `bd1e594`; paired docs commit follows. | +| 2026-06-08 | Implement | generator | Slice 9 complete: README expanded to 165 LOC with Observability, Compatibility, and Required Permissions sections. Code commit `f6e7189`; paired docs commit follows. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -34,6 +35,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 6 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files` with 0 errors. - Slice 7 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files` with 0 errors; no config-domain/validators/testing code edits were needed. - Slice 8 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files` with 0 errors. +- Slice 9 validation: README line count is 165. The same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files` with 0 errors. ## Implementation Evidence @@ -47,6 +49,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 6 | `177ed3c` | F-7 | PASS | Added JSDoc to CLI/base contracts and `FileSystemPort`; full-export doc-lint reached 0 errors. | | 7 | `65a7c41` | F-7 | PASS | Empty no-op verification slice for config-domain/validators/testing JSDoc targets; full-export doc-lint remained 0 errors. | | 8 | `bd1e594` | F-7 | PASS | Empty verification slice for full-export doc-lint; Phase A doc-lint gate is green. | +| 9 | `f6e7189` | F-7 | PASS | README expanded from 138 to 165 LOC and now has standalone Observability, Compatibility, and Required Permissions sections. | ## Design Checkpoint From 5d7ed3a05524844b551ca90f233b4420e365fce0 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 20:57:49 +0200 Subject: [PATCH 24/55] test(plugin): align readme examples with quick start Co-Authored-By: Claude Opus 4.8 --- packages/plugin/tests/_fixtures/readme-examples_test.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/plugin/tests/_fixtures/readme-examples_test.ts b/packages/plugin/tests/_fixtures/readme-examples_test.ts index 35307294a..2b1536ff4 100644 --- a/packages/plugin/tests/_fixtures/readme-examples_test.ts +++ b/packages/plugin/tests/_fixtures/readme-examples_test.ts @@ -2,9 +2,16 @@ import { assertEquals } from '@std/assert'; import { definePlugin, inspectPlugin } from '../../mod.ts'; Deno.test('README definePlugin example creates an inspectable plugin manifest', () => { - const plugin = definePlugin('@example/plugin', '0.0.1-alpha.0').build(); + const plugin = definePlugin('@example/plugin', '0.0.1-alpha.0') + .withDescription('Example plugin.') + .withService({ + name: 'example-api', + entrypoint: 'services/api/main.ts', + }) + .build(); assertEquals(inspectPlugin(plugin).target, '@example/plugin'); + assertEquals(inspectPlugin(plugin).details.contributionGroups, 1); }); Deno.test('author guide manifest example uses the public typestate builder', () => { From 2bdc7af9dee1b7ae60e5595a39591c1853a94c74 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 20:58:22 +0200 Subject: [PATCH 25/55] docs(wave3): record slice 10 readme doctest Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 2 ++ .../run/feat-package-quality-wave3-plugin--host/worklog.md | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index f0c60cf7e..45e1b6671 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -23,7 +23,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 16 | bd1e594 | test(plugin): verify full export doc lint | Slice 8 | | 17 | 2fda337 | docs(wave3): record slice 8 doc-lint gate | Slice 8 docs | | 18 | f6e7189 | docs(plugin): expand readme quality sections | Slice 9 | -| 19 | (this commit) | docs(wave3): record slice 9 readme expansion | Slice 9 docs | +| 19 | 63976f5 | docs(wave3): record slice 9 readme expansion | Slice 9 docs | +| 20 | 5d7ed3a | test(plugin): align readme examples with quick start | Slice 10 | +| 21 | (this commit) | docs(wave3): record slice 10 readme doctest | Slice 10 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index 704e545b2..d8bb945a6 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -39,6 +39,8 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. clean across all 8 entrypoints. Phase A is complete. - Implementation: slice 9 complete. Commit `f6e7189` expands README to 165 LOC and adds Observability, Compatibility, and Required Permissions sections. +- Implementation: slice 10 complete. Commit `5d7ed3a` aligns the README fixture with the current + quick start and passes the focused doctest fixture. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index 4c2f68fb5..48298b578 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -20,6 +20,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Implement | generator | Slice 7 complete: no-op verification for config-domain/validators/testing JSDoc targets. Empty slice commit `65a7c41`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 8 complete: full-export doc-lint verification passed across all 8 entrypoints. Empty verification commit `bd1e594`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 9 complete: README expanded to 165 LOC with Observability, Compatibility, and Required Permissions sections. Code commit `f6e7189`; paired docs commit follows. | +| 2026-06-08 | Implement | generator | Slice 10 complete: README example fixture now matches the current quick start chain. Code commit `5d7ed3a`; paired docs commit follows. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -36,6 +37,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 7 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files` with 0 errors; no config-domain/validators/testing code edits were needed. - Slice 8 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files` with 0 errors. - Slice 9 validation: README line count is 165. The same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files` with 0 errors. +- Slice 10 validation: `deno test --allow-all tests/_fixtures/readme-examples_test.ts` passes 2 tests. The same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files` with 0 errors. ## Implementation Evidence @@ -50,6 +52,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 7 | `65a7c41` | F-7 | PASS | Empty no-op verification slice for config-domain/validators/testing JSDoc targets; full-export doc-lint remained 0 errors. | | 8 | `bd1e594` | F-7 | PASS | Empty verification slice for full-export doc-lint; Phase A doc-lint gate is green. | | 9 | `f6e7189` | F-7 | PASS | README expanded from 138 to 165 LOC and now has standalone Observability, Compatibility, and Required Permissions sections. | +| 10 | `5d7ed3a` | F-10 | PASS | README quick-start fixture compiles and asserts the service contribution example; 2 fixture tests pass. | ## Design Checkpoint From 5e9f751b113061b8845ed62eaa79ed519dea5c44 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 20:59:30 +0200 Subject: [PATCH 26/55] docs(plugin): document sdk dynamic import caveat Co-Authored-By: Claude Opus 4.8 --- packages/plugin/src/sdk/mod.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/plugin/src/sdk/mod.ts b/packages/plugin/src/sdk/mod.ts index 202211198..a32ccc941 100644 --- a/packages/plugin/src/sdk/mod.ts +++ b/packages/plugin/src/sdk/mod.ts @@ -1,3 +1,13 @@ +/** + * SDK discovery ports, alpha implementations, and runtime stubs for plugin hosts. + * + * `ModuleManifestResolver` dynamically imports plugin manifest modules at runtime. Static publish + * checks may report that import as unanalyzable; host tooling is responsible for passing resolvable + * package or file specifiers when using the resolver. + * + * @module + */ + export { AstExtractor } from './discovery/ast-extractor.ts'; export { FilesystemWalker } from './discovery/filesystem-walker.ts'; export { MemoryManifestResolver, ModuleManifestResolver } from './discovery/manifest-resolver.ts'; From de6eda509d78e65423564dcae98945931fbc97d7 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:00:09 +0200 Subject: [PATCH 27/55] docs(wave3): record slice 11 sdk caveat Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 2 ++ .../run/feat-package-quality-wave3-plugin--host/worklog.md | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index 45e1b6671..55d827081 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -25,7 +25,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 18 | f6e7189 | docs(plugin): expand readme quality sections | Slice 9 | | 19 | 63976f5 | docs(wave3): record slice 9 readme expansion | Slice 9 docs | | 20 | 5d7ed3a | test(plugin): align readme examples with quick start | Slice 10 | -| 21 | (this commit) | docs(wave3): record slice 10 readme doctest | Slice 10 docs | +| 21 | 2bdc7af | docs(wave3): record slice 10 readme doctest | Slice 10 docs | +| 22 | 5e9f751 | docs(plugin): document sdk dynamic import caveat | Slice 11 | +| 23 | (this commit) | docs(wave3): record slice 11 sdk caveat | Slice 11 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index d8bb945a6..df8ef5951 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -41,6 +41,8 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. Observability, Compatibility, and Required Permissions sections. - Implementation: slice 10 complete. Commit `5d7ed3a` aligns the README fixture with the current quick start and passes the focused doctest fixture. +- Implementation: slice 11 complete. Commit `5e9f751` documents the `./sdk` + `ModuleManifestResolver` dynamic-import caveat; publish dry-run succeeds with the expected warning. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index 48298b578..91b50a63b 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -21,6 +21,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Implement | generator | Slice 8 complete: full-export doc-lint verification passed across all 8 entrypoints. Empty verification commit `bd1e594`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 9 complete: README expanded to 165 LOC with Observability, Compatibility, and Required Permissions sections. Code commit `f6e7189`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 10 complete: README example fixture now matches the current quick start chain. Code commit `5d7ed3a`; paired docs commit follows. | +| 2026-06-08 | Implement | generator | Slice 11 complete: `./sdk` module JSDoc documents the dynamic import caveat. Code commit `5e9f751`; paired docs commit follows. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -38,6 +39,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 8 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files` with 0 errors. - Slice 9 validation: README line count is 165. The same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files` with 0 errors. - Slice 10 validation: `deno test --allow-all tests/_fixtures/readme-examples_test.ts` passes 2 tests. The same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files` with 0 errors. +- Slice 11 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files`. `deno publish --dry-run --allow-dirty` succeeds with the expected `unanalyzable-dynamic-import` warning on `src/sdk/discovery/manifest-resolver.ts`. ## Implementation Evidence @@ -53,6 +55,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 8 | `bd1e594` | F-7 | PASS | Empty verification slice for full-export doc-lint; Phase A doc-lint gate is green. | | 9 | `f6e7189` | F-7 | PASS | README expanded from 138 to 165 LOC and now has standalone Observability, Compatibility, and Required Permissions sections. | | 10 | `5d7ed3a` | F-10 | PASS | README quick-start fixture compiles and asserts the service contribution example; 2 fixture tests pass. | +| 11 | `5e9f751` | F-7/F-6 | PASS_WITH_DOCUMENTED_WARNING | `./sdk` module JSDoc documents that `ModuleManifestResolver` uses runtime-resolved dynamic imports; publish dry-run succeeds with the expected warning. | ## Design Checkpoint From f2838369cb18aafd7de1c4f58f5500876a124c9d Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:02:23 +0200 Subject: [PATCH 28/55] chore(plugin): add lint and fmt tasks Co-Authored-By: Claude Opus 4.8 --- packages/plugin/README.md | 4 ++-- packages/plugin/deno.json | 2 ++ .../src/adapters/memory-file-system-adapter.ts | 11 ++++++----- .../plugin/src/sdk/discovery/ast-extractor.ts | 12 +++++++----- .../src/sdk/discovery/manifest-resolver.ts | 4 ++-- .../plugin/src/sdk/discovery/registry-emitter.ts | 16 +++++++++------- 6 files changed, 28 insertions(+), 21 deletions(-) diff --git a/packages/plugin/README.md b/packages/plugin/README.md index 99c114c2c..078b85494 100644 --- a/packages/plugin/README.md +++ b/packages/plugin/README.md @@ -145,8 +145,8 @@ checks may warn about that dynamic import, but it is intentionally runtime-resol ## 14. Required Permissions The root builder and diagnostic entrypoint require no permissions. CLI and SDK consumers grant -permissions to the host process that walks files, writes generated registries, or dynamically imports -local plugin modules. +permissions to the host process that walks files, writes generated registries, or dynamically +imports local plugin modules. Tests in this package run with `deno test --allow-all` because the SDK and scaffolding ports include filesystem-shaped adapters and dynamic module loading contracts. diff --git a/packages/plugin/deno.json b/packages/plugin/deno.json index 3021a02e2..7242625b2 100644 --- a/packages/plugin/deno.json +++ b/packages/plugin/deno.json @@ -21,6 +21,8 @@ }, "tasks": { "check": "deno check --unstable-kv mod.ts", + "fmt": "deno fmt", + "lint": "deno lint", "test": "deno test --allow-all", "publish:dry-run": "deno publish --dry-run --allow-dirty" }, diff --git a/packages/plugin/src/adapters/memory-file-system-adapter.ts b/packages/plugin/src/adapters/memory-file-system-adapter.ts index 27d127930..35a655193 100644 --- a/packages/plugin/src/adapters/memory-file-system-adapter.ts +++ b/packages/plugin/src/adapters/memory-file-system-adapter.ts @@ -6,17 +6,18 @@ export class MemoryFileSystemAdapter implements FileSystemPort { readonly files: Map = new Map(); /** Read text content from an in-memory path. */ - async readText(path: string): Promise { - return this.files.get(path) ?? ''; + readText(path: string): Promise { + return Promise.resolve(this.files.get(path) ?? ''); } /** Write text content to an in-memory path. */ - async writeText(path: string, text: string): Promise { + writeText(path: string, text: string): Promise { this.files.set(path, text); + return Promise.resolve(); } /** Check whether an in-memory path exists. */ - async exists(path: string): Promise { - return this.files.has(path); + exists(path: string): Promise { + return Promise.resolve(this.files.has(path)); } } diff --git a/packages/plugin/src/sdk/discovery/ast-extractor.ts b/packages/plugin/src/sdk/discovery/ast-extractor.ts index d556addd1..48cf5ade3 100644 --- a/packages/plugin/src/sdk/discovery/ast-extractor.ts +++ b/packages/plugin/src/sdk/discovery/ast-extractor.ts @@ -10,12 +10,14 @@ const CONTRIBUTION_BUILDERS = [ /** Extractor for exported plugin contribution builder call sites. */ export class AstExtractor implements ExtractorPort { /** Extract contribution candidates from walked source files. */ - async extract(files: readonly WalkedFile[]): Promise { + extract(files: readonly WalkedFile[]): Promise { const contributions = files.flatMap((file) => extractFromFile(file)); - return contributions.sort((left, right) => - left.file.localeCompare(right.file) || - left.axis.localeCompare(right.axis) || - left.symbol.localeCompare(right.symbol) + return Promise.resolve( + contributions.sort((left, right) => + left.file.localeCompare(right.file) || + left.axis.localeCompare(right.axis) || + left.symbol.localeCompare(right.symbol) + ), ); } } diff --git a/packages/plugin/src/sdk/discovery/manifest-resolver.ts b/packages/plugin/src/sdk/discovery/manifest-resolver.ts index b706411f2..dd00f1d14 100644 --- a/packages/plugin/src/sdk/discovery/manifest-resolver.ts +++ b/packages/plugin/src/sdk/discovery/manifest-resolver.ts @@ -9,8 +9,8 @@ export class MemoryManifestResolver implements ManifestResolverPort { constructor(private readonly manifest: PluginManifest | undefined = undefined) {} /** Resolve a manifest from the in-memory value. */ - async resolve(_spec: string): Promise { - return this.manifest; + resolve(_spec: string): Promise { + return Promise.resolve(this.manifest); } } diff --git a/packages/plugin/src/sdk/discovery/registry-emitter.ts b/packages/plugin/src/sdk/discovery/registry-emitter.ts index cb721976d..50a3ff291 100644 --- a/packages/plugin/src/sdk/discovery/registry-emitter.ts +++ b/packages/plugin/src/sdk/discovery/registry-emitter.ts @@ -4,16 +4,18 @@ import type { ExtractedContribution } from './ports/extractor-port.ts'; /** Registry emitter that writes one generated TypeScript module per contribution axis. */ export class RegistryEmitter implements EmitterPort { /** Emit generated registry modules for extracted contributions. */ - async emit( + emit( contributions: readonly ExtractedContribution[], ): Promise { const groups = groupByAxis(contributions); - return [...groups.entries()] - .sort(([left], [right]) => left.localeCompare(right)) - .map(([axis, axisContributions]) => ({ - path: `.netscript/generated/${axis}.registry.ts`, - text: emitAxisRegistry(axis, axisContributions), - })); + return Promise.resolve( + [...groups.entries()] + .sort(([left], [right]) => left.localeCompare(right)) + .map(([axis, axisContributions]) => ({ + path: `.netscript/generated/${axis}.registry.ts`, + text: emitAxisRegistry(axis, axisContributions), + })), + ); } } From c7feaf39eef6110c706c8a6a6a72952f29625a10 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:03:00 +0200 Subject: [PATCH 29/55] docs(wave3): record slice 12 task hygiene Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 3 +++ .llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md | 1 + .../run/feat-package-quality-wave3-plugin--host/worklog.md | 3 +++ 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index 55d827081..02ad7d957 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -27,7 +27,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 20 | 5d7ed3a | test(plugin): align readme examples with quick start | Slice 10 | | 21 | 2bdc7af | docs(wave3): record slice 10 readme doctest | Slice 10 docs | | 22 | 5e9f751 | docs(plugin): document sdk dynamic import caveat | Slice 11 | -| 23 | (this commit) | docs(wave3): record slice 11 sdk caveat | Slice 11 docs | +| 23 | de6eda5 | docs(wave3): record slice 11 sdk caveat | Slice 11 docs | +| 24 | f283836 | chore(plugin): add lint and fmt tasks | Slice 12 | +| 25 | (this commit) | docs(wave3): record slice 12 task hygiene | Slice 12 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index df8ef5951..bd9dfa01d 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -43,6 +43,9 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. quick start and passes the focused doctest fixture. - Implementation: slice 11 complete. Commit `5e9f751` documents the `./sdk` `ModuleManifestResolver` dynamic-import caveat; publish dry-run succeeds with the expected warning. +- Implementation: slice 12 complete. Commit `f283836` adds package-local `lint` and `fmt` tasks, + fixes task-surfaced `require-await` findings in synchronous promise-returning stubs, and verifies + lint/fmt/check/doc-lint gates. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md index 63a33a55f..b90e89cbd 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md @@ -36,3 +36,4 @@ |------|----------|------|----------|--------| | 2026-06-08 | note | PLAN-EVAL surfaced rework-forcing decision not flagged by plan: upstream-typed `private-type-ref` fix | 2 of 9 `private-type-ref` errors are on upstream types in public signatures — `z.ZodType` (`src/config/validators/manifest-schema.ts:4`) and `StandardSchemaV1` (`src/abstracts/plugin-stream-topic-contribution.ts:11`). Naive barrel re-export violates F-15/AP-14. | Resolved in-line during PLAN-EVAL: locked as LD-8 (package-owned structural types, not upstream re-export); slice 1, research private-type-ref table, and F-15 evidence amended. Verdict PASS in `plan-eval.md`. | | 2026-06-08 | note | Phase A doc-lint reached 0 in slice 6 instead of slice 7 | After slice 6, full-export `deno doc --lint mod.ts src/abstracts/mod.ts src/config/mod.ts src/cli/mod.ts loader.ts src/sdk/mod.ts src/testing/mod.ts src/templates/mod.ts` returns `Checked 8 files`. The planned slice 7 target files (`config` domain/validators/application and `testing`) had no remaining doc-lint errors. | Keep the locked slice order; treat slice 7 as no-op verification/doc-record rather than adding unnecessary code. Slice 8 remains the full-export doc-lint verification gate. | +| 2026-06-08 | note | Adding `lint`/`fmt` tasks surfaced pre-existing task hygiene | `deno task lint` initially reported `require-await` in synchronous promise-returning memory/stub implementations. `deno task fmt --check` initially reported package-local formatting drift, including line endings and README wrapping. | Fixed the task-surfaced lint findings without changing port contracts and ran the package-local formatter so the new tasks pass. | diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index 91b50a63b..d11d2eda9 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -22,6 +22,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Implement | generator | Slice 9 complete: README expanded to 165 LOC with Observability, Compatibility, and Required Permissions sections. Code commit `f6e7189`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 10 complete: README example fixture now matches the current quick start chain. Code commit `5d7ed3a`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 11 complete: `./sdk` module JSDoc documents the dynamic import caveat. Code commit `5e9f751`; paired docs commit follows. | +| 2026-06-08 | Implement | generator | Slice 12 complete: added package-local `lint` and `fmt` tasks, fixed task-surfaced `require-await` findings, and verified fmt baseline. Code commit `f283836`; paired docs commit follows. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -40,6 +41,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 9 validation: README line count is 165. The same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files` with 0 errors. - Slice 10 validation: `deno test --allow-all tests/_fixtures/readme-examples_test.ts` passes 2 tests. The same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files` with 0 errors. - Slice 11 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files`. `deno publish --dry-run --allow-dirty` succeeds with the expected `unanalyzable-dynamic-import` warning on `src/sdk/discovery/manifest-resolver.ts`. +- Slice 12 validation: `deno task lint` passes (`Checked 99 files`), `deno task fmt --check` passes (`Checked 108 files`), the same `deno check --unstable-kv ...` command passes, and full-export `deno doc --lint ...` returns `Checked 8 files`. ## Implementation Evidence @@ -56,6 +58,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 9 | `f6e7189` | F-7 | PASS | README expanded from 138 to 165 LOC and now has standalone Observability, Compatibility, and Required Permissions sections. | | 10 | `5d7ed3a` | F-10 | PASS | README quick-start fixture compiles and asserts the service contribution example; 2 fixture tests pass. | | 11 | `5e9f751` | F-7/F-6 | PASS_WITH_DOCUMENTED_WARNING | `./sdk` module JSDoc documents that `ModuleManifestResolver` uses runtime-resolved dynamic imports; publish dry-run succeeds with the expected warning. | +| 12 | `f283836` | F-6 | PASS | Added `lint` and `fmt` tasks; fixed synchronous promise-returning stubs that triggered `require-await`; package lint/fmt/check/doc-lint gates pass. | ## Design Checkpoint From 17d60eacd3cd9c23efb361c53a14c87569f16b78 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:04:03 +0200 Subject: [PATCH 30/55] chore(plugin): check all public entrypoints Co-Authored-By: Claude Opus 4.8 --- packages/plugin/deno.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/plugin/deno.json b/packages/plugin/deno.json index 7242625b2..76e690ac9 100644 --- a/packages/plugin/deno.json +++ b/packages/plugin/deno.json @@ -20,7 +20,7 @@ "@standard-schema/spec": "npm:@standard-schema/spec@^1.1.0" }, "tasks": { - "check": "deno check --unstable-kv mod.ts", + "check": "deno check --unstable-kv mod.ts src/abstracts/mod.ts src/config/mod.ts src/cli/mod.ts loader.ts src/sdk/mod.ts src/testing/mod.ts src/templates/mod.ts", "fmt": "deno fmt", "lint": "deno lint", "test": "deno test --allow-all", From 846d85ee75f78c2df9e6075747f7760bb521f5ce Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:04:50 +0200 Subject: [PATCH 31/55] docs(wave3): record slice 13 check task Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 2 ++ .../run/feat-package-quality-wave3-plugin--host/worklog.md | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index 02ad7d957..b38f21e03 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -29,7 +29,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 22 | 5e9f751 | docs(plugin): document sdk dynamic import caveat | Slice 11 | | 23 | de6eda5 | docs(wave3): record slice 11 sdk caveat | Slice 11 docs | | 24 | f283836 | chore(plugin): add lint and fmt tasks | Slice 12 | -| 25 | (this commit) | docs(wave3): record slice 12 task hygiene | Slice 12 docs | +| 25 | c7feaf3 | docs(wave3): record slice 12 task hygiene | Slice 12 docs | +| 26 | 17d60ea | chore(plugin): check all public entrypoints | Slice 13 | +| 27 | (this commit) | docs(wave3): record slice 13 check task | Slice 13 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index bd9dfa01d..aba396ac2 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -46,6 +46,8 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. - Implementation: slice 12 complete. Commit `f283836` adds package-local `lint` and `fmt` tasks, fixes task-surfaced `require-await` findings in synchronous promise-returning stubs, and verifies lint/fmt/check/doc-lint gates. +- Implementation: slice 13 complete. Commit `17d60ea` expands `tasks.check` to all 8 public + entrypoints with `--unstable-kv`. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index d11d2eda9..e4778effd 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -23,6 +23,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Implement | generator | Slice 10 complete: README example fixture now matches the current quick start chain. Code commit `5d7ed3a`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 11 complete: `./sdk` module JSDoc documents the dynamic import caveat. Code commit `5e9f751`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 12 complete: added package-local `lint` and `fmt` tasks, fixed task-surfaced `require-await` findings, and verified fmt baseline. Code commit `f283836`; paired docs commit follows. | +| 2026-06-08 | Implement | generator | Slice 13 complete: expanded package `check` task to all 8 public entrypoints with `--unstable-kv`. Code commit `17d60ea`; paired docs commit follows. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -42,6 +43,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 10 validation: `deno test --allow-all tests/_fixtures/readme-examples_test.ts` passes 2 tests. The same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files` with 0 errors. - Slice 11 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files`. `deno publish --dry-run --allow-dirty` succeeds with the expected `unanalyzable-dynamic-import` warning on `src/sdk/discovery/manifest-resolver.ts`. - Slice 12 validation: `deno task lint` passes (`Checked 99 files`), `deno task fmt --check` passes (`Checked 108 files`), the same `deno check --unstable-kv ...` command passes, and full-export `deno doc --lint ...` returns `Checked 8 files`. +- Slice 13 validation: `deno task check` runs `deno check --unstable-kv mod.ts src/abstracts/mod.ts src/config/mod.ts src/cli/mod.ts loader.ts src/sdk/mod.ts src/testing/mod.ts src/templates/mod.ts` and passes. `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` also pass. ## Implementation Evidence @@ -59,6 +61,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 10 | `5d7ed3a` | F-10 | PASS | README quick-start fixture compiles and asserts the service contribution example; 2 fixture tests pass. | | 11 | `5e9f751` | F-7/F-6 | PASS_WITH_DOCUMENTED_WARNING | `./sdk` module JSDoc documents that `ModuleManifestResolver` uses runtime-resolved dynamic imports; publish dry-run succeeds with the expected warning. | | 12 | `f283836` | F-6 | PASS | Added `lint` and `fmt` tasks; fixed synchronous promise-returning stubs that triggered `require-await`; package lint/fmt/check/doc-lint gates pass. | +| 13 | `17d60ea` | F-8 | PASS | `tasks.check` now covers all 8 public entrypoints with `--unstable-kv`. | ## Design Checkpoint From 7de2e2231c9f2512bfac1b476a7e845b2b8cb698 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:06:36 +0200 Subject: [PATCH 32/55] test(plugin): cover domain errors and core types Co-Authored-By: Claude Opus 4.8 --- .../plugin/tests/domain/core-types_test.ts | 56 +++++++++++++++++++ packages/plugin/tests/domain/errors_test.ts | 17 ++++++ 2 files changed, 73 insertions(+) create mode 100644 packages/plugin/tests/domain/core-types_test.ts create mode 100644 packages/plugin/tests/domain/errors_test.ts diff --git a/packages/plugin/tests/domain/core-types_test.ts b/packages/plugin/tests/domain/core-types_test.ts new file mode 100644 index 000000000..e123d5221 --- /dev/null +++ b/packages/plugin/tests/domain/core-types_test.ts @@ -0,0 +1,56 @@ +import { assertEquals } from '@std/assert'; + +import { + CONTRIBUTION_AXES, + LIFECYCLE_HOOK_NAMES, + PLUGIN_MANIFEST_FILES, + PLUGIN_TYPES, + RESERVED_PLUGIN_NAMES, +} from '../../src/domain/mod.ts'; +import type { PluginContext, PluginLogger, PluginMetadataValue } from '../../src/domain/mod.ts'; + +Deno.test('plugin domain constants expose finite vocabularies', () => { + assertEquals(PLUGIN_TYPES, ['background-processor', 'api', 'frontend', 'utility']); + assertEquals(CONTRIBUTION_AXES, [ + 'service', + 'background-processor', + 'stream-topic', + 'database-schema', + 'runtime-config-topic', + 'contract-version', + 'e2e', + 'telemetry', + 'migration', + 'aspire', + ]); + assertEquals(LIFECYCLE_HOOK_NAMES, ['setup', 'beforeGenerate', 'afterGenerate', 'teardown']); + assertEquals(PLUGIN_MANIFEST_FILES, ['plugin.ts', 'plugin.config.ts', 'mod.ts']); + assertEquals(RESERVED_PLUGIN_NAMES, ['netscript', '@netscript/core']); +}); + +Deno.test('plugin metadata and context types accept runtime-safe shapes', () => { + const metadata: PluginMetadataValue = { + enabled: true, + retries: 3, + labels: ['alpha', null], + }; + const messages: string[] = []; + const logger: PluginLogger = { + debug: (message) => messages.push(`debug:${message}`), + info: (message) => messages.push(`info:${message}`), + warn: (message) => messages.push(`warn:${message}`), + error: (message) => messages.push(`error:${message}`), + }; + const context: PluginContext = { + projectRoot: '/workspace/project', + isDev: true, + logger, + manifest: { metadata }, + }; + + context.logger.info('ready'); + + assertEquals(context.projectRoot, '/workspace/project'); + assertEquals(context.isDev, true); + assertEquals(messages, ['info:ready']); +}); diff --git a/packages/plugin/tests/domain/errors_test.ts b/packages/plugin/tests/domain/errors_test.ts new file mode 100644 index 000000000..439da94c2 --- /dev/null +++ b/packages/plugin/tests/domain/errors_test.ts @@ -0,0 +1,17 @@ +import { assertEquals, assertInstanceOf } from '@std/assert'; + +import { DuplicatePluginError, PluginError, PluginValidationError } from '../../src/domain/mod.ts'; + +Deno.test('plugin domain errors preserve names and inheritance', () => { + const error = new PluginError('Plugin failed.'); + const validation = new PluginValidationError('Invalid plugin.', ['name is required']); + const duplicate = new DuplicatePluginError('@example/plugin'); + + assertInstanceOf(error, Error); + assertInstanceOf(validation, PluginError); + assertInstanceOf(duplicate, PluginError); + assertEquals(error.name, 'PluginError'); + assertEquals(validation.name, 'PluginValidationError'); + assertEquals(validation.issues, ['name is required']); + assertEquals(duplicate.message, 'Plugin "@example/plugin" is already registered.'); +}); From 1092b173f1a9c46bc736a15759fa414f0729f9e2 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:07:21 +0200 Subject: [PATCH 33/55] docs(wave3): record slice 14 domain tests Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 2 ++ .../run/feat-package-quality-wave3-plugin--host/worklog.md | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index b38f21e03..4c058cefd 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -31,7 +31,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 24 | f283836 | chore(plugin): add lint and fmt tasks | Slice 12 | | 25 | c7feaf3 | docs(wave3): record slice 12 task hygiene | Slice 12 docs | | 26 | 17d60ea | chore(plugin): check all public entrypoints | Slice 13 | -| 27 | (this commit) | docs(wave3): record slice 13 check task | Slice 13 docs | +| 27 | 846d85e | docs(wave3): record slice 13 check task | Slice 13 docs | +| 28 | 7de2e22 | test(plugin): cover domain errors and core types | Slice 14 | +| 29 | (this commit) | docs(wave3): record slice 14 domain tests | Slice 14 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index aba396ac2..fd8c91d74 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -48,6 +48,8 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. lint/fmt/check/doc-lint gates. - Implementation: slice 13 complete. Commit `17d60ea` expands `tasks.check` to all 8 public entrypoints with `--unstable-kv`. +- Implementation: slice 14 complete. Commit `7de2e22` adds dedicated domain tests for errors and + core types; 3 focused tests pass. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index e4778effd..056c1516d 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -24,6 +24,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Implement | generator | Slice 11 complete: `./sdk` module JSDoc documents the dynamic import caveat. Code commit `5e9f751`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 12 complete: added package-local `lint` and `fmt` tasks, fixed task-surfaced `require-await` findings, and verified fmt baseline. Code commit `f283836`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 13 complete: expanded package `check` task to all 8 public entrypoints with `--unstable-kv`. Code commit `17d60ea`; paired docs commit follows. | +| 2026-06-08 | Implement | generator | Slice 14 complete: added dedicated domain tests for errors and core type contracts. Code commit `7de2e22`; paired docs commit follows. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -44,6 +45,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 11 validation: the same `deno check --unstable-kv ...` command passes. Full-export `deno doc --lint ...` returns `Checked 8 files`. `deno publish --dry-run --allow-dirty` succeeds with the expected `unanalyzable-dynamic-import` warning on `src/sdk/discovery/manifest-resolver.ts`. - Slice 12 validation: `deno task lint` passes (`Checked 99 files`), `deno task fmt --check` passes (`Checked 108 files`), the same `deno check --unstable-kv ...` command passes, and full-export `deno doc --lint ...` returns `Checked 8 files`. - Slice 13 validation: `deno task check` runs `deno check --unstable-kv mod.ts src/abstracts/mod.ts src/config/mod.ts src/cli/mod.ts loader.ts src/sdk/mod.ts src/testing/mod.ts src/templates/mod.ts` and passes. `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` also pass. +- Slice 14 validation: `deno test --allow-all tests/domain/errors_test.ts tests/domain/core-types_test.ts` passes 3 tests. `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` also pass. ## Implementation Evidence @@ -62,6 +64,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 11 | `5e9f751` | F-7/F-6 | PASS_WITH_DOCUMENTED_WARNING | `./sdk` module JSDoc documents that `ModuleManifestResolver` uses runtime-resolved dynamic imports; publish dry-run succeeds with the expected warning. | | 12 | `f283836` | F-6 | PASS | Added `lint` and `fmt` tasks; fixed synchronous promise-returning stubs that triggered `require-await`; package lint/fmt/check/doc-lint gates pass. | | 13 | `17d60ea` | F-8 | PASS | `tasks.check` now covers all 8 public entrypoints with `--unstable-kv`. | +| 14 | `7de2e22` | F-10 | PASS | Added domain tests for error inheritance/names/issues, finite constants, metadata, logger, and context shapes. | ## Design Checkpoint From 33b1a5974157887ff23de3edb51ff0991e480f6a Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:08:35 +0200 Subject: [PATCH 34/55] test(plugin): cover memory file system adapter Co-Authored-By: Claude Opus 4.8 --- .../tests/adapters/memory-file-system_test.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 packages/plugin/tests/adapters/memory-file-system_test.ts diff --git a/packages/plugin/tests/adapters/memory-file-system_test.ts b/packages/plugin/tests/adapters/memory-file-system_test.ts new file mode 100644 index 000000000..58ee6a114 --- /dev/null +++ b/packages/plugin/tests/adapters/memory-file-system_test.ts @@ -0,0 +1,16 @@ +import { assertEquals } from '@std/assert'; + +import { MemoryFileSystemAdapter } from '../../src/adapters/mod.ts'; +import type { FileSystemPort } from '../../src/ports/mod.ts'; + +Deno.test('memory file system adapter implements text file operations', async () => { + const fileSystem: FileSystemPort = new MemoryFileSystemAdapter(); + + assertEquals(await fileSystem.exists('plugin.ts'), false); + assertEquals(await fileSystem.readText('plugin.ts'), ''); + + await fileSystem.writeText('plugin.ts', 'export default plugin;'); + + assertEquals(await fileSystem.exists('plugin.ts'), true); + assertEquals(await fileSystem.readText('plugin.ts'), 'export default plugin;'); +}); From f50d4b836309fdc68386618cfe892bfcb8d9e7b8 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:09:15 +0200 Subject: [PATCH 35/55] docs(wave3): record slice 15 adapter test Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 2 ++ .../run/feat-package-quality-wave3-plugin--host/worklog.md | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index 4c058cefd..9cdae15f4 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -33,7 +33,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 26 | 17d60ea | chore(plugin): check all public entrypoints | Slice 13 | | 27 | 846d85e | docs(wave3): record slice 13 check task | Slice 13 docs | | 28 | 7de2e22 | test(plugin): cover domain errors and core types | Slice 14 | -| 29 | (this commit) | docs(wave3): record slice 14 domain tests | Slice 14 docs | +| 29 | 1092b17 | docs(wave3): record slice 14 domain tests | Slice 14 docs | +| 30 | 33b1a59 | test(plugin): cover memory file system adapter | Slice 15 | +| 31 | (this commit) | docs(wave3): record slice 15 adapter test | Slice 15 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index fd8c91d74..2a557b077 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -50,6 +50,8 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. entrypoints with `--unstable-kv`. - Implementation: slice 14 complete. Commit `7de2e22` adds dedicated domain tests for errors and core types; 3 focused tests pass. +- Implementation: slice 15 complete. Commit `33b1a59` adds memory file-system adapter conformance + coverage; 1 focused test passes. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index 056c1516d..061ea3a09 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -25,6 +25,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Implement | generator | Slice 12 complete: added package-local `lint` and `fmt` tasks, fixed task-surfaced `require-await` findings, and verified fmt baseline. Code commit `f283836`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 13 complete: expanded package `check` task to all 8 public entrypoints with `--unstable-kv`. Code commit `17d60ea`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 14 complete: added dedicated domain tests for errors and core type contracts. Code commit `7de2e22`; paired docs commit follows. | +| 2026-06-08 | Implement | generator | Slice 15 complete: added memory file-system adapter conformance test. Code commit `33b1a59`; paired docs commit follows. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -46,6 +47,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 12 validation: `deno task lint` passes (`Checked 99 files`), `deno task fmt --check` passes (`Checked 108 files`), the same `deno check --unstable-kv ...` command passes, and full-export `deno doc --lint ...` returns `Checked 8 files`. - Slice 13 validation: `deno task check` runs `deno check --unstable-kv mod.ts src/abstracts/mod.ts src/config/mod.ts src/cli/mod.ts loader.ts src/sdk/mod.ts src/testing/mod.ts src/templates/mod.ts` and passes. `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` also pass. - Slice 14 validation: `deno test --allow-all tests/domain/errors_test.ts tests/domain/core-types_test.ts` passes 3 tests. `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` also pass. +- Slice 15 validation: `deno test --allow-all tests/adapters/memory-file-system_test.ts` passes 1 test. `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` also pass. ## Implementation Evidence @@ -65,6 +67,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 12 | `f283836` | F-6 | PASS | Added `lint` and `fmt` tasks; fixed synchronous promise-returning stubs that triggered `require-await`; package lint/fmt/check/doc-lint gates pass. | | 13 | `17d60ea` | F-8 | PASS | `tasks.check` now covers all 8 public entrypoints with `--unstable-kv`. | | 14 | `7de2e22` | F-10 | PASS | Added domain tests for error inheritance/names/issues, finite constants, metadata, logger, and context shapes. | +| 15 | `33b1a59` | F-10 | PASS | Added `FileSystemPort` conformance coverage for `MemoryFileSystemAdapter` read/write/exists behavior. | ## Design Checkpoint From b8e44c6dd5110afdfbc99c0bbd061ac2512e2e2b Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:10:29 +0200 Subject: [PATCH 36/55] test(plugin): cover watcher cleanup handle Co-Authored-By: Claude Opus 4.8 --- .../plugin/tests/sdk/watcher-cleanup_test.ts | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 packages/plugin/tests/sdk/watcher-cleanup_test.ts diff --git a/packages/plugin/tests/sdk/watcher-cleanup_test.ts b/packages/plugin/tests/sdk/watcher-cleanup_test.ts new file mode 100644 index 000000000..28a6db8a3 --- /dev/null +++ b/packages/plugin/tests/sdk/watcher-cleanup_test.ts @@ -0,0 +1,20 @@ +import { assertEquals } from '@std/assert'; + +import { createWatcherHandle, startWatcher } from '../../src/sdk/mod.ts'; + +Deno.test('watcher handle stop resolves for no-op discovery watcher', async () => { + const handle = createWatcherHandle(); + + await handle.stop(); + await handle.stop(); + + assertEquals(typeof handle.stop, 'function'); +}); + +Deno.test('startWatcher returns a cleanup handle', async () => { + const handle = startWatcher(); + + await handle.stop(); + + assertEquals(typeof handle.stop, 'function'); +}); From 0bcbaa870d377846d988415b1bb1a784aaf05bb6 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:10:59 +0200 Subject: [PATCH 37/55] docs(wave3): record slice 16 watcher test Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 2 ++ .../run/feat-package-quality-wave3-plugin--host/worklog.md | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index 9cdae15f4..4af5594ed 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -35,7 +35,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 28 | 7de2e22 | test(plugin): cover domain errors and core types | Slice 14 | | 29 | 1092b17 | docs(wave3): record slice 14 domain tests | Slice 14 docs | | 30 | 33b1a59 | test(plugin): cover memory file system adapter | Slice 15 | -| 31 | (this commit) | docs(wave3): record slice 15 adapter test | Slice 15 docs | +| 31 | f50d4b8 | docs(wave3): record slice 15 adapter test | Slice 15 docs | +| 32 | b8e44c6 | test(plugin): cover watcher cleanup handle | Slice 16 | +| 33 | (this commit) | docs(wave3): record slice 16 watcher test | Slice 16 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index 2a557b077..b6316d8f2 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -52,6 +52,8 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. core types; 3 focused tests pass. - Implementation: slice 15 complete. Commit `33b1a59` adds memory file-system adapter conformance coverage; 1 focused test passes. +- Implementation: slice 16 complete. Commit `b8e44c6` adds watcher cleanup coverage; 2 focused + tests pass. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index 061ea3a09..f1f014597 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -26,6 +26,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Implement | generator | Slice 13 complete: expanded package `check` task to all 8 public entrypoints with `--unstable-kv`. Code commit `17d60ea`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 14 complete: added dedicated domain tests for errors and core type contracts. Code commit `7de2e22`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 15 complete: added memory file-system adapter conformance test. Code commit `33b1a59`; paired docs commit follows. | +| 2026-06-08 | Implement | generator | Slice 16 complete: added watcher cleanup tests for no-op discovery handles. Code commit `b8e44c6`; paired docs commit follows. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -48,6 +49,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 13 validation: `deno task check` runs `deno check --unstable-kv mod.ts src/abstracts/mod.ts src/config/mod.ts src/cli/mod.ts loader.ts src/sdk/mod.ts src/testing/mod.ts src/templates/mod.ts` and passes. `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` also pass. - Slice 14 validation: `deno test --allow-all tests/domain/errors_test.ts tests/domain/core-types_test.ts` passes 3 tests. `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` also pass. - Slice 15 validation: `deno test --allow-all tests/adapters/memory-file-system_test.ts` passes 1 test. `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` also pass. +- Slice 16 validation: `deno test --allow-all tests/sdk/watcher-cleanup_test.ts` passes 2 tests. `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` also pass. ## Implementation Evidence @@ -68,6 +70,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 13 | `17d60ea` | F-8 | PASS | `tasks.check` now covers all 8 public entrypoints with `--unstable-kv`. | | 14 | `7de2e22` | F-10 | PASS | Added domain tests for error inheritance/names/issues, finite constants, metadata, logger, and context shapes. | | 15 | `33b1a59` | F-10 | PASS | Added `FileSystemPort` conformance coverage for `MemoryFileSystemAdapter` read/write/exists behavior. | +| 16 | `b8e44c6` | F-10 | PASS | Added cleanup coverage for `createWatcherHandle()` and `startWatcher()` no-op handles. | ## Design Checkpoint From 214a9a31d901a8349bbbd1833f802c313793ba86 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:12:19 +0200 Subject: [PATCH 38/55] test(plugin): cover plugin manifest loader Co-Authored-By: Claude Opus 4.8 --- .../tests/application/plugin-loader_test.ts | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 packages/plugin/tests/application/plugin-loader_test.ts diff --git a/packages/plugin/tests/application/plugin-loader_test.ts b/packages/plugin/tests/application/plugin-loader_test.ts new file mode 100644 index 000000000..68f2b57e0 --- /dev/null +++ b/packages/plugin/tests/application/plugin-loader_test.ts @@ -0,0 +1,26 @@ +import { assertEquals } from '@std/assert'; + +import { loadPluginManifest } from '../../src/application/mod.ts'; +import type { ManifestResolverPort } from '../../src/sdk/mod.ts'; +import { createPluginManifestFixture } from '../../src/testing/mod.ts'; + +Deno.test('loadPluginManifest returns the resolver manifest', async () => { + const manifest = createPluginManifestFixture({ name: '@example/loaded-plugin' }); + const resolver: ManifestResolverPort = { + resolve: (spec) => Promise.resolve(spec === './plugin.ts' ? manifest : undefined), + }; + + const loaded = await loadPluginManifest('./plugin.ts', resolver); + + assertEquals(loaded?.name, '@example/loaded-plugin'); +}); + +Deno.test('loadPluginManifest preserves unresolved plugin manifests', async () => { + const resolver: ManifestResolverPort = { + resolve: () => Promise.resolve(undefined), + }; + + const loaded = await loadPluginManifest('./missing.ts', resolver); + + assertEquals(loaded, undefined); +}); From 7997c5ada101a472dcaeb80f44164185e9b9fa4e Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:12:52 +0200 Subject: [PATCH 39/55] docs(wave3): record slice 17 loader test Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 2 ++ .../run/feat-package-quality-wave3-plugin--host/worklog.md | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index 4af5594ed..9b9f0f4f3 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -37,7 +37,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 30 | 33b1a59 | test(plugin): cover memory file system adapter | Slice 15 | | 31 | f50d4b8 | docs(wave3): record slice 15 adapter test | Slice 15 docs | | 32 | b8e44c6 | test(plugin): cover watcher cleanup handle | Slice 16 | -| 33 | (this commit) | docs(wave3): record slice 16 watcher test | Slice 16 docs | +| 33 | 0bcbaa8 | docs(wave3): record slice 16 watcher test | Slice 16 docs | +| 34 | 214a9a3 | test(plugin): cover plugin manifest loader | Slice 17 | +| 35 | (this commit) | docs(wave3): record slice 17 loader test | Slice 17 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index b6316d8f2..20e83225c 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -54,6 +54,8 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. coverage; 1 focused test passes. - Implementation: slice 16 complete. Commit `b8e44c6` adds watcher cleanup coverage; 2 focused tests pass. +- Implementation: slice 17 complete. Commit `214a9a3` adds plugin manifest loader coverage; 2 + focused tests pass. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index f1f014597..3a9e54ba4 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -27,6 +27,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Implement | generator | Slice 14 complete: added dedicated domain tests for errors and core type contracts. Code commit `7de2e22`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 15 complete: added memory file-system adapter conformance test. Code commit `33b1a59`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 16 complete: added watcher cleanup tests for no-op discovery handles. Code commit `b8e44c6`; paired docs commit follows. | +| 2026-06-08 | Implement | generator | Slice 17 complete: added plugin manifest loader tests. Code commit `214a9a3`; paired docs commit follows. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -50,6 +51,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 14 validation: `deno test --allow-all tests/domain/errors_test.ts tests/domain/core-types_test.ts` passes 3 tests. `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` also pass. - Slice 15 validation: `deno test --allow-all tests/adapters/memory-file-system_test.ts` passes 1 test. `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` also pass. - Slice 16 validation: `deno test --allow-all tests/sdk/watcher-cleanup_test.ts` passes 2 tests. `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` also pass. +- Slice 17 validation: `deno test --allow-all tests/application/plugin-loader_test.ts` passes 2 tests. `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` also pass. ## Implementation Evidence @@ -71,6 +73,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 14 | `7de2e22` | F-10 | PASS | Added domain tests for error inheritance/names/issues, finite constants, metadata, logger, and context shapes. | | 15 | `33b1a59` | F-10 | PASS | Added `FileSystemPort` conformance coverage for `MemoryFileSystemAdapter` read/write/exists behavior. | | 16 | `b8e44c6` | F-10 | PASS | Added cleanup coverage for `createWatcherHandle()` and `startWatcher()` no-op handles. | +| 17 | `214a9a3` | F-10 | PASS | Added loader coverage for resolved and unresolved `ManifestResolverPort` results. | ## Design Checkpoint From 3279d7b8beef985e742a3668f22651908966b7e7 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:13:38 +0200 Subject: [PATCH 40/55] test(plugin): verify full test suite Co-Authored-By: Claude Opus 4.8 From f0de70ffa65f7903d185073e626cdc6202a29bf0 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:14:12 +0200 Subject: [PATCH 41/55] docs(wave3): record slice 18 full tests Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 2 ++ .../run/feat-package-quality-wave3-plugin--host/worklog.md | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index 9b9f0f4f3..533971def 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -39,7 +39,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 32 | b8e44c6 | test(plugin): cover watcher cleanup handle | Slice 16 | | 33 | 0bcbaa8 | docs(wave3): record slice 16 watcher test | Slice 16 docs | | 34 | 214a9a3 | test(plugin): cover plugin manifest loader | Slice 17 | -| 35 | (this commit) | docs(wave3): record slice 17 loader test | Slice 17 docs | +| 35 | 7997c5a | docs(wave3): record slice 17 loader test | Slice 17 docs | +| 36 | 3279d7b | test(plugin): verify full test suite | Slice 18 | +| 37 | (this commit) | docs(wave3): record slice 18 full tests | Slice 18 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index 20e83225c..ece3b826c 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -56,6 +56,8 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. tests pass. - Implementation: slice 17 complete. Commit `214a9a3` adds plugin manifest loader coverage; 2 focused tests pass. +- Implementation: slice 18 complete. Empty commit `3279d7b` records full package test-suite + verification: 21 passed, 0 failed. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index 3a9e54ba4..4bc1db950 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -28,6 +28,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Implement | generator | Slice 15 complete: added memory file-system adapter conformance test. Code commit `33b1a59`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 16 complete: added watcher cleanup tests for no-op discovery handles. Code commit `b8e44c6`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 17 complete: added plugin manifest loader tests. Code commit `214a9a3`; paired docs commit follows. | +| 2026-06-08 | Implement | generator | Slice 18 complete: full package test suite passes. Empty verification commit `3279d7b`; paired docs commit follows. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -52,6 +53,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 15 validation: `deno test --allow-all tests/adapters/memory-file-system_test.ts` passes 1 test. `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` also pass. - Slice 16 validation: `deno test --allow-all tests/sdk/watcher-cleanup_test.ts` passes 2 tests. `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` also pass. - Slice 17 validation: `deno test --allow-all tests/application/plugin-loader_test.ts` passes 2 tests. `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` also pass. +- Slice 18 validation: `deno test --allow-all` passes 21 tests across 9 test files with 0 failures. ## Implementation Evidence @@ -74,6 +76,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 15 | `33b1a59` | F-10 | PASS | Added `FileSystemPort` conformance coverage for `MemoryFileSystemAdapter` read/write/exists behavior. | | 16 | `b8e44c6` | F-10 | PASS | Added cleanup coverage for `createWatcherHandle()` and `startWatcher()` no-op handles. | | 17 | `214a9a3` | F-10 | PASS | Added loader coverage for resolved and unresolved `ManifestResolverPort` results. | +| 18 | `3279d7b` | F-10 | PASS | Full package test suite passes: 21 passed, 0 failed. | ## Design Checkpoint From 8f3c2045b76219bb6fba1090ccac4fc5daa2549e Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:15:16 +0200 Subject: [PATCH 42/55] docs(arch): update plugin builder debt Co-Authored-By: Claude Opus 4.8 --- .llm/harness/debt/arch-debt.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/.llm/harness/debt/arch-debt.md b/.llm/harness/debt/arch-debt.md index 757912da1..b566c01aa 100644 --- a/.llm/harness/debt/arch-debt.md +++ b/.llm/harness/debt/arch-debt.md @@ -197,9 +197,23 @@ Seeded from - **Target:** 2026-Q3 doctrine remediation. - **Linked plan:** `.llm/tmp/run/doc-harness-doctrine-refactor--harness-v2-plan/plan.md` - **Created:** 2026-04-29 -- **Status:** open +- **Status:** closed 2026-06-08 — Wave 3 `@netscript/plugin` host track verified the old + monolithic `types.ts` no longer exists. The package now exposes role-named `src/domain/`, + `src/ports/`, `src/config/`, `src/cli/`, `src/sdk/`, `src/testing/`, and diagnostics surfaces + through curated entrypoints. Remaining builder size debt is tracked separately below. - **Gate:** F-1, F-3, F-5, F-11 +## packages/plugin/src/config/builders/plugin-builder.ts — F-1 size (343 LOC) + +- **Reason:** `plugin-builder.ts` remains above the doctrine 300 LOC planning cap. It is a + typestate-generic fluent builder and splitting it during Wave 3 risks breaking the public chain. +- **Owner:** Wave 3 `@netscript/plugin` host generator. +- **Target:** Pre-beta builder refactor. +- **Linked plan:** `.llm/tmp/run/feat-package-quality-wave3-plugin--host/plan.md` (LD-3, slice 19). +- **Created:** 2026-06-08 +- **Status:** open, DEBT_ACCEPTED +- **Gate:** F-1, A4 builder split follow-up + ## packages/plugin/src/sdk/discovery/ast-extractor.ts — PLG-WALKER-AST (extractor precision) - **Reason:** Group G needs walker-generated registries now, but a full TypeScript AST resolver with From d2cf7fb865c65c9a36ae4cfcaf7a29db26a9ec32 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:15:46 +0200 Subject: [PATCH 43/55] docs(wave3): record slice 19 arch debt Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 2 ++ .../run/feat-package-quality-wave3-plugin--host/worklog.md | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index 533971def..3270b953e 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -41,7 +41,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 34 | 214a9a3 | test(plugin): cover plugin manifest loader | Slice 17 | | 35 | 7997c5a | docs(wave3): record slice 17 loader test | Slice 17 docs | | 36 | 3279d7b | test(plugin): verify full test suite | Slice 18 | -| 37 | (this commit) | docs(wave3): record slice 18 full tests | Slice 18 docs | +| 37 | f0de70f | docs(wave3): record slice 18 full tests | Slice 18 docs | +| 38 | 8f3c204 | docs(arch): update plugin builder debt | Slice 19 | +| 39 | (this commit) | docs(wave3): record slice 19 arch debt | Slice 19 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index ece3b826c..68b5e1c21 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -58,6 +58,8 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. focused tests pass. - Implementation: slice 18 complete. Empty commit `3279d7b` records full package test-suite verification: 21 passed, 0 failed. +- Implementation: slice 19 complete. Commit `8f3c204` closes obsolete `types.ts` debt and opens + accepted F-1 debt for `plugin-builder.ts` size with a pre-beta target. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index 4bc1db950..9b6b64e88 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -29,6 +29,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Implement | generator | Slice 16 complete: added watcher cleanup tests for no-op discovery handles. Code commit `b8e44c6`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 17 complete: added plugin manifest loader tests. Code commit `214a9a3`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 18 complete: full package test suite passes. Empty verification commit `3279d7b`; paired docs commit follows. | +| 2026-06-08 | Implement | generator | Slice 19 complete: closed obsolete plugin `types.ts` debt and opened accepted `plugin-builder.ts` F-1 size debt. Code commit `8f3c204`; paired docs commit follows. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -54,6 +55,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 16 validation: `deno test --allow-all tests/sdk/watcher-cleanup_test.ts` passes 2 tests. `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` also pass. - Slice 17 validation: `deno test --allow-all tests/application/plugin-loader_test.ts` passes 2 tests. `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` also pass. - Slice 18 validation: `deno test --allow-all` passes 21 tests across 9 test files with 0 failures. +- Slice 19 validation: `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` pass after the debt registry update. ## Implementation Evidence @@ -77,6 +79,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 16 | `b8e44c6` | F-10 | PASS | Added cleanup coverage for `createWatcherHandle()` and `startWatcher()` no-op handles. | | 17 | `214a9a3` | F-10 | PASS | Added loader coverage for resolved and unresolved `ManifestResolverPort` results. | | 18 | `3279d7b` | F-10 | PASS | Full package test suite passes: 21 passed, 0 failed. | +| 19 | `8f3c204` | F-1 | DEBT_ACCEPTED | Closed old `packages/plugin — types.ts 1,005 LOC` entry and opened `plugin-builder.ts` 343 LOC accepted debt with pre-beta closing target. | ## Design Checkpoint From 4968dd542cbcf7fb608af784b187e14c78811f96 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:17:00 +0200 Subject: [PATCH 44/55] docs(wave3): record plugin fitness evidence Co-Authored-By: Claude Opus 4.8 --- .../worklog.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index 9b6b64e88..bf5e8772d 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -81,6 +81,29 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 18 | `3279d7b` | F-10 | PASS | Full package test suite passes: 21 passed, 0 failed. | | 19 | `8f3c204` | F-1 | DEBT_ACCEPTED | Closed old `packages/plugin — types.ts 1,005 LOC` entry and opened `plugin-builder.ts` 343 LOC accepted debt with pre-beta closing target. | +## Manual Fitness Evidence + +| Gate | Result | Evidence | +|------|--------|----------| +| F-1 File-size lint | DEBT_ACCEPTED | `plugin-builder.ts` remains 343 LOC and is tracked in `.llm/harness/debt/arch-debt.md` with pre-beta closing target. | +| F-2 Helper-reinvention scan | PASS | `safeStringifyMetadata` in `loader.ts` is a logger-sink helper for circular-safe metadata serialization; no platform helper replacement exists. | +| F-3 Layering check | PASS | `domain/` owns core values/errors/schema contracts; `ports/` define consumed contracts; `application/` composes ports; `adapters/` implement ports; `cli/` presentation imports CLI contracts. | +| F-4 Inheritance audit | PASS | `PluginContribution` and derived contribution bases live in `src/abstracts/`; no cross-package inheritance or deep hierarchy. | +| F-5 Public surface audit | PASS | 8 export entrypoints remain curated in `deno.json`; root `mod.ts` exposes authoring, diagnostics, domain errors, and selected contracts only. | +| F-6 JSR publishability | PASS_WITH_DOCUMENTED_WARNING | `deno publish --dry-run --allow-dirty` succeeds with 0 slow types; expected `./sdk` dynamic-import warning is documented in `src/sdk/mod.ts`. | +| F-7 Doc-score gate | PASS | Full-export `deno doc --lint` over all 8 entrypoints returns `Checked 8 files`. | +| F-8 Workspace lib check | PASS | Package `tasks.check` runs `deno check --unstable-kv` over all 8 entrypoints. | +| F-9 Permission declaration check | PASS | README now has Required Permissions; tests that use SDK/scaffolding run under explicit `--allow-all`. | +| F-10 Test-shape audit | PASS | 21 tests across 9 focused files; no god test file. | +| F-11 Forbidden-folder lint | PASS | No `utils/`, `helpers/`, `common/`, `lib/`, or `interfaces/` folders under `packages/plugin/src/`. | +| F-12 Naming-convention lint | PASS | Public verbs remain `define`, `with`, `create`, `start`, `run`, `inspect`; no `I*`/`*T` exported names. | +| F-13 Saga/runtime invariants | N/A | A4 plugin host package does not own saga/runtime state machines. | +| F-14 Console-log lint | PASS | Console usage is limited to `loader.ts` logger sink and README example output. | +| F-15 Re-export-upstream lint | PASS | Upstream Zod/Standard Schema types are not re-exported; slice 1 introduced package-owned structural contracts. | +| F-16 Folder-cardinality lint | PASS | Role folders remain bounded; `public/` and `kernel/` are narrow accepted roles from the locked plan. | +| F-17 Abstract-derived co-location | PASS | Abstract contribution contracts are co-located in `src/abstracts/`. | +| F-18 Sub-barrel lint | PASS | Public/subpath barrels are declared entrypoints; no nested utility barrel was introduced. | + ## Design Checkpoint ### 1. Public surface From 3fac16679e84930dff548083ab6632aec7d5b388 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:17:24 +0200 Subject: [PATCH 45/55] docs(wave3): record slice 20 evidence update Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index 3270b953e..0b6f50d58 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -43,7 +43,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 36 | 3279d7b | test(plugin): verify full test suite | Slice 18 | | 37 | f0de70f | docs(wave3): record slice 18 full tests | Slice 18 docs | | 38 | 8f3c204 | docs(arch): update plugin builder debt | Slice 19 | -| 39 | (this commit) | docs(wave3): record slice 19 arch debt | Slice 19 docs | +| 39 | d2cf7fb | docs(wave3): record slice 19 arch debt | Slice 19 docs | +| 40 | 4968dd5 | docs(wave3): record plugin fitness evidence | Slice 20 | +| 41 | (this commit) | docs(wave3): record slice 20 evidence update | Slice 20 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index 68b5e1c21..216fcc212 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -60,6 +60,8 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. verification: 21 passed, 0 failed. - Implementation: slice 19 complete. Commit `8f3c204` closes obsolete `types.ts` debt and opens accepted F-1 debt for `plugin-builder.ts` size with a pre-beta target. +- Implementation: slice 20 complete. Commit `4968dd5` adds manual F-1..F-18 evidence to + `worklog.md`; F-13 is recorded as n/a for A4. ## One-unit wave From 7a24d515c51432f08dc304df34eb224024a40d1e Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:18:39 +0200 Subject: [PATCH 46/55] test(plugin): verify cli consumer imports Co-Authored-By: Claude Opus 4.8 From 055b2d0918c69a21116fe4d8852f7450b53a1e61 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:19:12 +0200 Subject: [PATCH 47/55] docs(wave3): record slice 21 cli consumer Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 2 ++ .../run/feat-package-quality-wave3-plugin--host/worklog.md | 6 ++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index 0b6f50d58..ea9de5d50 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -45,7 +45,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 38 | 8f3c204 | docs(arch): update plugin builder debt | Slice 19 | | 39 | d2cf7fb | docs(wave3): record slice 19 arch debt | Slice 19 docs | | 40 | 4968dd5 | docs(wave3): record plugin fitness evidence | Slice 20 | -| 41 | (this commit) | docs(wave3): record slice 20 evidence update | Slice 20 docs | +| 41 | 3fac166 | docs(wave3): record slice 20 evidence update | Slice 20 docs | +| 42 | 7a24d51 | test(plugin): verify cli consumer imports | Slice 21 | +| 43 | (this commit) | docs(wave3): record slice 21 cli consumer | Slice 21 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index 216fcc212..e9e3b31f9 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -62,6 +62,8 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. accepted F-1 debt for `plugin-builder.ts` size with a pre-beta target. - Implementation: slice 20 complete. Commit `4968dd5` adds manual F-1..F-18 evidence to `worklog.md`; F-13 is recorded as n/a for A4. +- Implementation: slice 21 complete. Empty commit `7a24d51` records `packages/cli` + consumer-import validation; `deno check --unstable-kv mod.ts` and `deno task check` pass. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index bf5e8772d..f387c2fb5 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -30,6 +30,8 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Implement | generator | Slice 17 complete: added plugin manifest loader tests. Code commit `214a9a3`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 18 complete: full package test suite passes. Empty verification commit `3279d7b`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 19 complete: closed obsolete plugin `types.ts` debt and opened accepted `plugin-builder.ts` F-1 size debt. Code commit `8f3c204`; paired docs commit follows. | +| 2026-06-08 | Implement | generator | Slice 20 complete: recorded manual F-1..F-18 evidence table in worklog. Code commit `4968dd5`; paired docs commit follows. | +| 2026-06-08 | Implement | generator | Slice 21 complete: `packages/cli` consumer-import validation passed. Empty verification commit `7a24d51`; paired docs commit follows. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -56,6 +58,8 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 17 validation: `deno test --allow-all tests/application/plugin-loader_test.ts` passes 2 tests. `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` also pass. - Slice 18 validation: `deno test --allow-all` passes 21 tests across 9 test files with 0 failures. - Slice 19 validation: `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` pass after the debt registry update. +- Slice 20 validation: `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` pass after adding manual F-gate evidence. +- Slice 21 validation: from `packages/cli`, `deno check --unstable-kv mod.ts` passes and `deno task check` passes (`bin/netscript.ts`, `bin/netscript-dev.ts`, `mod.ts`, `maintainer.ts`, `scaffolding.ts`, `testing.ts`). ## Implementation Evidence @@ -80,6 +84,8 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 17 | `214a9a3` | F-10 | PASS | Added loader coverage for resolved and unresolved `ManifestResolverPort` results. | | 18 | `3279d7b` | F-10 | PASS | Full package test suite passes: 21 passed, 0 failed. | | 19 | `8f3c204` | F-1 | DEBT_ACCEPTED | Closed old `packages/plugin — types.ts 1,005 LOC` entry and opened `plugin-builder.ts` 343 LOC accepted debt with pre-beta closing target. | +| 20 | `4968dd5` | Static | PASS | Manual F-1..F-18 evidence table recorded in this worklog; F-13 marked n/a. | +| 21 | `7a24d51` | Consumer | PASS | `packages/cli` checks clean with `@netscript/plugin` imports. | ## Manual Fitness Evidence From c2c1eec6acc5bcbbe4c588dd9e4b47979b207b35 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:20:40 +0200 Subject: [PATCH 48/55] test(plugin): verify plugin package consumers Co-Authored-By: Claude Opus 4.8 From b29969fd5d3bc25f2e05f0a1096ad607010590a0 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:21:11 +0200 Subject: [PATCH 49/55] docs(wave3): record slice 22 plugin consumers Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 2 ++ .../run/feat-package-quality-wave3-plugin--host/worklog.md | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index ea9de5d50..207aa753c 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -47,7 +47,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 40 | 4968dd5 | docs(wave3): record plugin fitness evidence | Slice 20 | | 41 | 3fac166 | docs(wave3): record slice 20 evidence update | Slice 20 docs | | 42 | 7a24d51 | test(plugin): verify cli consumer imports | Slice 21 | -| 43 | (this commit) | docs(wave3): record slice 21 cli consumer | Slice 21 docs | +| 43 | 055b2d0 | docs(wave3): record slice 21 cli consumer | Slice 21 docs | +| 44 | c2c1eec | test(plugin): verify plugin package consumers | Slice 22 | +| 45 | (this commit) | docs(wave3): record slice 22 plugin consumers | Slice 22 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index e9e3b31f9..d9540c815 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -64,6 +64,8 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. `worklog.md`; F-13 is recorded as n/a for A4. - Implementation: slice 21 complete. Empty commit `7a24d51` records `packages/cli` consumer-import validation; `deno check --unstable-kv mod.ts` and `deno task check` pass. +- Implementation: slice 22 complete. Empty commit `c2c1eec` records `plugins/*` + consumer-import validation; all first-party plugin package checks pass. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index f387c2fb5..34f3ae96d 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -32,6 +32,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Implement | generator | Slice 19 complete: closed obsolete plugin `types.ts` debt and opened accepted `plugin-builder.ts` F-1 size debt. Code commit `8f3c204`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 20 complete: recorded manual F-1..F-18 evidence table in worklog. Code commit `4968dd5`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 21 complete: `packages/cli` consumer-import validation passed. Empty verification commit `7a24d51`; paired docs commit follows. | +| 2026-06-08 | Implement | generator | Slice 22 complete: `plugins/*` consumer-import validation passed. Empty verification commit `c2c1eec`; paired docs commit follows. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -60,6 +61,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 19 validation: `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` pass after the debt registry update. - Slice 20 validation: `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` pass after adding manual F-gate evidence. - Slice 21 validation: from `packages/cli`, `deno check --unstable-kv mod.ts` passes and `deno task check` passes (`bin/netscript.ts`, `bin/netscript-dev.ts`, `mod.ts`, `maintainer.ts`, `scaffolding.ts`, `testing.ts`). +- Slice 22 validation: `deno task check` passes in `plugins/sagas`, `plugins/streams`, `plugins/triggers`, and `plugins/workers`; explicit `deno check --unstable-kv mod.ts services/src/main.ts` also passes in `plugins/sagas`. ## Implementation Evidence @@ -86,6 +88,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 19 | `8f3c204` | F-1 | DEBT_ACCEPTED | Closed old `packages/plugin — types.ts 1,005 LOC` entry and opened `plugin-builder.ts` 343 LOC accepted debt with pre-beta closing target. | | 20 | `4968dd5` | Static | PASS | Manual F-1..F-18 evidence table recorded in this worklog; F-13 marked n/a. | | 21 | `7a24d51` | Consumer | PASS | `packages/cli` checks clean with `@netscript/plugin` imports. | +| 22 | `c2c1eec` | Consumer | PASS | First-party plugin package checks pass for `sagas`, `streams`, `triggers`, and `workers`. | ## Manual Fitness Evidence From 9f963425779d46a58325f393bda4bda8321258a6 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:22:13 +0200 Subject: [PATCH 50/55] test(plugin): verify final static gates Co-Authored-By: Claude Opus 4.8 From cd66346d0c6d074ac7a3f2ef0b3eaaae63c945bd Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:24:27 +0200 Subject: [PATCH 51/55] docs(wave3): record slice 23 static gates Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 3 +++ .../run/feat-package-quality-wave3-plugin--host/worklog.md | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index 207aa753c..28593b5b8 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -49,7 +49,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 42 | 7a24d51 | test(plugin): verify cli consumer imports | Slice 21 | | 43 | 055b2d0 | docs(wave3): record slice 21 cli consumer | Slice 21 docs | | 44 | c2c1eec | test(plugin): verify plugin package consumers | Slice 22 | -| 45 | (this commit) | docs(wave3): record slice 22 plugin consumers | Slice 22 docs | +| 45 | b29969f | docs(wave3): record slice 22 plugin consumers | Slice 22 docs | +| 46 | 9f96342 | test(plugin): verify final static gates | Slice 23 | +| 47 | (this commit) | docs(wave3): record slice 23 static gates | Slice 23 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index d9540c815..7c0dd29c9 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -66,6 +66,9 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. consumer-import validation; `deno check --unstable-kv mod.ts` and `deno task check` pass. - Implementation: slice 22 complete. Empty commit `c2c1eec` records `plugins/*` consumer-import validation; all first-party plugin package checks pass. +- Implementation: slice 23 complete. Empty commit `9f96342` records the final static + gate sweep: publish dry-run succeeds with 0 slow types and the documented dynamic-import + warning; check, lint, fmt --check, and full-export doc-lint pass. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index 34f3ae96d..8a7871351 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -33,6 +33,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Implement | generator | Slice 20 complete: recorded manual F-1..F-18 evidence table in worklog. Code commit `4968dd5`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 21 complete: `packages/cli` consumer-import validation passed. Empty verification commit `7a24d51`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 22 complete: `plugins/*` consumer-import validation passed. Empty verification commit `c2c1eec`; paired docs commit follows. | +| 2026-06-08 | Implement | generator | Slice 23 complete: final static gate sweep passed (`publish:dry-run`, `check`, `lint`, `fmt --check`, full-export doc-lint). Empty verification commit `9f96342`; paired docs commit follows. | | | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -62,6 +63,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 20 validation: `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` pass after adding manual F-gate evidence. - Slice 21 validation: from `packages/cli`, `deno check --unstable-kv mod.ts` passes and `deno task check` passes (`bin/netscript.ts`, `bin/netscript-dev.ts`, `mod.ts`, `maintainer.ts`, `scaffolding.ts`, `testing.ts`). - Slice 22 validation: `deno task check` passes in `plugins/sagas`, `plugins/streams`, `plugins/triggers`, and `plugins/workers`; explicit `deno check --unstable-kv mod.ts services/src/main.ts` also passes in `plugins/sagas`. +- Slice 23 validation: from `packages/plugin`, `deno task publish:dry-run` succeeds with 0 slow types and the expected `unanalyzable-dynamic-import` warning for `src/sdk/discovery/manifest-resolver.ts`; `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` all pass. ## Implementation Evidence @@ -89,6 +91,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 20 | `4968dd5` | Static | PASS | Manual F-1..F-18 evidence table recorded in this worklog; F-13 marked n/a. | | 21 | `7a24d51` | Consumer | PASS | `packages/cli` checks clean with `@netscript/plugin` imports. | | 22 | `c2c1eec` | Consumer | PASS | First-party plugin package checks pass for `sagas`, `streams`, `triggers`, and `workers`. | +| 23 | `9f96342` | F-6/F-7/F-8 | PASS_WITH_DOCUMENTED_WARNING | Final static sweep passes; publish dry-run keeps the documented runtime-resolved dynamic import warning and reports 0 slow types. | ## Manual Fitness Evidence From 0458b4d69871592a0046201954729a5dead46c82 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:33:26 +0200 Subject: [PATCH 52/55] test(plugin): run merge readiness e2e cli Co-Authored-By: Claude Opus 4.8 From 6f037a35d00397a9f6178088dbe9fed362dfa358 Mon Sep 17 00:00:00 2001 From: Rickylabs Date: Mon, 8 Jun 2026 21:34:28 +0200 Subject: [PATCH 53/55] docs(wave3): record slice 24 e2e carry-forward Co-Authored-By: Claude Opus 4.8 --- .../run/feat-package-quality-wave3-plugin--host/commits.md | 4 +++- .../feat-package-quality-wave3-plugin--host/context-pack.md | 6 ++++++ .../run/feat-package-quality-wave3-plugin--host/drift.md | 1 + .../run/feat-package-quality-wave3-plugin--host/worklog.md | 5 ++++- 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index 28593b5b8..fff82b63d 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -51,7 +51,9 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual | 44 | c2c1eec | test(plugin): verify plugin package consumers | Slice 22 | | 45 | b29969f | docs(wave3): record slice 22 plugin consumers | Slice 22 docs | | 46 | 9f96342 | test(plugin): verify final static gates | Slice 23 | -| 47 | (this commit) | docs(wave3): record slice 23 static gates | Slice 23 docs | +| 47 | cd66346 | docs(wave3): record slice 23 static gates | Slice 23 docs | +| 48 | 0458b4d | test(plugin): run merge readiness e2e cli | Slice 24 | +| 49 | (this commit) | docs(wave3): record slice 24 e2e carry-forward | Slice 24 docs | (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index 7c0dd29c9..570c1e0a2 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -69,6 +69,12 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. - Implementation: slice 23 complete. Empty commit `9f96342` records the final static gate sweep: publish dry-run succeeds with 0 slow types and the documented dynamic-import warning; check, lint, fmt --check, and full-export doc-lint pass. +- Implementation: slice 24 complete. Empty commit `0458b4d` records the merge-readiness + `e2e:cli` run: 35 gates passed, `behavior.triggers-health` failed with the locked LD-4 + `localhost:8093/health` connection refusal, and cleanup passed. This remains a Wave 4 + carry-forward, not a Wave 3 implementation blocker. +- Generator handoff status: ready for separate IMPL-EVAL. Do not merge PR #15 from this + session. ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md index b90e89cbd..9fcfc68ac 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md @@ -37,3 +37,4 @@ | 2026-06-08 | note | PLAN-EVAL surfaced rework-forcing decision not flagged by plan: upstream-typed `private-type-ref` fix | 2 of 9 `private-type-ref` errors are on upstream types in public signatures — `z.ZodType` (`src/config/validators/manifest-schema.ts:4`) and `StandardSchemaV1` (`src/abstracts/plugin-stream-topic-contribution.ts:11`). Naive barrel re-export violates F-15/AP-14. | Resolved in-line during PLAN-EVAL: locked as LD-8 (package-owned structural types, not upstream re-export); slice 1, research private-type-ref table, and F-15 evidence amended. Verdict PASS in `plan-eval.md`. | | 2026-06-08 | note | Phase A doc-lint reached 0 in slice 6 instead of slice 7 | After slice 6, full-export `deno doc --lint mod.ts src/abstracts/mod.ts src/config/mod.ts src/cli/mod.ts loader.ts src/sdk/mod.ts src/testing/mod.ts src/templates/mod.ts` returns `Checked 8 files`. The planned slice 7 target files (`config` domain/validators/application and `testing`) had no remaining doc-lint errors. | Keep the locked slice order; treat slice 7 as no-op verification/doc-record rather than adding unnecessary code. Slice 8 remains the full-export doc-lint verification gate. | | 2026-06-08 | note | Adding `lint`/`fmt` tasks surfaced pre-existing task hygiene | `deno task lint` initially reported `require-await` in synchronous promise-returning memory/stub implementations. `deno task fmt --check` initially reported package-local formatting drift, including line endings and README wrapping. | Fixed the task-surfaced lint findings without changing port contracts and ran the package-local formatter so the new tasks pass. | +| 2026-06-08 | accepted carry-forward | Merge-readiness `e2e:cli` still fails at `behavior.triggers-health` | Slice 24 `rtk proxy deno task e2e:cli` reported 35 passed, 1 failed; the failure is `http://localhost:8093/health` connection refused. This exactly matches LD-4/OQ-D and cleanup passed. | Do not fix in Wave 3. Carry forward to Wave 4 trigger/runtime ownership work; package-quality gates and consumer-import remain complete. | diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index 8a7871351..516c3d890 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -34,7 +34,8 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Implement | generator | Slice 21 complete: `packages/cli` consumer-import validation passed. Empty verification commit `7a24d51`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 22 complete: `plugins/*` consumer-import validation passed. Empty verification commit `c2c1eec`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 23 complete: final static gate sweep passed (`publish:dry-run`, `check`, `lint`, `fmt --check`, full-export doc-lint). Empty verification commit `9f96342`; paired docs commit follows. | -| | Gate | generator | (pending) A4 gates + consumer-import + e2e:cli once. | +| 2026-06-08 | Implement | generator | Slice 24 complete: merge-readiness `deno task e2e:cli` ran once. Result: 35 passed, 1 failed at known `behavior.triggers-health` (`localhost:8093/health` connection refused), cleanup passed. Empty verification commit `0458b4d`; paired docs commit follows. | +| 2026-06-08 | Gate | generator | A4 gates, static gates, and consumer-import validation complete. Merge-readiness E2E has only the LD-4 Wave 4 triggers-health carry-forward. Ready to hand to separate IMPL-EVAL. | | | IMPL-EVAL | evaluator | (pending) Separate session. | | | Close | supervisor | (pending) | @@ -64,6 +65,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` - Slice 21 validation: from `packages/cli`, `deno check --unstable-kv mod.ts` passes and `deno task check` passes (`bin/netscript.ts`, `bin/netscript-dev.ts`, `mod.ts`, `maintainer.ts`, `scaffolding.ts`, `testing.ts`). - Slice 22 validation: `deno task check` passes in `plugins/sagas`, `plugins/streams`, `plugins/triggers`, and `plugins/workers`; explicit `deno check --unstable-kv mod.ts services/src/main.ts` also passes in `plugins/sagas`. - Slice 23 validation: from `packages/plugin`, `deno task publish:dry-run` succeeds with 0 slow types and the expected `unanalyzable-dynamic-import` warning for `src/sdk/discovery/manifest-resolver.ts`; `deno task check`, `deno task lint`, `deno task fmt --check`, and full-export `deno doc --lint ...` all pass. +- Slice 24 validation: `rtk proxy deno task e2e:cli` ran once from the repo root. The suite reported 35 passed, 1 failed; the only failure was the known LD-4 `behavior.triggers-health` connection refusal at `http://localhost:8093/health`. `cleanup.aspire-stop` and Docker cleanup passed. ## Implementation Evidence @@ -92,6 +94,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 21 | `7a24d51` | Consumer | PASS | `packages/cli` checks clean with `@netscript/plugin` imports. | | 22 | `c2c1eec` | Consumer | PASS | First-party plugin package checks pass for `sagas`, `streams`, `triggers`, and `workers`. | | 23 | `9f96342` | F-6/F-7/F-8 | PASS_WITH_DOCUMENTED_WARNING | Final static sweep passes; publish dry-run keeps the documented runtime-resolved dynamic import warning and reports 0 slow types. | +| 24 | `0458b4d` | Merge-readiness | ACCEPTED_CARRY_FORWARD | `e2e:cli` ran once; 35 gates passed and the only failure is the locked LD-4 `behavior.triggers-health` Wave 4 carry-forward. | ## Manual Fitness Evidence From eed130d4044843808e684fe7da99942d91cea744 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 8 Jun 2026 20:03:34 +0000 Subject: [PATCH 54/55] docs(wave3): record IMPL-EVAL PASS for @netscript/plugin host + fix builder LOC drift Co-authored-by: rickylabs <129366361+rickylabs@users.noreply.github.com> --- .llm/harness/debt/arch-debt.md | 7 +- .../context-pack.md | 6 + .../drift.md | 7 ++ .../evaluate.md | 106 ++++++++++++++++++ .../worklog.md | 6 +- 5 files changed, 126 insertions(+), 6 deletions(-) create mode 100644 .llm/tmp/run/feat-package-quality-wave3-plugin--host/evaluate.md diff --git a/.llm/harness/debt/arch-debt.md b/.llm/harness/debt/arch-debt.md index b566c01aa..3b02a478c 100644 --- a/.llm/harness/debt/arch-debt.md +++ b/.llm/harness/debt/arch-debt.md @@ -203,10 +203,11 @@ Seeded from through curated entrypoints. Remaining builder size debt is tracked separately below. - **Gate:** F-1, F-3, F-5, F-11 -## packages/plugin/src/config/builders/plugin-builder.ts — F-1 size (343 LOC) +## packages/plugin/src/config/builders/plugin-builder.ts — F-1 size (360 LOC) -- **Reason:** `plugin-builder.ts` remains above the doctrine 300 LOC planning cap. It is a - typestate-generic fluent builder and splitting it during Wave 3 risks breaking the public chain. +- **Reason:** `plugin-builder.ts` remains above the doctrine 300 LOC planning cap (343 LOC at base + `89071df`, 360 LOC after Wave 3 added public JSDoc in slice 4). It is a typestate-generic fluent + builder and splitting it during Wave 3 risks breaking the public chain. - **Owner:** Wave 3 `@netscript/plugin` host generator. - **Target:** Pre-beta builder refactor. - **Linked plan:** `.llm/tmp/run/feat-package-quality-wave3-plugin--host/plan.md` (LD-3, slice 19). diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md index 570c1e0a2..d3c9632e2 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/context-pack.md @@ -75,6 +75,12 @@ session. **Not** a PLAN-EVAL or IMPL-EVAL artifact. carry-forward, not a Wave 3 implementation blocker. - Generator handoff status: ready for separate IMPL-EVAL. Do not merge PR #15 from this session. +- **IMPL-EVAL: PASS** (2026-06-08, separate session) — see `evaluate.md`. Evaluator + independently re-ran static + fitness gates (`check`/`lint`/`fmt --check`/full-export + `doc --lint` = 0/`test` = 21 pass/`publish:dry-run` = 0 slow types) and the `packages/cli` + consumer gate; verified LD-8 (package-owned schema types, F-15 clean) and the debt delta. + One low-severity drift corrected in-line (builder 343→360 LOC). `e2e:cli` triggers-health + is the locked LD-4 Wave 4 carry-forward. **Wave 3 host unit is merge-ready into the umbrella.** ## One-unit wave diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md index 9fcfc68ac..ca66809bf 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/drift.md @@ -38,3 +38,10 @@ | 2026-06-08 | note | Phase A doc-lint reached 0 in slice 6 instead of slice 7 | After slice 6, full-export `deno doc --lint mod.ts src/abstracts/mod.ts src/config/mod.ts src/cli/mod.ts loader.ts src/sdk/mod.ts src/testing/mod.ts src/templates/mod.ts` returns `Checked 8 files`. The planned slice 7 target files (`config` domain/validators/application and `testing`) had no remaining doc-lint errors. | Keep the locked slice order; treat slice 7 as no-op verification/doc-record rather than adding unnecessary code. Slice 8 remains the full-export doc-lint verification gate. | | 2026-06-08 | note | Adding `lint`/`fmt` tasks surfaced pre-existing task hygiene | `deno task lint` initially reported `require-await` in synchronous promise-returning memory/stub implementations. `deno task fmt --check` initially reported package-local formatting drift, including line endings and README wrapping. | Fixed the task-surfaced lint findings without changing port contracts and ran the package-local formatter so the new tasks pass. | | 2026-06-08 | accepted carry-forward | Merge-readiness `e2e:cli` still fails at `behavior.triggers-health` | Slice 24 `rtk proxy deno task e2e:cli` reported 35 passed, 1 failed; the failure is `http://localhost:8093/health` connection refused. This exactly matches LD-4/OQ-D and cleanup passed. | Do not fix in Wave 3. Carry forward to Wave 4 trigger/runtime ownership work; package-quality gates and consumer-import remain complete. | + +## IMPL-EVAL drift + +| Date | Severity | Item | Evidence | Action | +|------|----------|------|----------|--------| +| 2026-06-08 | note | Builder LOC drifted 343→360 during Phase A | `git show 89071df:…/plugin-builder.ts` = 343; `git show a308a2e:…` = 360 (slice-4 JSDoc additions). `arch-debt.md`/`worklog.md` recorded the stale 343. | IMPL-EVAL corrected in-line: updated the F-1 debt entry heading/reason and worklog F-1 + slice-19 rows to 360 LOC with cause. No verdict impact — still the only F-1 violation, still accepted debt. | +| 2026-06-08 | note | IMPL-EVAL verdict | Independently re-verified static + fitness + CLI consumer gates; LD-8/F-15 clean; debt delta well-formed. | **PASS** — see `evaluate.md`. `e2e:cli` triggers-health remains the locked LD-4 Wave 4 carry-forward. | diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/evaluate.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/evaluate.md new file mode 100644 index 000000000..8b21b6e73 --- /dev/null +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/evaluate.md @@ -0,0 +1,106 @@ +# Evaluation: `@netscript/plugin` (A4 plugin host) + +## Metadata + +| Field | Value | +| -------------- | ------------------------------------------- | +| Run ID | `feat-package-quality-wave3-plugin--host` | +| Target | `@netscript/plugin` | +| Archetype | `4 - Public DSL/Builder` | +| Scope overlays | `none` | +| Evaluator | IMPL-EVAL (separate session) / 2026-06-08 | + +## Process Verification + +| Check | Result | Evidence | +| -------------------------------------- | ------ | -------- | +| Plan-Gate passed before implementation | PASS | `plan-eval.md` verdict = `PASS`; first code commit `0c1b2a1` follows the PLAN-EVAL commit `10da21e`. | +| Design section exists in worklog | PASS | `worklog.md` § "Design Checkpoint" (public surface, domain vocabulary, ports, constants, contributor path, gate evidence). | +| Commit slices match design plan | PASS | 24 slices, ordered Phase A→D, each paired with a `docs(wave3): record …` ledger commit (`commits.md` rows 2–49; `git log`). | +| Each slice has a passing gate | PASS | `worklog.md` § "Implementation Evidence" names a gate + result per slice; spot-verified independently (below). | +| No speculative seams (unused files) | PASS | New file `src/domain/schema-types.ts` is consumed by `manifest-schema.ts:5` and `plugin-stream-topic-contribution.ts:13`; new tests exercise existing surfaces. No dead exports introduced. | +| Constants used for finite vocabularies | PASS | `PLUGIN_TYPES`, `CONTRIBUTION_AXES`, `LIFECYCLE_HOOK_NAMES` remain const-derived unions (`tests/domain/core-types_test.ts` asserts the finite vocabularies). | + +## Static Gates + +| Gate | Command | Result | Evidence | +| --------------- | -------------------------------------------------------- | ------ | -------- | +| Typecheck (all 8 entrypoints) | `deno task check` | PASS | `Check mod.ts … src/templates/mod.ts` (8 entrypoints, exit 0). | +| Format | `deno task fmt --check` | PASS | `Checked 113 files`. | +| Lint | `deno task lint` | PASS | `Checked 104 files`. | +| Doc lint | `deno doc --lint <8 entrypoints>` | PASS | `Checked 8 files` (0 errors; down from 93 at base). | +| Publish dry-run | `deno publish --dry-run --allow-dirty` | PASS_WITH_DOCUMENTED_WARNING | `Success Dry run complete`; 0 slow types; only the documented `unanalyzable-dynamic-import` warning. | + +## Fitness Gates + +| Gate | Function | Result | Evidence | Violations | +| ---- | ---------------------------- | ------ | -------- | ---------- | +| F-1 | File-size lint | DEBT_ACCEPTED | `plugin-builder.ts` = 360 LOC (only file >300); matching `arch-debt.md` entry. | builder size (accepted) | +| F-2 | Helper-reinvention scan | PASS | `safeStringifyMetadata` in `loader.ts` is a justified circular-safe logger sink. | none | +| F-3 | Layering check | PASS | `domain/` (incl. new `schema-types.ts`) imports no impl; ports→domain; application→ports; adapters→ports; cli→application. | none | +| F-4 | Inheritance audit | PASS | `PluginContribution` + derived bases co-located in `src/abstracts/`. | none | +| F-5 | Public surface audit | PASS | 8 curated entrypoints unchanged; root `mod.ts` exposes authoring/diagnostics/domain only. | none | +| F-6 | JSR publishability | PASS_WITH_DOCUMENTED_WARNING | dry-run SUCCESS, 0 slow types; `./sdk` dynamic-import warning documented in `src/sdk/mod.ts`. | none | +| F-7 | Doc-score gate | PASS | `deno doc --lint` over all 8 entrypoints = `Checked 8 files`, 0 errors. | none | +| F-8 | Workspace lib check | PASS | `deno task check` covers all 8 entrypoints with `--unstable-kv`. | none | +| F-9 | Permission declaration check | PASS | Tests run under explicit `--allow-all`; README "Required Permissions" section added. | none | +| F-10 | Test-shape audit | PASS | `deno test --allow-all` → 21 passed / 0 failed across 9 focused files; no god file, no Jest globals. | none | +| F-11 | Forbidden-folder lint | PASS | No `utils/`/`helpers/`/`common/`/`lib/`/`interfaces/` under `src/`. | none | +| F-12 | Naming-convention lint | PASS | Public verbs `define/with/create/start/run/inspect`; no `I*`/`*T` exports. | none | +| F-13 | Saga/runtime invariants | N/A | A4 host package owns no saga/runtime state machine (matches gate matrix). | n/a | +| F-14 | Console-log lint | PASS | Console use confined to `loader.ts` logger sink. | none | +| F-15 | Re-export-upstream lint | PASS | No `z.ZodType`/`StandardSchemaV1` in public signatures; no zod/standard-schema re-export in barrels. Replaced by package-owned `PluginManifestParser`/`PluginPayloadSchema` (LD-8). | none | +| F-16 | Folder-cardinality lint | PASS | Role folders bounded; `public/`/`kernel/` are the locked-plan accepted single-member roles. | none | +| F-17 | Abstract-derived co-location | PASS | Abstract contribution contracts all in `src/abstracts/`. | none | +| F-18 | Sub-barrel lint | PASS | Each `mod.ts` is a leaf barrel; no nested utility sub-barrel introduced. | none | + +## Consumer Gates + +| Consumer | Validation | Result | Evidence | +| --------------- | ---------------------------------------------- | ------ | -------- | +| `packages/cli` | `deno check --unstable-kv mod.ts` (independent)| PASS | Evaluator re-ran from `packages/cli`; `Check mod.ts`, exit 0. Imports `@netscript/plugin` + `/config` + `/sdk` + `/templates`. | +| `plugins/sagas,streams,triggers,workers` | `deno task check` | PASS (generator evidence) | `worklog.md` slice 22; consistent with the CLI gate the evaluator re-verified. | + +## Runtime Gates + +| Gate | Validation | Result | Evidence | +| ----------------------------- | ----------------------- | ------ | -------- | +| Merge-readiness `e2e:cli` | `deno task e2e:cli` ×1 | ACCEPTED_CARRY_FORWARD | 35 passed / 1 failed; sole failure `behavior.triggers-health` (`localhost:8093/health`) is the locked **LD-4** Wave 4 carry-forward, not host-bootstrap scope; cleanup passed. | + +## Anti-Pattern Check + +| AP | Status | Notes | +| ----- | ------ | ----- | +| AP-1 | DEBT_ACCEPTED | builder barrel size — `arch-debt.md` plugin-builder.ts entry. | +| AP-9 | CLEAR | typestate enforces name+version before `build()`; justified. | +| AP-14 | CLEAR | no upstream DSL deps re-exported (F-15 confirmed; LD-8 structural types). | +| AP-15 | CLEAR | `withService`/`withDbSchemas` use caller vocabulary. | +| others | N/A | outside the run's touched surface. | + +## Arch-Debt Delta + +| Metric | Count | Evidence | +| --------------------- | ----- | -------- | +| New entries | 1 | `plugin-builder.ts` F-1 (owner/target/reason/linked-plan/status/gate all present). | +| Resolved entries | 1 | old `packages/plugin — types.ts 1,005 LOC` closed with evidence (`types.ts` no longer exists). | +| Deepened violations | 0 | builder grew 343→360 LOC via JSDoc; recorded in the entry (not an undocumented deepening). | +| Unrecorded violations | 0 | F-1 scan shows builder is the only >300 LOC src file, and it is tracked. | + +## Findings + +| Severity | Finding | Evidence | Required action | +| -------- | ------- | -------- | --------------- | +| low | Builder LOC drifted 343→360 during slice-4 JSDoc; debt entry + worklog recorded the stale 343. | `wc -l plugin-builder.ts` = 360; base `89071df` = 343. | **Fixed in-line by evaluator** — updated `arch-debt.md`, `worklog.md` F-1 rows to 360 LOC with cause. No verdict impact (still the only F-1 violation, still accepted debt). | + +## Lessons for Promotion + +| Lesson | Pattern | Applies to | Confidence | +| ------ | ------- | ---------- | ---------- | +| JSDoc sweeps inflate LOC and can re-cross the F-1 cap on borderline files; record the post-implementation size, not the research-baseline size, in the debt entry. | size-debt accounting | all archetypes | medium | + +## Verdict + +| Field | Value | +| --------- | ----- | +| Verdict | `PASS` | +| Rationale | Approved scope is complete: doc-lint 93→0 across all 8 entrypoints; README 138→165 with the missing STANDARDS sections; A4 test layers added (21 passing); task hygiene (`check`/`lint`/`fmt`) green. All required static + fitness gates pass, are N/A (F-13), or have valid accepted debt (F-1). The LD-8 PLAN-EVAL constraint is honored — upstream `ZodType`/`StandardSchemaV1` replaced with package-owned structural types, F-15 confirmed clean. Consumer-import gate independently re-verified for `packages/cli`. The single `e2e:cli` failure is the pre-locked LD-4 Wave 4 carry-forward, not new host scope. Debt registry delta is well-formed (1 closed with evidence, 1 opened complete). The one low-severity evidence drift (builder 343→360 LOC) was corrected in-line. Ready to merge into the umbrella. | diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md index 516c3d890..b19fa41b6 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/worklog.md @@ -36,7 +36,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 2026-06-08 | Implement | generator | Slice 23 complete: final static gate sweep passed (`publish:dry-run`, `check`, `lint`, `fmt --check`, full-export doc-lint). Empty verification commit `9f96342`; paired docs commit follows. | | 2026-06-08 | Implement | generator | Slice 24 complete: merge-readiness `deno task e2e:cli` ran once. Result: 35 passed, 1 failed at known `behavior.triggers-health` (`localhost:8093/health` connection refused), cleanup passed. Empty verification commit `0458b4d`; paired docs commit follows. | | 2026-06-08 | Gate | generator | A4 gates, static gates, and consumer-import validation complete. Merge-readiness E2E has only the LD-4 Wave 4 triggers-health carry-forward. Ready to hand to separate IMPL-EVAL. | -| | IMPL-EVAL | evaluator | (pending) Separate session. | +| | IMPL-EVAL | evaluator | **PASS** (2026-06-08). Separate session. Independently re-ran `check`/`lint`/`fmt --check`/full-export `doc --lint`/`test`/`publish:dry-run` (all green; doc-lint 0, 21 tests, 0 slow types) and the `packages/cli` consumer gate. Verified LD-8 (package-owned `PluginManifestParser`/`PluginPayloadSchema`, no upstream re-export — F-15 clean) and the debt delta (1 closed w/ evidence, 1 opened complete). Corrected one low-severity drift in-line: builder LOC 343→360 (slice-4 JSDoc) in `arch-debt.md` + worklog. `e2e:cli` triggers-health is the locked LD-4 Wave 4 carry-forward. Verdict in `evaluate.md`. Ready to merge into umbrella. | | | Close | supervisor | (pending) | ## Readiness note @@ -89,7 +89,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | 16 | `b8e44c6` | F-10 | PASS | Added cleanup coverage for `createWatcherHandle()` and `startWatcher()` no-op handles. | | 17 | `214a9a3` | F-10 | PASS | Added loader coverage for resolved and unresolved `ManifestResolverPort` results. | | 18 | `3279d7b` | F-10 | PASS | Full package test suite passes: 21 passed, 0 failed. | -| 19 | `8f3c204` | F-1 | DEBT_ACCEPTED | Closed old `packages/plugin — types.ts 1,005 LOC` entry and opened `plugin-builder.ts` 343 LOC accepted debt with pre-beta closing target. | +| 19 | `8f3c204` | F-1 | DEBT_ACCEPTED | Closed old `packages/plugin — types.ts 1,005 LOC` entry and opened `plugin-builder.ts` 360 LOC accepted debt (343 at base + slice-4 JSDoc) with pre-beta closing target. | | 20 | `4968dd5` | Static | PASS | Manual F-1..F-18 evidence table recorded in this worklog; F-13 marked n/a. | | 21 | `7a24d51` | Consumer | PASS | `packages/cli` checks clean with `@netscript/plugin` imports. | | 22 | `c2c1eec` | Consumer | PASS | First-party plugin package checks pass for `sagas`, `streams`, `triggers`, and `workers`. | @@ -100,7 +100,7 @@ Base: umbrella `feat/package-quality-wave3-plugin` @ `89071df` | Gate | Result | Evidence | |------|--------|----------| -| F-1 File-size lint | DEBT_ACCEPTED | `plugin-builder.ts` remains 343 LOC and is tracked in `.llm/harness/debt/arch-debt.md` with pre-beta closing target. | +| F-1 File-size lint | DEBT_ACCEPTED | `plugin-builder.ts` is 360 LOC (343 at base + public JSDoc added in slice 4) and is tracked in `.llm/harness/debt/arch-debt.md` with pre-beta closing target. | | F-2 Helper-reinvention scan | PASS | `safeStringifyMetadata` in `loader.ts` is a logger-sink helper for circular-safe metadata serialization; no platform helper replacement exists. | | F-3 Layering check | PASS | `domain/` owns core values/errors/schema contracts; `ports/` define consumed contracts; `application/` composes ports; `adapters/` implement ports; `cli/` presentation imports CLI contracts. | | F-4 Inheritance audit | PASS | `PluginContribution` and derived contribution bases live in `src/abstracts/`; no cross-package inheritance or deep hierarchy. | From 1e076d5af2ba11a533af42f464859ff19260e969 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 8 Jun 2026 20:03:49 +0000 Subject: [PATCH 55/55] docs(wave3): append IMPL-EVAL commit to commits.md Co-authored-by: rickylabs <129366361+rickylabs@users.noreply.github.com> --- .llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md index fff82b63d..12d553add 100644 --- a/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md +++ b/.llm/tmp/run/feat-package-quality-wave3-plugin--host/commits.md @@ -58,3 +58,4 @@ Branch: `feat/package-quality-wave3-plugin-host` → umbrella `feat/package-qual (append one row per slice during Implement; pair each slice commit with its `docs(wave3): record …` run-doc commit, per the Wave 2 cadence.) - 10da21e: docs(wave3): record PLAN-EVAL PASS + lock LD-8 for @netscript/plugin host +- eed130d: docs(wave3): record IMPL-EVAL PASS for @netscript/plugin host + fix builder LOC drift