Documents moving the repo from Windows/other dev machines to macOS and
driving a real iPhone end-to-end via Appium + WebDriverAgent: Xcode/Appium
toolchain setup, WDA signing (using the extra_capabilities passthrough
already supported by WDADriverConfig), minimal real-device verification,
and starting a Runtime API that explicitly registers and connects the
device (neither the Console nor REST API currently expose a
connect/disconnect endpoint). Also covers multi-device port allocation,
common failure modes, and a completion checklist. README gains a pointer
to it under a new "Operator Guides" section.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Replaces the stub Planner's fixed describe_screen/[] behavior with a real
decision-maker: AIPlanner uses native tool/function calling (Anthropic or
OpenAI, pluggable via AI_PLANNER_PROVIDER) to select exactly one grounded
action per turn, with an explicit finish_task(success, reason) tool for
completion/failure instead of an ambiguous "no tool call" signal. Default
disabled (AI_PLANNER_ENABLED=false) and additive; TaskRunner falls back to
the existing stub Planner unchanged when disabled.
Amends CONSTITUTION.md's Perception Boundary with one narrow exception:
only the AI Planner may receive the current step's raw screenshot bytes
alongside Scene, for vision-grounded coordinate grounding. Also fixes a
latent gap in TaskRunner.run(): observe/plan exceptions are now caught per
iteration and turned into a failed task with a failure_reason, instead of
propagating uncaught.
openspec change: ai-planner-runtime.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Consumes the external Subscription Platform as source of truth for skill
content; reuses skills_learning domain models (extended with KnowledgeSkill)
and workflow.skill_exec resolver. HTTP/MCP deps land in api/ per
CONSTITUTION.md; synced skills use a physically separate SQLite file
(tasks/skills.sqlite3) to preserve the skill-authoring capability boundary.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Existing tests only exercised perception.scene_builder.build_scene()
directly or substituted a FakePerceptionProvider, so the real provider
port classes had no direct coverage. Both were already correct on
manual inspection; this closes the coverage gap.
openspec: perception-provider capability, archived change device-agent-runtime-foundation
- divergence_tolerance was loaded from config but diff_flow_versions
never consulted it, so structural_divergence was always plain
sequence-equality regardless of the configured tolerance. Now
actually applied per design.md D4.
- The skill-catalog-subscription isolation guard test asserted
'skills.catalog' not in sys.modules, which is vacuously true since
that module doesn't exist anywhere yet. Replaced with a real check
against store.py's actual imports.
openspec: skill-versioning capability, archived change skill-learning-runtime
- _with_known_widgets_only used to discard the entire SemanticScene
(returning None) when filtering dangling-element-id widgets left an
empty list, losing valid page/intents. Now returns a SemanticScene
with widgets=[] instead, matching design.md's 'dropped, not a hard
failure' intent.
- Removed _SDK_UNAVAILABLE_EXCEPTION_NAMES, dead code left over from an
abandoned name-based exception-matching approach; the blanket except
Exception already maps every SDK failure correctly.
openspec: semantic-scene capability, archived change semantic-scene-runtime
- driver/registry.py never actually defined register_driver_type, so
the plugin-system's 'driver plugin registered successfully' scenario
was unreachable in production (only simulated via test monkeypatch).
Added a real implementation wired into the existing driver factory
registry.
- PluginRegistry.discover() only caught PluginValidationError/
DuplicatePluginError, so a driver-kind manifest that failed wiring
(DriverRegistryUnavailableError/PluginTargetResolutionError) aborted
the whole scan, silently skipping co-located tool/skill manifests.
Now caught and skipped per manifest instead.
openspec: plugin-system capability, archived change cloud-runtime