taphound 0.2.0-dev.1 → 0.2.0-dev.12

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.
Files changed (467) hide show
  1. package/README.md +49 -149
  2. package/README.zh-CN.md +47 -147
  3. package/assets/skills/taphound-case-suite/SKILL.md +363 -0
  4. package/assets/skills/taphound-case-suite/schemas/base-flow-record.schema.json +22 -0
  5. package/assets/skills/taphound-case-suite/schemas/case-catalog.schema.json +26 -0
  6. package/assets/skills/taphound-case-suite/schemas/case-ledger.schema.json +158 -0
  7. package/assets/skills/taphound-case-suite/schemas/suite-input.schema.json +41 -0
  8. package/assets/skills/taphound-case-suite/schemas/transition.schema.json +61 -0
  9. package/assets/skills/taphound-case-suite/scripts/ledger.mjs +1207 -0
  10. package/assets/skills/taphound-case-suite/templates/base-flow-record.example.json +20 -0
  11. package/assets/skills/taphound-case-suite/templates/suite-input.example.json +27 -0
  12. package/assets/skills/taphound-case-suite/templates/transition.example.json +8 -0
  13. package/assets/skills/taphound-flash/SKILL.md +115 -0
  14. package/assets/skills/taphound-flash/scripts/flash.mjs +585 -0
  15. package/assets/skills/taphound-flash/templates/flash-plan.example.json +15 -0
  16. package/assets/skills/taphound-journey-brief-author/CONTEXT-GUIDE.md +471 -0
  17. package/assets/skills/taphound-journey-brief-author/SKILL.md +494 -0
  18. package/assets/skills/taphound-journey-brief-author/prompts/brief-author-role.md +96 -0
  19. package/assets/skills/taphound-journey-brief-author/prompts/brief-author-role.zh-CN.md +80 -0
  20. package/assets/skills/taphound-journey-brief-author/prompts/context-analyze-project.md +309 -0
  21. package/assets/skills/taphound-journey-brief-author/schemas/context-refresh-result.json +123 -0
  22. package/assets/skills/taphound-journey-brief-author/schemas/project-context-module.json +192 -0
  23. package/assets/skills/taphound-journey-brief-author/schemas/project-context.json +152 -0
  24. package/assets/skills/taphound-journey-brief-author/templates/project-context-module.example.json +58 -0
  25. package/assets/skills/taphound-journey-brief-author/templates/project-context.example.json +51 -0
  26. package/assets/skills/taphound-journey-brief-author/templates/taphound-journey-brief.template.md +63 -0
  27. package/assets/skills/taphound-journey-generator/SKILL.md +507 -0
  28. package/assets/skills/{taphound-ai-journey → taphound-journey-generator}/prompts/check-completion.md +3 -0
  29. package/assets/skills/taphound-journey-generator/prompts/consume-journey-brief.md +52 -0
  30. package/assets/skills/taphound-journey-generator/prompts/generate-step.md +211 -0
  31. package/assets/skills/taphound-journey-generator/prompts/select-flow.md +91 -0
  32. package/assets/skills/taphound-journey-generator/references/bridge.md +35 -0
  33. package/assets/skills/taphound-journey-generator/references/mid-session.md +44 -0
  34. package/assets/skills/taphound-journey-generator/schemas/external-flow.json +37 -0
  35. package/assets/skills/taphound-journey-generator/schemas/flow.json +28 -0
  36. package/assets/skills/taphound-journey-generator/schemas/journey-source.json +25 -0
  37. package/assets/skills/{taphound-ai-journey → taphound-journey-generator}/schemas/observe-output.json +13 -4
  38. package/assets/skills/{taphound-ai-journey → taphound-journey-generator}/schemas/proposed-step-envelope.json +127 -5
  39. package/assets/skills/taphound-journey-generator/scripts/envelope.mjs +578 -0
  40. package/assets/skills/taphound-journey-generator/templates/external-flow.example.json +22 -0
  41. package/assets/skills/taphound-journey-generator/templates/flow.example.json +22 -0
  42. package/assets/skills/taphound-journey-generator/templates/journey-source.example.json +17 -0
  43. package/assets/skills/taphound-journey-generator/templates/taphound-journey-brief.example.md +70 -0
  44. package/assets/skills/taphound-verify-change/SKILL.md +91 -0
  45. package/assets/skills/taphound-verify-change/references/accept.md +38 -0
  46. package/assets/skills/taphound-verify-change/references/preserve.md +357 -0
  47. package/assets/skills/taphound-verify-change/schemas/workflow-manifest.schema.json +295 -0
  48. package/assets/skills/taphound-verify-change/scripts/handoff.mjs +482 -0
  49. package/assets/skills/taphound-verify-change/scripts/ui-refactor.mjs +505 -0
  50. package/dist/adapters/adb/adb-adapter.d.ts +16 -2
  51. package/dist/adapters/adb/adb-adapter.js +199 -0
  52. package/dist/adapters/adb/system-uiautomator-snapshot-provider.d.ts +13 -0
  53. package/dist/adapters/adb/system-uiautomator-snapshot-provider.js +122 -0
  54. package/dist/adapters/adb/ui-automator-parser.d.ts +3 -0
  55. package/dist/adapters/adb/ui-automator-parser.js +160 -0
  56. package/dist/adapters/adb/window-topology-parser.d.ts +2 -0
  57. package/dist/adapters/adb/window-topology-parser.js +101 -0
  58. package/dist/adapters/android-cli/android-cli-adapter.d.ts +16 -8
  59. package/dist/adapters/android-cli/android-cli-adapter.js +137 -15
  60. package/dist/adapters/android-cli/android-cli-snapshot-provider.d.ts +9 -0
  61. package/dist/adapters/android-cli/android-cli-snapshot-provider.js +99 -0
  62. package/dist/adapters/android-cli/layout-parser.js +12 -8
  63. package/dist/adapters/appium/appium-doctor.d.ts +7 -0
  64. package/dist/adapters/appium/appium-doctor.js +128 -0
  65. package/dist/adapters/appium/appium-ui-snapshot-provider.d.ts +42 -0
  66. package/dist/adapters/appium/appium-ui-snapshot-provider.js +309 -0
  67. package/dist/adapters/camera/camera-probe-adapter.d.ts +18 -0
  68. package/dist/adapters/camera/camera-probe-adapter.js +286 -0
  69. package/dist/adapters/filesystem/artifact-store.js +40 -1
  70. package/dist/adapters/filesystem/context-document-writer.d.ts +15 -0
  71. package/dist/adapters/filesystem/context-document-writer.js +112 -0
  72. package/dist/adapters/filesystem/diagnostics-journal.d.ts +17 -0
  73. package/dist/adapters/filesystem/diagnostics-journal.js +130 -0
  74. package/dist/adapters/filesystem/external-flow-registry.d.ts +17 -0
  75. package/dist/adapters/filesystem/external-flow-registry.js +325 -0
  76. package/dist/adapters/filesystem/generation-session-store.d.ts +17 -11
  77. package/dist/adapters/filesystem/generation-session-store.js +281 -855
  78. package/dist/adapters/filesystem/generation-store/session-lock.d.ts +29 -0
  79. package/dist/adapters/filesystem/generation-store/session-lock.js +202 -0
  80. package/dist/adapters/filesystem/generation-store/session-transitions.d.ts +24 -0
  81. package/dist/adapters/filesystem/generation-store/session-transitions.js +340 -0
  82. package/dist/adapters/filesystem/generation-store/store-files.d.ts +50 -0
  83. package/dist/adapters/filesystem/generation-store/store-files.js +363 -0
  84. package/dist/adapters/filesystem/journey-composition-store.d.ts +23 -0
  85. package/dist/adapters/filesystem/journey-composition-store.js +151 -0
  86. package/dist/adapters/filesystem/knowledge-registry.d.ts +12 -0
  87. package/dist/adapters/filesystem/knowledge-registry.js +223 -0
  88. package/dist/adapters/filesystem/project-bound-file.js +3 -5
  89. package/dist/adapters/filesystem/project-file-inspector.d.ts +2 -0
  90. package/dist/adapters/filesystem/project-file-inspector.js +57 -28
  91. package/dist/adapters/filesystem/project-identity-inspector.d.ts +7 -0
  92. package/dist/adapters/filesystem/project-identity-inspector.js +215 -0
  93. package/dist/adapters/filesystem/project-inventory-inspector.d.ts +8 -0
  94. package/dist/adapters/filesystem/project-inventory-inspector.js +93 -0
  95. package/dist/adapters/filesystem/project-module-discoverer.d.ts +6 -0
  96. package/dist/adapters/filesystem/project-module-discoverer.js +158 -0
  97. package/dist/adapters/filesystem/skill-installer.d.ts +7 -2
  98. package/dist/adapters/filesystem/skill-installer.js +40 -11
  99. package/dist/adapters/filesystem/workspace-layout.d.ts +7 -0
  100. package/dist/adapters/filesystem/workspace-layout.js +57 -0
  101. package/dist/adapters/git/node-git-diff.d.ts +17 -0
  102. package/dist/adapters/git/node-git-diff.js +114 -0
  103. package/dist/adapters/process/node-detached-process-launcher.d.ts +6 -0
  104. package/dist/adapters/process/node-detached-process-launcher.js +96 -0
  105. package/dist/adapters/process/node-process-runner.js +11 -2
  106. package/dist/adapters/prompt/inquirer-align-prompt.d.ts +27 -0
  107. package/dist/adapters/prompt/inquirer-align-prompt.js +65 -0
  108. package/dist/adapters/prompt/inquirer-generation-prompt.js +3 -0
  109. package/dist/adapters/prompt/inquirer-recorder-prompt.d.ts +9 -1
  110. package/dist/adapters/prompt/inquirer-recorder-prompt.js +63 -0
  111. package/dist/adapters/runtime/adb-runtime-backend.d.ts +67 -0
  112. package/dist/adapters/runtime/adb-runtime-backend.js +206 -0
  113. package/dist/adapters/runtime/fake-runtime-backend.d.ts +87 -0
  114. package/dist/adapters/runtime/fake-runtime-backend.js +240 -0
  115. package/dist/adapters/runtime/mobile-mcp/mcp-tool-client.d.ts +45 -0
  116. package/dist/adapters/runtime/mobile-mcp/mcp-tool-client.js +153 -0
  117. package/dist/adapters/runtime/mobile-mcp/mobile-mcp-errors.d.ts +23 -0
  118. package/dist/adapters/runtime/mobile-mcp/mobile-mcp-errors.js +39 -0
  119. package/dist/adapters/runtime/mobile-mcp/mobile-mcp-responses.d.ts +20 -0
  120. package/dist/adapters/runtime/mobile-mcp/mobile-mcp-responses.js +180 -0
  121. package/dist/adapters/runtime/mobile-mcp/mobile-mcp-runtime-backend.d.ts +78 -0
  122. package/dist/adapters/runtime/mobile-mcp/mobile-mcp-runtime-backend.js +379 -0
  123. package/dist/adapters/runtime/mobile-mcp/mobile-mcp-tools.d.ts +46 -0
  124. package/dist/adapters/runtime/session-adb-view.d.ts +53 -0
  125. package/dist/adapters/runtime/session-adb-view.js +193 -0
  126. package/dist/adapters/runtime/session-backed-ports.d.ts +21 -0
  127. package/dist/adapters/runtime/session-backed-ports.js +43 -0
  128. package/dist/adapters/runtime/shared-session-runtime-backend.d.ts +12 -0
  129. package/dist/adapters/runtime/shared-session-runtime-backend.js +64 -0
  130. package/dist/adapters/ui/auto-ui-snapshot-provider.d.ts +8 -0
  131. package/dist/adapters/ui/auto-ui-snapshot-provider.js +48 -0
  132. package/dist/adapters/ui/device-layout-temp.d.ts +6 -0
  133. package/dist/adapters/ui/device-layout-temp.js +18 -0
  134. package/dist/adapters/ui/device-ui-environment.d.ts +13 -0
  135. package/dist/adapters/ui/device-ui-environment.js +81 -0
  136. package/dist/adapters/ui/layout-normalization.d.ts +9 -0
  137. package/dist/adapters/ui/layout-normalization.js +44 -0
  138. package/dist/adapters/ui/ui-snapshot-error.d.ts +11 -0
  139. package/dist/adapters/ui/ui-snapshot-error.js +12 -0
  140. package/dist/adapters/ui/ui-snapshot-support.d.ts +15 -0
  141. package/dist/adapters/ui/ui-snapshot-support.js +12 -0
  142. package/dist/application/align/align-service.d.ts +42 -0
  143. package/dist/application/align/align-service.js +106 -0
  144. package/dist/application/assertion/expectation-evaluator.d.ts +18 -5
  145. package/dist/application/assertion/expectation-evaluator.js +156 -18
  146. package/dist/application/assertion/guarded-expectation.d.ts +45 -0
  147. package/dist/application/assertion/guarded-expectation.js +74 -0
  148. package/dist/application/checkpoint/baseline-capturer.d.ts +26 -0
  149. package/dist/application/checkpoint/baseline-capturer.js +163 -0
  150. package/dist/application/checkpoint/baseline-error.d.ts +5 -0
  151. package/dist/application/checkpoint/baseline-error.js +8 -0
  152. package/dist/application/checkpoint/baseline-service.d.ts +31 -0
  153. package/dist/application/checkpoint/baseline-service.js +147 -0
  154. package/dist/application/checkpoint/checkpoint-evaluator.d.ts +35 -0
  155. package/dist/application/checkpoint/checkpoint-evaluator.js +415 -0
  156. package/dist/application/checkpoint/regression-comparator.d.ts +18 -0
  157. package/dist/application/checkpoint/regression-comparator.js +192 -0
  158. package/dist/application/collector/logcat-collector.d.ts +22 -1
  159. package/dist/application/collector/logcat-collector.js +103 -15
  160. package/dist/application/collector/logcat-event.d.ts +8 -0
  161. package/dist/application/collector/logcat-event.js +79 -0
  162. package/dist/application/collector/logcat-stop.d.ts +2 -0
  163. package/dist/application/collector/logcat-stop.js +11 -0
  164. package/dist/application/context/context-generator.d.ts +45 -0
  165. package/dist/application/context/context-generator.js +228 -0
  166. package/dist/application/context/context-loader.d.ts +40 -0
  167. package/dist/application/context/context-loader.js +223 -0
  168. package/dist/application/context/context-refresher.d.ts +59 -0
  169. package/dist/application/context/context-refresher.js +349 -0
  170. package/dist/application/context/context-rehasher.d.ts +36 -0
  171. package/dist/application/context/context-rehasher.js +110 -0
  172. package/dist/application/context/context-validator.d.ts +23 -1
  173. package/dist/application/context/context-validator.js +116 -9
  174. package/dist/application/context/evidence-hash.d.ts +1 -0
  175. package/dist/application/context/evidence-hash.js +125 -0
  176. package/dist/application/context/evidence-match.d.ts +9 -0
  177. package/dist/application/context/evidence-match.js +8 -0
  178. package/dist/application/context/shard-identity.d.ts +2 -0
  179. package/dist/application/context/shard-identity.js +7 -0
  180. package/dist/application/contract/contract-loader.d.ts +25 -0
  181. package/dist/application/contract/contract-loader.js +68 -0
  182. package/dist/application/contract/contract-review.d.ts +25 -0
  183. package/dist/application/contract/contract-review.js +51 -0
  184. package/dist/application/contract/contract-verifier.d.ts +53 -0
  185. package/dist/application/contract/contract-verifier.js +645 -0
  186. package/dist/application/devices/resolve-device-assignments.d.ts +21 -0
  187. package/dist/application/devices/resolve-device-assignments.js +60 -0
  188. package/dist/application/diagnosis/failure-classifier.d.ts +23 -0
  189. package/dist/application/diagnosis/failure-classifier.js +179 -0
  190. package/dist/application/diagnostics/diagnostics-exporter.d.ts +29 -0
  191. package/dist/application/diagnostics/diagnostics-exporter.js +283 -0
  192. package/dist/application/diagnostics/ui-capture-telemetry.d.ts +16 -0
  193. package/dist/application/diagnostics/ui-capture-telemetry.js +81 -0
  194. package/dist/application/doctor/doctor-service.d.ts +36 -3
  195. package/dist/application/doctor/doctor-service.js +255 -25
  196. package/dist/application/generation/generation-app-preparer.d.ts +20 -0
  197. package/dist/application/generation/generation-app-preparer.js +28 -0
  198. package/dist/application/generation/generation-config-service.d.ts +21 -0
  199. package/dist/application/generation/generation-config-service.js +53 -0
  200. package/dist/application/generation/generation-confirmation-service.d.ts +14 -3
  201. package/dist/application/generation/generation-confirmation-service.js +109 -24
  202. package/dist/application/generation/generation-context-snapshot.d.ts +6 -0
  203. package/dist/application/generation/generation-context-snapshot.js +29 -0
  204. package/dist/application/generation/generation-finalizer.d.ts +15 -9
  205. package/dist/application/generation/generation-finalizer.js +167 -70
  206. package/dist/application/generation/generation-publisher.js +12 -8
  207. package/dist/application/generation/generation-recovery-service.d.ts +35 -0
  208. package/dist/application/generation/generation-recovery-service.js +144 -0
  209. package/dist/application/generation/generation-reopen-service.d.ts +15 -0
  210. package/dist/application/generation/generation-reopen-service.js +37 -0
  211. package/dist/application/generation/generation-replace-service.d.ts +32 -0
  212. package/dist/application/generation/generation-replace-service.js +116 -0
  213. package/dist/application/generation/generation-starter.d.ts +44 -4
  214. package/dist/application/generation/generation-starter.js +175 -8
  215. package/dist/application/generation/generation-step-executor.d.ts +67 -5
  216. package/dist/application/generation/generation-step-executor.js +471 -108
  217. package/dist/application/generation/proposed-step-validator.js +96 -30
  218. package/dist/application/generation/replay-policy-loader.d.ts +16 -0
  219. package/dist/application/generation/replay-policy-loader.js +29 -0
  220. package/dist/application/generation/risk-evaluator.d.ts +4 -1
  221. package/dist/application/generation/risk-evaluator.js +118 -3
  222. package/dist/application/generation/runtime-observer.d.ts +39 -7
  223. package/dist/application/generation/runtime-observer.js +193 -24
  224. package/dist/application/impact/impact-resolver.d.ts +32 -0
  225. package/dist/application/impact/impact-resolver.js +160 -0
  226. package/dist/application/init/init-service.js +26 -13
  227. package/dist/application/interaction/action-executor.d.ts +3 -2
  228. package/dist/application/interaction/action-executor.js +11 -1
  229. package/dist/application/interaction/action-target.d.ts +17 -0
  230. package/dist/application/interaction/action-target.js +40 -0
  231. package/dist/application/interaction/external-step-runner.d.ts +153 -0
  232. package/dist/application/interaction/external-step-runner.js +332 -0
  233. package/dist/application/interaction/fallback-resolver.d.ts +6 -3
  234. package/dist/application/interaction/fallback-resolver.js +7 -5
  235. package/dist/application/interaction/scroll-to-executor.d.ts +17 -3
  236. package/dist/application/interaction/scroll-to-executor.js +118 -36
  237. package/dist/application/journey/external-flow-resolver.d.ts +25 -0
  238. package/dist/application/journey/external-flow-resolver.js +22 -0
  239. package/dist/application/journey/journey-check-service.d.ts +54 -0
  240. package/dist/application/journey/journey-check-service.js +207 -0
  241. package/dist/application/journey/journey-promoter.d.ts +26 -0
  242. package/dist/application/journey/journey-promoter.js +123 -0
  243. package/dist/application/journey/journey-resolver.d.ts +42 -0
  244. package/dist/application/journey/journey-resolver.js +239 -0
  245. package/dist/application/journey/journey-retirer.d.ts +25 -0
  246. package/dist/application/journey/journey-retirer.js +87 -0
  247. package/dist/application/knowledge/anchor-resolver.d.ts +36 -0
  248. package/dist/application/knowledge/anchor-resolver.js +110 -0
  249. package/dist/application/knowledge/knowledge-loader.d.ts +16 -0
  250. package/dist/application/knowledge/knowledge-loader.js +36 -0
  251. package/dist/application/locator/layout-failure-summary.d.ts +2 -0
  252. package/dist/application/locator/layout-failure-summary.js +67 -0
  253. package/dist/application/locator/layout-traversal.d.ts +11 -0
  254. package/dist/application/locator/layout-traversal.js +18 -0
  255. package/dist/application/locator/locator-resolver.d.ts +13 -1
  256. package/dist/application/locator/locator-resolver.js +182 -18
  257. package/dist/application/observe/observe-service.d.ts +20 -0
  258. package/dist/application/observe/observe-service.js +91 -0
  259. package/dist/application/project/project-describer.d.ts +14 -6
  260. package/dist/application/project/project-describer.js +38 -5
  261. package/dist/application/recognition/screen-detector.d.ts +28 -0
  262. package/dist/application/recognition/screen-detector.js +111 -0
  263. package/dist/application/recorder/locator-selector.js +151 -17
  264. package/dist/application/recorder/recorder-service.d.ts +16 -4
  265. package/dist/application/recorder/recorder-service.js +420 -128
  266. package/dist/application/report/report-writer.d.ts +5 -0
  267. package/dist/application/report/report-writer.js +17 -1
  268. package/dist/application/runtime/cold-launch.d.ts +28 -0
  269. package/dist/application/runtime/cold-launch.js +59 -0
  270. package/dist/application/runtime/step-runner.d.ts +49 -4
  271. package/dist/application/runtime/step-runner.js +721 -130
  272. package/dist/application/runtime/verify-runtime.d.ts +57 -7
  273. package/dist/application/runtime/verify-runtime.js +577 -175
  274. package/dist/application/ui/cached-ui-snapshot-provider.d.ts +45 -0
  275. package/dist/application/ui/cached-ui-snapshot-provider.js +111 -0
  276. package/dist/application/ui/observed-ui-snapshot-provider.d.ts +15 -0
  277. package/dist/application/ui/observed-ui-snapshot-provider.js +66 -0
  278. package/dist/application/ui/ui-snapshot-lifecycle.d.ts +2 -0
  279. package/dist/application/ui/ui-snapshot-lifecycle.js +8 -0
  280. package/dist/application/ui/ui-stability-probe.d.ts +9 -0
  281. package/dist/application/ui/ui-stability-probe.js +24 -0
  282. package/dist/application/wait/idle-advice.d.ts +6 -0
  283. package/dist/application/wait/idle-advice.js +27 -0
  284. package/dist/application/wait/idle-profiles.d.ts +15 -0
  285. package/dist/application/wait/idle-profiles.js +75 -0
  286. package/dist/application/wait/idle-waiter.d.ts +28 -4
  287. package/dist/application/wait/idle-waiter.js +201 -15
  288. package/dist/cli/commands/align.d.ts +3 -0
  289. package/dist/cli/commands/align.js +124 -0
  290. package/dist/cli/commands/baseline.d.ts +3 -0
  291. package/dist/cli/commands/baseline.js +130 -0
  292. package/dist/cli/commands/context.js +300 -27
  293. package/dist/cli/commands/contract.d.ts +3 -0
  294. package/dist/cli/commands/contract.js +120 -0
  295. package/dist/cli/commands/diagnose.d.ts +3 -0
  296. package/dist/cli/commands/diagnose.js +84 -0
  297. package/dist/cli/commands/doctor.js +16 -9
  298. package/dist/cli/commands/failure.d.ts +3 -0
  299. package/dist/cli/commands/failure.js +63 -0
  300. package/dist/cli/commands/generation/lifecycle-commands.d.ts +5 -0
  301. package/dist/cli/commands/generation/lifecycle-commands.js +211 -0
  302. package/dist/cli/commands/generation/session-commands.d.ts +11 -0
  303. package/dist/cli/commands/generation/session-commands.js +472 -0
  304. package/dist/cli/commands/generation/shared.d.ts +1414 -0
  305. package/dist/cli/commands/generation/shared.js +291 -0
  306. package/dist/cli/commands/generation/step-commands.d.ts +8 -0
  307. package/dist/cli/commands/generation/step-commands.js +315 -0
  308. package/dist/cli/commands/generation.js +10 -507
  309. package/dist/cli/commands/impact.d.ts +3 -0
  310. package/dist/cli/commands/impact.js +87 -0
  311. package/dist/cli/commands/init.js +13 -6
  312. package/dist/cli/commands/journey.d.ts +3 -0
  313. package/dist/cli/commands/journey.js +382 -0
  314. package/dist/cli/commands/knowledge.d.ts +3 -0
  315. package/dist/cli/commands/knowledge.js +93 -0
  316. package/dist/cli/commands/observe.d.ts +3 -0
  317. package/dist/cli/commands/observe.js +127 -0
  318. package/dist/cli/commands/project.js +2 -1
  319. package/dist/cli/commands/record.js +18 -5
  320. package/dist/cli/commands/verify.js +326 -64
  321. package/dist/cli/dependencies.d.ts +136 -1
  322. package/dist/cli/dependencies.js +504 -52
  323. package/dist/cli/diagnostics-recorder.d.ts +31 -0
  324. package/dist/cli/diagnostics-recorder.js +82 -0
  325. package/dist/cli/diff-verification.d.ts +41 -0
  326. package/dist/cli/diff-verification.js +192 -0
  327. package/dist/cli/main.d.ts +1 -1
  328. package/dist/cli/main.js +107 -2
  329. package/dist/cli/output.d.ts +5 -3
  330. package/dist/cli/output.js +12 -0
  331. package/dist/cli/program.js +21 -1
  332. package/dist/cli/project-root.d.ts +1 -0
  333. package/dist/cli/project-root.js +6 -0
  334. package/dist/cli/runtime-selection.d.ts +22 -0
  335. package/dist/cli/runtime-selection.js +92 -0
  336. package/dist/cli/version.d.ts +1 -0
  337. package/dist/cli/version.js +14 -0
  338. package/dist/cli/workspace-guard.d.ts +2 -0
  339. package/dist/cli/workspace-guard.js +3 -0
  340. package/dist/domain/binding-reference.d.ts +4 -0
  341. package/dist/domain/binding-reference.js +23 -0
  342. package/dist/domain/checkpoint.d.ts +404 -0
  343. package/dist/domain/checkpoint.js +297 -0
  344. package/dist/domain/config.d.ts +107 -1
  345. package/dist/domain/config.js +52 -6
  346. package/dist/domain/contract.d.ts +413 -0
  347. package/dist/domain/contract.js +196 -0
  348. package/dist/domain/diagnostics.d.ts +1396 -0
  349. package/dist/domain/diagnostics.js +193 -0
  350. package/dist/domain/external-flow.d.ts +493 -0
  351. package/dist/domain/external-flow.js +15 -0
  352. package/dist/domain/failure-classification.d.ts +176 -0
  353. package/dist/domain/failure-classification.js +169 -0
  354. package/dist/domain/failure.d.ts +2 -1
  355. package/dist/domain/failure.js +123 -0
  356. package/dist/domain/generation.d.ts +1671 -132
  357. package/dist/domain/generation.js +202 -13
  358. package/dist/domain/geometry.d.ts +13 -0
  359. package/dist/domain/geometry.js +16 -0
  360. package/dist/domain/impact.d.ts +71 -0
  361. package/dist/domain/impact.js +76 -0
  362. package/dist/domain/init.d.ts +12 -4
  363. package/dist/domain/init.js +24 -18
  364. package/dist/domain/journey-composition.d.ts +2285 -0
  365. package/dist/domain/journey-composition.js +85 -0
  366. package/dist/domain/journey-lifecycle.d.ts +10 -0
  367. package/dist/domain/journey-lifecycle.js +9 -0
  368. package/dist/domain/journey.d.ts +2419 -212
  369. package/dist/domain/journey.js +384 -14
  370. package/dist/domain/knowledge.d.ts +165 -0
  371. package/dist/domain/knowledge.js +188 -0
  372. package/dist/domain/layout.d.ts +34 -5
  373. package/dist/domain/layout.js +64 -6
  374. package/dist/domain/locator-evidence.d.ts +3 -0
  375. package/dist/domain/locator-evidence.js +36 -0
  376. package/dist/domain/logcat-event.d.ts +54 -0
  377. package/dist/domain/logcat-event.js +40 -0
  378. package/dist/domain/observation.d.ts +33 -0
  379. package/dist/domain/observation.js +18 -0
  380. package/dist/domain/project-context.d.ts +219 -1
  381. package/dist/domain/project-context.js +209 -6
  382. package/dist/domain/proposed-step.d.ts +340 -60
  383. package/dist/domain/proposed-step.js +23 -3
  384. package/dist/domain/report.d.ts +1455 -28
  385. package/dist/domain/report.js +211 -14
  386. package/dist/domain/runtime-snapshot.d.ts +58 -1
  387. package/dist/domain/runtime-snapshot.js +14 -3
  388. package/dist/domain/runtime.d.ts +50 -0
  389. package/dist/domain/runtime.js +36 -0
  390. package/dist/domain/system-app-profiles.d.ts +6 -0
  391. package/dist/domain/system-app-profiles.js +43 -0
  392. package/dist/domain/ui-backend.d.ts +28 -0
  393. package/dist/domain/ui-backend.js +33 -0
  394. package/dist/domain/ui-cache.d.ts +11 -0
  395. package/dist/domain/ui-cache.js +10 -0
  396. package/dist/domain/verify-receipt.d.ts +17 -0
  397. package/dist/domain/verify-receipt.js +17 -0
  398. package/dist/domain/window-hierarchy.d.ts +84 -0
  399. package/dist/domain/window-hierarchy.js +172 -0
  400. package/dist/domain/workflow-manifest.d.ts +77 -0
  401. package/dist/domain/workflow-manifest.js +136 -0
  402. package/dist/domain/workspace.d.ts +30 -0
  403. package/dist/domain/workspace.js +74 -0
  404. package/dist/ports/adb.d.ts +34 -1
  405. package/dist/ports/align-prompt.d.ts +11 -0
  406. package/dist/ports/align-prompt.js +6 -0
  407. package/dist/ports/anchor-resolver.d.ts +30 -0
  408. package/dist/ports/anchor-resolver.js +1 -0
  409. package/dist/ports/annotated-screen-resolver.d.ts +4 -0
  410. package/dist/ports/annotated-screen-resolver.js +1 -0
  411. package/dist/ports/camera-probe.d.ts +23 -0
  412. package/dist/ports/camera-probe.js +8 -0
  413. package/dist/ports/context-document-writer.d.ts +24 -0
  414. package/dist/ports/context-document-writer.js +1 -0
  415. package/dist/ports/detached-process-launcher.d.ts +12 -0
  416. package/dist/ports/detached-process-launcher.js +1 -0
  417. package/dist/ports/diagnostics.d.ts +15 -0
  418. package/dist/ports/diagnostics.js +1 -0
  419. package/dist/ports/external-flow-registry.d.ts +37 -0
  420. package/dist/ports/external-flow-registry.js +1 -0
  421. package/dist/ports/generation-prompt.d.ts +2 -1
  422. package/dist/ports/generation-session-store.d.ts +12 -2
  423. package/dist/ports/git-diff.d.ts +9 -0
  424. package/dist/ports/git-diff.js +1 -0
  425. package/dist/ports/journey-composition-store.d.ts +17 -0
  426. package/dist/ports/journey-composition-store.js +1 -0
  427. package/dist/ports/knowledge-registry.d.ts +20 -0
  428. package/dist/ports/knowledge-registry.js +1 -0
  429. package/dist/ports/process-runner.d.ts +7 -0
  430. package/dist/ports/project-file-inspector.d.ts +1 -0
  431. package/dist/ports/project-identity-inspector.d.ts +24 -0
  432. package/dist/ports/project-identity-inspector.js +1 -0
  433. package/dist/ports/project-inventory-inspector.d.ts +21 -0
  434. package/dist/ports/project-inventory-inspector.js +1 -0
  435. package/dist/ports/project-module-discoverer.d.ts +26 -0
  436. package/dist/ports/project-module-discoverer.js +1 -0
  437. package/dist/ports/recorder-prompt.d.ts +10 -1
  438. package/dist/ports/runtime-backend.d.ts +89 -0
  439. package/dist/ports/runtime-backend.js +13 -0
  440. package/dist/ports/runtime-capability.d.ts +12 -0
  441. package/dist/ports/runtime-capability.js +20 -0
  442. package/dist/ports/runtime-session-ports.d.ts +25 -0
  443. package/dist/ports/runtime-session-ports.js +1 -0
  444. package/dist/ports/screenshot.d.ts +11 -0
  445. package/dist/ports/screenshot.js +1 -0
  446. package/dist/ports/skill-installer.d.ts +2 -2
  447. package/dist/ports/ui-snapshot.d.ts +35 -0
  448. package/dist/ports/ui-snapshot.js +1 -0
  449. package/dist/ports/ui-stability.d.ts +19 -0
  450. package/dist/ports/ui-stability.js +1 -0
  451. package/dist/ports/workspace-layout.d.ts +4 -0
  452. package/dist/ports/workspace-layout.js +1 -0
  453. package/dist/shared/errors.d.ts +2 -0
  454. package/dist/shared/errors.js +22 -0
  455. package/dist/shared/paths.d.ts +2 -0
  456. package/dist/shared/paths.js +24 -0
  457. package/dist/shared/strings.d.ts +2 -0
  458. package/dist/shared/strings.js +16 -0
  459. package/package.json +7 -2
  460. package/assets/skills/taphound-ai-journey/GUIDE.md +0 -862
  461. package/assets/skills/taphound-ai-journey/SKILL.md +0 -377
  462. package/assets/skills/taphound-ai-journey/prompts/analyze-project.md +0 -526
  463. package/assets/skills/taphound-ai-journey/prompts/generate-step.md +0 -109
  464. package/assets/skills/taphound-ai-journey/schemas/project-context.json +0 -81
  465. package/assets/skills/taphound-ai-journey/templates/project-context.example.json +0 -49
  466. package/dist/ports/android-cli.d.ts +0 -21
  467. /package/dist/{ports/android-cli.js → adapters/runtime/mobile-mcp/mobile-mcp-tools.js} +0 -0
