Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@ dist/
.superpowers/
.dao/

docs/superpowers

# Patch paths mirror Chromium and can legitimately contain otherwise ignored
# directory names. Keep these canonical patch files visible to Git.
!src/patches/google_apis/gcm/engine/
Expand Down
13 changes: 13 additions & 0 deletions docs/feature-checklist.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,19 @@ Flagship feature. C++ services + `dao://dao-agent` WebUI + vendor runtime.
| ☐ | Dream material privacy and excluded-domain filtering | `src/dao/.../agent/dao_dream_material_collector.*`, `dao_dream_domain_utils.*`, `dao_pref_names.*` | — | Excluded domains are normalized and removed before titles/search queries/debug material leave C++; stats do not leak excluded domain names |
| ☐ | Dream one-minute recap, history, rerun, sharing, and habit feedback | `dao_dream_app.ts`, `dao_dream_runner.ts`, `dao_dream_service.cc`, `dao_share_image.ts`, `dao_agent_ui.cc` | — | `dao://dream` loads up to 371 daily reports for the 53-week activity heatmap plus 53 weekly reports for the shared 14-item history rail; report cells show localized date and active-duration tooltips on pointer hover and keyboard focus, legacy reports without duration show the unavailable state, and pointer leave, blur, or heatmap scrolling dismisses the tooltip; structured summaries, measured per-period foreground rhythm (with legacy model-estimate fallback), uncapped aggregate counts, themes, stats, and memory candidates render; candidates affect memory only after confirmation and rejection preserves existing memory; legacy markdown-only reports derive useful recap content; daily/weekly selection, rerun replacement/failure preservation, share image, full-report disclosure, domain exclusion, debug view, and feedback actions work |

### Dao Home Personal Web Runtime

