feat: add generated scene skill platform hardening
This commit is contained in:
663
docs/superpowers/plans/2026-04-17-scene-skill-compiler-plan.md
Normal file
663
docs/superpowers/plans/2026-04-17-scene-skill-compiler-plan.md
Normal file
@@ -0,0 +1,663 @@
|
||||
# Scene Skill Compiler Implementation Plan
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** Upgrade `sg_scene_generate` from a scene metadata extractor plus template filler into a reusable scene skill compiler that can understand workflow semantics, classify scene archetypes, and generate runnable skills for both `tq-lineloss-report`-style and `marketing-zero-consumer-report`-style internal scenes.
|
||||
|
||||
**Architecture:** Introduce a unified `Scene IR`, switch extraction to a hybrid deterministic-plus-LLM pipeline, route generation by `workflowArchetype`, align runtime resolver contracts, and add readiness gates so users can tell whether a generated skill is safe to trial on the internal network.
|
||||
|
||||
**Tech Stack:** Rust, Node.js, HTML/CSS/JavaScript, serde_json, OpenAI-compatible LLM API
|
||||
|
||||
---
|
||||
|
||||
## Scope Check
|
||||
|
||||
This plan implements the design in:
|
||||
|
||||
- `docs/superpowers/specs/2026-04-17-scene-skill-compiler-design.md`
|
||||
|
||||
This plan builds on the existing generator work already described in:
|
||||
|
||||
- `docs/superpowers/specs/2026-04-17-llm-driven-skill-generation-design.md`
|
||||
- `docs/superpowers/specs/2026-04-17-enhanced-llm-extraction-schema-design.md`
|
||||
- `docs/superpowers/specs/2026-04-17-progressive-template-enhancement-design.md`
|
||||
- `docs/superpowers/specs/2026-04-16-multi-scene-kind-generator-design.md`
|
||||
|
||||
This plan does not attempt to solve:
|
||||
|
||||
- full login and authentication reconstruction
|
||||
- all historical scene patterns in one pass
|
||||
- 100% no-touch generation without human review
|
||||
|
||||
---
|
||||
|
||||
## File Map
|
||||
|
||||
### Core generator pipeline
|
||||
|
||||
| File | Action | Purpose |
|
||||
|------|--------|---------|
|
||||
| `frontend/scene-generator/llm-client.js` | Modify | Replace truncation-only extraction with chunked workflow-aware extraction and `Scene IR` schema output |
|
||||
| `frontend/scene-generator/generator-runner.js` | Modify | Add deterministic scene scanning, key-fragment selection, and IR support |
|
||||
| `frontend/scene-generator/server.js` | Modify | Expose analysis, preview, readiness, and generation endpoints for `Scene IR` |
|
||||
| `frontend/scene-generator/sg_scene_generator.html` | Modify | Show extraction preview, archetype classification, bootstrap, risks, and readiness |
|
||||
|
||||
### Rust backend
|
||||
|
||||
| File | Action | Purpose |
|
||||
|------|--------|---------|
|
||||
| `src/generated_scene/analyzer.rs` | Modify | Add deterministic extraction helpers and archetype support |
|
||||
| `src/generated_scene/generator.rs` | Modify | Route generation by archetype and compile from `Scene IR` instead of ad hoc fields |
|
||||
| `src/generated_scene/ir.rs` | Create | Define unified `Scene IR` structs and serde contracts |
|
||||
| `src/bin/sg_scene_generate.rs` | Modify | Accept `Scene IR` JSON or file input and pass it into generator |
|
||||
| `src/compat/scene_platform/resolvers.rs` | Modify | Align runtime parameter resolution with generated contracts |
|
||||
|
||||
### Tests and fixtures
|
||||
|
||||
| File | Action | Purpose |
|
||||
|------|--------|---------|
|
||||
| `tests/scene_generator_test.rs` | Modify | Cover new analysis, archetype classification, and generation routing |
|
||||
| `tests/generated_scene_*` or related fixtures | Modify/Create | Add representative fixtures for single-request, multi-mode, and paginated-enrichment scenes |
|
||||
|
||||
---
|
||||
|
||||
## Scope Guardrails
|
||||
|
||||
- Do not break existing `--scene-id`, `--scene-name`, or `--scene-kind` compatibility.
|
||||
- Do not require all scenes to provide complete metadata in HTML meta tags.
|
||||
- Do not force the runtime to support new resolver contracts unless generation is updated to gate incompatible output.
|
||||
- Do not assume all report scenes share `org + period` params.
|
||||
- Do not silently generate low-confidence skills as if they were runnable.
|
||||
|
||||
---
|
||||
|
||||
### Task 1: Fix Current Hard Failures Before Compiler Refactor
|
||||
|
||||
**Files:**
|
||||
- Modify: `frontend/scene-generator/llm-client.js`
|
||||
- Modify: `frontend/scene-generator/generator-runner.js`
|
||||
- Modify: `frontend/scene-generator/server.js`
|
||||
- Modify: `frontend/scene-generator/sg_scene_generator.html`
|
||||
- Modify: `src/generated_scene/generator.rs`
|
||||
|
||||
**Goal:** Stop the most obvious wrong outputs that currently make generated skills fail on the internal network even before the full compiler architecture lands.
|
||||
|
||||
- [ ] **Step 1: Remove report-scene hardcoded parameter assumptions**
|
||||
|
||||
Audit `scene.toml` generation in `src/generated_scene/generator.rs` and remove default injection of generic report params such as:
|
||||
|
||||
- fixed `org`
|
||||
- fixed `period`
|
||||
- default dictionary entity for a specific city
|
||||
- generic page title keywords like `["报表", "线损"]`
|
||||
|
||||
Expected result: generated params come from extracted scene semantics or are omitted when not confidently known.
|
||||
|
||||
- [ ] **Step 2: Rework bootstrap source priority**
|
||||
|
||||
Change bootstrap derivation so `expected_domain` and `target_url` are resolved using this order:
|
||||
|
||||
1. explicit deep extraction result
|
||||
2. deterministic extraction from business entry points
|
||||
3. HTML meta tags if trustworthy
|
||||
4. fallback empty with warning
|
||||
|
||||
Explicitly prevent script-host URLs such as static JS includes from becoming the business domain by mistake.
|
||||
|
||||
- [ ] **Step 3: Replace naive truncation with chunked extraction input**
|
||||
|
||||
Update `frontend/scene-generator/llm-client.js` and `frontend/scene-generator/generator-runner.js` so they no longer send only the first `15000/3000` characters. Replace with:
|
||||
|
||||
1. directory tree summary
|
||||
2. `index.html` chunking
|
||||
3. URL-bearing fragments
|
||||
4. request-construction fragments
|
||||
5. branching logic fragments
|
||||
6. export-related fragments
|
||||
|
||||
- [ ] **Step 4: Add analysis preview and risk banner in Web UI**
|
||||
|
||||
Update `frontend/scene-generator/sg_scene_generator.html` and `frontend/scene-generator/server.js` to preview:
|
||||
|
||||
- detected archetype
|
||||
- bootstrap
|
||||
- key endpoints
|
||||
- extracted params
|
||||
- workflow steps
|
||||
- confidence and risk notes
|
||||
|
||||
- [ ] **Step 5: Verify with marketing and tq reference scenes**
|
||||
|
||||
Run local analysis against the two reference scenes and confirm:
|
||||
|
||||
- `marketing-zero-consumer-report` no longer resolves the wrong domain
|
||||
- `tq-lineloss-report` still identifies mode-related structures
|
||||
- generated preview no longer shows generic hardcoded report params
|
||||
|
||||
- [ ] **Step 6: Commit**
|
||||
|
||||
```bash
|
||||
git add frontend/scene-generator/llm-client.js frontend/scene-generator/generator-runner.js frontend/scene-generator/server.js frontend/scene-generator/sg_scene_generator.html src/generated_scene/generator.rs
|
||||
git commit -m "fix(generator): remove hardcoded report defaults and improve bootstrap extraction"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 2: Introduce Unified Scene IR
|
||||
|
||||
**Files:**
|
||||
- Create: `src/generated_scene/ir.rs`
|
||||
- Modify: `src/generated_scene/generator.rs`
|
||||
- Modify: `src/bin/sg_scene_generate.rs`
|
||||
- Modify: `frontend/scene-generator/server.js`
|
||||
- Modify: `frontend/scene-generator/llm-client.js`
|
||||
|
||||
**Goal:** Introduce a single intermediate representation that all extraction and compilation stages use.
|
||||
|
||||
- [ ] **Step 1: Add Rust `Scene IR` structs**
|
||||
|
||||
Create `src/generated_scene/ir.rs` with serde-enabled structs for:
|
||||
|
||||
- `SceneIr`
|
||||
- `BootstrapIr`
|
||||
- `ParamIr`
|
||||
- `ModeIr`
|
||||
- `WorkflowStepIr`
|
||||
- `ArtifactContractIr`
|
||||
- `NormalizeRulesIr`
|
||||
- `ReadinessIr`
|
||||
- `EvidenceIr`
|
||||
|
||||
Minimum top-level fields:
|
||||
|
||||
```json
|
||||
{
|
||||
"sceneId": "",
|
||||
"sceneName": "",
|
||||
"sceneKind": "",
|
||||
"workflowArchetype": "",
|
||||
"bootstrap": {},
|
||||
"params": [],
|
||||
"modes": [],
|
||||
"workflowSteps": [],
|
||||
"requestTemplate": {},
|
||||
"responsePath": "",
|
||||
"normalizeRules": {},
|
||||
"artifactContract": {},
|
||||
"validationHints": {},
|
||||
"evidence": []
|
||||
}
|
||||
```
|
||||
|
||||
- [ ] **Step 2: Wire `Scene IR` into generator entrypoints**
|
||||
|
||||
Update `src/bin/sg_scene_generate.rs` to accept either:
|
||||
|
||||
- `--scene-info-json` upgraded to the new IR contract, or
|
||||
- a new `--scene-ir-json` / `--scene-ir-file` parameter
|
||||
|
||||
Keep backward compatibility by translating old scene info into partial IR where needed.
|
||||
|
||||
- [ ] **Step 3: Refactor generator to compile from IR**
|
||||
|
||||
Update `src/generated_scene/generator.rs` so its internal interfaces no longer directly depend on loosely grouped fields like `expectedDomain`, `staticParams`, and `columnDefs` alone. It should compile from unified `SceneIr`.
|
||||
|
||||
- [ ] **Step 4: Update Node server to pass IR through generation**
|
||||
|
||||
Modify `frontend/scene-generator/server.js` so analyze endpoints return IR-shaped JSON and generate endpoints pass the same structure into Rust without flattening.
|
||||
|
||||
- [ ] **Step 5: Verify serde and CLI compatibility**
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
cargo check
|
||||
node --check frontend/scene-generator/server.js
|
||||
node --check frontend/scene-generator/llm-client.js
|
||||
```
|
||||
|
||||
Expected: Rust and Node compile cleanly with the new IR contract.
|
||||
|
||||
- [ ] **Step 6: Commit**
|
||||
|
||||
```bash
|
||||
git add src/generated_scene/ir.rs src/generated_scene/generator.rs src/bin/sg_scene_generate.rs frontend/scene-generator/server.js frontend/scene-generator/llm-client.js
|
||||
git commit -m "feat(generator): introduce unified scene ir for analysis and compilation"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 3: Build Hybrid Extraction Pipeline
|
||||
|
||||
**Files:**
|
||||
- Modify: `src/generated_scene/analyzer.rs`
|
||||
- Modify: `frontend/scene-generator/generator-runner.js`
|
||||
- Modify: `frontend/scene-generator/llm-client.js`
|
||||
- Modify: `frontend/scene-generator/server.js`
|
||||
|
||||
**Goal:** Split extraction into deterministic signal collection plus LLM semantic completion.
|
||||
|
||||
- [ ] **Step 1: Implement deterministic extraction helpers**
|
||||
|
||||
Add helper logic in `src/generated_scene/analyzer.rs` or adjacent extraction code to detect:
|
||||
|
||||
- URLs and request methods
|
||||
- `contentType`
|
||||
- request payload builders
|
||||
- pagination variables such as `page`, `rows`, `pageSize`
|
||||
- branch variables such as `period_mode`, `reportType`
|
||||
- entry methods
|
||||
- export methods
|
||||
- obvious filter expressions such as `charge !== 0`
|
||||
|
||||
- [ ] **Step 2: Create key-fragment selection in Node runner**
|
||||
|
||||
Update `frontend/scene-generator/generator-runner.js` to extract and package:
|
||||
|
||||
- directory summary
|
||||
- URL fragments
|
||||
- branch fragments
|
||||
- request-body fragments
|
||||
- response normalization fragments
|
||||
- export fragments
|
||||
|
||||
for LLM analysis.
|
||||
|
||||
- [ ] **Step 3: Redesign LLM prompt for workflow understanding**
|
||||
|
||||
Update `frontend/scene-generator/llm-client.js` so the prompt explicitly asks for:
|
||||
|
||||
- `workflowArchetype`
|
||||
- `bootstrap`
|
||||
- `params`
|
||||
- `modes`
|
||||
- `workflowSteps`
|
||||
- `requestTemplate`
|
||||
- `responsePath`
|
||||
- `normalizeRules`
|
||||
- `artifactContract`
|
||||
- `confidence`
|
||||
- `uncertainties`
|
||||
|
||||
- [ ] **Step 4: Merge deterministic and LLM results**
|
||||
|
||||
Implement merge logic in `frontend/scene-generator/server.js` or a dedicated helper:
|
||||
|
||||
- deterministic extraction wins for hard facts
|
||||
- LLM fills missing semantics
|
||||
- conflicts are surfaced in preview as warnings
|
||||
|
||||
- [ ] **Step 5: Verify against reference workflows**
|
||||
|
||||
Check that:
|
||||
|
||||
- `marketing-zero-consumer-report` emits workflow steps including `paginate`, `secondary_request`, `filter`, and `export`
|
||||
- `tq-lineloss-report` emits `modes`, `defaultMode`, and `modeSwitchField`
|
||||
|
||||
- [ ] **Step 6: Commit**
|
||||
|
||||
```bash
|
||||
git add src/generated_scene/analyzer.rs frontend/scene-generator/generator-runner.js frontend/scene-generator/llm-client.js frontend/scene-generator/server.js
|
||||
git commit -m "feat(generator): add hybrid deterministic and llm workflow extraction"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 4: Add Workflow Archetype Classification
|
||||
|
||||
**Files:**
|
||||
- Modify: `src/generated_scene/analyzer.rs`
|
||||
- Modify: `src/generated_scene/ir.rs`
|
||||
- Modify: `frontend/scene-generator/server.js`
|
||||
- Modify: `frontend/scene-generator/sg_scene_generator.html`
|
||||
|
||||
**Goal:** Reliably classify scenes so the correct compiler path is chosen.
|
||||
|
||||
- [ ] **Step 1: Add archetype enum support**
|
||||
|
||||
Define and support these initial archetypes:
|
||||
|
||||
- `single_request_table`
|
||||
- `multi_mode_request`
|
||||
- `paginated_enrichment`
|
||||
- `page_state_eval`
|
||||
|
||||
- [ ] **Step 2: Implement classification rules**
|
||||
|
||||
Classification logic should prefer:
|
||||
|
||||
1. `multi_mode_request` when explicit mode-switch branching exists
|
||||
2. `paginated_enrichment` when paginated list fetch plus secondary requests are detected
|
||||
3. `page_state_eval` when page-state judgment dominates
|
||||
4. `single_request_table` as fallback with lower confidence
|
||||
|
||||
- [ ] **Step 3: Expose classification confidence**
|
||||
|
||||
Add confidence and evidence fields to the preview payload so UI can show why a scene was classified into an archetype.
|
||||
|
||||
- [ ] **Step 4: Add manual override support in UI**
|
||||
|
||||
Allow users to override archetype in `frontend/scene-generator/sg_scene_generator.html` before final generation, but preserve the original detected result and confidence.
|
||||
|
||||
- [ ] **Step 5: Verify reference classifications**
|
||||
|
||||
Expected:
|
||||
|
||||
- `marketing-zero-consumer-report` => `paginated_enrichment`
|
||||
- `tq-lineloss-report` => `multi_mode_request`
|
||||
|
||||
- [ ] **Step 6: Commit**
|
||||
|
||||
```bash
|
||||
git add src/generated_scene/analyzer.rs src/generated_scene/ir.rs frontend/scene-generator/server.js frontend/scene-generator/sg_scene_generator.html
|
||||
git commit -m "feat(generator): classify scenes by workflow archetype with confidence"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 5: Split Generator Into Archetype Compilers
|
||||
|
||||
**Files:**
|
||||
- Modify: `src/generated_scene/generator.rs`
|
||||
- Optionally create: `src/generated_scene/compiler_single_request.rs`
|
||||
- Optionally create: `src/generated_scene/compiler_multi_mode.rs`
|
||||
- Optionally create: `src/generated_scene/compiler_paginated_enrichment.rs`
|
||||
- Optionally create: `src/generated_scene/compiler_page_state.rs`
|
||||
|
||||
**Goal:** Replace the single generic report template with explicit compiler paths.
|
||||
|
||||
- [ ] **Step 1: Add compiler routing by archetype**
|
||||
|
||||
Update `src/generated_scene/generator.rs` so generation dispatches on `workflowArchetype`.
|
||||
|
||||
- [ ] **Step 2: Implement `single_request_table` compiler**
|
||||
|
||||
Generate:
|
||||
|
||||
- minimal `scene.toml`
|
||||
- direct request browser script
|
||||
- artifact output for simple table/list data
|
||||
|
||||
- [ ] **Step 3: Implement `multi_mode_request` compiler**
|
||||
|
||||
Generate:
|
||||
|
||||
- mode detection
|
||||
- mode-specific request builders
|
||||
- mode-specific column definitions
|
||||
- mode-specific response extraction
|
||||
- unified artifact output
|
||||
|
||||
Reference target: `tq-lineloss-report`
|
||||
|
||||
- [ ] **Step 4: Implement `paginated_enrichment` compiler**
|
||||
|
||||
Generate:
|
||||
|
||||
- paginated list loop
|
||||
- per-item or batched secondary requests
|
||||
- aggregation and transform steps
|
||||
- business filters
|
||||
- final artifact or export output
|
||||
|
||||
Reference target: `marketing-zero-consumer-report`
|
||||
|
||||
- [ ] **Step 5: Implement `page_state_eval` compiler**
|
||||
|
||||
Generate:
|
||||
|
||||
- state-check script skeleton
|
||||
- light artifact semantics for monitoring or status checks
|
||||
|
||||
- [ ] **Step 6: Verify generated outputs by archetype**
|
||||
|
||||
Validate that generated scripts no longer:
|
||||
|
||||
- define multiple API endpoints but use only the first
|
||||
- collapse mode-aware scenes into one request body
|
||||
- flatten paginated enrichment scenes into one-step normalization
|
||||
|
||||
- [ ] **Step 7: Commit**
|
||||
|
||||
```bash
|
||||
git add src/generated_scene/generator.rs src/generated_scene/compiler_*.rs
|
||||
git commit -m "feat(generator): split scene generation into workflow archetype compilers"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 6: Align Runtime Resolver Contracts
|
||||
|
||||
**Files:**
|
||||
- Modify: `src/compat/scene_platform/resolvers.rs`
|
||||
- Modify: `src/generated_scene/generator.rs`
|
||||
- Modify: `src/generated_scene/ir.rs`
|
||||
|
||||
**Goal:** Ensure generated parameter contracts are either executable by the runtime or explicitly flagged as unsupported.
|
||||
|
||||
- [ ] **Step 1: Audit current resolver coverage**
|
||||
|
||||
Document which current contracts are already supported, including:
|
||||
|
||||
- `dictionary_entity`
|
||||
- `month_week_period`
|
||||
- `fixed_enum`
|
||||
- `literal_passthrough`
|
||||
|
||||
- [ ] **Step 2: Add missing resolver types or gate them**
|
||||
|
||||
Choose one of these paths per parameter type:
|
||||
|
||||
1. implement new runtime resolver support
|
||||
2. downgrade generation to an existing supported resolver
|
||||
3. block generation with explicit readiness warning
|
||||
|
||||
Recommended additions:
|
||||
|
||||
- `mode_enum`
|
||||
- `date_range`
|
||||
- `org_tree`
|
||||
- `page_size`
|
||||
- `hidden_static`
|
||||
- `derived_param`
|
||||
|
||||
- [ ] **Step 3: Reflect runtime compatibility in generated metadata**
|
||||
|
||||
Generated output should clearly indicate:
|
||||
|
||||
- supported params
|
||||
- unresolved params
|
||||
- manual-completion requirements
|
||||
|
||||
- [ ] **Step 4: Add tests for resolver alignment**
|
||||
|
||||
Extend tests to ensure a generated skill cannot claim runnable readiness when its params require unsupported resolver behavior.
|
||||
|
||||
- [ ] **Step 5: Commit**
|
||||
|
||||
```bash
|
||||
git add src/compat/scene_platform/resolvers.rs src/generated_scene/generator.rs src/generated_scene/ir.rs tests/scene_generator_test.rs
|
||||
git commit -m "feat(runtime): align generated scene contracts with resolver support"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 7: Add Readiness Gates And Generation Report
|
||||
|
||||
**Files:**
|
||||
- Modify: `frontend/scene-generator/server.js`
|
||||
- Modify: `frontend/scene-generator/sg_scene_generator.html`
|
||||
- Modify: `src/generated_scene/ir.rs`
|
||||
- Modify: `src/generated_scene/generator.rs`
|
||||
|
||||
**Goal:** Make generation output self-describing so users know whether a skill is ready for internal-network trial.
|
||||
|
||||
- [ ] **Step 1: Add static readiness checks**
|
||||
|
||||
Implement checks for:
|
||||
|
||||
- entrypoint detection
|
||||
- request-chain completeness
|
||||
- bootstrap plausibility
|
||||
- param/runtime compatibility
|
||||
- archetype compiler completeness
|
||||
|
||||
- [ ] **Step 2: Add readiness levels**
|
||||
|
||||
Define:
|
||||
|
||||
- `A` = ready for direct internal-network trial
|
||||
- `B` = structurally correct, human review recommended
|
||||
- `C` = draft only, manual completion required
|
||||
|
||||
- [ ] **Step 3: Generate human-readable report**
|
||||
|
||||
Each analysis or generation result should include:
|
||||
|
||||
- archetype
|
||||
- confidence
|
||||
- key evidence
|
||||
- detected risks
|
||||
- missing pieces
|
||||
- readiness level
|
||||
|
||||
- [ ] **Step 4: Display readiness in Web UI**
|
||||
|
||||
Show the readiness grade before generation and after generation, with explicit warnings for internal-network execution risk.
|
||||
|
||||
- [ ] **Step 5: Verify readiness outcomes**
|
||||
|
||||
Expected baseline:
|
||||
|
||||
- `tq-lineloss-report` should reach `A` or high-confidence `B`
|
||||
- `marketing-zero-consumer-report` should not be labeled runnable unless pagination and secondary-request logic are correctly represented
|
||||
|
||||
- [ ] **Step 6: Commit**
|
||||
|
||||
```bash
|
||||
git add frontend/scene-generator/server.js frontend/scene-generator/sg_scene_generator.html src/generated_scene/ir.rs src/generated_scene/generator.rs
|
||||
git commit -m "feat(generator): add readiness grading and generation risk reporting"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 8: Add Regression Coverage For Reference Scenes
|
||||
|
||||
**Files:**
|
||||
- Modify: `tests/scene_generator_test.rs`
|
||||
- Create/Modify: scene generator fixtures as needed
|
||||
|
||||
**Goal:** Lock in the two reference scenes as ongoing regression cases.
|
||||
|
||||
- [ ] **Step 1: Add marketing classification fixture coverage**
|
||||
|
||||
Test that the marketing source scene is classified as `paginated_enrichment` and contains evidence for:
|
||||
|
||||
- paginated list request
|
||||
- secondary request
|
||||
- filter rule
|
||||
- export step
|
||||
|
||||
- [ ] **Step 2: Add tq classification fixture coverage**
|
||||
|
||||
Test that the tq source scene is classified as `multi_mode_request` and contains evidence for:
|
||||
|
||||
- month mode
|
||||
- week mode
|
||||
- distinct request templates
|
||||
- distinct column definitions
|
||||
|
||||
- [ ] **Step 3: Add generation-shape assertions**
|
||||
|
||||
Assert that generated outputs differ by archetype and do not collapse to a single generic template shape.
|
||||
|
||||
- [ ] **Step 4: Run verification**
|
||||
|
||||
```bash
|
||||
cargo test --test scene_generator_test -- --nocapture
|
||||
```
|
||||
|
||||
Expected: both reference cases pass and guard against regression.
|
||||
|
||||
- [ ] **Step 5: Commit**
|
||||
|
||||
```bash
|
||||
git add tests/scene_generator_test.rs tests/fixtures
|
||||
git commit -m "test(generator): add regression coverage for marketing and tq reference scenes"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Delivery Sequence
|
||||
|
||||
Recommended implementation order:
|
||||
|
||||
1. Task 1: hard failure fixes
|
||||
2. Task 2: `Scene IR`
|
||||
3. Task 3: hybrid extraction
|
||||
4. Task 4: archetype classification
|
||||
5. Task 5: compiler split
|
||||
6. Task 6: resolver alignment
|
||||
7. Task 7: readiness gates
|
||||
8. Task 8: regression coverage
|
||||
|
||||
Rationale:
|
||||
|
||||
- Task 1 stops current bad outputs early.
|
||||
- Tasks 2 to 5 establish the new compiler backbone.
|
||||
- Tasks 6 and 7 prevent false claims of runnability.
|
||||
- Task 8 locks the new architecture against regression.
|
||||
|
||||
---
|
||||
|
||||
## Verification Strategy
|
||||
|
||||
### Static Verification
|
||||
|
||||
- `cargo check`
|
||||
- `cargo test --test scene_generator_test -- --nocapture`
|
||||
- `node --check frontend/scene-generator/llm-client.js`
|
||||
- `node --check frontend/scene-generator/generator-runner.js`
|
||||
- `node --check frontend/scene-generator/server.js`
|
||||
|
||||
### Functional Verification
|
||||
|
||||
For `marketing-zero-consumer-report`:
|
||||
|
||||
- detected as `paginated_enrichment`
|
||||
- bootstrap resolves to business domain, not static script host
|
||||
- generated workflow includes pagination and secondary requests
|
||||
- generation is not labeled runnable if those steps are missing
|
||||
|
||||
For `tq-lineloss-report`:
|
||||
|
||||
- detected as `multi_mode_request`
|
||||
- month and week logic remain distinct
|
||||
- request templates and column definitions are mode-specific
|
||||
|
||||
### UI Verification
|
||||
|
||||
Confirm the scene generator UI now shows:
|
||||
|
||||
- detected archetype
|
||||
- confidence
|
||||
- bootstrap
|
||||
- key params
|
||||
- readiness grade
|
||||
- risk notes
|
||||
|
||||
---
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
This plan is complete when all of the following are true:
|
||||
|
||||
1. `sg_scene_generate` consumes a unified `Scene IR`.
|
||||
2. The analysis pipeline can distinguish at least `single_request_table`, `multi_mode_request`, `paginated_enrichment`, and `page_state_eval`.
|
||||
3. `tq-lineloss-report` is generated through the multi-mode compiler path.
|
||||
4. `marketing-zero-consumer-report` is generated through the paginated-enrichment compiler path.
|
||||
5. Generated `scene.toml` no longer injects unrelated default org/period assumptions.
|
||||
6. Bootstrap resolution no longer mistakes external script hosts for business target domains.
|
||||
7. Runtime resolver compatibility is explicit, not implicit.
|
||||
8. Generation results include readiness grading and risk reporting before internal-network trial.
|
||||
|
||||
Reference in New Issue
Block a user