Repository navigation
Open
Labels
app/idPackage/app: id (pkgs/ or apps/ in this repo)Package/app: id (pkgs/ or apps/ in this repo)kind/designA design proposal (design-architect): multi-step, phased, decision-bearingA design proposal (design-architect): multi-step, phased, decision-bearingpriority/normalOrdinary priority (the default)Ordinary priority (the default)queue/parkedQueue task is parked (waiting on CI, time, or an event)Queue task is parked (waiting on CI, time, or an event)status/parkedDeliberately paused with a recorded resume conditionDeliberately paused with a recorded resume conditiontask/triageQueue packet kind: verify, reproduce, and route this itemQueue packet kind: verify, reproduce, and route this itemwork/assignedQueue worker lifecycle stateQueue worker lifecycle state
Description
Part of the worlds design program: #5955. Wave-2 follow-up from the prior-art research (Lane B item 8); parent topic issue: #5958. Research source: workspace/scratch/worlds-capabilities-brief-2026-11-04/prior-art-research.md.
Scope
#5958 settles declaration-vs-discovery as a design; this follow-up specifies the discovery tool itself:
- Technique: call-graph reachability over an explicit capability namespace. This works in Roc because all effects are named platform functions — scan a library's/world's transitive closure against the platform function namespace (
pkgs/id/crates/id-core/src/world_caps.rs) and emit the used subset in registry format. (Contrast Android's binary/API static analysis — noisy, needs an API→capability mapping table; and Koka-style type inference — exact but unavailable in Roc.) - Over-approximation: only via first-class function passing — the scan must state how it treats platform functions passed as values (the programming-model design, id: design: programming model — pure libraries with platform/context passed in by the core app #5963, constrains this).
- Output contract: the used-set in exactly the registry schema id: design: capability model — requested vs discovered-used sets, registry listing, custom-compiled platforms #5958 defines, diffable against the declared set (over-declaration surfacing is a sibling design point in the permission-UX child of id: design program: worlds — advanced Roc libraries, capabilities, permissions, dynamic user functions, licensing (2026-11-04 brief) #5955).
- Dynamic dispatch / runtime loading break exactness — see the dynamic-loading exception policy follow-up under id: design program: worlds — advanced Roc libraries, capabilities, permissions, dynamic user functions, licensing (2026-11-04 brief) #5955 for how uncertified libraries are marked.
Done looks like
A tool spec (inputs, algorithm, over-approximation rules, output schema) sufficient to implement without further design decisions.
Metadata
Metadata
Assignees
Labels
app/idPackage/app: id (pkgs/ or apps/ in this repo)Package/app: id (pkgs/ or apps/ in this repo)kind/designA design proposal (design-architect): multi-step, phased, decision-bearingA design proposal (design-architect): multi-step, phased, decision-bearingpriority/normalOrdinary priority (the default)Ordinary priority (the default)queue/parkedQueue task is parked (waiting on CI, time, or an event)Queue task is parked (waiting on CI, time, or an event)status/parkedDeliberately paused with a recorded resume conditionDeliberately paused with a recorded resume conditiontask/triageQueue packet kind: verify, reproduce, and route this itemQueue packet kind: verify, reproduce, and route this itemwork/assignedQueue worker lifecycle stateQueue worker lifecycle state
Activity
developing-today commentedon Nov 5, 2026
CODE-1664
dezren39 commentedon Nov 5, 2026
🤖 Agent note · handed off
developing-today commentedon Nov 5, 2026
🤖 Agent note · handed off
109 remaining items
dezren39 commentedon Nov 6, 2026
🤖 Agent note · handed off
dezren39 commentedon Nov 6, 2026
🤖 Agent note · picked up
dezren39 commentedon Nov 6, 2026
🤖 Agent note · handed off