| ✔ | Feature | Patch(es) / Source | Risk | Verify after upgrade |
|---|---------|--------------------|------|----------------------|
| ☐ | URL-only regular-Profile Home host and internal routes | `home/dao_home_project_*`, `webui/dao_home_ui.*`, `resources/home/`, WebUI config and pak patches | 🟡 | Type `dao://home/` and an internal path; both load the same project route. Confirm no discovery entry exists and Incognito/Guest cannot create the trusted or untrusted Home WebUIs |
| ☐ | Contextual Home Agent tools, built-in design direction, element picking, and exact owner binding | `dao_agent_ui.*`, `home/dao_home_agent_tools.*`, `resources/agent/{home_tools,dao_page_capture}.ts`, `resources/home/generated_runtime.ts`, Settings Dao page patches | 🔴 | Run Home tool, page-capture, generated-runtime, and Settings WebUI tests; from an empty Home, verify the active turn receives the required manifest, direct-run runtime, V4A grammar, strict CSP/opaque-origin rules, apply-preview-publish contract, and bundled design-director quality gate without installing or selecting a skill; generated designs use one coherent hierarchy and spacing/type/color/radius system, avoid generic AI-page defaults, and silently review the draft before preview; generated interaction uses project script files, `dao.session`, and confirmed navigation rather than inline script, Web Storage, or raw network APIs, and a rejected patch exposes its stable error code to the Agent; on a published Home, verify both composer element-context and element-screenshot pickers create a temporary trusted cover above the generated iframe, hit-test through the fixed runtime without dispatching a project click, remove the cover after selection/cancellation, prefer a stable `data-dao-node-id` that resolves through `home_get_selected_element`, fall back to a bounded unique CSS locator for an existing project without node IDs, suppress normal navigation, and offset the crop into the top-level viewport; confirm ordinary Home use has no picker cover or click interceptor, the legacy UI exception permits only the exact regular-Profile `dao://home` target, and other internal pages remain non-automatable; verify the complete Home group, including `home_add_asset`, can be disabled; focus the Agent sidebar after submitting from Home and confirm the first `home_get_manifest` succeeds without asking to switch tabs, then focus another browser window and confirm the turn remains pinned to its initiating window; macOS occlusion keeps the selected Home lease valid, while a true hidden state, tab/profile/navigation change, or stale turn fails closed; verify a re-entrant manual or command-bar submit cannot replace an active native turn, stale revision and post-async retargeting fail closed, owner loss or WebUI callback timeout while `beginAgentTurn` awaits the Home snapshot releases the browser-control lease, switch tabs during a pending publish to block the store commit, and confirm `home_publish` rejects the exact draft until `home_preview` has completed in the active isolated frame |
| ☐ | Versioned project transactions and ownership surfaces | `home/dao_home_project_store.*`, `dao_home_project_service.*`, `resources/home/dao_home_app.ts` | 🟡 | Run `DaoHomeProjectStoreTest.*`; verify immutable publication, stale-base rejection, exact-hunk patch drafts, atomic replacement of one or multiple existing text files after reading every target, rejection of empty, duplicate, missing, binary, or traversal replacement targets, validated asset drafts, new-head rollback, rollback cancellation removes its internal temporary draft, read-only source viewing and version diff, explicit import/restore confirmation, export/import round-trips bounded revision files into a new local head only after isolated preview, rejects a current-file map that differs from the exported head, a non-head exported revision, or a disconnected parent/restore graph, cleans temporary imported draft/history files after failure or Home teardown, leaves the current head unchanged after a runtime-broken import, excludes grants from export, and clears existing grants on import; choose **Reset Home**, verify cancellation changes nothing, then confirm that the empty state returns and all revisions, drafts, grants, and diagnostics are deleted, while a failed or stale reset preserves the current project |
| ☐ | One-shot privacy-minimized feed-first history bootstrap | `home/dao_home_history_material.*`, `dao_home_bootstrap_transaction.*`, `dao_home_project_store.*`, `dao_home_ui.cc`, `resources/agent/home_tools.ts` | 🔴 | Run `DaoHomeHistoryMaterialTest.*`, `DaoHomeProjectStoreTest.PreparesCanonicalHistoryBootstrapConnectors`, `DaoHomeBrowserTest.HistoryBootstrap*`, and `home_tools.test.ts`; verify the exact 30-day/HTTP(S) boundary; at most 12 stable canonical origin-root launch targets and three feed candidates discovered without a domain catalog from distinct paths in a repeated route family, with bounded reducer state, scheme/port-separated origins, reserved candidate slots, and generic semantic exclusions keeping sensitive and utility routes launch-only; candidates carry browser-owned result schemas and generic collection/intent/kind hints but no browser-owned collector code; the Agent proposes exactly one complete same-site collection URL and supported feed intent/kind set per candidate, while the trusted host rejects omissions, duplicates, credentials, unsupported semantics, and cross-site URLs before binding the proposal into canonical read-only permissions and the grouped user decision; content-site following/subscription intents never degrade to discovery, trending, navigation, promotional links, or undeclared content kinds; no browsing title, count, time bucket, path, or full visited URL in the Agent brief; the generation contract uses familiar Home orientation/action/shortcut/content patterns but selects its layout from content and viewport without mandatory sidebars or fixed columns, and a disconnected state cannot dominate the viewport as an oversized empty panel; the Agent authors each collector under `connectors/<id>.js` against the fixed page RPC, puts each personalized `queryAll` card-root selector directly in a quoted string literal for static auditing, uses semantic selectors with a bounded link fallback only for general feeds, and keeps personalized intents inside structured semantic feed-card/activity containers while the trusted validator rejects generic and content-path-constrained document/main/body/html link queries; the first grouped request preserves valid authored code while binding canonical origins, read-only permissions, and schemas; missing, empty, or structurally unsafe authored modules are omitted per source so another valid candidate still reaches the grouped permission and test flow, model-authored permission widening is overwritten, and the detached regular-Profile page reuses the user's existing signed-in session without exposing credentials; only a brief with no candidates begins with an empty selection; explicit-only exact active-visible-document, external-prompt claim-token, and Agent-turn ownership; rejection of a normal or replacement prompt; one-shot consumption and no disk persistence; grouped selection has no ordinary bridge timeout, rejects the ordinary source-access path, and supports honest feed-empty fallbacks for rejected/auth/runtime/schema failures, including an idempotent empty proposal request on the same provisional draft that dismisses a stale pending dialog and permits a connector-free final preview; before final preview, the browser replaces final connector declarations with only successful tested definitions and copies their exact provisional modules, schemas, and limits so the model cannot cause fingerprint drift; final preview rewrites the canonical experience from the ranked actions and successful connectors, requires every launch target exactly once as a direct-navigation-free button with the canonical first four visible and focusable in the first viewport, a visible non-empty feed region, and exactly one matching `data-dao-source-slot` plus `data-dao-connector` marker per successful source even when its current result is empty, and returns to final-build state after a failed preview so a replacement can be tried without requesting or testing sources again; exactly one final `history_bootstrap` revision; and temporary draft/receipt cleanup on every cancel/stale/owner-loss terminal path |
| ☐ | Untrusted generated app and connector sandboxes | `resources/home/generated_runtime.ts`, `connector_sandbox.ts`, `dao_home_ui.cc`, untrusted WebUI config patch | 🔴 | Confirm generated app and connector have separate `chrome-untrusted://` origins, no WebUI bindings/arbitrary network access, strict parent/origin/revision RPC validation, and generated code cannot modify project files or grant permissions; verify the published canvas adds no inset or border inside the browser-owned content card and a project with no CSS receives a zero computed body margin while explicit project spacing still works; preview a valid draft, reject a top-level throw even when generated code first posts a forged success verdict, reject preview-frame replacement, require the exact canonical action/source-slot semantics, reject external anchors, form actions, and submitter `formaction` overrides, click a canonical action whose project script first installs a hostile `window` capture handler and whose HTML contains a comment-only pseudo-`head`, verify it opens directly without a confirmation dialog, verify arbitrary generated navigation still requires confirmation, and confirm draft resources stop serving after success, failure, cancellation, or timeout |
| ☐ | Trusted source permission transaction | `dao_home_project_service.*`, `dao_home_project_store.*`, `dao_home_agent_tools.cc`, `dao_home_app.ts` | 🔴 | Request one or multiple new sources from Agent; verify only trusted Home shows origin/path/capability/active-only/no-write scope plus exact old-to-new values for every increased budget, cancel does not publish, every expanded connector requires exact approval, isolated preview, and a successful draft test before one atomic publish, decreased budgets preserve the narrower grant, and rollback/import never restore grants |
| ☐ | Detached authenticated connector execution and lifecycle | `home/dao_home_connector_executor.*`, `resources/home/connector_host.ts`, `dao_home_browsertest.cc` | 🔴 | Run focused `DaoHomeBrowserTest` connector and history lifecycle fixtures; verify the empty active Home can test its first connector draft, regular-Profile session use without focus/tab changes, same-scope navigation, fixed DOM operations including asynchronous `waitFor`, `queryAll` root text/href/media shorthands plus ordered field fallbacks and descendant selectors, password/login rejection as `auth_required`, schema/size/item/operation/scroll/time budgets, duplicate collection coalescing including completed requests, the completed-result cache evicts in the same 16-entry order as native executors and reruns evicted keys, sandbox-hang timeout, finish snapshots unique media URLs sequentially, rejects oversized canvases before encoding, enforces the aggregate 5 MiB session budget, destroys the source page, keeps opaque handles resolvable after later source navigation, cancels draft execution on Agent turn end/replacement without cancelling an in-flight published Home connector, and tears down both executor classes on Home navigation/tab switch/close |
| ☐ | Home source/session data minimization and explicit repair | `resources/home/dao_home_app.ts`, `generated_runtime.ts`, `dao_home_connector_executor.*`, `dao_home_agent_tools.*`, `dao_home_sample_shape.*` | 🔴 | Verify no refresh timer or background crawl, no model call on open/error, generated feed scripts use an independent ten-minute `dao.session` cache per connector (including successful empty arrays but excluding errors), the trusted host reuses identical successful collections for exactly ten minutes and refreshes them on the next foreground request after expiry, validated launch actions and collected feed-item clicks open directly while other generated HTTP(S) navigation requires trusted confirmation, current collection and Agent sampling only while Home is active, successful Agent sampling exposes bounded type and empty/non-empty `sample_shape` metadata without raw values, dynamic keys, media handles, or raw error messages, a unique live sentinel appears in no draft/revision/export file, diagnostics remain bounded and non-content, **Ask Dao to fix** is user-triggered, no raw media URL escapes, and both untrusted frames plus source results/session values/selection/temporary pages clear when active ownership is lost and recreate on return |

## 4. Picture-in-Picture Enhancements

| ✔ | Feature | Patch(es) / Source | Risk | Verify after upgrade |
Expand Down
Loading
Loading