Files
siriusscan--sirius/documentation/dev-notes/scanner-templates-fix-plan.md
T
wehub-resource-sync 161ef94b4f
Check engine pin consistency / Dockerfile / CI pin consistency (push) Successful in 8s
Sirius CI/CD Pipeline / Detect Changes (push) Successful in 23s
Validate Docker Configuration / Validate Docker Compose Configuration (push) Successful in 47s
Sirius CI/CD Pipeline / Build API (${{ matrix.platform }}) (push) Has been cancelled
Sirius CI/CD Pipeline / Build UI (${{ matrix.platform }}) (push) Has been cancelled
Sirius CI/CD Pipeline / Merge Engine Manifest (push) Has been cancelled
Sirius CI/CD Pipeline / Merge API Manifest (push) Has been cancelled
Sirius CI/CD Pipeline / Merge UI Manifest (push) Has been cancelled
Sirius CI/CD Pipeline / Build Engine (${{ matrix.platform }}) (push) Has been cancelled
Sirius CI/CD Pipeline / Build Infra (${{ matrix.service }}, ${{ matrix.platform }}) (push) Has been cancelled
Sirius CI/CD Pipeline / Merge Infra Manifest (sirius-postgres) (push) Has been cancelled
Sirius CI/CD Pipeline / Merge Infra Manifest (sirius-rabbitmq) (push) Has been cancelled
Sirius CI/CD Pipeline / Merge Infra Manifest (sirius-valkey) (push) Has been cancelled
Sirius CI/CD Pipeline / Integration Test (push) Has been cancelled
Sirius CI/CD Pipeline / Public Stack Contract (push) Has been cancelled
Sirius CI/CD Pipeline / Dispatch Demo Deployment (sirius-demo branch) (push) Has been cancelled
Sirius CI/CD Pipeline / Dispatch Demo Canary (main branch) (push) Has been cancelled
Sirius CI/CD Pipeline / Guard Registry Namespace (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:32:25 +08:00

97 lines
4.6 KiB
Markdown

---
title: "Scanner Templates Fix - Project Plan"
description: "Eight-PR sprint to fix three live scanner-settings bugs and replace the drift-prone Valkey contracts that caused them with a shared schema."
template: "TEMPLATE.documentation-standard"
version: "1.0.0"
last_updated: "2026-04-22"
author: "Development Team"
tags: ["project-plan", "scanner", "templates", "nse", "valkey", "agent-templates"]
categories: ["development", "planning"]
difficulty: "intermediate"
prerequisites: ["docker", "docker-compose", "go", "typescript", "valkey"]
related_docs:
- "README.tasks.md"
- "README.new-project.md"
dependencies: []
llm_context: "high"
search_keywords:
[
"scanner templates",
"nse scripts",
"agent templates",
"valkey contracts",
"template:custom",
"nse:script",
"shared schema",
]
---
# Scanner Templates Fix - Project Plan
## Project Overview
**Goal**: Restore working "view, edit, and run" semantics for both NSE scripts and agent-based templates in the Advanced Scanner Settings UI, then eliminate the architectural drift (per-component Valkey contracts) that caused the bugs in the first place.
**Scope**:
- PR 1-PR 5 (Phase A): surgical fixes that unbreak the UI and make custom-template uploads actually run.
- PR 6-PR 8 (Phase B): single source of truth for Valkey records (`go-api/sirius/store/templates`), consumer migration, and contract tests.
**Out of scope (deferred Phase C)**: version-stamp polling for agent sync resilience and a typed envelope replacement for the `engine.commands` plain queue. Revisit if real-world failures appear.
## Bug Inventory (verified)
### Bug 1 - NSE descriptions/code show "No code available"
- Scanner writes keys with `.nse` extension: `nse:script:smb-vuln-cve2009-3103.nse`.
- UI canonicalizes the manifest entry, drops `.nse`, then looks up `nse:script:smb-vuln-cve2009-3103` - miss, falls through to placeholders.
### Bug 2 - Agent template view/edit shows nothing
- `AgentTemplatesTab.handleView` / `handleEdit` use raw `fetch` directly to `sirius-api`, missing the `X-API-Key` header that `apiFetch` injects in tRPC paths. Returns `401`, UI shows empty Description/Content.
### Bug 3 - Newly uploaded custom templates never run
- `UploadAgentTemplate` writes raw YAML to `template:custom:<id>` (standard templates use a JSON envelope with base64 content).
- No `template:meta:<id>` record is written, so the agent sync server (which enumerates from `template:meta:*`) doesn't see the new template.
- Notification is published to `engine.commands`, but no consumer listens on that queue.
## Master PR Sequence
### Phase A - Surgical fixes
| PR | Title | Repos touched |
| --- | --- | --- |
| 1 | NSE script key harmonization | app-scanner, sirius-ui (no-op) |
| 2 | Agent template view/edit auth fix | sirius-ui |
| 3 | Custom template upload writes envelope + meta + sync trigger | sirius-api, app-agent |
| 4 | UpdateAgentTemplate handler + UI wiring | sirius-api, sirius-ui |
| 5 | engine.commands listener (defense-in-depth) | app-agent |
### Phase B - Architectural durability
| PR | Title | Repos touched |
| --- | --- | --- |
| 6 | Shared schema package in `go-api/sirius/store/templates` | go-api |
| 7 | Migrate consumers to shared package; retire dual-format heuristic | sirius-api, app-scanner, app-agent |
| 8 | Contract tests + architecture doc | Sirius (testing/, documentation/) |
## Workflow
- One feature branch per repo: `feature/scanner-templates-fix`.
- Each PR is squashed to main individually.
- Each PR is planned in detail (like PR 1 in `scanner_templates_fix_3be9da41.plan.md`) before execution.
- Sprint tracker: [tasks/scanner-templates-fix.json](../../tasks/scanner-templates-fix.json).
## Verification Strategy
- PR 1: live `valkey-cli` inspection + UI Description/Code populated + Save round-trip + Full Scan green.
- PR 2: View/Edit dialogs render with content, no 401s in browser console.
- PR 3: Upload custom template via UI -> agent's `<cache>/custom/<id>.yaml` exists -> next `internal:template-scan` reports the new template detected.
- PR 4: Edit existing template, Save Changes, refresh -> changes persist.
- PR 5: Manually publish a fake `internal:template upload` to `engine.commands` -> agents receive sync command.
- PR 6: `go test ./...` in go-api passes.
- PR 7: All three Go modules build cleanly with the shared package; the JSON-or-YAML fork is gone.
- PR 8: `make test-integration` runs the contract test for every writer/reader pair; doc renders in the documentation index.
## References
- Master plan + PR 1 detail: `~/.cursor/plans/scanner_templates_fix_3be9da41.plan.md`
- Tracker: `tasks/scanner-templates-fix.json`