@taylorwong/ichartjs 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +69 -0
- package/LICENSE +201 -0
- package/README.md +194 -0
- package/agent-recipes/diagrams/agent-orchestration.json +18 -0
- package/agent-recipes/diagrams/approval-process.json +16 -0
- package/agent-recipes/diagrams/responsibility-mapping.json +13 -0
- package/agent-recipes/diagrams/workflow.json +19 -0
- package/agent-recipes/foundational-analysis.json +18 -0
- package/agent-recipes/project-management.json +47 -0
- package/agent-recipes/trend-line.json +21 -0
- package/docs/agent/README.md +62 -0
- package/docs/agent/charting-scenario.md +82 -0
- package/docs/agent/coding-agent-integration.md +88 -0
- package/docs/agent/development/2.0-release-readiness.md +65 -0
- package/docs/agent/development/iteration-2.md +9 -0
- package/docs/agent/development/iteration-3.md +142 -0
- package/docs/agent/development/iteration-4.md +261 -0
- package/docs/agent/development/iteration-5.md +43 -0
- package/docs/agent/development/iteration-6.md +130 -0
- package/docs/agent/development/iteration-7.md +117 -0
- package/docs/agent/development/iteration-8-acceptance.md +68 -0
- package/docs/agent/development/iteration-8.md +116 -0
- package/docs/agent/development/iteration-9.md +44 -0
- package/docs/agent/development/playground-plan.md +143 -0
- package/docs/agent/development/prompt-contract.md +22 -0
- package/docs/agent/development/rc-1-acceptance.md +43 -0
- package/docs/agent/development/roadmap.md +259 -0
- package/docs/agent/development-guide.md +60 -0
- package/docs/agent/diagram-scenario.md +82 -0
- package/docs/agent/editing-contract.md +71 -0
- package/docs/agent/frontend-integration.md +66 -0
- package/docs/agent/project-scenario.md +89 -0
- package/docs/agent/quickstart.md +205 -0
- package/docs/agent/runtime-contract.md +132 -0
- package/docs/agent/theme-guide.md +59 -0
- package/docs/agent/zh-CN/README.md +26 -0
- package/docs/agent/zh-CN/charting-scenario.md +62 -0
- package/docs/agent/zh-CN/coding-agent-integration.md +36 -0
- package/docs/agent/zh-CN/development-guide.md +31 -0
- package/docs/agent/zh-CN/diagram-scenario.md +37 -0
- package/docs/agent/zh-CN/editing-contract.md +27 -0
- package/docs/agent/zh-CN/frontend-integration.md +31 -0
- package/docs/agent/zh-CN/project-scenario.md +40 -0
- package/docs/agent/zh-CN/quickstart.md +84 -0
- package/docs/agent/zh-CN/runtime-contract.md +85 -0
- package/docs/agent/zh-CN/theme-guide.md +50 -0
- package/docs/manifests/capabilities.json +79 -0
- package/docs/manifests/commands.json +30 -0
- package/docs/manifests/schemas.json +13 -0
- package/examples/agent-workflow.mjs +94 -0
- package/package.json +55 -0
- package/skills/ichartjs/SKILL.md +72 -0
- package/skills/ichartjs/agents/openai.yaml +4 -0
- package/skills/ichartjs/references/agent-contract.md +39 -0
- package/skills/ichartjs/references/chart-selection.md +22 -0
- package/src/capabilities.mjs +190 -0
- package/src/charts.mjs +234 -0
- package/src/command.mjs +93 -0
- package/src/data.mjs +75 -0
- package/src/diagram-interaction.mjs +195 -0
- package/src/diagram.mjs +135 -0
- package/src/edit-controller.mjs +192 -0
- package/src/edit.mjs +369 -0
- package/src/format.mjs +19 -0
- package/src/history.mjs +14 -0
- package/src/index.mjs +562 -0
- package/src/plugin.mjs +18 -0
- package/src/project-analytics.mjs +357 -0
- package/src/project-linking.mjs +72 -0
- package/src/project.mjs +370 -0
- package/src/recipes.mjs +18 -0
- package/src/renderer.mjs +77 -0
- package/src/scale.mjs +9 -0
- package/src/scene.mjs +18 -0
- package/src/schema.mjs +142 -0
- package/src/spec.mjs +127 -0
- package/src/theme.mjs +232 -0
- package/src/transforms.mjs +34 -0
- package/src/validation.mjs +106 -0
- package/types/index.d.ts +134 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
# Iteration 4 — Agent Data Contract and Business Editing
|
|
2
|
+
|
|
3
|
+
## Delivery status
|
|
4
|
+
|
|
5
|
+
4A, 4B, 4C, 4D, and 4E are implemented in the local runtime. The viewable acceptance demo is available at `http://localhost:3000/playground/editing`.
|
|
6
|
+
|
|
7
|
+
- 4C: guarded local commit, exact preview/revision checks, change set, audit metadata, and edit events.
|
|
8
|
+
- 4D: undo/redo history, recipe validation, capability discovery, and TypeScript declarations.
|
|
9
|
+
- 4E: unit coverage and a browser-facing preview/commit/undo/redo flow. External persistence and authorization remain host responsibilities.
|
|
10
|
+
|
|
11
|
+
## Goal
|
|
12
|
+
|
|
13
|
+
Upgrade iChart.js 2.0 from an Agent-capable visualization runtime into a safe, explainable, and production-ready business-data editing runtime.
|
|
14
|
+
|
|
15
|
+
An Agent must be able to inspect a business data contract, generate a typed edit command, preview its impact, validate the change, request confirmation when required, commit the change, and undo it. Direct arbitrary mutation is not the primary Agent interface.
|
|
16
|
+
|
|
17
|
+
Geographic charts and 3D rendering remain outside this iteration.
|
|
18
|
+
|
|
19
|
+
Status: 4A–4E implemented for the local runtime. External persistence, authorization, true-device touch testing, and host application release controls remain outside the runtime.
|
|
20
|
+
|
|
21
|
+
## Core Concepts
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
Chart Spec
|
|
25
|
+
→ describes how data is displayed
|
|
26
|
+
Business Data Schema
|
|
27
|
+
→ describes fields, types, permissions, and business rules
|
|
28
|
+
Edit Command
|
|
29
|
+
→ describes the intended business operation
|
|
30
|
+
Validation and Diff
|
|
31
|
+
→ explains whether and how data will change
|
|
32
|
+
Data Store / JSON Patch
|
|
33
|
+
→ applies the normalized mutation
|
|
34
|
+
Scene Graph
|
|
35
|
+
→ re-renders the result
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Task List
|
|
39
|
+
|
|
40
|
+
### A. Business Data Schema
|
|
41
|
+
|
|
42
|
+
1. Add a versioned `BusinessDataSchema` contract.
|
|
43
|
+
2. Define field types: `string`, `number`, `boolean`, `date`, `enum`, `array`, and `object`.
|
|
44
|
+
3. Support `required`, `default`, `nullable`, `min`, `max`, `pattern`, and enum values.
|
|
45
|
+
4. Define primary keys, foreign keys, and references between records.
|
|
46
|
+
5. Define field edit permissions: editable, read-only, Agent-editable, and user-only.
|
|
47
|
+
6. Define data-to-chart encoding mappings for project and diagram views.
|
|
48
|
+
7. Define cross-field business rules with stable rule IDs and messages.
|
|
49
|
+
8. Validate dates, intervals, dependencies, node IDs, lane IDs, and status transitions.
|
|
50
|
+
9. Return structured errors with `code`, `path`, `rule`, `message`, and `suggestion`.
|
|
51
|
+
10. Add schema version compatibility and migration hooks.
|
|
52
|
+
|
|
53
|
+
### B. Business Data Models
|
|
54
|
+
|
|
55
|
+
11. Add the `project-task` model for Gantt and schedule data.
|
|
56
|
+
12. Add the `timeline-event` and `milestone` models.
|
|
57
|
+
13. Add the `burndown-sample` model, including scope changes and forecast fields.
|
|
58
|
+
14. Add the `flow-node`, `flow-edge`, and `swimlane` models.
|
|
59
|
+
15. Normalize dates, IDs, statuses, percentages, and dependency arrays.
|
|
60
|
+
16. Preserve original source values and normalized values where conversion occurs.
|
|
61
|
+
17. Add data-quality warnings for missing, ambiguous, or inferred values.
|
|
62
|
+
|
|
63
|
+
### C. Typed Edit Commands
|
|
64
|
+
|
|
65
|
+
18. Define a versioned `EditCommand` envelope.
|
|
66
|
+
19. Add `updateField` for a single field change.
|
|
67
|
+
20. Add `updateRecord` for validated multi-field changes.
|
|
68
|
+
21. Add `addRecord` and `removeRecord`, disabled by default.
|
|
69
|
+
22. Add `updateTask` for project-task changes.
|
|
70
|
+
23. Add `shiftTask` for date movement with dependency policies.
|
|
71
|
+
24. Add `updateProgress` for progress and status changes.
|
|
72
|
+
25. Add `addDependency` and `removeDependency` with cycle checks.
|
|
73
|
+
26. Add `updateMilestone` for event date and status changes.
|
|
74
|
+
27. Add `moveNode` for diagram layout changes.
|
|
75
|
+
28. Add `moveNodeToLane` for responsibility changes.
|
|
76
|
+
29. Add `updateEdge` for controlled process relationship changes.
|
|
77
|
+
30. Keep layout edits separate from business-data edits.
|
|
78
|
+
|
|
79
|
+
### D. Validation and Preview
|
|
80
|
+
|
|
81
|
+
31. Implement `inspectDataSchema()`.
|
|
82
|
+
32. Implement `validateData()`.
|
|
83
|
+
33. Implement `validateEdit(command)` without mutating the source.
|
|
84
|
+
34. Implement `previewEdit(command)` with before/after values.
|
|
85
|
+
35. Calculate affected records and dependent tasks.
|
|
86
|
+
36. Report warnings for critical-path, completed-task, and destructive changes.
|
|
87
|
+
37. Report dependency shifts and schedule conflicts.
|
|
88
|
+
38. Support policies for shifting dependents, allowing negative slack, and requiring confirmation.
|
|
89
|
+
39. Produce normalized JSON Patch only after command validation.
|
|
90
|
+
40. Make preview output deterministic and JSON serializable.
|
|
91
|
+
|
|
92
|
+
### E. Commit, History, and Audit
|
|
93
|
+
|
|
94
|
+
41. Implement `applyEdit(command)`.
|
|
95
|
+
42. Require confirmation by default for destructive or structural changes.
|
|
96
|
+
43. Implement `getChangeSet()`.
|
|
97
|
+
44. Implement `undo()` and `redo()`.
|
|
98
|
+
45. Store operation IDs, actor, timestamp, reason, source, and affected records.
|
|
99
|
+
46. Support optimistic version checks to prevent stale updates.
|
|
100
|
+
47. Emit `beforeedit`, `edit`, `editerror`, and `undoredo` events.
|
|
101
|
+
48. Ensure failed edits leave the original data unchanged.
|
|
102
|
+
49. Ensure chart re-rendering occurs only after a successful commit.
|
|
103
|
+
50. Keep an audit record separate from user-visible chart data.
|
|
104
|
+
|
|
105
|
+
### F. Agent Contract and Capability Discovery
|
|
106
|
+
|
|
107
|
+
51. Extend `getCapabilities()` with schema and editing capabilities.
|
|
108
|
+
52. Add `getEditCapabilities(schema)` for field and operation permissions.
|
|
109
|
+
53. Add Agent response fields for selected model, assumptions, warnings, diff, and confirmation requirement.
|
|
110
|
+
54. Add Recipe examples for schedule changes, progress updates, dependency changes, and workflow ownership.
|
|
111
|
+
55. Add a Recipe validator for both Chart Spec and Business Data Schema.
|
|
112
|
+
56. Document that arbitrary `applyPatch()` is a low-level API, not the preferred Agent API.
|
|
113
|
+
57. Add safe defaults: confirmation required, delete disabled, structural edits disabled.
|
|
114
|
+
|
|
115
|
+
### G. TypeScript, Runtime, and Demos
|
|
116
|
+
|
|
117
|
+
58. Add TypeScript declarations for schemas, commands, policies, diffs, and audit records.
|
|
118
|
+
59. Add framework-neutral data-store adapters.
|
|
119
|
+
60. Add headless preview and export of change sets.
|
|
120
|
+
61. Add a browser demo for preview → confirm → commit → undo.
|
|
121
|
+
62. Add a Gantt demo for shifting a task and optionally shifting dependents.
|
|
122
|
+
63. Add a Flow demo for moving a node and persisting layout only.
|
|
123
|
+
64. Add invalid-command and rollback demonstrations.
|
|
124
|
+
65. Add mobile-safe confirmation and edit controls.
|
|
125
|
+
|
|
126
|
+
### H. Production Release Gates
|
|
127
|
+
|
|
128
|
+
66. Stabilize public APIs and document RC compatibility rules; release `2.0.0-rc.1` only after all gates pass.
|
|
129
|
+
67. Establish core/renderer/plugin/recipe module boundaries without duplicating implementations; assess package splitting separately from introducing mandatory dependencies.
|
|
130
|
+
68. Add renderer/export capability negotiation, explicit unsupported results, and deterministic SVG/PNG/JSON export tests, including headless output.
|
|
131
|
+
69. Complete keyboard focus, ARIA relationships, and reduced-motion behavior in editing and viewing modes.
|
|
132
|
+
70. Define reproducible small/medium/large data benchmarks with documented dataset sizes, hardware, and acceptance budgets before measuring.
|
|
133
|
+
71. Test event, observer, tooltip, plugin, resize, and destroy lifecycles for leaks and stale state.
|
|
134
|
+
72. Re-audit Iteration 2/3 feature claims and record actual functional/browser acceptance gaps; passing unit tests or matching node IDs alone does not establish mobile or renderer interaction parity.
|
|
135
|
+
|
|
136
|
+
## Execution Order and Checkpoints
|
|
137
|
+
|
|
138
|
+
| Phase | Tasks | Dependency | Viewable or inspectable result |
|
|
139
|
+
| --- | --- | --- | --- |
|
|
140
|
+
| 4A — Contracts | 1–17, 66 | Audit existing data conventions | Schema, normalized fixtures, structured validation reports |
|
|
141
|
+
| 4B — Command preview | 18–40 | 4A | Gantt change preview with before/after values and affected tasks |
|
|
142
|
+
| 4C — Safe commit | 41–50, 57 | 4B | Trusted confirmation, atomic commit, conflict rejection, undo/redo |
|
|
143
|
+
| 4D — Agent integration | 51–56, 58–65 | 4C | Agent recipes plus Gantt/Flow editing demo |
|
|
144
|
+
| 4E — Release acceptance | 67–72 | 4A–4D | Reproducible acceptance report; RC only if all gates pass |
|
|
145
|
+
|
|
146
|
+
Notify the user whenever an HTTP-served demo reaches an acceptance checkpoint. Report untested physical-device gestures separately from synthetic event tests and desktop mobile-viewport tests.
|
|
147
|
+
|
|
148
|
+
## Authority and Data Boundaries
|
|
149
|
+
|
|
150
|
+
- Editing is opt-in. Viewing/panning must not silently mutate business values. Keep `view-edit`, `layout-edit`, `data-edit`, and `structure-edit` distinct.
|
|
151
|
+
- The chart library previews and edits local normalized data. Writing to an external business system requires a separately configured host adapter; this plan does not grant database access or promise built-in integrations.
|
|
152
|
+
- The host/server enforces authentication, authorization, and confirmation. Schema field flags and Agent-supplied actor/confirmation fields are not security boundaries.
|
|
153
|
+
- Confirmation must bind to the exact preview, data revision, and affected records. Revalidate permissions and revision at commit; reject a changed command or stale preview. Do not automatically apply a preview merely because it requires confirmation.
|
|
154
|
+
- Use declarative rule objects and registered trusted validators. Do not evaluate arbitrary rule strings from data or Agent output using `eval` or `Function`.
|
|
155
|
+
- Resolve records by stable IDs, not mutable array offsets. Commit batches atomically; external persistence must succeed before reporting persisted success. Undo against a changed revision must fail or require a new preview.
|
|
156
|
+
- Task progress is canonical `0–100`; converting legacy `0–1` values requires an explicit source-unit setting. Define date-only values, timestamps, timezone, and exclusive interval ends separately. `shiftTask.days` uses explicit calendar-day rules; work calendars, holidays, and lead/lag remain Iteration 6 scope.
|
|
157
|
+
- Derived critical-path and forecast values are read-only and recomputed. Business actor identity comes from the host; audit records in local memory are not durable or tamper-proof server audit logs.
|
|
158
|
+
- Reuse the Iteration 4 history/command engine in Iteration 5 instead of creating another undo/redo implementation.
|
|
159
|
+
|
|
160
|
+
## Recommended Public API
|
|
161
|
+
|
|
162
|
+
```js
|
|
163
|
+
const chart = createChart({
|
|
164
|
+
type: 'gantt',
|
|
165
|
+
data: { values: tasks, schema: taskSchema },
|
|
166
|
+
editing: {
|
|
167
|
+
enabled: true,
|
|
168
|
+
mode: 'command',
|
|
169
|
+
requireConfirmation: true,
|
|
170
|
+
allowDelete: false,
|
|
171
|
+
allowStructuralChanges: false
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
chart.inspectDataSchema();
|
|
176
|
+
chart.validateData();
|
|
177
|
+
const preview = chart.previewEdit({
|
|
178
|
+
type: 'edit',
|
|
179
|
+
target: 'project-task',
|
|
180
|
+
operations: [{
|
|
181
|
+
op: 'shiftTask',
|
|
182
|
+
taskId: 'development',
|
|
183
|
+
days: 2,
|
|
184
|
+
shiftDependents: true
|
|
185
|
+
}]
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
if (preview.valid) {
|
|
189
|
+
const approval = await host.requestEditApproval(preview);
|
|
190
|
+
if (approval.approved) {
|
|
191
|
+
await chart.applyEdit(preview.command, {
|
|
192
|
+
previewId: preview.id,
|
|
193
|
+
expectedRevision: preview.revision,
|
|
194
|
+
approval: approval.receipt
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
`host.requestEditApproval()` is an application-owned integration point, not an existing iChart API. Its receipt must be checked by the host commit adapter, not trusted merely because an Agent supplied it.
|
|
201
|
+
|
|
202
|
+
## Acceptance Criteria
|
|
203
|
+
|
|
204
|
+
### Functional
|
|
205
|
+
|
|
206
|
+
- A schema describes fields, types, editability, relationships, and business rules.
|
|
207
|
+
- Invalid data and invalid commands return structured errors without partial mutation.
|
|
208
|
+
- Typed commands support task updates, schedule shifts, progress changes, dependency changes, node movement, and lane movement.
|
|
209
|
+
- `previewEdit()` returns deterministic before/after values, warnings, affected records, and confirmation requirements.
|
|
210
|
+
- Successful commits update data and re-render the chart.
|
|
211
|
+
- Undo and redo restore both data and layout edits.
|
|
212
|
+
|
|
213
|
+
### Safety and Explainability
|
|
214
|
+
|
|
215
|
+
- Deletes and structural changes require explicit confirmation.
|
|
216
|
+
- Read-only fields cannot be changed by Agent commands.
|
|
217
|
+
- Critical-path and completed-task changes produce warnings.
|
|
218
|
+
- Every committed edit includes audit metadata.
|
|
219
|
+
- Stale-version edits are rejected instead of overwriting newer data.
|
|
220
|
+
- `applyPatch()` remains available only as a low-level escape hatch.
|
|
221
|
+
|
|
222
|
+
### Rendering and Interaction
|
|
223
|
+
|
|
224
|
+
- Gantt date edits update task bars and dependencies.
|
|
225
|
+
- Flow node movement updates connected arrows and persists `node.position`.
|
|
226
|
+
- SVG and Canvas reflect the same normalized data after an edit.
|
|
227
|
+
- Mobile editing controls remain usable and do not conflict with pan/zoom.
|
|
228
|
+
- Preview and confirmation UI is available in a viewable HTTP-served demo.
|
|
229
|
+
|
|
230
|
+
### Quality Gate
|
|
231
|
+
|
|
232
|
+
- `npm test` passes.
|
|
233
|
+
- `npm run check` passes.
|
|
234
|
+
- `git diff --check` passes.
|
|
235
|
+
- Schema, command, validation, history, and audit tests pass.
|
|
236
|
+
- Agent Recipes validate against the declared capabilities.
|
|
237
|
+
- Browser acceptance covers preview, confirmation, commit, rollback, undo, SVG, Canvas, and mobile behavior.
|
|
238
|
+
|
|
239
|
+
## Deliverables
|
|
240
|
+
|
|
241
|
+
- `src/schema.mjs`
|
|
242
|
+
- `src/validation.mjs`
|
|
243
|
+
- `src/command.mjs`
|
|
244
|
+
- `src/edit.mjs`
|
|
245
|
+
- `src/history.mjs`
|
|
246
|
+
- `types/`
|
|
247
|
+
- `agent-recipes/editing/`
|
|
248
|
+
- `playground/editing.html`
|
|
249
|
+
- `docs/agent/editing-guide.md`
|
|
250
|
+
- `2.0.0-rc.1`
|
|
251
|
+
|
|
252
|
+
## Current Implementation Checkpoint
|
|
253
|
+
|
|
254
|
+
- Available modules: `src/schema.mjs`, `src/validation.mjs`, `src/command.mjs`, and `src/edit.mjs`.
|
|
255
|
+
- Available APIs: `getBusinessSchema()`, `inspectDataSchema()`, `validateData()`, `getEditCapabilities()`, `validateEdit()`, `previewEdit()`, `applyEdit()`, `getChangeSet()`, `undo()`, and `redo()`.
|
|
256
|
+
- Viewable demo route: `http://localhost:3000/playground/editing` (source page: `playground/editing.html`) shows a Gantt change preview and confirms that source data remains unchanged.
|
|
257
|
+
- The preview result is local and deterministic; it is not an authorization receipt and does not persist to an external system.
|
|
258
|
+
|
|
259
|
+
## Completion Definition
|
|
260
|
+
|
|
261
|
+
Iteration 4 is complete when an Agent can safely modify a validated business dataset through typed commands, preview a deterministic diff, obtain required confirmation, commit or roll back the change, and observe the result consistently in SVG and Canvas views.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Iteration 5 — Advanced Diagram Runtime
|
|
2
|
+
|
|
3
|
+
## Current delivery
|
|
4
|
+
|
|
5
|
+
The current runtime increment is available for review:
|
|
6
|
+
|
|
7
|
+
- Diagram normalization for nodes, edges, lanes, groups, and diagram options.
|
|
8
|
+
- Deterministic `manual`, `layered`, `tree`, and `radial` layout modes.
|
|
9
|
+
- `straight`, `orthogonal`, and `curved` edge routing declarations.
|
|
10
|
+
- Node size in scene layout and the typed `resizeNode` edit command.
|
|
11
|
+
- Diagram validation for duplicate IDs, endpoints, lanes, groups, ports, cycles, and unreachable nodes.
|
|
12
|
+
- Shared Iteration 4 preview, confirmation, commit, audit, undo, and redo behavior.
|
|
13
|
+
- Workflow Agent Recipe at `agent-recipes/diagrams/workflow.json`.
|
|
14
|
+
- Iteration 5B group/port visualization, multi-selection, alignment, grid snapping, keyboard movement, and typed layout commands.
|
|
15
|
+
- Iteration 5C group collapse / expand, clipboard-style copy/paste, duplicate selection, and typed edge creation.
|
|
16
|
+
- Iteration 5D typed group movement and batch group membership assignment/removal through shared history.
|
|
17
|
+
- Iteration 5E deterministic group duplication, explicit safe/recursive deletion policies, and keyboard-only port connection flow.
|
|
18
|
+
- Port-aware drag-to-connect interaction and SVG diagram accessibility labels.
|
|
19
|
+
- Lightweight obstacle-aware orthogonal routing for common node-overlap cases.
|
|
20
|
+
- Iteration 5F member-derived group resizing, deterministic multi-obstacle routing channels, visible keyboard focus, and connection-state accessibility descriptions.
|
|
21
|
+
- Viewable HTTP demo at `http://localhost:3000/playground/diagram-editor`.
|
|
22
|
+
|
|
23
|
+
## Acceptance
|
|
24
|
+
|
|
25
|
+
- `npm test` and `npm run check` pass.
|
|
26
|
+
- Layout output is deterministic for the same DiagramSpec and bounds.
|
|
27
|
+
- Invalid endpoints, duplicate entity IDs, invalid ports, and illegal group relationships return structured errors.
|
|
28
|
+
- Diagram node resize commits through the shared edit history and can be undone.
|
|
29
|
+
- Demo loads over HTTP and exposes resize, copy/paste, group collapse, typed connection, undo, redo, reset, and normalized state output.
|
|
30
|
+
- Demo exposes multi-select, alignment, snapping, keyboard movement, Group/Port visuals, clipboard state, and collapsed-group state.
|
|
31
|
+
- Copy/paste preserves internal edges and deterministic copied IDs.
|
|
32
|
+
- Collapsed groups hide member nodes from the Scene while keeping normalized Spec state intact.
|
|
33
|
+
- Orthogonal routing avoids common node-body overlaps in deterministic output.
|
|
34
|
+
- Group movement and membership changes commit and restore through shared undo/redo history.
|
|
35
|
+
- Group duplication preserves internal edges; deletion defaults to ungrouping and requires an explicit policy to delete members.
|
|
36
|
+
- Keyboard users can focus ports with Tab, connect with Enter, and cancel with Escape.
|
|
37
|
+
- Group resize scales member geometry and remains undoable without introducing a conflicting persisted group rectangle.
|
|
38
|
+
- Dense orthogonal routes evaluate deterministic horizontal and vertical channels around multiple node obstacles.
|
|
39
|
+
- Workflow, approval process, Agent orchestration, and responsibility mapping recipes are included.
|
|
40
|
+
|
|
41
|
+
## Local runtime closure
|
|
42
|
+
|
|
43
|
+
Iteration 5 local runtime scope is complete. The final 2.0 browser matrix passed; physical-device mobile acceptance remains host integration evidence and is not claimed by unit or synthetic interaction tests.
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# Iteration 6 — Project Intelligence and Business Views
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Add reproducible project analytics that Agents can generate from task and delivery data without unnecessarily expanding the public chart-type surface.
|
|
6
|
+
|
|
7
|
+
## Chart Type Policy
|
|
8
|
+
|
|
9
|
+
- Iteration 6 does not add a public chart type by default.
|
|
10
|
+
- Prefer existing primitives and modes: `gantt`, `timeline`, `milestone`, `burndown`, `bar`, `column`, `area`, and `scatter`.
|
|
11
|
+
- Resource load should first be implemented as a Gantt-related project view.
|
|
12
|
+
- Release burndown should be a `burndown` mode.
|
|
13
|
+
- Velocity should use `column` plus a project-data adapter.
|
|
14
|
+
- Cumulative flow should use stacked `area` plus a status-history transform.
|
|
15
|
+
- Risk matrix should use `scatter` plus risk encodings and quadrant guides.
|
|
16
|
+
- Issue aging should use `bar` or `scatter` plus an aging transform.
|
|
17
|
+
- Promote a view to a new public chart type only when it is high-frequency, has semantics that cannot be expressed cleanly through existing Specs, and has independent interaction, accessibility, export, and testing requirements.
|
|
18
|
+
- Candidate foundational chart types such as Radar, Heatmap, and Treemap remain outside Iteration 6 and require separate demand review.
|
|
19
|
+
|
|
20
|
+
## 6A — Schedule Intelligence
|
|
21
|
+
|
|
22
|
+
1. Add critical-path and slack/float visualization controls to Gantt.
|
|
23
|
+
2. Add baseline versus actual task bars and deterministic variance calculations.
|
|
24
|
+
3. Add milestone variance indicators.
|
|
25
|
+
4. Expose schedule assumptions, derived fields, and warnings through chart state and Agent inspection APIs.
|
|
26
|
+
5. Add incomplete-date, inverted-range, missing-dependency, and inconsistent completion warnings.
|
|
27
|
+
|
|
28
|
+
### Checkpoint
|
|
29
|
+
|
|
30
|
+
- Gantt can toggle critical path, slack, baseline, and actual overlays.
|
|
31
|
+
- The same task input produces the same variance and slack values.
|
|
32
|
+
- Derived values are clearly separated from source fields.
|
|
33
|
+
|
|
34
|
+
## 6B — Calendar and Dependency Rules
|
|
35
|
+
|
|
36
|
+
1. Define explicit timezone and working-calendar configuration.
|
|
37
|
+
2. Support working weekdays, holidays, and non-working-day adjustment policies.
|
|
38
|
+
3. Add dependency types and lag/lead values without breaking existing string dependency IDs.
|
|
39
|
+
4. Recalculate critical path and slack using the selected calendar.
|
|
40
|
+
5. Report unsupported or ambiguous calendar inputs instead of silently guessing.
|
|
41
|
+
|
|
42
|
+
### Checkpoint
|
|
43
|
+
|
|
44
|
+
- Schedule calculations are reproducible for a declared calendar and timezone.
|
|
45
|
+
- Legacy dependency arrays remain valid.
|
|
46
|
+
- Lag, lead, holidays, and weekends have focused unit coverage.
|
|
47
|
+
|
|
48
|
+
## 6C — Capacity and Delivery Views
|
|
49
|
+
|
|
50
|
+
1. Add owner and resource fields to the project-task contract.
|
|
51
|
+
2. Implement resource load and capacity as a project view backed by existing chart primitives.
|
|
52
|
+
3. Implement cumulative flow as stacked Area output from status-history data.
|
|
53
|
+
4. Implement velocity as Column output from completed work by sprint.
|
|
54
|
+
5. Implement release forecasting as a Burndown mode with explicit assumptions.
|
|
55
|
+
|
|
56
|
+
### Checkpoint
|
|
57
|
+
|
|
58
|
+
- Capacity overload and missing-capacity conditions produce structured warnings.
|
|
59
|
+
- Cumulative-flow totals reconcile with input status counts.
|
|
60
|
+
- Velocity and release forecasts expose their aggregation window and assumptions.
|
|
61
|
+
|
|
62
|
+
## 6D — Risk, Aging, and Linked Analysis
|
|
63
|
+
|
|
64
|
+
1. Implement risk matrix output with Scatter encodings for probability and impact.
|
|
65
|
+
2. Implement issue-aging output with configurable age buckets.
|
|
66
|
+
3. Add filters for owner, status, priority, sprint, and label.
|
|
67
|
+
4. Add framework-neutral linked-selection and linked-filter state across project views.
|
|
68
|
+
5. Preserve stable record IDs across all derived datasets.
|
|
69
|
+
|
|
70
|
+
### Checkpoint
|
|
71
|
+
|
|
72
|
+
- Filters update every linked view consistently.
|
|
73
|
+
- Risk and aging calculations are deterministic and inspectable.
|
|
74
|
+
- Selection links source records rather than array positions.
|
|
75
|
+
|
|
76
|
+
## 6E — Agent and Release Closure
|
|
77
|
+
|
|
78
|
+
1. Add natural-language intent recipes for schedule, variance, risk, capacity, and release reporting.
|
|
79
|
+
2. Add Agent documentation for data quality, assumptions, confidence, and unsupported inference.
|
|
80
|
+
3. Add TypeScript declarations for project analytics options and results.
|
|
81
|
+
4. Add lifecycle, performance, SVG, Canvas, and normalized JSON regression coverage.
|
|
82
|
+
5. Complete browser acceptance for desktop and mobile viewports.
|
|
83
|
+
6. Record physical-device and host integration checks separately from local runtime acceptance.
|
|
84
|
+
|
|
85
|
+
## Verification
|
|
86
|
+
|
|
87
|
+
- `npm run agent:check` and `git diff --check` pass.
|
|
88
|
+
- Baseline, actual, variance, slack, capacity, and forecast calculations are deterministic.
|
|
89
|
+
- Source rows are never mutated by transforms or analytics.
|
|
90
|
+
- Insufficient or contradictory data produces structured warnings.
|
|
91
|
+
- Existing chart types remain backward compatible.
|
|
92
|
+
- SVG and Canvas use equivalent normalized datasets and semantic record references.
|
|
93
|
+
- Linked filters and selections remain stable across rerenders.
|
|
94
|
+
|
|
95
|
+
## Preview and Acceptance
|
|
96
|
+
|
|
97
|
+
- Full gallery: `http://127.0.0.1:3000/playground/project-gallery.html`
|
|
98
|
+
- Project intelligence demo: `http://127.0.0.1:3000/playground/project-intelligence.html`
|
|
99
|
+
- Start the local server from the repository root with `python3 -m http.server 3000 --bind 127.0.0.1`.
|
|
100
|
+
- Every completed checkpoint must update at least one HTTP-served demo and include exact manual acceptance steps in the delivery report.
|
|
101
|
+
|
|
102
|
+
## Deliverables
|
|
103
|
+
|
|
104
|
+
- Project analytics functions and adapters under `src/`.
|
|
105
|
+
- `playground/project-intelligence.html`.
|
|
106
|
+
- Project analytics recipes under `agent-recipes/`.
|
|
107
|
+
- Agent data-quality and assumption documentation.
|
|
108
|
+
- Updated TypeScript declarations and capability manifests.
|
|
109
|
+
- Iteration 6 browser and runtime acceptance report.
|
|
110
|
+
|
|
111
|
+
## Completion Definition
|
|
112
|
+
|
|
113
|
+
Iteration 6 is complete when schedule, capacity, delivery, risk, and aging insights can be generated through stable existing chart primitives; calculations and assumptions are inspectable; linked filters behave consistently; and the runtime, documentation, recipes, tests, and HTTP demos pass acceptance. Any proposed new chart type requires a separate frequency and API review.
|
|
114
|
+
|
|
115
|
+
## Current Delivery
|
|
116
|
+
|
|
117
|
+
- `src/project-analytics.mjs` now hosts calendar normalization, dependency normalization, schedule analysis, capacity, velocity, release forecast, risk matrix, and issue aging adapters.
|
|
118
|
+
- `src/project.mjs` consumes schedule and burndown analytics outputs and exposes linked project state, assumptions, warnings, and schedule overlays through runtime state/tooltips.
|
|
119
|
+
- `src/project-linking.mjs` provides framework-neutral linked filters and linked selection based on stable record IDs.
|
|
120
|
+
- `playground/project-intelligence.html` demonstrates schedule overlays, capacity, release, risk, and aging outputs with visible linked-state diagnostics.
|
|
121
|
+
|
|
122
|
+
## Acceptance Record
|
|
123
|
+
|
|
124
|
+
- Dependency strings and `{ id, type, lag, lead }` objects share the same Spec, schema, cycle, and missing-reference validation contract.
|
|
125
|
+
- Finish-to-start successors begin on the next working day at zero lag; weekends and holidays continue to use the declared calendar.
|
|
126
|
+
- Calendar calculations are deterministic in `UTC`; unsupported timezone values emit `UNSUPPORTED_TIMEZONE` and fall back to `UTC`.
|
|
127
|
+
- Linked fallback record IDs retain their source index after filtering.
|
|
128
|
+
- Velocity, risk, and issue-aging adapters exclude invalid values and emit structured warnings; issue aging requires an explicit `today` reference.
|
|
129
|
+
- Automated acceptance: `npm run agent:check` and `git diff --check`.
|
|
130
|
+
- Browser acceptance: open `http://127.0.0.1:3000/playground/project-intelligence.html`, confirm all demo cards render and linked-state diagnostics update; then open `http://127.0.0.1:3000/playground/project-gallery.html` and confirm the project charts render without console errors.
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Iteration 7 — Foundational Chart Coverage
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Close the highest-frequency foundational chart gaps without creating redundant public chart types. First strengthen reusable composition and transform capabilities, then add `heatmap` and `radar` as independently supported chart types.
|
|
6
|
+
|
|
7
|
+
## Admission Policy
|
|
8
|
+
|
|
9
|
+
- Donut remains a `pie` mode configured with `innerRadius`; do not register `donut` as a public type.
|
|
10
|
+
- Stacked and percent-stacked charts remain modes of `bar`, `column`, and `area`.
|
|
11
|
+
- Combo charts use mixed multi-series encodings and optional dual axes; do not register `combo` as a public type.
|
|
12
|
+
- Histograms use a deterministic `bin` transform rendered with `bar` or `column`; do not register `histogram` as a public type.
|
|
13
|
+
- `heatmap` and `radar` become public chart types because they require distinct layout, interaction, accessibility, and rendering semantics.
|
|
14
|
+
- Treemap, box plot, Sankey, waterfall, maps, and 3D remain outside Iteration 7.
|
|
15
|
+
|
|
16
|
+
## 7A — Composition and Transform Foundations
|
|
17
|
+
|
|
18
|
+
1. Define normalized stack configuration for `bar`, `column`, and `area`, including grouped, stacked, and percent-stacked modes.
|
|
19
|
+
2. Implement positive and negative stack accumulation with deterministic domains and stable source record references.
|
|
20
|
+
3. Add `pie.innerRadius` with validation, normalized geometry, tooltip behavior, labels, and zero-total handling.
|
|
21
|
+
4. Extend multi-series encodings with explicit per-series mark type so line and column marks can share one coordinate system.
|
|
22
|
+
5. Define combo-axis rules, legend semantics, hit testing, selection, and renderer-equivalent data references.
|
|
23
|
+
6. Add a deterministic `bin` transform with explicit field, thresholds or step, extent, interval closure, and invalid-value warnings.
|
|
24
|
+
7. Ensure transforms never mutate source rows and expose normalized output through inspection and JSON export.
|
|
25
|
+
|
|
26
|
+
### Checkpoint
|
|
27
|
+
|
|
28
|
+
- Grouped, stacked, and percent-stacked examples render consistently in SVG and Canvas.
|
|
29
|
+
- Donut output is produced by `type: "pie"` plus `innerRadius`.
|
|
30
|
+
- A column-line combo uses one Spec and preserves per-series tooltip and axis identity.
|
|
31
|
+
- Histogram bins are reproducible and reconcile with the valid numeric input count.
|
|
32
|
+
|
|
33
|
+
## 7B — Heatmap
|
|
34
|
+
|
|
35
|
+
1. Register `heatmap` in Spec validation, capabilities, recommendations, recipes, and TypeScript declarations.
|
|
36
|
+
2. Define categorical and temporal x/y matrix encodings plus a quantitative color encoding.
|
|
37
|
+
3. Add continuous and discrete color scales with explicit domain, range, clamp, and missing-value color.
|
|
38
|
+
4. Implement deterministic cell layout, padding, labels, tooltip, hit testing, keyboard navigation, and linked selection.
|
|
39
|
+
5. Preserve empty cells and distinguish missing values from numeric zero.
|
|
40
|
+
6. Support responsive sizing, large-matrix degradation rules, SVG, Canvas, accessibility summaries, and normalized export.
|
|
41
|
+
|
|
42
|
+
### Checkpoint
|
|
43
|
+
|
|
44
|
+
- Categorical and calendar-style heatmaps render from the same normalized matrix contract.
|
|
45
|
+
- Missing, zero, minimum, and maximum values have distinguishable semantics.
|
|
46
|
+
- Keyboard navigation identifies row, column, value, and source record.
|
|
47
|
+
|
|
48
|
+
## 7C — Radar
|
|
49
|
+
|
|
50
|
+
1. Register `radar` in Spec validation, capabilities, recommendations, recipes, and TypeScript declarations.
|
|
51
|
+
2. Define indicator names, domains, normalization rules, axis order, and multi-series data shape.
|
|
52
|
+
3. Implement polygon grid, radial axes, labels, series lines, points, and optional area fill.
|
|
53
|
+
4. Add explicit handling for mixed units, missing indicators, negative domains, and constant-value domains.
|
|
54
|
+
5. Add tooltip, legend selection, keyboard traversal, responsive label collision handling, and semantic summaries.
|
|
55
|
+
6. Maintain SVG/Canvas parity and stable source record references in normalized JSON export.
|
|
56
|
+
|
|
57
|
+
### Checkpoint
|
|
58
|
+
|
|
59
|
+
- Single-series and multi-series radar charts use declared indicator domains reproducibly.
|
|
60
|
+
- Mixed-unit inputs warn unless explicit per-indicator domains are provided.
|
|
61
|
+
- Labels remain readable at desktop and mobile widths.
|
|
62
|
+
|
|
63
|
+
## 7D — Agent, Gallery, and Release Closure
|
|
64
|
+
|
|
65
|
+
1. Update the public capability manifest, API reference, chart-selection guidance, and schema examples.
|
|
66
|
+
2. Add Agent recipes for composition comparison, distribution analysis, matrix analysis, and multidimensional comparison.
|
|
67
|
+
3. Add focused unit tests for normalization, geometry, invalid data, source immutability, and stable record IDs.
|
|
68
|
+
4. Add SVG/Canvas semantic parity, lifecycle, accessibility, responsive, and performance regression coverage.
|
|
69
|
+
5. Add a dedicated foundational chart gallery and synchronize the full Gallery count and filters.
|
|
70
|
+
6. Complete desktop and mobile browser acceptance and record deferred physical-device checks separately.
|
|
71
|
+
|
|
72
|
+
## Verification
|
|
73
|
+
|
|
74
|
+
- `npm run agent:check` and `git diff --check` pass.
|
|
75
|
+
- Existing Specs remain backward compatible and unchanged defaults preserve current rendering.
|
|
76
|
+
- No new public type is introduced for Donut, Combo, Stacked, or Histogram.
|
|
77
|
+
- Stack totals, percent totals, pie radii, and bin boundaries are deterministic.
|
|
78
|
+
- Heatmap and Radar provide equivalent semantic references in SVG and Canvas.
|
|
79
|
+
- Missing, invalid, ambiguous, and mixed-unit data produce structured warnings rather than silent guesses.
|
|
80
|
+
- Gallery examples remain usable at desktop and mobile viewport widths.
|
|
81
|
+
|
|
82
|
+
## Preview and Acceptance
|
|
83
|
+
|
|
84
|
+
- Full gallery: `http://localhost:3000/playground/project-gallery.html`
|
|
85
|
+
- Iteration 7 gallery: `http://localhost:3000/playground/foundational-gallery.html`
|
|
86
|
+
- Start the server from the repository root with `python3 -m http.server 3000 --bind 127.0.0.1`.
|
|
87
|
+
- 7A acceptance must show grouped/stacked/percent charts, Donut, Combo, and Histogram examples.
|
|
88
|
+
- 7B acceptance must show categorical and calendar heatmaps, missing values, tooltips, and keyboard focus.
|
|
89
|
+
- 7C acceptance must show single/multi-series Radar, explicit indicator domains, and mobile label behavior.
|
|
90
|
+
- Every phase delivery report must include its exact preview URL and manual acceptance steps.
|
|
91
|
+
|
|
92
|
+
## Deliverables
|
|
93
|
+
|
|
94
|
+
- Stack, mixed-mark series, pie radius, and bin-transform contracts under `src/`.
|
|
95
|
+
- Public `heatmap` and `radar` chart implementations.
|
|
96
|
+
- Updated capability manifests, TypeScript declarations, documentation, and Agent recipes.
|
|
97
|
+
- `playground/foundational-gallery.html` plus synchronized full Gallery coverage.
|
|
98
|
+
- Iteration 7 automated and browser acceptance record.
|
|
99
|
+
|
|
100
|
+
## Completion Definition
|
|
101
|
+
|
|
102
|
+
Iteration 7 is complete when stacked charts, Donut, Combo, and Histogram workflows are stable reusable capabilities; Heatmap and Radar are fully supported public chart types; SVG, Canvas, interactions, accessibility, export, recipes, tests, and HTTP demos pass acceptance; and no redundant chart type has been added.
|
|
103
|
+
|
|
104
|
+
## Current Delivery
|
|
105
|
+
|
|
106
|
+
- 7A provides stacked and percent-stacked Bar/Column geometry, Donut through `pie.innerRadius`, mixed line-column series, and deterministic bin transforms.
|
|
107
|
+
- 7B registers Heatmap with matrix encodings, continuous colors, explicit missing-value color, stable record references, SVG/Canvas rendering, and keyboard traversal through shared interactive Scene nodes.
|
|
108
|
+
- 7C registers Radar with explicit indicators, polygon grids, multi-series rendering, stable record references, and warnings for ambiguous domains or invalid values.
|
|
109
|
+
- 7D updates capabilities, declarations, recipes, documentation, automated coverage, the full Gallery, and `playground/foundational-gallery.html`.
|
|
110
|
+
|
|
111
|
+
## Acceptance Record
|
|
112
|
+
|
|
113
|
+
- `npm run agent:check`: pass, 16 chart types and 42 automated tests.
|
|
114
|
+
- `git diff --check`: pass.
|
|
115
|
+
- Desktop browser, isolated local server: `playground/foundational-gallery.html` renders 8/8 cards with 5 SVG and 3 Canvas charts; no console warnings or errors.
|
|
116
|
+
- Desktop browser, isolated local server: `playground/project-gallery.html` renders 16/16 chart types with 10 SVG and 6 Canvas charts; no console warnings or errors.
|
|
117
|
+
- The browser viewport override was requested at 390 x 844, but the connected browser continued reporting a fixed 1280-pixel viewport. Responsive CSS and chart initialization passed, while true mobile viewport and physical-device acceptance remain a release-environment check.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Iteration 8 Acceptance Record
|
|
2
|
+
|
|
3
|
+
Date: 2026-09-16
|
|
4
|
+
|
|
5
|
+
## Result
|
|
6
|
+
|
|
7
|
+
Iteration 8A–8D is implemented and accepted for the repository runtime, public Agent contracts, maintained Playground pages, responsive browser viewport, lifecycle checks, and repeatable performance fixtures. Chromium, Firefox 144, WebKit 26, and native Safari 26.6.2 checks pass. Physical iOS/Android checks remain a separately recorded host/device follow-up.
|
|
8
|
+
|
|
9
|
+
## Automated Evidence
|
|
10
|
+
|
|
11
|
+
- `npm run agent:check`: passed.
|
|
12
|
+
- `git diff --check`: passed.
|
|
13
|
+
- Core tests: 51 passed, 0 failed.
|
|
14
|
+
- Agent documentation check: 16 charts, 24 commands, and 7 schemas.
|
|
15
|
+
- Syntax check: every `src/*.mjs` file passed `node --check`.
|
|
16
|
+
- Node.js 18.20.8, 20.20.2, and 22.22.2: Agent checks and the executable Agent workflow passed.
|
|
17
|
+
- Package-consumer coverage: public ESM imports, capability discovery, planning, validation, explanation, chart creation, lifecycle, and active Playground entry files are covered by the core suite.
|
|
18
|
+
|
|
19
|
+
## Browser Evidence
|
|
20
|
+
|
|
21
|
+
- Environments: Codex in-app Chromium, Playwright Firefox 144, and Playwright WebKit 26 against `npm run playground` on `127.0.0.1:3000`.
|
|
22
|
+
- Full Gallery: all 16 public chart types rendered; 0 error cards and no uncaught page errors.
|
|
23
|
+
- Renderer switch: all Gallery cases rendered with SVG when forced; default mixed SVG/Canvas cases also passed.
|
|
24
|
+
- Responsive checks: desktop and a true 390 x 844 viewport completed without body overflow.
|
|
25
|
+
- Agent Workbench: `id` remained a stable identifier, `month` was selected as the dimension, validation passed, record IDs were preserved, and the expected missing-value warning remained visible.
|
|
26
|
+
- Interaction Lab: zoom in, zoom out to the full window, pan, reset, selection clearing, keyboard behavior, and Canvas switching passed.
|
|
27
|
+
- Accessibility Lab: Line, Pie, Heatmap, Radar, Gantt, and Flow exposed role, accessible label, focusability, and family-specific semantic output.
|
|
28
|
+
- Regression pages: Foundational Gallery, Project Intelligence, Business Editing, and Diagram Editor loaded with ready states and no uncaught page errors.
|
|
29
|
+
- Lifecycle fixture: 25 create/destroy cycles left 0 chart children and 0 tooltips.
|
|
30
|
+
- Firefox/WebKit matrix: 22/22 desktop and 390 x 844 touch-viewport page scenarios passed after fixing Project Intelligence grid shrink behavior and redundant ResizeObserver rendering.
|
|
31
|
+
- Native Safari 26.6.2: 11/11 desktop and 390 x 844 page scenarios passed without horizontal overflow.
|
|
32
|
+
|
|
33
|
+
## Performance Sample
|
|
34
|
+
|
|
35
|
+
These are local acceptance samples, not universal device budgets.
|
|
36
|
+
|
|
37
|
+
| Scenario | Renderer | Create | Resize | JSON export |
|
|
38
|
+
| --- | --- | ---: | ---: | ---: |
|
|
39
|
+
| Line, 100 rows | Canvas | 1.7 ms | 0.6 ms | 0.1 ms |
|
|
40
|
+
| Line, 1,000 rows | Canvas | 6.3 ms | 4.9 ms | 0.3 ms |
|
|
41
|
+
| Line, 5,000 rows, Firefox | Canvas | 110 ms | 96 ms | 3 ms |
|
|
42
|
+
| Line, 5,000 rows, WebKit | Canvas | 81 ms | 75 ms | 2 ms |
|
|
43
|
+
| Heatmap, 5,000 rows, Firefox | Canvas | 19 ms | 15 ms | 2 ms |
|
|
44
|
+
| Heatmap, 5,000 rows, WebKit | Canvas | 15 ms | 10 ms | 2 ms |
|
|
45
|
+
|
|
46
|
+
The Performance Lab also includes repeatable 5,000-row Line, Heatmap, Gantt, and Diagram scenarios for release-host measurements.
|
|
47
|
+
|
|
48
|
+
## Preview
|
|
49
|
+
|
|
50
|
+
Start the no-cache static server from the repository root:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm run playground
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
- Home: `http://localhost:3000/playground/index.html`
|
|
57
|
+
- Full Gallery: `http://localhost:3000/playground/project-gallery.html`
|
|
58
|
+
- Agent Workbench: `http://localhost:3000/playground/agent-workbench.html`
|
|
59
|
+
- Interaction Lab: `http://localhost:3000/playground/interaction-lab.html`
|
|
60
|
+
- Accessibility Lab: `http://localhost:3000/playground/accessibility-lab.html`
|
|
61
|
+
- Performance Lab: `http://localhost:3000/playground/performance-lab.html`
|
|
62
|
+
|
|
63
|
+
## Post-release Host/Device Follow-up
|
|
64
|
+
|
|
65
|
+
- Physical-device touch acceptance on iOS and Android.
|
|
66
|
+
- Release-host performance budgets across representative low-end and high-end devices.
|
|
67
|
+
|
|
68
|
+
These checks remain important integration evidence, but the three-engine browser matrix, native Safari run, responsive touch viewport, and deterministic local performance fixtures are sufficient for the 2.0 source release.
|