feat: Oracle Canvas Component Schema and Qwen 3.6 integration (#31)

Co-authored-by: Sagnik <sagnik7896@gmail.com>
Reviewed-on: #31
This commit was merged in pull request #31.
This commit is contained in:
2026-04-20 01:43:39 +05:30
parent 57144e1bd3
commit e519339cc9
129 changed files with 625213 additions and 262 deletions

View File

@@ -0,0 +1,209 @@
# Oracle Canvas Codebook Production Truth
Date: 2026-04-19
Repo: `Project_Velocity`
## Purpose
This document freezes the current production truth for the Oracle Canvas template/codebook system, the expanded GPT and Claude corpora, the runtime merge policy, and the current rendering limits that matter for delivery.
This is not a concept note. It is the implementation-facing truth for the Oracle template layer as it exists now.
## Current Source Of Truth
The Oracle template book is split across three layers:
1. Structural database schema
- `backend/oracle/schema_extension_v2.sql`
- Defines:
- `oracle_template_chapters`
- `oracle_template_subchapters`
- `oracle_template_seed_examples`
- chapter/subchapter linkage on `oracle_component_templates`
- `oracle_synthetic_generation_jobs`
2. Runtime seed DB
- `backend/oracle/oracle_template_seed_db.json`
- This is the lightweight fallback DB shipped with the runtime.
- It is structurally correct but incomplete relative to the intended corpus.
3. Expanded authoring corpora
- GPT pack:
- `Project_Velocity/.Agent Context/Sprint 1/Sayan Multi-Surface and Oracle Delivery Pack/Sample JSON Schema/GPT 5.4/oracle_canvas_json_expansion_pack/db/oracle_template_seed_db_expanded_v1.pretty.json`
- Claude pack:
- `Project_Velocity/.Agent Context/Sprint 1/Sayan Multi-Surface and Oracle Delivery Pack/Sample JSON Schema/Claude Sonnet 4.6/oracle_template_expansion/oracle_template_seed_db_expanded.json`
4. Frozen runtime merge artifact
- `backend/oracle/oracle_runtime_codebook_merged.json`
- This is the deploy-safe merged corpus generated from the GPT and Claude packs.
- Production should prefer this file over the authoring packs whenever it is present.
## Corpus Status
The expanded corpora are materially useful and production-relevant.
### GPT 5.4 pack
- Chapters: `6`
- Subchapters: `24`
- Seed examples: `1200`
- Shape: already close to runtime needs
- Key field for examples: `seed_examples`
### Claude Sonnet 4.6 pack
- Chapters: `6`
- Subchapters: `24`
- Examples: `1200`
- Key field for examples: `examples`
- Shape: close, but requires normalization into runtime form
### Runtime fallback pack
- Chapters: `6`
- Subchapters: `24`
- Seed examples declared in metadata: `36`
- Seed examples physically present: lower than metadata
- Useful only as a fallback, not as the primary production corpus
## Super Codebook Policy
The current runtime now treats the codebook as a merged corpus rather than a single-file static DB.
The merge policy is:
1. Load GPT pack first.
2. Load Claude pack second.
3. Load runtime fallback pack last.
4. Normalize all example records to one runtime contract.
5. Deduplicate by:
- `subchapter_id`
- `template_name`
- `title`
6. Prefer in this order:
- GPT 5.4 examples
- canonical examples
- fallback records only when no richer example exists
This behavior is implemented in:
- `backend/oracle/codebook_service.py`
- `backend/scripts/build_oracle_runtime_codebook.py`
That file is now the effective runtime “super codebook” layer.
The generated runtime artifact currently contains the merged deployable corpus and is suitable for Linux-box deployment without requiring `.Agent Context` lookups at request time.
## What The Runtime Actually Uses
The runtime no longer needs to rely on hardcoded template lists in the Oracle v1 router.
The codebook service now provides:
- merged corpus loading
- search over both corpora
- normalized template listing
- best-match template synthesis from a user prompt
Primary runtime functions:
- `codebook_service.stats()`
- `codebook_service.list_templates(...)`
- `codebook_service.search_examples(prompt, limit=...)`
- `codebook_service.synthesize_template(prompt, data_shapes=...)`
## Current Supported Runtime Output Families
The expanded corpora include more component types than the current frontend renderer supports directly.
The current production-safe strategy is:
1. keep the full codebook corpus
2. map high-variety codebook component families into a smaller supported runtime renderer set
3. let Oracle render reliably today instead of failing on unsupported component types
### Supported runtime renderers today
- `textCanvas`
- `kpiTile`
- `barChart`
- `lineChart`
- `geoMap`
- `table`
- `pipelineBoard`
- `timeline`
- `activityStream`
- `errorNotice`
### Codebook-to-runtime normalization policy
Examples:
- `summary_card`, `summary_strip`, `metric_card_group`, `gauge_stack`
- mapped to `kpiTile`
- `lead_profile_card`, `property_card`, `data_table`, `leaderboard_table`, `matrix_grid`
- mapped to `table`
- `interaction_timeline`, `message_thread_summary`
- mapped to `activityStream`
- `heatmap`
- mapped to `geoMap`
This is deliberate. It keeps the UI stable while preserving the larger design vocabulary inside the template book.
## What Is Production-Ready Now
- Oracle template DB schema exists.
- Oracle template taxonomy APIs exist.
- Expanded GPT and Claude corpora are available locally in the repo.
- Runtime codebook merge and retrieval is implemented in `codebook_service.py`.
- A frozen merged runtime codebook now exists at `backend/oracle/oracle_runtime_codebook_merged.json`.
- Oracle v1 template listing/synthesis is being moved to the codebook-backed path.
- Oracle backend can now emit `textCanvas` planning blocks and the frontend has a renderer for them.
## What Is Still Constrained
- The runtime is not yet rendering all 47+ component families natively.
- The current system uses safe projection into supported runtime renderers.
- The template taxonomy routes existed, but were incorrectly using `user.role` as `tenant_id`; that has been corrected toward a fixed Oracle tenant policy.
- The lightweight fallback JSON DB remains incomplete and should not be treated as the main corpus.
## What Nemoclaw / Oracle Should Use For Retrieval
The correct order for Oracle prompt handling is:
1. Parse prompt.
2. Retrieve matching codebook examples from the merged corpus.
3. Build a safe retrieval plan against allowed DB datasets.
4. Query live CRM/intelligence/inventory datasets.
5. Build Oracle Canvas JSON with supported runtime component types.
6. Append to the existing canvas.
The codebook is not the final UI payload by itself.
It is the reference layer that guides:
- component family selection
- chapter/subchapter intent
- layout direction
- data-shape expectations
- policy hints
- backend contract hints
## Recommended Near-Term Hardening
1. Materialize a generated runtime codebook file if Linux deployment should not depend on `.Agent Context`.
2. Add explicit metadata versioning to the merged corpus.
3. Add a small admin endpoint for codebook stats and source summary.
4. Expand renderer coverage incrementally rather than trying to support all component families at once.
5. Add a batch offline export path if the team wants a frozen deploy artifact.
## Operator Bottom Line
The Oracle “book with chapters and JSON schema examples” is real and already useful.
The correct production interpretation is:
- DB schema and APIs are already present
- GPT and Claude expansion packs are the real high-value corpus
- `backend/oracle/codebook_service.py` is the runtime super-codebook layer
- Oracle should retrieve from this merged corpus first, then query live DB data, then render supported JSON Canvas components

View File

@@ -0,0 +1,382 @@
# Oracle Canvas Runtime and Ollama Batch Architecture
Date: 2026-04-19
Repo: `Project_Velocity`
## Purpose
This document defines the current production Oracle Canvas runtime path, the intended Ollama/Nemoclaw model-routing strategy, and the target batch-processing API shape the team can use if Velocity exposes Oracle or coding-agent capabilities through the local model stack.
This is the operator and engineering artifact. It exists to remove ambiguity.
## Runtime Topology
### Linux origin box
Role:
- hosts Velocity frontend
- hosts FastAPI backend
- hosts PostgreSQL and application services
- terminates app-origin requests under the public site path
Primary concern:
- application routing
- auth/session enforcement
- Oracle API execution
- CRM/intelligence/inventory data access
### GPU box
Role:
- hosts ComfyUI
- hosts heavy model runtime
- hosts Ollama / Nemoclaw execution plane
- stores runtime/model payloads on NVMe only
Primary concern:
- inference
- media generation
- model serving
- agent runtime workloads
### Ingress
Role:
- stable public entry for GPU-backed services
- hides raw GPU host details from application code
Non-negotiable rule:
- never wire Oracle or frontend code to a raw GPU public IP
## Oracle Canvas Current Execution Path
The production-safe Oracle path is now:
1. User submits prompt from Oracle Canvas frontend.
2. Frontend calls:
- `/api/oracle/v1/canvas-pages/{page_id}/prompts`
3. FastAPI Oracle orchestrator:
- loads user context
- retrieves best codebook matches
- builds a safe retrieval plan
- queries approved datasets from PostgreSQL
- produces JSON Canvas components
- commits a page revision
4. Frontend reloads/reconciles the canvas state and renders the new blocks.
## Current Oracle Backend Families
### Live today
- `/api/oracle/v1/me`
- `/api/oracle/v1/canvas-pages/{page_id}`
- `/api/oracle/v1/canvas-pages/{page_id}/prompts`
- `/api/oracle/v1/canvas-pages/{page_id}/forks`
- `/api/oracle/v1/canvas-pages/{page_id}/rollback`
- `/api/oracle/v1/canvas-pages/{page_id}/revisions`
- `/api/oracle/v1/component-templates`
- `/api/oracle/v1/component-templates/synthesize`
- `/api/oracle/v1/merge-requests`
- `/api/oracle/v1/merge-requests/{mr_id}/review`
- `/ws/oracle/canvas/{page_id}`
### Template taxonomy routes
- `/api/oracle/template-chapters`
- `/api/oracle/template-subchapters`
- `/api/oracle/component-templates`
- `/api/oracle/component-templates/{id}`
- `/api/oracle/component-templates/{id}/seed`
- `/api/oracle/component-templates/synthetic-jobs`
## Prompt Analysis Path
Oracle should not rely on one monolithic LLM call.
The correct production split is:
1. codebook retrieval
2. safe dataset selection
3. optional LLM planning
4. live DB fetch
5. JSON Canvas synthesis
6. revision commit
### Why this split is correct
- It reduces hallucination in UI structure.
- It keeps DB access whitelisted and auditable.
- It allows Oracle to keep working even when the LLM runtime is degraded.
- It keeps the Oracle Canvas deterministic enough for operational use.
## Current Model Routing Truth
### Present reality
The current Oracle backend has these runtime modes:
- `codebook_retrieval`
- preferred when the prompt clearly matches the Oracle template corpus
- `nemoclaw_hosted`
- used when `NEMOCLAW_API_URL` and `NEMOCLAW_API_KEY` are configured and reachable
- `deterministic_fallback`
- used when the LLM planner is unavailable
### What Nemoclaw currently means in code
Current dispatch abstraction:
- `backend/services/nemoclaw_runtime.py`
This file is still a light dispatch envelope, not a fully featured provider router.
### Recommended production provider stack
Provider order:
1. codebook retrieval layer
2. Nemoclaw planner endpoint
3. local Ollama fallback
4. deterministic fallback
## Recommended Ollama Model Policy
### Default planning / Oracle analysis model
Use a local reasoning-capable model behind Ollama when Nemoclaw is not available or when the team wants deterministic private execution.
Recommended candidate:
- `qwen3.6:35b-a3b`
Reason:
- strong agentic coding and structured reasoning profile
- local execution path through Ollama
- realistic fit for GPU-box-hosted inference
### Deployment command
Example:
```bash
ollama run qwen3.6:35b-a3b
```
### Routing rule
- Oracle prompt planning:
- small to medium prompts: local Ollama `qwen3.6:35b-a3b`
- larger multi-step analytical plans: Nemoclaw planner if available
- Coding-agent batch workloads:
- Ollama first for local/private jobs
- Nemoclaw for heavier orchestration when the runtime is healthy
## Runtime LLM API
The backend now exposes a first-class runtime LLM family:
- `GET /api/runtime/llm/providers`
- `POST /api/runtime/llm/chat`
- `POST /api/runtime/llm/batch`
- `GET /api/runtime/llm/jobs/{job_id}`
- `GET /api/runtime/llm/jobs/{job_id}/results`
This router is mounted in:
- `backend/api/routes_runtime_llm.py`
The current persistence path uses the existing canonical table:
- `workflow_agent_runs`
That means batch jobs are now persisted against the live Velocity schema without requiring a new table family before the first production rollout.
## Implemented Batch Processing API
This is no longer only a proposal. The following contract family exists now and can be used by Oracle or future coding-agent surfaces.
### Single request inference
- `POST /api/runtime/llm/chat`
Payload:
```json
{
"provider": "ollama",
"model": "qwen3.6:35b-a3b",
"system_prompt": "You are Oracle Planner.",
"messages": [
{ "role": "user", "content": "Build a CRM pipeline view for high-intent NRI buyers." }
],
"temperature": 0.2,
"response_format": "json"
}
```
### Batch submission
- `POST /api/runtime/llm/batch`
Payload:
```json
{
"provider": "ollama",
"model": "qwen3.6:35b-a3b",
"job_type": "oracle_canvas_planning",
"items": [
{
"request_id": "req_001",
"messages": [
{ "role": "user", "content": "Show overdue high-QD follow-ups." }
],
"response_format": "json"
},
{
"request_id": "req_002",
"messages": [
{ "role": "user", "content": "Build a Kolkata luxury inventory comparison block." }
],
"response_format": "json"
}
]
}
```
### Batch status
- `GET /api/runtime/llm/jobs/{job_id}`
Response:
```json
{
"job_id": "job_123",
"status": "running",
"provider": "ollama",
"model": "qwen3.6:35b-a3b",
"submitted_count": 2,
"completed_count": 1,
"failed_count": 0
}
```
### Batch results
- `GET /api/runtime/llm/jobs/{job_id}/results`
### Providers inventory
- `GET /api/runtime/llm/providers`
Example response:
```json
{
"providers": [
{
"id": "nemoclaw",
"status": "online",
"models": ["nemotron", "remote_default"]
},
{
"id": "ollama",
"status": "online",
"models": ["qwen3.6:35b-a3b"]
}
]
}
```
## Batch Processing Design Rules
1. Batch jobs must be persisted.
2. Batch items must be individually addressable by `request_id`.
3. Every batch job must record:
- provider
- model
- submitted payload hash
- start/end timestamps
- failure reason
4. Oracle must not block the main request thread for large batches.
5. Any DB writeback generated from a batch must go through approval tables, not direct execution.
## Oracle-Specific Runtime Policy
For Oracle Canvas, the LLM is not the source of truth for data.
The source of truth order is:
1. canonical DB tables
2. approved dataset projections
3. codebook template corpus
4. model planner
The model is only allowed to:
- classify intent
- choose likely component families
- propose layout direction
- summarize findings
The model is not allowed to:
- invent database facts
- bypass dataset allowlists
- emit arbitrary executable code into production rendering paths
## Current Production Readiness Assessment
### Ready now
- Oracle Canvas frontend-to-backend v1 route family
- codebook-backed template retrieval path
- safe DB execution gateway
- merge/fork/revision path
- deterministic fallback path
- runtime LLM provider inventory
- runtime single-chat execution
- runtime persisted batch execution through `workflow_agent_runs`
- Oracle planner fallback through the shared runtime LLM service
### Still needs explicit implementation if the team approves
- per-model selection UI in Catalyst or Oracle controls
- dedicated `runtime_llm_jobs` / `runtime_llm_job_items` tables if the team wants stronger audit/query ergonomics than `workflow_agent_runs`
- explicit Nemoclaw vs Ollama operator switch in a production admin surface
- richer provider health telemetry beyond simple reachability
## Recommended Next Build Steps
1. Add a dedicated runtime router:
- `backend/api/routes_runtime_llm.py`
2. Add DB tables:
- `runtime_llm_jobs`
- `runtime_llm_job_items`
- `runtime_llm_job_results`
3. Implement provider adapters:
- Nemoclaw adapter
- Ollama adapter
4. Expose provider status to Catalyst/Oracle settings surfaces.
5. Keep Oracle Canvas on the current codebook-first path even after LLM batching exists.
## Bottom Line
Oracle Canvas should be treated as a codebook-guided analytical surface with optional LLM planning, not as a raw chat-to-SQL toy.
The production-safe architecture is:
- Linux origin runs the application and DB access
- GPU box runs ComfyUI and model inference
- Oracle retrieves from the merged codebook first
- DB access stays whitelisted
- Nemoclaw and Ollama sit behind a documented provider interface
- batch processing is a separate runtime service contract, not an implicit side effect of the canvas endpoint

View File

@@ -0,0 +1,225 @@
# Oracle Template Seed DB — Expanded Examples v2.0
**Project:** Velocity — Multi-Surface Platform and Oracle Expansion
**Date:** 2026-04-19
**Owner:** Sayan (generated as part of Sprint 1 Oracle Template Taxonomy deliverable)
**Depends on:** `schema_extension_v2.sql`, `oracle_template_seed_db.json` (v1.0 canonical seeds)
**Total Examples:** 1,200 (50 per subchapter × 24 subchapters × 6 chapters)
---
## What This Is
This package expands the original 8-example Oracle Template Seed DB (`oracle_template_seed_db.json`) into a full 1,200-example corpus covering every subchapter in the Oracle template taxonomy. It is the implementation artifact for Sprint 1 deliverable **§2.4 — Oracle Template Taxonomy and Seed JSON Structure**.
Every example conforms to the established Velocity Oracle component contract shape. They are ready to be ingested into `oracle_template_seed_examples` via the `POST /api/oracle/component-templates/seed` route and consumed by Kimi Synthetic Data expansion jobs (`oracle_synthetic_generation_jobs`).
---
## File Layout
```
oracle_template_expansion/
├── README.md ← This file
├── oracle_template_seed_db_expanded.json ← Master combined file (all 1,200 examples)
├── sub-001-01_pricing_trends.json ← 50 examples
├── sub-001-02_demand_signals.json ← 50 examples
├── sub-001-03_competitive_landscape.json ← 50 examples
├── sub-001-04_location_index.json ← 50 examples
├── sub-002-01_lead_profile.json ← 50 examples
├── sub-002-02_qd_score.json ← 50 examples
├── sub-002-03_pipeline_health.json ← 50 examples
├── sub-002-04_engagement_history.json ← 50 examples
├── sub-003-01_call_summary.json ← 50 examples
├── sub-003-02_promise_tracker.json ← 50 examples
├── sub-003-03_whatsapp_thread.json ← 50 examples
├── sub-003-04_reminder_surface.json ← 50 examples
├── sub-004-01_property_card.json ← 50 examples
├── sub-004-02_availability_matrix.json ← 50 examples
├── sub-004-03_absorption_rate.json ← 50 examples
├── sub-004-04_inventory_comparison.json ← 50 examples
├── sub-005-01_showroom_traffic.json ← 50 examples
├── sub-005-02_team_performance.json ← 50 examples
├── sub-005-03_campaign_metrics.json ← 50 examples
├── sub-005-04_system_health.json ← 50 examples
├── sub-006-01_calendar_view.json ← 50 examples
├── sub-006-02_action_queue.json ← 50 examples
├── sub-006-03_follow-up_plan.json ← 50 examples
└── sub-006-04_reminder_cards.json ← 50 examples
```
---
## Chapter and Subchapter Map
| Chapter | Name | Subchapters | Examples |
|---------|------|-------------|----------|
| ch-001 | Market Intelligence | Pricing Trends, Demand Signals, Competitive Landscape, Location Index | 200 |
| ch-002 | Lead Intelligence | Lead Profile, QD Score, Pipeline Health, Engagement History | 200 |
| ch-003 | Communication Intelligence | Call Summary, Promise Tracker, WhatsApp Thread, Reminder Surface | 200 |
| ch-004 | Inventory Analytics | Property Card, Availability Matrix, Absorption Rate, Inventory Comparison | 200 |
| ch-005 | Operational Metrics | Showroom Traffic, Team Performance, Campaign Metrics, System Health | 200 |
| ch-006 | Calendar and Follow-Up | Calendar View, Action Queue, Follow-Up Plan, Reminder Cards | 200 |
| **Total** | | **24 subchapters** | **1,200** |
---
## Component Type Coverage
| componentType | Subchapters Used In | Approx Count |
|---------------|---------------------|--------------|
| `line_chart` | sub-001-01, sub-001-02, sub-004-03, sub-005-01, sub-005-02, sub-005-03 | ~120 |
| `bar_chart` | sub-001-02, sub-001-03, sub-004-03, sub-005-01, sub-005-02, sub-005-03 | ~100 |
| `area_chart` | sub-001-01, sub-004-03, sub-005-01 | ~45 |
| `heatmap` | sub-001-04, sub-005-01 | ~40 |
| `metric_card_group` | sub-002-02, sub-005-02, sub-005-03 | ~60 |
| `data_table` | sub-003-02 | ~50 |
| `property_card` | sub-004-01 | ~50 |
| `lead_profile_card` | sub-002-01 | ~50 |
| `communication_summary` | sub-003-01 | ~50 |
| `whatsapp_thread_viewer` | sub-003-03 | ~50 |
| `reminder_surface` | sub-003-04 | ~50 |
| `compact_alert_card` | sub-006-04 | ~50 |
| `action_queue` | sub-006-02 | ~50 |
| `calendar_view` | sub-006-01 | ~50 |
| `follow_up_plan` | sub-006-03 | ~50 |
| `availability_matrix` | sub-004-02 | ~50 |
| `inventory_comparison` | sub-004-04 | ~50 |
| `system_health_panel` | sub-005-04 | ~50 |
| `radar_chart`, `scatter_chart`, `funnel_chart`, others | various | ~135 |
---
## Example JSON Structure
Every example in every subchapter file follows this envelope:
```json
{
"example_id": "ex-0009",
"chapter_id": "ch-001",
"subchapter_id": "sub-001-01",
"title": "Component title string",
"quality_notes": "Human-readable note about this variant",
"is_canonical": true,
"template_name": "Subchapter Name — Template N",
"component_type": "line_chart",
"accepted_shapes": ["time_series"],
"example_json": {
"componentType": "line_chart",
"title": "...",
"subtitle": "...",
"dataSource": { ... },
"visualization": { ... },
"style": { ... },
"surfaceTargets": [ ... ]
}
}
```
The first example in each subchapter (`is_canonical: true`) is the recommended reference template for that subchapter.
---
## Design Language Compliance
All examples follow the established Velocity Oracle design language:
**Color palette** — All `accentColor` values come from the 10-color Velocity token set:
- `#2563EB` (primary blue), `#10B981` (emerald), `#F59E0B` (amber), `#EF4444` (red)
- `#8B5CF6` (violet), `#0EA5E9` (sky), `#EC4899` (pink), `#14B8A6` (teal)
- `#F97316` (orange), `#6366F1` (indigo)
**Semantic colors** — Status colors are fixed:
- Healthy / positive: `#10B981`
- Warning: `#F59E0B`
- Critical / negative: `#EF4444`
- Neutral / muted: `#94A3B8`
**Data source types** — Examples use only the contracted Oracle data source types:
- `inventory_aggregate`, `inventory_property`, `inventory_multi_property`
- `crm_lead`, `crm_aggregate`, `crm_engagement`, `crm_pipeline`, `crm_team_performance`
- `sentinel_qd`, `sentinel_live`, `sentinel_historical`
- `edge_communication_event`, `edge_memory_facts`
- `user_calendar_events`, `insight_recommendations`
- `nemoclaw_plan`, `catalyst_campaign`, `admin_health`, `competitive_intelligence`, `location_intelligence`
**Template variables** — Dynamic entity references use double-brace mustache syntax: `{{lead_id}}`, `{{property_id}}`, `{{agent_id}}`, `{{event_id}}`, `{{tenant_id}}`, `{{user_id}}`.
**Surface targets** — Every example declares `surfaceTargets` from the set: `webos`, `ipad`, `android_tablet`, `iphone_edge`, `android_phone_edge`.
---
## Permutation Logic
Each subchapter's 50 examples are generated by cycling through permutation combinations of:
- **District / developer / lead / agent names** — drawn from real Dubai market data (districts, developer names, nationality mix aligned to UAE CRM reality)
- **Time windows** — `7D`, `14D`, `30D`, `60D`, `90D`, `6M`, `12M`, `24M`, `YTD`, `QTD`
- **Chart types** — 46 types per subchapter appropriate to the data shape
- **Grouping dimensions** — e.g. by agent, district, property type, nationality
- **Layout variants** — e.g. `hero_with_stats`, `compact_card`, `list_row` for property cards
- **Action sets** — e.g. `accept / dismiss / snooze_1h` vs `call_now / send_whatsapp / dismiss`
- **Optional fields** — annotations, benchmarks, comparisons, sparklines toggled on/off across the 50
This means every subchapter has diverse examples covering different use cases while staying within the correct data contract for that component family.
---
## How to Ingest Into the Database
### Option 1 — Per-subchapter seed via Admin Surface
```bash
POST /api/oracle/component-templates/seed
Content-Type: application/json
{
"subchapter_id": "<uuid from oracle_template_subchapters>",
"examples": [ ... ] # paste the "examples" array from the per-subchapter file
}
```
### Option 2 — Bulk ingest via Kimi Synthetic Job
The master file (`oracle_template_seed_db_expanded.json`) is the correct input for `oracle_synthetic_generation_jobs`. Insert a job row referencing the template and let the background worker distribute examples into `oracle_template_seed_examples`.
### Option 3 — Direct SQL seed (dev/staging only)
```sql
INSERT INTO oracle_template_seed_examples
(template_id, chapter_id, subchapter_id, title, example_json, quality_notes, is_canonical)
VALUES
(...);
```
Map string chapter/subchapter IDs from the JSON against the UUID rows you insert via the migration in `schema_extension_v2.sql`.
---
## Known Caveats and Next Steps
- **`_meta.total_seed_examples` in v1 seed DB** — The original `oracle_template_seed_db.json` reports `36` in `_meta.total_seed_examples` but only contains 8 examples. This mismatch was noted in `delivery_log.md`. This expansion does not patch the v1 file; correct it separately before merging both corpora.
- **Kimi expansion** — These 1,200 examples are the **seed corpus**, not the synthetic expansion. Run `oracle_synthetic_generation_jobs` against published templates to generate the larger training/demo sets described in `KIMI_SYNTHETIC_DATA_DOWNSTREAM_PLAN.md`.
- **UUID mapping** — The `chapter_id` and `subchapter_id` fields in these files use the string keys from the v1 seed DB (`ch-001`, `sub-001-01`). Your migration script must map these to the PostgreSQL UUIDs inserted by `schema_extension_v2.sql`.
- **Template IDs** — `example_json.template_name` is a human label. Actual `template_id` UUIDs are assigned at ingestion time against `oracle_component_templates`.
---
## Generation Script
The generator script is included at `generate_examples.py` in the repo root (outside this zip). It is reproducible — re-running it with the same seed logic will produce the same 1,200 examples.
---
*Generated by Project Velocity platform tooling · 2026-04-19*

View File

@@ -0,0 +1,82 @@
# Oracle Canvas JSON Expansion Pack
This pack expands the current Oracle template seed library into a reviewable example set with **50 examples per subchapter** across all **24 subchapters**.
## What is inside
- `db/oracle_template_seed_db_expanded_v1.pretty.json`
Full expanded master DB with chapter taxonomy and all **1200** examples.
- `db/oracle_template_seed_db_expanded_v1.min.json`
Minified version of the same master DB.
- `examples/`
Chapter-by-chapter split files. Each subchapter file contains exactly **50** examples.
- `manifests/template_family_catalog.json`
Component families, accepted shapes, policy tags, and backend hints per subchapter.
- `manifests/subchapter_index.json`
Index of all generated files.
- `manifests/validation_report.json`
Validation summary for counts and ID uniqueness.
- `csv/subchapter_example_counts.csv`
Spreadsheet-friendly count manifest.
## Source alignment
This pack was generated against the current repo direction and constraints:
- FastAPI backend remains canonical.
- Oracle remains the analytical center.
- Mobile edge surfaces remain narrow, bounded control surfaces.
- Communication intelligence examples stay inside supported channels and provenance-aware capture modes.
- Admin examples only model bounded and auditable actions.
- The expanded examples follow the live-data-first / no-mock direction from the delivery log.
## Important correction carried forward
The source seed DB metadata currently reports `total_seed_examples: 36`, but the source file actually contains **8** canonical seed examples.
This expansion pack corrects the count in its own metadata and preserves the existing canonical examples inside the 50-example-per-subchapter allocation wherever they already existed.
## Design language used
Common policy tags applied through the pack:
- `backend_owned`
- `live_data_first`
- `no_mock_fallback`
- `surface_safe`
Additional policy tags appear per subchapter where relevant, including:
- `supported_channel_only`
- `provider_provenance_required`
- `bounded_admin_actions`
- `confirmation_required_for_writeback`
- `business_whatsapp_scope`
- `nemoclaw_suggested`
## Notes on IDs
The source taxonomy uses symbolic IDs such as `ch-001` and `sub-001-01`.
This pack preserves those symbolic IDs for review and lineage consistency.
Generated example IDs use deterministic `exg-*` identifiers. Existing canonical example IDs from the source file are preserved.
## Suggested use
1. Review examples subchapter-by-subchapter from `examples/`.
2. Use `template_family_catalog.json` to decide which component families should become formal reusable templates.
3. Use the master DB JSON once you are ready to merge the chosen examples into the Oracle seed library.
4. Keep the metadata notes about symbolic taxonomy IDs in mind when preparing any DB import step against UUID-backed SQL tables.
## Counts
- Chapters: 6
- Subchapters: 24
- Total examples: 1200
- Canonical carried forward: 8
- Generated additions: 1192

View File

@@ -0,0 +1,25 @@
chapter_id,chapter_name,subchapter_id,subchapter_name,example_count,file
ch-001,Market Intelligence,sub-001-01,Pricing Trends,50,examples/ch-001_market-intelligence/sub-001-01_pricing-trends.json
ch-001,Market Intelligence,sub-001-02,Demand Signals,50,examples/ch-001_market-intelligence/sub-001-02_demand-signals.json
ch-001,Market Intelligence,sub-001-03,Competitive Landscape,50,examples/ch-001_market-intelligence/sub-001-03_competitive-landscape.json
ch-001,Market Intelligence,sub-001-04,Location Index,50,examples/ch-001_market-intelligence/sub-001-04_location-index.json
ch-002,Lead Intelligence,sub-002-01,Lead Profile,50,examples/ch-002_lead-intelligence/sub-002-01_lead-profile.json
ch-002,Lead Intelligence,sub-002-02,QD Score,50,examples/ch-002_lead-intelligence/sub-002-02_qd-score.json
ch-002,Lead Intelligence,sub-002-03,Pipeline Health,50,examples/ch-002_lead-intelligence/sub-002-03_pipeline-health.json
ch-002,Lead Intelligence,sub-002-04,Engagement History,50,examples/ch-002_lead-intelligence/sub-002-04_engagement-history.json
ch-003,Communication Intelligence,sub-003-01,Call Summary,50,examples/ch-003_communication-intelligence/sub-003-01_call-summary.json
ch-003,Communication Intelligence,sub-003-02,Promise Tracker,50,examples/ch-003_communication-intelligence/sub-003-02_promise-tracker.json
ch-003,Communication Intelligence,sub-003-03,WhatsApp Thread,50,examples/ch-003_communication-intelligence/sub-003-03_whatsapp-thread.json
ch-003,Communication Intelligence,sub-003-04,Reminder Surface,50,examples/ch-003_communication-intelligence/sub-003-04_reminder-surface.json
ch-004,Inventory Analytics,sub-004-01,Property Card,50,examples/ch-004_inventory-analytics/sub-004-01_property-card.json
ch-004,Inventory Analytics,sub-004-02,Availability Matrix,50,examples/ch-004_inventory-analytics/sub-004-02_availability-matrix.json
ch-004,Inventory Analytics,sub-004-03,Absorption Rate,50,examples/ch-004_inventory-analytics/sub-004-03_absorption-rate.json
ch-004,Inventory Analytics,sub-004-04,Inventory Comparison,50,examples/ch-004_inventory-analytics/sub-004-04_inventory-comparison.json
ch-005,Operational Metrics,sub-005-01,Showroom Traffic,50,examples/ch-005_operational-metrics/sub-005-01_showroom-traffic.json
ch-005,Operational Metrics,sub-005-02,Team Performance,50,examples/ch-005_operational-metrics/sub-005-02_team-performance.json
ch-005,Operational Metrics,sub-005-03,Campaign Metrics,50,examples/ch-005_operational-metrics/sub-005-03_campaign-metrics.json
ch-005,Operational Metrics,sub-005-04,System Health,50,examples/ch-005_operational-metrics/sub-005-04_system-health.json
ch-006,Calendar and Follow-Up,sub-006-01,Calendar View,50,examples/ch-006_calendar-and-follow-up/sub-006-01_calendar-view.json
ch-006,Calendar and Follow-Up,sub-006-02,Action Queue,50,examples/ch-006_calendar-and-follow-up/sub-006-02_action-queue.json
ch-006,Calendar and Follow-Up,sub-006-03,Follow-Up Plan,50,examples/ch-006_calendar-and-follow-up/sub-006-03_follow-up-plan.json
ch-006,Calendar and Follow-Up,sub-006-04,Reminder Cards,50,examples/ch-006_calendar-and-follow-up/sub-006-04_reminder-cards.json
1 chapter_id chapter_name subchapter_id subchapter_name example_count file
2 ch-001 Market Intelligence sub-001-01 Pricing Trends 50 examples/ch-001_market-intelligence/sub-001-01_pricing-trends.json
3 ch-001 Market Intelligence sub-001-02 Demand Signals 50 examples/ch-001_market-intelligence/sub-001-02_demand-signals.json
4 ch-001 Market Intelligence sub-001-03 Competitive Landscape 50 examples/ch-001_market-intelligence/sub-001-03_competitive-landscape.json
5 ch-001 Market Intelligence sub-001-04 Location Index 50 examples/ch-001_market-intelligence/sub-001-04_location-index.json
6 ch-002 Lead Intelligence sub-002-01 Lead Profile 50 examples/ch-002_lead-intelligence/sub-002-01_lead-profile.json
7 ch-002 Lead Intelligence sub-002-02 QD Score 50 examples/ch-002_lead-intelligence/sub-002-02_qd-score.json
8 ch-002 Lead Intelligence sub-002-03 Pipeline Health 50 examples/ch-002_lead-intelligence/sub-002-03_pipeline-health.json
9 ch-002 Lead Intelligence sub-002-04 Engagement History 50 examples/ch-002_lead-intelligence/sub-002-04_engagement-history.json
10 ch-003 Communication Intelligence sub-003-01 Call Summary 50 examples/ch-003_communication-intelligence/sub-003-01_call-summary.json
11 ch-003 Communication Intelligence sub-003-02 Promise Tracker 50 examples/ch-003_communication-intelligence/sub-003-02_promise-tracker.json
12 ch-003 Communication Intelligence sub-003-03 WhatsApp Thread 50 examples/ch-003_communication-intelligence/sub-003-03_whatsapp-thread.json
13 ch-003 Communication Intelligence sub-003-04 Reminder Surface 50 examples/ch-003_communication-intelligence/sub-003-04_reminder-surface.json
14 ch-004 Inventory Analytics sub-004-01 Property Card 50 examples/ch-004_inventory-analytics/sub-004-01_property-card.json
15 ch-004 Inventory Analytics sub-004-02 Availability Matrix 50 examples/ch-004_inventory-analytics/sub-004-02_availability-matrix.json
16 ch-004 Inventory Analytics sub-004-03 Absorption Rate 50 examples/ch-004_inventory-analytics/sub-004-03_absorption-rate.json
17 ch-004 Inventory Analytics sub-004-04 Inventory Comparison 50 examples/ch-004_inventory-analytics/sub-004-04_inventory-comparison.json
18 ch-005 Operational Metrics sub-005-01 Showroom Traffic 50 examples/ch-005_operational-metrics/sub-005-01_showroom-traffic.json
19 ch-005 Operational Metrics sub-005-02 Team Performance 50 examples/ch-005_operational-metrics/sub-005-02_team-performance.json
20 ch-005 Operational Metrics sub-005-03 Campaign Metrics 50 examples/ch-005_operational-metrics/sub-005-03_campaign-metrics.json
21 ch-005 Operational Metrics sub-005-04 System Health 50 examples/ch-005_operational-metrics/sub-005-04_system-health.json
22 ch-006 Calendar and Follow-Up sub-006-01 Calendar View 50 examples/ch-006_calendar-and-follow-up/sub-006-01_calendar-view.json
23 ch-006 Calendar and Follow-Up sub-006-02 Action Queue 50 examples/ch-006_calendar-and-follow-up/sub-006-02_action-queue.json
24 ch-006 Calendar and Follow-Up sub-006-03 Follow-Up Plan 50 examples/ch-006_calendar-and-follow-up/sub-006-03_follow-up-plan.json
25 ch-006 Calendar and Follow-Up sub-006-04 Reminder Cards 50 examples/ch-006_calendar-and-follow-up/sub-006-04_reminder-cards.json

View File

@@ -0,0 +1,194 @@
[
{
"chapter_id": "ch-001",
"chapter_name": "Market Intelligence",
"subchapter_id": "sub-001-01",
"subchapter_name": "Pricing Trends",
"example_count": 50,
"file": "examples/ch-001_market-intelligence/sub-001-01_pricing-trends.json"
},
{
"chapter_id": "ch-001",
"chapter_name": "Market Intelligence",
"subchapter_id": "sub-001-02",
"subchapter_name": "Demand Signals",
"example_count": 50,
"file": "examples/ch-001_market-intelligence/sub-001-02_demand-signals.json"
},
{
"chapter_id": "ch-001",
"chapter_name": "Market Intelligence",
"subchapter_id": "sub-001-03",
"subchapter_name": "Competitive Landscape",
"example_count": 50,
"file": "examples/ch-001_market-intelligence/sub-001-03_competitive-landscape.json"
},
{
"chapter_id": "ch-001",
"chapter_name": "Market Intelligence",
"subchapter_id": "sub-001-04",
"subchapter_name": "Location Index",
"example_count": 50,
"file": "examples/ch-001_market-intelligence/sub-001-04_location-index.json"
},
{
"chapter_id": "ch-002",
"chapter_name": "Lead Intelligence",
"subchapter_id": "sub-002-01",
"subchapter_name": "Lead Profile",
"example_count": 50,
"file": "examples/ch-002_lead-intelligence/sub-002-01_lead-profile.json"
},
{
"chapter_id": "ch-002",
"chapter_name": "Lead Intelligence",
"subchapter_id": "sub-002-02",
"subchapter_name": "QD Score",
"example_count": 50,
"file": "examples/ch-002_lead-intelligence/sub-002-02_qd-score.json"
},
{
"chapter_id": "ch-002",
"chapter_name": "Lead Intelligence",
"subchapter_id": "sub-002-03",
"subchapter_name": "Pipeline Health",
"example_count": 50,
"file": "examples/ch-002_lead-intelligence/sub-002-03_pipeline-health.json"
},
{
"chapter_id": "ch-002",
"chapter_name": "Lead Intelligence",
"subchapter_id": "sub-002-04",
"subchapter_name": "Engagement History",
"example_count": 50,
"file": "examples/ch-002_lead-intelligence/sub-002-04_engagement-history.json"
},
{
"chapter_id": "ch-003",
"chapter_name": "Communication Intelligence",
"subchapter_id": "sub-003-01",
"subchapter_name": "Call Summary",
"example_count": 50,
"file": "examples/ch-003_communication-intelligence/sub-003-01_call-summary.json"
},
{
"chapter_id": "ch-003",
"chapter_name": "Communication Intelligence",
"subchapter_id": "sub-003-02",
"subchapter_name": "Promise Tracker",
"example_count": 50,
"file": "examples/ch-003_communication-intelligence/sub-003-02_promise-tracker.json"
},
{
"chapter_id": "ch-003",
"chapter_name": "Communication Intelligence",
"subchapter_id": "sub-003-03",
"subchapter_name": "WhatsApp Thread",
"example_count": 50,
"file": "examples/ch-003_communication-intelligence/sub-003-03_whatsapp-thread.json"
},
{
"chapter_id": "ch-003",
"chapter_name": "Communication Intelligence",
"subchapter_id": "sub-003-04",
"subchapter_name": "Reminder Surface",
"example_count": 50,
"file": "examples/ch-003_communication-intelligence/sub-003-04_reminder-surface.json"
},
{
"chapter_id": "ch-004",
"chapter_name": "Inventory Analytics",
"subchapter_id": "sub-004-01",
"subchapter_name": "Property Card",
"example_count": 50,
"file": "examples/ch-004_inventory-analytics/sub-004-01_property-card.json"
},
{
"chapter_id": "ch-004",
"chapter_name": "Inventory Analytics",
"subchapter_id": "sub-004-02",
"subchapter_name": "Availability Matrix",
"example_count": 50,
"file": "examples/ch-004_inventory-analytics/sub-004-02_availability-matrix.json"
},
{
"chapter_id": "ch-004",
"chapter_name": "Inventory Analytics",
"subchapter_id": "sub-004-03",
"subchapter_name": "Absorption Rate",
"example_count": 50,
"file": "examples/ch-004_inventory-analytics/sub-004-03_absorption-rate.json"
},
{
"chapter_id": "ch-004",
"chapter_name": "Inventory Analytics",
"subchapter_id": "sub-004-04",
"subchapter_name": "Inventory Comparison",
"example_count": 50,
"file": "examples/ch-004_inventory-analytics/sub-004-04_inventory-comparison.json"
},
{
"chapter_id": "ch-005",
"chapter_name": "Operational Metrics",
"subchapter_id": "sub-005-01",
"subchapter_name": "Showroom Traffic",
"example_count": 50,
"file": "examples/ch-005_operational-metrics/sub-005-01_showroom-traffic.json"
},
{
"chapter_id": "ch-005",
"chapter_name": "Operational Metrics",
"subchapter_id": "sub-005-02",
"subchapter_name": "Team Performance",
"example_count": 50,
"file": "examples/ch-005_operational-metrics/sub-005-02_team-performance.json"
},
{
"chapter_id": "ch-005",
"chapter_name": "Operational Metrics",
"subchapter_id": "sub-005-03",
"subchapter_name": "Campaign Metrics",
"example_count": 50,
"file": "examples/ch-005_operational-metrics/sub-005-03_campaign-metrics.json"
},
{
"chapter_id": "ch-005",
"chapter_name": "Operational Metrics",
"subchapter_id": "sub-005-04",
"subchapter_name": "System Health",
"example_count": 50,
"file": "examples/ch-005_operational-metrics/sub-005-04_system-health.json"
},
{
"chapter_id": "ch-006",
"chapter_name": "Calendar and Follow-Up",
"subchapter_id": "sub-006-01",
"subchapter_name": "Calendar View",
"example_count": 50,
"file": "examples/ch-006_calendar-and-follow-up/sub-006-01_calendar-view.json"
},
{
"chapter_id": "ch-006",
"chapter_name": "Calendar and Follow-Up",
"subchapter_id": "sub-006-02",
"subchapter_name": "Action Queue",
"example_count": 50,
"file": "examples/ch-006_calendar-and-follow-up/sub-006-02_action-queue.json"
},
{
"chapter_id": "ch-006",
"chapter_name": "Calendar and Follow-Up",
"subchapter_id": "sub-006-03",
"subchapter_name": "Follow-Up Plan",
"example_count": 50,
"file": "examples/ch-006_calendar-and-follow-up/sub-006-03_follow-up-plan.json"
},
{
"chapter_id": "ch-006",
"chapter_name": "Calendar and Follow-Up",
"subchapter_id": "sub-006-04",
"subchapter_name": "Reminder Cards",
"example_count": 50,
"file": "examples/ch-006_calendar-and-follow-up/sub-006-04_reminder-cards.json"
}
]

View File

@@ -0,0 +1,931 @@
[
{
"chapter_id": "ch-001",
"chapter_name": "Market Intelligence",
"subchapter_id": "sub-001-01",
"subchapter_name": "Pricing Trends",
"component_types": [
"area_chart",
"benchmark_band_chart",
"dual_axis_chart",
"line_chart",
"sparkline_metric"
],
"accepted_shapes": [
"comparative_time_series",
"district_benchmark",
"dual_metric_time_series",
"segment_snapshot",
"time_series"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe"
],
"route_family": "oracle",
"primary_tables": [
"oracle_component_templates",
"inventory_properties"
]
},
{
"chapter_id": "ch-001",
"chapter_name": "Market Intelligence",
"subchapter_id": "sub-001-02",
"subchapter_name": "Demand Signals",
"component_types": [
"bar_chart",
"funnel_chart",
"heatmap",
"line_chart",
"metric_card_group"
],
"accepted_shapes": [
"categorical_count",
"conversion_funnel",
"demand_snapshot",
"intent_time_series",
"zone_time_matrix"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe"
],
"route_family": "oracle",
"primary_tables": [
"oracle_component_templates",
"inventory_properties"
]
},
{
"chapter_id": "ch-001",
"chapter_name": "Market Intelligence",
"subchapter_id": "sub-001-03",
"subchapter_name": "Competitive Landscape",
"component_types": [
"bar_chart",
"comparison_table",
"grouped_bar_chart",
"matrix_grid",
"scorecard_panel"
],
"accepted_shapes": [
"competitive_matrix",
"competitive_scorecard",
"developer_benchmark",
"developer_pipeline",
"unit_mix_distribution"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe"
],
"route_family": "oracle",
"primary_tables": [
"oracle_component_templates",
"inventory_properties"
]
},
{
"chapter_id": "ch-001",
"chapter_name": "Market Intelligence",
"subchapter_id": "sub-001-04",
"subchapter_name": "Location Index",
"component_types": [
"data_table",
"map_score_card",
"radar_chart",
"scorecard_panel",
"timeline_chart"
],
"accepted_shapes": [
"district_ranking",
"infrastructure_readiness",
"location_index",
"location_map_summary",
"proximity_profile"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe"
],
"route_family": "oracle",
"primary_tables": [
"oracle_component_templates",
"inventory_properties"
]
},
{
"chapter_id": "ch-002",
"chapter_name": "Lead Intelligence",
"subchapter_id": "sub-002-01",
"subchapter_name": "Lead Profile",
"component_types": [
"affinity_card",
"cluster_card",
"lead_profile_card",
"metric_card_group",
"summary_strip"
],
"accepted_shapes": [
"district_affinity",
"lead_preferences",
"lead_profile",
"lead_summary",
"persona_cluster"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet",
"iphone_edge",
"android_phone_edge"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe"
],
"route_family": "crm",
"primary_tables": [
"leads",
"sentinel_scores"
]
},
{
"chapter_id": "ch-002",
"chapter_name": "Lead Intelligence",
"subchapter_id": "sub-002-02",
"subchapter_name": "QD Score",
"component_types": [
"bar_chart",
"gauge_stack",
"line_chart",
"matrix_grid",
"metric_card_group"
],
"accepted_shapes": [
"qd_matrix",
"qd_peer_benchmark",
"qd_score_breakdown",
"qd_snapshot",
"qd_trend"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet",
"iphone_edge",
"android_phone_edge"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe"
],
"route_family": "crm",
"primary_tables": [
"leads",
"sentinel_scores"
]
},
{
"chapter_id": "ch-002",
"chapter_name": "Lead Intelligence",
"subchapter_id": "sub-002-03",
"subchapter_name": "Pipeline Health",
"component_types": [
"data_table",
"funnel_chart",
"heatmap",
"metric_card_group",
"stacked_bar_chart"
],
"accepted_shapes": [
"pipeline_distribution",
"pipeline_forecast",
"pipeline_probability_matrix",
"pipeline_stalls",
"pipeline_velocity"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe"
],
"route_family": "crm",
"primary_tables": [
"leads",
"sentinel_scores"
]
},
{
"chapter_id": "ch-002",
"chapter_name": "Lead Intelligence",
"subchapter_id": "sub-002-04",
"subchapter_name": "Engagement History",
"component_types": [
"data_table",
"heatmap",
"interaction_timeline",
"line_chart",
"metric_card_group"
],
"accepted_shapes": [
"channel_preference_trend",
"content_interaction_log",
"engagement_heatmap",
"engagement_snapshot",
"engagement_timeline"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet",
"iphone_edge",
"android_phone_edge"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe"
],
"route_family": "crm",
"primary_tables": [
"leads",
"sentinel_scores"
]
},
{
"chapter_id": "ch-003",
"chapter_name": "Communication Intelligence",
"subchapter_id": "sub-003-01",
"subchapter_name": "Call Summary",
"component_types": [
"communication_summary",
"data_table",
"metric_card_group",
"next_best_action_card",
"transcript_highlight_card"
],
"accepted_shapes": [
"call_follow_up_snapshot",
"call_outcome_snapshot",
"speaker_highlights",
"transcript_segments",
"transcript_summary"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet",
"iphone_edge",
"android_phone_edge"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe",
"provider_provenance_required",
"supported_channel_only"
],
"route_family": "mobile-edge",
"primary_tables": [
"edge_communication_events",
"edge_communication_memory_facts",
"edge_transcription_jobs",
"edge_transcript_segments"
]
},
{
"chapter_id": "ch-003",
"chapter_name": "Communication Intelligence",
"subchapter_id": "sub-003-02",
"subchapter_name": "Promise Tracker",
"component_types": [
"checklist_board",
"compact_alert_card",
"data_table",
"matrix_grid",
"summary_card"
],
"accepted_shapes": [
"communication_facts",
"decision_maker_summary",
"follow_up_checklist",
"overdue_commitments",
"promise_confidence_matrix"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet",
"iphone_edge",
"android_phone_edge"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe",
"reviewable_writebacks",
"communication_memory"
],
"route_family": "mobile-edge",
"primary_tables": [
"edge_communication_events",
"edge_communication_memory_facts",
"edge_transcription_jobs",
"edge_transcript_segments"
]
},
{
"chapter_id": "ch-003",
"chapter_name": "Communication Intelligence",
"subchapter_id": "sub-003-03",
"subchapter_name": "WhatsApp Thread",
"component_types": [
"data_table",
"line_chart",
"message_thread_summary",
"metric_card_group",
"summary_card"
],
"accepted_shapes": [
"message_action_queue",
"message_sentiment_timeline",
"operator_handover",
"thread_sla_snapshot",
"whatsapp_thread"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet",
"iphone_edge",
"android_phone_edge"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe",
"supported_channel_only",
"business_whatsapp_scope"
],
"route_family": "mobile-edge",
"primary_tables": [
"edge_communication_events",
"edge_communication_memory_facts",
"edge_transcription_jobs",
"edge_transcript_segments"
]
},
{
"chapter_id": "ch-003",
"chapter_name": "Communication Intelligence",
"subchapter_id": "sub-003-04",
"subchapter_name": "Reminder Surface",
"component_types": [
"action_strip",
"alert_queue",
"compact_alert_card",
"matrix_grid",
"next_best_action_card"
],
"accepted_shapes": [
"calendar_suggestion",
"insight_recommendation",
"next_best_action",
"recommendation_confidence",
"reminder_queue"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet",
"iphone_edge",
"android_phone_edge"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe",
"bounded_actions",
"nemoclaw_suggested"
],
"route_family": "mobile-edge",
"primary_tables": [
"edge_communication_events",
"edge_communication_memory_facts",
"edge_transcription_jobs",
"edge_transcript_segments"
]
},
{
"chapter_id": "ch-004",
"chapter_name": "Inventory Analytics",
"subchapter_id": "sub-004-01",
"subchapter_name": "Property Card",
"component_types": [
"bar_chart",
"cta_card",
"metric_card_group",
"property_card",
"summary_card"
],
"accepted_shapes": [
"inventory_property",
"property_cta",
"property_media_summary",
"property_pricing_snapshot",
"unit_mix_distribution"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet",
"iphone_edge",
"android_phone_edge"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe"
],
"route_family": "inventory",
"primary_tables": [
"inventory_properties",
"inventory_media_assets",
"inventory_import_batches"
]
},
{
"chapter_id": "ch-004",
"chapter_name": "Inventory Analytics",
"subchapter_id": "sub-004-02",
"subchapter_name": "Availability Matrix",
"component_types": [
"data_table",
"heatmap",
"matrix_grid",
"metric_card_group",
"stacked_bar_chart"
],
"accepted_shapes": [
"availability_heatmap",
"availability_matrix",
"bed_type_snapshot",
"price_band_grid",
"release_phase_distribution"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe"
],
"route_family": "inventory",
"primary_tables": [
"inventory_properties",
"inventory_media_assets",
"inventory_import_batches"
]
},
{
"chapter_id": "ch-004",
"chapter_name": "Inventory Analytics",
"subchapter_id": "sub-004-03",
"subchapter_name": "Absorption Rate",
"component_types": [
"bar_chart",
"dual_axis_chart",
"line_chart",
"matrix_grid",
"sparkline_metric"
],
"accepted_shapes": [
"developer_velocity_ranking",
"handover_absorption_matrix",
"rolling_velocity_snapshot",
"sales_velocity",
"velocity_supply_overlay"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe"
],
"route_family": "inventory",
"primary_tables": [
"inventory_properties",
"inventory_media_assets",
"inventory_import_batches"
]
},
{
"chapter_id": "ch-004",
"chapter_name": "Inventory Analytics",
"subchapter_id": "sub-004-04",
"subchapter_name": "Inventory Comparison",
"component_types": [
"comparison_table",
"metric_card_group",
"radar_chart",
"side_by_side_comparison",
"summary_strip"
],
"accepted_shapes": [
"amenity_comparison",
"inventory_comparison",
"operator_choice_summary",
"property_metric_comparison",
"sales_readiness_comparison"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe"
],
"route_family": "inventory",
"primary_tables": [
"inventory_properties",
"inventory_media_assets",
"inventory_import_batches"
]
},
{
"chapter_id": "ch-005",
"chapter_name": "Operational Metrics",
"subchapter_id": "sub-005-01",
"subchapter_name": "Showroom Traffic",
"component_types": [
"bar_chart",
"dual_axis_chart",
"heatmap",
"metric_card_group",
"summary_strip"
],
"accepted_shapes": [
"live_traffic_snapshot",
"peak_hour_distribution",
"visitor_flow_overlay",
"zone_summary",
"zone_time_matrix"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe"
],
"route_family": "admin-surface",
"primary_tables": [
"surface_sessions",
"admin_action_events",
"oracle_synthetic_generation_jobs",
"inventory_import_batches",
"edge_transcription_jobs"
]
},
{
"chapter_id": "ch-005",
"chapter_name": "Operational Metrics",
"subchapter_id": "sub-005-02",
"subchapter_name": "Team Performance",
"component_types": [
"compact_alert_card",
"dual_axis_chart",
"leaderboard_table",
"matrix_grid",
"metric_card_group"
],
"accepted_shapes": [
"activity_conversion_overlay",
"agent_leaderboard",
"follow_up_compliance_matrix",
"quality_drift_alert",
"team_performance_snapshot"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe"
],
"route_family": "admin-surface",
"primary_tables": [
"surface_sessions",
"admin_action_events",
"oracle_synthetic_generation_jobs",
"inventory_import_batches",
"edge_transcription_jobs"
]
},
{
"chapter_id": "ch-005",
"chapter_name": "Operational Metrics",
"subchapter_id": "sub-005-03",
"subchapter_name": "Campaign Metrics",
"component_types": [
"bar_chart",
"line_chart",
"metric_card_group",
"scatter_plot",
"summary_card"
],
"accepted_shapes": [
"campaign_attribution",
"campaign_efficiency",
"campaign_roas_trend",
"campaign_snapshot",
"channel_comparison"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe"
],
"route_family": "admin-surface",
"primary_tables": [
"campaign_metrics",
"lead_events"
]
},
{
"chapter_id": "ch-005",
"chapter_name": "Operational Metrics",
"subchapter_id": "sub-005-04",
"subchapter_name": "System Health",
"component_types": [
"action_panel",
"data_table",
"line_chart",
"metric_card_group",
"system_health_panel"
],
"accepted_shapes": [
"bounded_admin_actions",
"latency_time_series",
"queue_status",
"surface_session_snapshot",
"system_health_snapshot"
],
"surface_targets": [
"webos"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe",
"bounded_admin_actions",
"audit_ready"
],
"route_family": "admin-surface",
"primary_tables": [
"admin_action_events",
"oracle_synthetic_generation_jobs",
"inventory_import_batches",
"edge_transcription_jobs",
"surface_sessions"
]
},
{
"chapter_id": "ch-006",
"chapter_name": "Calendar and Follow-Up",
"subchapter_id": "sub-006-01",
"subchapter_name": "Calendar View",
"component_types": [
"calendar_agenda",
"calendar_heatmap",
"data_table",
"donut_chart",
"summary_strip"
],
"accepted_shapes": [
"calendar_density",
"calendar_mix",
"calendar_strip",
"calendar_suggestions",
"user_calendar_agenda"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet",
"iphone_edge",
"android_phone_edge"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe",
"user_calendar_scope",
"confirmation_required_for_writeback"
],
"route_family": "mobile-edge",
"primary_tables": [
"user_calendar_events",
"insight_recommendations",
"edge_communication_events"
]
},
{
"chapter_id": "ch-006",
"chapter_name": "Calendar and Follow-Up",
"subchapter_id": "sub-006-02",
"subchapter_name": "Action Queue",
"component_types": [
"action_strip",
"bar_chart",
"donut_chart",
"matrix_grid",
"prioritized_task_list"
],
"accepted_shapes": [
"action_status_mix",
"action_type_distribution",
"agent_action_queue",
"edge_action_strip",
"queue_urgency_matrix"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet",
"iphone_edge",
"android_phone_edge"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe",
"bounded_actions",
"operator_queue"
],
"route_family": "mobile-edge",
"primary_tables": [
"user_calendar_events",
"insight_recommendations",
"edge_communication_events"
]
},
{
"chapter_id": "ch-006",
"chapter_name": "Calendar and Follow-Up",
"subchapter_id": "sub-006-03",
"subchapter_name": "Follow-Up Plan",
"component_types": [
"compact_alert_card",
"data_table",
"structured_plan_card",
"summary_card",
"timeline_chart"
],
"accepted_shapes": [
"escalation_plan",
"follow_up_cadence",
"follow_up_edge_card",
"follow_up_plan",
"follow_up_timeline"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet",
"iphone_edge",
"android_phone_edge"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe",
"nemoclaw_suggested",
"confirmation_required_for_writeback"
],
"route_family": "mobile-edge",
"primary_tables": [
"user_calendar_events",
"insight_recommendations",
"edge_communication_events"
]
},
{
"chapter_id": "ch-006",
"chapter_name": "Calendar and Follow-Up",
"subchapter_id": "sub-006-04",
"subchapter_name": "Reminder Cards",
"component_types": [
"compact_alert_card",
"kanban_board",
"matrix_grid",
"stacked_reminder_cards",
"summary_strip"
],
"accepted_shapes": [
"insight_recommendation",
"reminder_priority_matrix",
"reminder_snooze_board",
"reminder_stack",
"reminder_strip"
],
"surface_targets": [
"webos",
"ipad",
"android_tablet",
"iphone_edge",
"android_phone_edge"
],
"policy_tags": [
"backend_owned",
"live_data_first",
"no_mock_fallback",
"surface_safe",
"bounded_actions",
"surface_agnostic"
],
"route_family": "mobile-edge",
"primary_tables": [
"user_calendar_events",
"insight_recommendations",
"edge_communication_events"
]
}
]

View File

@@ -0,0 +1,38 @@
{
"status": "ok",
"checks": {
"total_examples": 1200,
"unique_example_ids": 1200,
"subchapters_with_50_examples": true,
"chapters": 6,
"subchapters": 24,
"source_seed_examples_reported": 36,
"source_seed_examples_actual": 8
},
"per_subchapter": {
"sub-001-01": 50,
"sub-001-02": 50,
"sub-001-03": 50,
"sub-001-04": 50,
"sub-002-01": 50,
"sub-002-02": 50,
"sub-002-03": 50,
"sub-002-04": 50,
"sub-003-01": 50,
"sub-003-02": 50,
"sub-003-03": 50,
"sub-003-04": 50,
"sub-004-01": 50,
"sub-004-02": 50,
"sub-004-03": 50,
"sub-004-04": 50,
"sub-005-01": 50,
"sub-005-02": 50,
"sub-005-03": 50,
"sub-005-04": 50,
"sub-006-01": 50,
"sub-006-02": 50,
"sub-006-03": 50,
"sub-006-04": 50
}
}