@@ -0,0 +1,471 @@
1
+ # TapHound Context Author Usage Guide
2
+
3
+ This guide describes how to use an AI agent (Droid, Claude Code, Cursor,
4
+ etc.) to generate and maintain a TapHound Project Context Bundle for an
5
+ Android project.
6
+
7
+ ## Architecture Overview
8
+
9
+ ```
10
+ User requests Context generation or update
11
+ |
12
+ v
13
+ +-----------------------------+
14
+ | One-time setup (first run |
15
+ | or after major changes) |
16
+ | AI analyzes source -> |
17
+ | Project Context Bundle |
18
+ | taphound context validate |
19
+ +-------------+---------------+
20
+ | Context reused
21
+ v
22
+ +-----------------------------+
23
+ | Consumed by downstream |
24
+ | skills (do not own Context):|
25
+ | - taphound-journey-generator |
26
+ | - taphound-journey-brief- |
27
+ | author |
28
+ +-----------------------------+
29
+ ```
30
+
31
+ Project Context is generated once and reused. It only needs regeneration
32
+ when the project source changes significantly (see Section 5). The
33
+ downstream Skills (`taphound-journey-generator`, `taphound-journey-brief-author`)
34
+ require a valid Context and stop with an error when they encounter a stale
35
+ or invalid one — they never generate or repair Context themselves.
36
+
37
+ ---
38
+
39
+ ## 1. Prerequisites
40
+
41
+ ### 1.1 Environment Requirements
42
+
43
+ | Item | Requirement |
44
+ |------|-------------|
45
+ | Node.js | 22+ (avoid 23) |
46
+ | Android SDK | ADB (for `doctor` environment validation) |
47
+ | Device | NOT required for Context generation |
48
+ | App | Target APK already installed (for downstream Skills, not for this one) |
49
+ | TapHound | Cloned repo with `npm ci` installed |
50
+
51
+ ### 1.2 Build TapHound
52
+
53
+ ```bash
54
+ cd /path/to/TapHound
55
+ npm ci
56
+ npm run build
57
+ npm link # Register global taphound command
58
+ ```
59
+
60
+ Verify the registration:
61
+
62
+ ```bash
63
+ taphound --help
64
+ ```
65
+
66
+ Should output `Usage: taphound` and list `doctor`, `context`, `project`
67
+ commands (among others).
68
+
69
+ > If you prefer not to register globally, you can use `npx taphound` or
70
+ > `node dist/cli/main.js` in place of `taphound` throughout this guide.
71
+
72
+ ### 1.3 Environment Diagnostics
73
+
74
+ ```bash
75
+ taphound doctor \
76
+ --project /path/to/android-project \
77
+ --json
78
+ ```
79
+
80
+ A device is NOT required for Context work. If `doctor` reports
81
+ `DEVICE_UNAVAILABLE`, that is acceptable for `context generate` and
82
+ `context refresh`. Confirm other checks pass.
83
+
84
+ ---
85
+
86
+ ## 2. One-Time Setup: Generate Project Context
87
+
88
+ > Project Context describes the Android project's UI structure, element
89
+ > locators, and interaction policy. It is generated once, persisted in the
90
+ > project directory, and reused for every Journey generation and Brief
91
+ > authoring run. Only significant source changes require regeneration
92
+ > (see Section 5).
93
+
94
+ ### 2.1 Load the Skill in Your AI Agent
95
+
96
+ Run `taphound init` to install the Skill into each agent's expected directory,
97
+ then load it in your AI agent tool. The entry file is `SKILL.md`. The method
98
+ depends on the tool:
99
+
100
+ - **Droid**: The Skill is auto-discovered from `.factory/skills/` in the
101
+ TapHound repo. Run `taphound init --agent droid` in other projects.
102
+ Invoke it with the Skill tool using `taphound-journey-brief-author`.
103
+ - **Claude Code**: Run `taphound init --agent claude` to install to
104
+ `.claude/skills/`, then invoke with the Skill tool.
105
+ - **Codex**: Run `taphound init --agent codex` to install to `.agents/skills/`.
106
+ - **Cursor**: Run `taphound init --agent cursor` to install to `.cursor/skills/`.
107
+ - **Other tools**: Run `taphound init --agent other` to install to
108
+ `.agents/skills/`, or have the agent read `SKILL.md` directly.
109
+
110
+ ### 2.2 Have the AI Analyze Project Source
111
+
112
+ Tell the AI agent (after the Skill is loaded, just provide the project
113
+ path):
114
+
115
+ ```
116
+ Generate a TapHound Project Context for the project at /path/to/android-project.
117
+ ```
118
+
119
+ The AI agent will follow SKILL.md Phase 1 instructions and automatically
120
+ perform these steps:
121
+
122
+ 1. Run `taphound context generate --project <project> --json` to discover
123
+ all modules (Core parses `settings.gradle`, falls back to filesystem
124
+ scanning), and identify the app module (the one with `applicationId`).
125
+ 2. Read `applicationId` from the app module's `build.gradle` or
126
+ `build.gradle.kts` as the package name (Core resolves this; falls back
127
+ to the `package` attribute in the manifest for legacy projects).
128
+ 3. Identify the launch Activity from the app module's `AndroidManifest.xml`
129
+ (library module Activities are merged in via manifest merge).
130
+ 4. Analyze each module independently for Activities, click handlers, Logcat
131
+ tags, navigation, and layouts. Write one shard under
132
+ `.taphound/context/modules/` before moving to the next module.
133
+ 5. Store reusable screen, element, transition, and Logcat semantics in each
134
+ shard. Core computes evidence hashes and the module inventory path-set
135
+ hash.
136
+ 6. Mark every discovered module `complete`, `partial`, `unsupported`, or
137
+ `notAnalyzed`; never silently omit a module because the project is large.
138
+ 7. Hash each completed shard and write the compact root index matching
139
+ `schemas/project-context.json`.
140
+
141
+ > **Multi-module note**: Activities may be distributed across library/feature
142
+ > modules, and layout XML may be in any module's `res/layout/`. The AI agent
143
+ > uses Core's module discovery to get the authoritative module list. The
144
+ > root index stays small; detailed semantics are loaded from selected
145
+ > shards.
146
+
147
+ ### 2.3 Write and Validate Context
148
+
149
+ The AI-generated Bundle is written to:
150
+
151
+ ```
152
+ <project>/.taphound/context/
153
+ ├── project-context.json
154
+ └── modules/
155
+ ├── app.json
156
+ └── feature-search.json
157
+ ```
158
+
159
+ Then validate:
160
+
161
+ ```bash
162
+ taphound context validate \
163
+ --project /path/to/android-project \
164
+ --context /path/to/android-project/.taphound/context/project-context.json \
165
+ --json
166
+ ```
167
+
168
+ **Success**: `"status": "valid"`, exit 0. Context is ready.
169
+
170
+ **Failure**: Fix based on the error message. Common causes:
171
+
172
+ | Error | Cause | Fix |
173
+ |-------|-------|-----|
174
+ | `CONTEXT_INVALID` | Package name / Activity mismatch | Check against AndroidManifest.xml |
175
+ | `CONTEXT_INVALID` | Incorrect SHA-256 | Run `context rehash` |
176
+ | `CONTEXT_INVALID` | Path contains `..` or starts with `/` | Use project-relative paths |
177
+ | `CONTEXT_STALE` | File content does not match hash | Source changed, run `context refresh` or rehash |
178
+
179
+ ### 2.4 Check Context Status (Optional)
180
+
181
+ You can check whether the Context is still valid at any time:
182
+
183
+ ```bash
184
+ taphound context status \
185
+ --project /path/to/android-project \
186
+ --context /path/to/android-project/.taphound/context/project-context.json \
187
+ --json
188
+ ```
189
+
190
+ Returns `"valid"` (still valid), `"stale"` (files changed, needs update),
191
+ or `"invalid"` (structural error).
192
+
193
+ List the compact module catalog without loading all shards:
194
+
195
+ ```bash
196
+ taphound context list \
197
+ --project /path/to/android-project \
198
+ --context .taphound/context/project-context.json \
199
+ --json
200
+ ```
201
+
202
+ ### 2.5 Context Persistence
203
+
204
+ The generated `project-context.json` is saved in the project's
205
+ `.taphound/context/` directory. This file can be:
206
+
207
+ - **Committed to Git**: If the project source is stable, the Context can
208
+ be tracked as a project artifact.
209
+ - **Added to .gitignore**: If the project changes frequently, regenerate
210
+ dynamically before each run.
211
+
212
+ Recommendation: commit to Git after first generation, update per Section 5
213
+ when source changes.
214
+
215
+ ---
216
+
217
+ ## 3. Full Regeneration (Structural Changes)
218
+
219
+ When a new Gradle module is added or the Bundle is `invalid`, update the
220
+ module catalog and generate only missing or invalid shards:
221
+
222
+ 1. Have the AI agent re-analyze the source (reads `prompts/analyze-project.md`)
223
+ 2. Run `context generate --force` to overwrite the existing Context:
224
+ ```bash
225
+ taphound context generate \
226
+ --project /path/to/android-project \
227
+ --force \
228
+ --json
229
+ ```
230
+ 3. Re-discover all modules via Core (parses `settings.gradle`)
231
+ 4. Add every discovered module to the root index with explicit status
232
+ 5. Generate each new/invalid module shard independently (Section 2.2 steps 4–6)
233
+ 6. Recompute affected shard hashes and global interaction policy
234
+ 7. Rewrite the root index
235
+ 8. Validate with `context validate`
236
+
237
+ ```bash
238
+ # In the AI agent:
239
+ # "Regenerate the TapHound Project Context for /path/to/android-project.
240
+ # The source has been updated with new screens and layouts.
241
+ # Run a full re-analysis per prompts/analyze-project.md."
242
+
243
+ taphound context validate \
244
+ --project /path/to/android-project \
245
+ --context /path/to/android-project/.taphound/context/project-context.json \
246
+ --json
247
+ ```
248
+
249
+ ---
250
+
251
+ ## 4. Complete Example: Generating Context for the Demo Project
252
+
253
+ Using `examples/taphound-android-demo` as the project.
254
+
255
+ ```bash
256
+ # In the AI agent:
257
+ # "Generate a TapHound Project Context for examples/taphound-android-demo"
258
+ # AI analyzes source and generates:
259
+ # examples/taphound-android-demo/.taphound/context/project-context.json
260
+
261
+ # Validate
262
+ taphound context validate \
263
+ --project examples/taphound-android-demo \
264
+ --context .taphound/context/project-context.json \
265
+ --json
266
+ ```
267
+
268
+ The Context is now ready for downstream Skills (`taphound-journey-generator`,
269
+ `taphound-journey-brief-author`) to consume.
270
+
271
+ ---
272
+
273
+ ## 5. Updating Project Context
274
+
275
+ Android projects evolve continuously: buttons are added, layouts are
276
+ restructured, Activities come and go. The Context needs to track these
277
+ changes to remain useful for staleness detection and interaction policy.
278
+
279
+ There are three levels of update, from lightest to heaviest:
280
+
281
+ ### 5.1 Pre-Session Check (Before Every Downstream Skill Run)
282
+
283
+ Run this before each Journey generation or Brief authoring session to
284
+ decide which update level is needed.
285
+
286
+ **Step 1: Hash staleness check**
287
+
288
+ ```bash
289
+ taphound context status \
290
+ --project /path/to/android-project \
291
+ --context /path/to/android-project/.taphound/context/project-context.json \
292
+ --json
293
+ ```
294
+
295
+ - `"valid"`: All tracked file hashes match. Proceed to Step 2.
296
+ - `"stale"`: Some tracked files changed. Needs at least an incremental
297
+ update (Section 5.2).
298
+ - `"invalid"`: Context structure is broken. Needs full regeneration
299
+ (Section 3).
300
+
301
+ **Step 2: Module completeness check**
302
+
303
+ Module inventory path-set hashes include manifest, source, layout, and
304
+ navigation paths. `context status` therefore detects files added or removed
305
+ inside an existing module. Root project evidence detects changes to the
306
+ Gradle module catalog. Also run `context list --json` and ensure every module
307
+ is explicitly `complete` or `unsupported` — `unsupported` is an analyzed
308
+ verdict ("no UI-relevant surfaces") and a legitimate terminal state that
309
+ generation accepts. `partial` and `notAnalyzed` are coverage gaps, not
310
+ successful full generation.
311
+
312
+ **Decision matrix:**
313
+
314
+ | `context status` | Module catalog | Action |
315
+ |------------------|----------------|--------|
316
+ | `valid` | All selected modules `complete` or `unsupported` | Context is current. Proceed. |
317
+ | `valid` | Any module `partial` or `notAnalyzed` | Complete that module shard |
318
+ | `stale` | Existing module changed | Run `context refresh --json`, then act on each block's `resolution` (see 5.2) |
319
+ | `stale` | Module catalog changed | Update index and generate new shards (Section 3) |
320
+ | `invalid` | — | Repair or regenerate Bundle (Section 3) |
321
+
322
+ ### 5.2 Incremental Update (Content-Only Changes)
323
+
324
+ **Step 0: Hash-only refresh**
325
+
326
+ Before any re-analysis, let TapHound recompute hashes:
327
+
328
+ ```bash
329
+ taphound context refresh \
330
+ --project /path/to/android-project \
331
+ --context /path/to/android-project/.taphound/context/project-context.json \
332
+ --json
333
+ ```
334
+
335
+ - `"refreshed"` / `"unchanged"`: nothing semantic changed. `semanticSha256`
336
+ values are backfilled, formatting- or comment-only edits are rehashed,
337
+ drifted shard hashes in the index are repaired, and the Context is current.
338
+ - `"blocked"`: the response lists the modules and files that changed
339
+ semantically, whose inventory changed, or whose evidence is missing. Each
340
+ block carries a `resolution` field — act on it, do not blanket re-analyze:
341
+
342
+ | block `code` | `resolution` | Action |
343
+ |---|---|---|
344
+ | `EVIDENCE_UNRESOLVED` | `pruneDeleted` | A tracked file was deleted. Re-run with `--prune-deleted` (drops the entry). Combine with `--accept-source-changes` if inventory also drifted. |
345
+ | `EVIDENCE_SEMANTIC_CHANGED` | `acceptSourceChanges` | A tracked file's semantics changed. Re-run with `--accept-source-changes` to rehash. Re-analyze (below) only if the module summary is now wrong. |
346
+ | `MODULE_INVENTORY_CHANGED` | `acceptSourceChanges` | The on-disk file set grew or shrank. Re-run with `--accept-source-changes` to accept the new inventory hash. Re-analyze only when new UI files were added that the summary must cover. |
347
+ | `EVIDENCE_UNRESOLVED` | `reanalyze` | An evidence file is unreadable/escaped/too large (not a clean deletion). Fix the file or regenerate that module's shard (below). |
348
+
349
+ The typical one-shot reconcile for routine edits + deletions:
350
+
351
+ ```bash
352
+ taphound context refresh \
353
+ --project /path/to/android-project \
354
+ --context /path/to/android-project/.taphound/context/project-context.json \
355
+ --prune-deleted --accept-source-changes --json
356
+ ```
357
+
358
+ `--module <id...>` narrows the scope. `--accept-source-changes` rehashes
359
+ semantic and inventory drift; use it only after confirming the recorded module
360
+ summary (screens, elements, transitions, Logcat) is still accurate, because
361
+ `refresh` never updates semantics. `--prune-deleted` only drops entries for
362
+ files that are truly gone (`notFound`); unreadable or escaped files stay
363
+ blocked as `reanalyze`.
364
+
365
+ When a block's `resolution` is `reanalyze`, or when `acceptSourceChanges`
366
+ would hide newly added UI screens the Goal may reach, regenerate the affected
367
+ module shards instead of reanalyzing unrelated features:
368
+
369
+ 1. Identify which files changed (the `context status` output lists them).
370
+ 2. Recompute SHA-256 for each changed file.
371
+ 3. If any changed file is an Activity source, re-read it to check for:
372
+ - New Logcat tags (affects `expect` candidates)
373
+ - New click handlers or input fields (affects `interactionPolicy`)
374
+ - New `startActivity` calls (affects navigation understanding)
375
+ 4. If any changed file is a layout XML, re-read it to check for:
376
+ - New `android:id` elements (new locator candidates)
377
+ - Removed elements (locators that no longer exist)
378
+ - Changed `android:text` or `android:contentDescription`
379
+ 5. Update shard semantics, evidence, and inventory. Write the shard,
380
+ recompute its file hash, and update the root index reference.
381
+ 6. Update the global `interactionPolicy` only when needed, then validate:
382
+ ```bash
383
+ taphound context validate \
384
+ --project /path/to/android-project \
385
+ --context /path/to/android-project/.taphound/context/project-context.json \
386
+ --json
387
+ ```
388
+
389
+ This is fast because it only touches changed files, not the entire
390
+ project.
391
+
392
+ ### 5.3 Signs of Stale Context During Downstream Generation
393
+
394
+ Sometimes the pre-session check passes but the Context is still outdated
395
+ (e.g., a layout's content changed without changing the file count). The
396
+ downstream Skills may encounter these signs during generation:
397
+
398
+ | Sign | Likely cause | Action |
399
+ |------|-------------|--------|
400
+ | `observe` shows elements not expected from Context | Layout changed (new elements) | Continue if the element is actionable; update Context after session |
401
+ | `observe` shows a different Activity than expected | New Activity added or navigation changed | Re-observe and adapt; update Context after session |
402
+ | `LOCATOR_NOT_FOUND` for an element that should exist | Element was removed or `android:id` changed | Re-observe, try alternative locator; update Context after session |
403
+ | `LOCATOR_AMBIGUOUS` for a previously unique element | Duplicate ID added in another layout | Use more specific locator; update Context after session |
404
+ | Logcat expectation fails | Log tag or message pattern changed | Check source, update expectation; update Context after session |
405
+
406
+ > When any of these signs appear, the downstream Skill should note the
407
+ > discrepancy and recommend running this Skill (`taphound-journey-brief-author`)
408
+ > to update the Context after the session completes. It should NOT abort
409
+ > the session unless the error is unrecoverable.
410
+
411
+ ### 5.4 When to Update
412
+
413
+ | Change type | Update level |
414
+ |-------------|-------------|
415
+ | Modified button text or content description | Incremental (re-hash) |
416
+ | Modified click handler logic | Incremental (re-hash, check Logcat tags) |
417
+ | Added/removed `android:id` in existing layout | Incremental (re-hash) |
418
+ | Added new Activity | Full regeneration |
419
+ | Removed Activity | Full regeneration |
420
+ | Added/removed layout XML file | Full regeneration |
421
+ | New module added (`settings.gradle` changed) | Full regeneration |
422
+ | Changed `applicationId` | Full regeneration |
423
+ | Modified `<include>`/`<merge>` structure | Incremental (re-hash) |
424
+ | Modified business logic but UI unchanged | Incremental (re-hash only) |
425
+ | Modified themes/styles | No update needed |
426
+ | Modified Gradle dependency versions | No update needed (unless package name changed) |
427
+
428
+ ---
429
+
430
+ ## 6. Failure Troubleshooting
431
+
432
+ ### 6.1 context generate Failures
433
+
434
+ | Error | Cause | Fix |
435
+ |-------|-------|-----|
436
+ | `CONFIG_INVALID` | `.taphound/config.json` missing or invalid | Run `taphound init` first, or fix config |
437
+ | Module discovery fails | `settings.gradle` not found | Ensure project root is correct |
438
+ | `applicationId` not found | Build file missing or malformed | Check `build.gradle(.kts)` |
439
+
440
+ ### 6.2 context validate Failures
441
+
442
+ | Error | Cause | Fix |
443
+ |-------|-------|-----|
444
+ | `CONTEXT_INVALID` | Package name / Activity mismatch | Check against AndroidManifest.xml |
445
+ | `CONTEXT_INVALID` | Incorrect SHA-256 | Run `context rehash` |
446
+ | `CONTEXT_INVALID` | Path contains `..` or starts with `/` | Use project-relative paths |
447
+ | `CONTEXT_STALE` | File content does not match hash | Source changed, run `context refresh` |
448
+
449
+ ### 6.3 context refresh Failures
450
+
451
+ | Error | Cause | Fix |
452
+ |-------|-------|-----|
453
+ | `blocked` with `reanalyze` | Evidence file unreadable/escaped | Fix file or regenerate shard |
454
+ | `blocked` with `MODULE_INVENTORY_CHANGED` | Files added or removed | Run with `--accept-source-changes`, or re-analyze if new UI files |
455
+
456
+ ---
457
+
458
+ ## 7. Safety Constraints
459
+
460
+ - The AI agent NEVER computes SHA-256 hashes manually. Core does all
461
+ hashing via `context generate`, `context rehash`, and `context refresh`.
462
+ - The AI agent NEVER discovers modules manually. Core parses
463
+ `settings.gradle` and falls back to filesystem scanning.
464
+ - The AI agent NEVER resolves `applicationId` or launch Activity manually.
465
+ Core inspects build files and manifests.
466
+ - This Skill does NOT modify device state. It does NOT use `generation`,
467
+ `verify`, `record`, `observe`, or `align`.
468
+ - The generated Context is the authoritative input for downstream Skills.
469
+ A stale or invalid Context stops Journey generation and Brief authoring.
470
+ - Real-device acceptance is fully separate from the normal test suite and
471
+ does NOT run in `npm test`.