@1aboveio/skills 1.0.13 → 1.0.15

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 (106) hide show
  1. package/.codex-plugin/plugin.json +1 -1
  2. package/.codex-plugin/resources.json +157 -154
  3. package/README.md +1 -1
  4. package/package.json +5 -5
  5. package/skills/app-dev/airflow/SKILL.md +1 -1
  6. package/skills/app-dev/android-development/SKILL.md +127 -0
  7. package/skills/app-dev/android-development/references/android-conventions.md +117 -0
  8. package/skills/app-dev/{android-foundation → android-development}/references/ci.md +10 -6
  9. package/skills/app-dev/{android-foundation → android-development}/references/diagnosis.md +44 -15
  10. package/skills/app-dev/android-development/references/feature-work.md +186 -0
  11. package/skills/app-dev/android-development/references/framework-choice.md +88 -0
  12. package/skills/app-dev/{android-foundation → android-development}/references/gotchas.md +43 -6
  13. package/skills/app-dev/android-development/references/init.md +126 -0
  14. package/skills/app-dev/android-development/references/setup.md +389 -0
  15. package/skills/app-dev/android-development/references/workspace.md +156 -0
  16. package/skills/app-dev/android-development/scripts/init.mjs +477 -0
  17. package/skills/app-dev/app-debug/SKILL.md +1 -1
  18. package/skills/app-dev/better-auth/SKILL.md +1 -1
  19. package/skills/app-dev/data-catalog/SKILL.md +53 -16
  20. package/skills/app-dev/data-catalog/scripts/persist-conventions-core.mjs +231 -21
  21. package/skills/app-dev/data-catalog/scripts/persist-conventions.mjs +12 -1
  22. package/skills/app-dev/data-quality/SKILL.md +1 -1
  23. package/skills/app-dev/ios-foundation/SKILL.md +2 -2
  24. package/skills/app-dev/monorepo/SKILL.md +1 -1
  25. package/skills/app-dev/nextjs-fullstack/SKILL.md +1 -1
  26. package/skills/app-dev/prisma-setup/SKILL.md +1 -1
  27. package/skills/app-dev/pyspark/SKILL.md +1 -1
  28. package/skills/app-dev/python-backend/SKILL.md +1 -1
  29. package/skills/app-dev/shadcn/SKILL.md +1 -1
  30. package/skills/app-dev/zod-v4/SKILL.md +1 -1
  31. package/skills/cicd/cloud-build/SKILL.md +1 -1
  32. package/skills/cicd/cloud-debug/SKILL.md +1 -1
  33. package/skills/cicd/cloud-deploy/SKILL.md +1 -1
  34. package/skills/cicd/docker/SKILL.md +1 -1
  35. package/skills/cicd/github-actions/SKILL.md +1 -1
  36. package/skills/cicd/github-flow/SKILL.md +10 -1
  37. package/skills/cicd/github-flow/scripts/persist-conventions-core.mjs +231 -21
  38. package/skills/cicd/github-flow/scripts/persist-conventions.mjs +18 -1
  39. package/skills/cicd/google-cloud/SKILL.md +1 -1
  40. package/skills/cicd/mergify/SKILL.md +1 -1
  41. package/skills/cicd/podman/SKILL.md +1 -1
  42. package/skills/content/article-review/SKILL.md +1 -1
  43. package/skills/content/article-to-image/SKILL.md +1 -1
  44. package/skills/content/flowchart-svg/SKILL.md +1 -1
  45. package/skills/content/image-gen/SKILL.md +1 -1
  46. package/skills/content/mermaid/SKILL.md +1 -1
  47. package/skills/content/wechat-article-writer/SKILL.md +1 -1
  48. package/skills/content/wechat-publisher/SKILL.md +1 -1
  49. package/skills/content/wechat-search/SKILL.md +1 -1
  50. package/skills/content/xai-search/SKILL.md +1 -1
  51. package/skills/core/distill-writing/SKILL.md +7 -1
  52. package/skills/core/doc-to-md/SKILL.md +1 -1
  53. package/skills/core/editorial-review/SKILL.md +1 -1
  54. package/skills/core/house-style/SKILL.md +1 -1
  55. package/skills/core/house-style/references/persistence.md +8 -3
  56. package/skills/core/house-style/scripts/init-guidance.mjs +1 -1
  57. package/skills/core/plain-language/SKILL.md +1 -1
  58. package/skills/core/polish-cn/SKILL.md +1 -1
  59. package/skills/core/reg-parser/SKILL.md +1 -1
  60. package/skills/core/terminology/SKILL.md +1 -1
  61. package/skills/core/terminology/references/init.md +11 -0
  62. package/skills/core/write-doc/SKILL.md +1 -1
  63. package/skills/core/write-report/SKILL.md +1 -1
  64. package/skills/engineering/better-review/SKILL.md +1 -1
  65. package/skills/engineering/e2e-test/SKILL.md +1 -1
  66. package/skills/engineering/engineering/SKILL.md +25 -4
  67. package/skills/engineering/engineering/references/init-scope.md +10 -3
  68. package/skills/engineering/engineering/references/scope-management.md +11 -0
  69. package/skills/engineering/engineering/scripts/init.mjs +65 -17
  70. package/skills/engineering/engineering/scripts/persist-conventions-core.mjs +231 -21
  71. package/skills/engineering/engineering/scripts/persist-conventions.mjs +48 -21
  72. package/skills/engineering/engineering-runtime/SKILL.md +1 -1
  73. package/skills/engineering/engineering-runtime/coherence/workflow.json +13 -13
  74. package/skills/engineering/ensure-coverage/SKILL.md +1 -1
  75. package/skills/engineering/golden-path/SKILL.md +1 -1
  76. package/skills/engineering/harness-runtime/SKILL.md +1 -1
  77. package/skills/engineering/resolve-issues/SKILL.md +1 -1
  78. package/skills/engineering/resolve-issues/references/exploration.md +1 -1
  79. package/skills/engineering/resolve-issues/references/review.md +27 -4
  80. package/skills/engineering/resolve-release/SKILL.md +1 -1
  81. package/skills/engineering/rush-issues/SKILL.md +1 -1
  82. package/skills/engineering/rush-release/SKILL.md +1 -1
  83. package/skills/engineering/test-quality/SKILL.md +3 -1
  84. package/skills/engineering/test-quality/scripts/persist-conventions-core.mjs +231 -21
  85. package/skills/engineering/test-quality/scripts/persist-conventions.mjs +13 -1
  86. package/skills/risk-compliance/compliance-audit/SKILL.md +1 -1
  87. package/skills/risk-compliance/contract-compare/SKILL.md +1 -1
  88. package/skills/risk-compliance/contract-review/SKILL.md +1 -1
  89. package/skills/risk-compliance/doc-authenticity/SKILL.md +1 -1
  90. package/skills/risk-compliance/fraud-detection/SKILL.md +1 -1
  91. package/skills/risk-compliance/payment-analysis/SKILL.md +1 -1
  92. package/skills/risk-compliance/portfolio-payment-analysis/SKILL.md +1 -1
  93. package/skills/risk-compliance/similar-domain/SKILL.md +1 -1
  94. package/skills/risk-compliance/tld-detection/SKILL.md +1 -1
  95. package/skills/app-dev/android-foundation/SKILL.md +0 -248
  96. package/skills/app-dev/android-foundation/references/delivery-focus.md +0 -31
  97. package/skills/app-dev/android-foundation/references/feature-work.md +0 -50
  98. package/skills/app-dev/android-foundation/references/setup.md +0 -188
  99. package/skills/app-dev/android-foundation/references/workspace.md +0 -81
  100. /package/skills/app-dev/{android-foundation → android-development}/LICENSE +0 -0
  101. /package/skills/app-dev/{android-foundation → android-development}/assets/android-ci-job.yml +0 -0
  102. /package/skills/app-dev/{android-foundation → android-development}/release-check.mjs +0 -0
  103. /package/skills/app-dev/{android-foundation → android-development}/scripts/device-run.sh +0 -0
  104. /package/skills/app-dev/{android-foundation → android-development}/scripts/workspace-runtime/bin/workspaces.mjs +0 -0
  105. /package/skills/app-dev/{android-foundation → android-development}/scripts/workspace-runtime/native-workspace.mjs +0 -0
  106. /package/skills/app-dev/{android-foundation → android-development}/scripts/workspace-runtime/workspace-lifecycle.mjs +0 -0
package/README.md CHANGED
@@ -52,7 +52,7 @@ See https://github.com/1aboveio/ai/blob/main/docs/native-codex.md for prerequisi
52
52
  | `core` | `@1aboveio/core-skills` | distill-writing, doc-to-md, editorial-review, house-style, plain-language, polish-cn, reg-parser, terminology, write-doc, write-report |
53
53
  | `engineering` | `@1aboveio/engineering-skills` | better-review, e2e-test, engineering, engineering-runtime, ensure-coverage, golden-path, harness-runtime, resolve-issues, resolve-release, rush-issues, rush-release, test-quality |
54
54
  | `cicd` | `@1aboveio/cicd-skills` | cloud-build, cloud-debug, cloud-deploy, docker, github-actions, github-flow, google-cloud, mergify, podman |
55
- | `app-dev` | `@1aboveio/app-dev-skills` | airflow, android-foundation, app-debug, better-auth, data-catalog, data-quality, ios-foundation, monorepo, nextjs-fullstack, prisma-setup, pyspark, python-backend, shadcn, zod-v4 |
55
+ | `app-dev` | `@1aboveio/app-dev-skills` | airflow, android-development, app-debug, better-auth, data-catalog, data-quality, ios-foundation, monorepo, nextjs-fullstack, prisma-setup, pyspark, python-backend, shadcn, zod-v4 |
56
56
  | `risk-compliance` | `@1aboveio/risk-compliance-skills` | compliance-audit, contract-compare, contract-review, doc-authenticity, fraud-detection, payment-analysis, portfolio-payment-analysis, similar-domain, tld-detection |
57
57
  | `content` | `@1aboveio/content-skills` | article-review, article-to-image, flowchart-svg, image-gen, mermaid, wechat-article-writer, wechat-publisher, wechat-search, xai-search |
58
58
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1aboveio/skills",
3
- "version": "1.0.13",
3
+ "version": "1.0.15",
4
4
  "description": "Every 1aboveio skill package in one: install once, then choose which packages Pi loads with npx @1aboveio/skills select.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -28,8 +28,8 @@
28
28
  "nativeCodex": {
29
29
  "schemaVersion": 1,
30
30
  "metadataPath": ".codex-plugin/resources.json",
31
- "metadataDigest": "c7b02c7a0b1255b4c35d2a8975fe235aa5e3ec4e5ae5f052de1ef0a04075323e",
32
- "releaseIdentity": "2282acb3b428dfcfe863d5bf3c9963662594d3a79f62156ea165a56a6f6556ad"
31
+ "metadataDigest": "2bdb58dba1de073baf79efe2c5118ad75c996710344a3cde581976921c1b23ec",
32
+ "releaseIdentity": "a8975fa459ebba2a3e2661d861bdb9d43c072c1b01adaf41def9a93523782800"
33
33
  },
34
34
  "pi": {
35
35
  "skills": [
@@ -104,7 +104,7 @@
104
104
  "needsCore": false,
105
105
  "skills": [
106
106
  "airflow",
107
- "android-foundation",
107
+ "android-development",
108
108
  "app-debug",
109
109
  "better-auth",
110
110
  "data-catalog",
@@ -260,7 +260,7 @@
260
260
  ]
261
261
  }
262
262
  ],
263
- "digest": "90c1d31a13f202af015fbe2c9b15e5e563685e78a4a6daabd6da6e952f64fce0"
263
+ "digest": "6ad0dafe4a400162776b1bf6d7c9e5ab31bf37a86d18b035fcadc4c11d06f799"
264
264
  },
265
265
  "publishConfig": {
266
266
  "registry": "https://registry.npmjs.org/",
@@ -2,7 +2,7 @@
2
2
  name: airflow
3
3
  description: Airflow DAG architecture and conventions. Use when designing, writing, reviewing, testing, or debugging Airflow DAGs and tasks, including TaskGroups, data intervals, timezone-aware date parameters, CLI validation, environment-based scheduling, and pytest integrity tests.
4
4
  user-invocable: true
5
- release-version: 0.45.2
5
+ release-version: 0.47.0
6
6
  ---
7
7
  **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
8
8
  # Airflow DAG Development Patterns
@@ -0,0 +1,127 @@
1
+ ---
2
+ name: android-development
3
+ description: "Prove and debug Expo / React Native apps on an owned Android emulator. Use for Android startup/rendering failures, Metro or ADB problems, UiAutomator/harness failures, APK builds, SDK/NDK/JDK workspace setup, native journey validation, and choosing Kotlin/Compose versus React Native for Android flows. Reproduce failed Android CI checkpoints off CI before fixing and redispatching. Standalone invocation offers Project or Session; init persists repo conventions. NOT for workflow YAML, CI speed or runners (github-actions), browser tests (e2e-test), iOS (ios-foundation), plain Jest tests, or signing/store release."
4
+ release-version: 0.47.0
5
+ ---
6
+ **Updates:** Once/session run `node <skill-base-dir>/release-check.mjs`.
7
+ # Android development
8
+
9
+ Use the repo's existing native project, build scripts, launcher and journey harness.
10
+ Read its `AGENTS.md`, `CONTRIBUTING.md` Android development section and relevant ADRs.
11
+ Project rules and required CI remain binding; this skill does not add acceptance gates.
12
+
13
+ ## Invocation and persistence
14
+
15
+ - **Standalone `/android-development`**, without a task or explicit scope: ask once,
16
+ "Where should the Android workflow apply?" Offer **Project** (persist repo conventions)
17
+ and **Session** (apply here without writing files). Wait for the answer; cancellation
18
+ leaves files unchanged. Do not offer global persistence.
19
+ - **Project**, `/android-development init`, or an explicit request to save repo conventions:
20
+ follow [initialization](references/init.md). Preview, then apply the authorized missing
21
+ `CONTRIBUTING.md` section and `AGENTS.md` task-entry loader and guide pointer. Check
22
+ the skill loader separately from an existing guide link. No second approval is needed unless
23
+ existing policy conflicts. Initialization is not a policy refresh or delivery permission.
24
+ - **Session:** apply this workflow without writing guidance or agent settings. Retain the
25
+ choice through reload/compaction in this session; a new session makes its own choice.
26
+ - **An actual Android task or automatic skill load:** read and apply the workflow without
27
+ a scope question or writes. Quoted invocations are not setup requests. If repo guidance
28
+ is absent, use these defaults and offer init once without blocking the task. An existing
29
+ guide alone does not authorize persistence. Do not treat unreadable guidance as absent.
30
+
31
+ ## Work loop
32
+
33
+ Choose the task, not a fresh environment for every attempt:
34
+
35
+ - **Feature:** implement, then follow the applicable validation levels below.
36
+ - **Debug:** reproduce the failing screen/action/build/harness checkpoint, inspect its
37
+ evidence, fix the cause, and confirm that the original reproduction passes. Then follow
38
+ the same validation ladder. Read [diagnosis](references/diagnosis.md) before debugging.
39
+ For CI failures, reproduce the checkpoint off CI before fixing and redispatching;
40
+ never send a guessed correction to CI to discover whether it works.
41
+ - **Setup proof:** only for a new environment or invalidated setup assumptions. Read
42
+ [workspace](references/workspace.md) and [setup](references/setup.md), run all applicable
43
+ repo-specific stages in order and record proof. Do not add Expo or a new harness merely
44
+ to match the examples, or repeat cold setup for ordinary fixes.
45
+
46
+ ## Validation ladder
47
+
48
+ Read [feature work](references/feature-work.md) for selection, ownership and handoff.
49
+ These feedback times are targets, not promises or automatic command deadlines.
50
+
51
+ | Level | Trigger | Verification | Target feedback |
52
+ | --- | --- | --- | --- |
53
+ | L0: Fast | Each code edit | Focused tests, relevant typecheck, and Fast Refresh on the owned app for applicable JS/UI behavior | 5-60 sec |
54
+ | L1: Native | Native code, SDK/dependency or native configuration changes | Incremental emulator-ABI build, install/update, and exercise affected native behavior | 1-4 min |
55
+ | L2: Integration | PR or meaningful feature checkpoint | Candidate APK, fresh-install startup smoke on disposable owned state, and selected real journeys | 5-15 min |
56
+ | L3: Acceptance | Assigned merge/release checkpoint | Required regression, security, backend, device and ABI matrix | As required |
57
+
58
+ Skip L1 when native inputs did not change. Do not defer affected runtime checks to L2
59
+ just because L0 is fast. Fast Refresh and build success are not packaged-app proof.
60
+ If a level fails, debug and fix that failure, confirm its reproduction, then repeat the
61
+ checks the correction invalidated. Preserve applicable evidence and required current-source
62
+ CI; do not restart the whole campaign. Finish at the assignment's checkpoint and report
63
+ higher levels still pending rather than claiming acceptance.
64
+
65
+ ## Principles
66
+
67
+ - **Minimize coordination cost.** Choose the smallest design that preserves the required
68
+ behavior and reduces demonstrated coordination cost.
69
+ - **Reuse valid state; invalidate only what changed.** A source edit does not automatically
70
+ invalidate the environment or every artifact.
71
+ - **Match proof to the claim.** Focused development feedback and release acceptance prove
72
+ different things. Use provenance to qualify evidence, not postpone runnable tests;
73
+ speed does not waive correctness or explicit identity gates.
74
+ - **Make ownership explicit.** State transitions and resources need an authoritative owner;
75
+ shared access does not imply permission to reset or modify them.
76
+
77
+ ## DOs
78
+
79
+ - Resolve the [owned workspace](references/workspace.md) and actual candidate HEAD. Classify
80
+ changed inputs; verify the [command/task graph](references/feature-work.md#verify-command-expansion)
81
+ before adopting a native build route, not as a prerequisite for independent source tests.
82
+ - Run independent source tests against the working changes immediately. Record HEAD and
83
+ dirty state, verify the code loaded by each relevant test, and report artifact checks separately;
84
+ read [test-first provenance](references/feature-work.md#run-tests-before-chasing-commit-labels).
85
+ - Start Metro once per owned development session for a Metro-backed debug app. Reuse its
86
+ server/port, installed app and booted emulator across edits and focused checks.
87
+ - Assign separate Metro servers/ports and device mappings to independently changing source
88
+ trees/configurations. Share only the same intentional source/config under one runtime owner;
89
+ follow [parallel runtime ownership](references/workspace.md#parallel-development-sessions).
90
+ - Use Fast Refresh or reload for refreshable JS/TS edits. Do not run Gradle, reinstall,
91
+ reboot or restart the backend solely because HEAD changed.
92
+ - Incrementally build/install the actual device ABI when native inputs change and exercise
93
+ the affected behavior. Retain compatible Metro, emulator, Gradle daemon and private outputs.
94
+ - Restart only the resource invalidated by configuration, incompatibility or demonstrated
95
+ failure. Stop owned resources or explicitly hand them off at session completion; finishing
96
+ one check is not session completion. Read [runtime and cleanup](references/setup.md#owned-development-session) first.
97
+ - Use repo-pinned tools, frozen installs and installed SDK components. Bound commands/child
98
+ waits with cleanup time; preserve the original failure separately from cleanup errors.
99
+ - Keep writable caches and fixture data private; never use shared/production data or
100
+ signal unverified stale PIDs. Follow the existing resource owner's cleanup rules.
101
+ - Record native artifact and served-JS identities, variant/API/ABI and sanitized evidence.
102
+ Preserve all configured ABI setup/release proof and distinguish local, CI and post-deploy results.
103
+
104
+ ## Avoids
105
+
106
+ - Do not routinely rebuild, reinstall or restart the emulator for JS edits the app can load.
107
+ - Do not automatically run cold setup, clean, prebuild or shared SDK upgrades for an ordinary correction.
108
+ - Do not hide test-APK packaging or all-ABI builds in development commands without a relevant
109
+ requirement. Keep required instrumentation and all-ABI acceptance explicit and intact.
110
+ - Do not borrow writable caches, reset peer runtimes, reuse invalid native artifacts or invent flags.
111
+ - Do not treat a fast local pass as release acceptance or add pools/metrics systems by default.
112
+ - Do not commit, publish, tag or rebuild unrelated artifacts just to match SHA labels before
113
+ testing. Do not count tests loading an unchanged package as proof of its correction.
114
+
115
+ ## Read when needed
116
+
117
+ | Topic | Required reference |
118
+ | --- | --- |
119
+ | Repo convention persistence | [init.md](references/init.md) |
120
+ | Kotlin/Compose vs React Native selection | [Kotlin/Compose vs React Native](references/framework-choice.md) |
121
+ | Workspace selection and retention | [workspace.md](references/workspace.md) |
122
+ | Development-session lifecycle and resource ownership | [Owned development session](references/setup.md#owned-development-session) and [runtime ownership](references/workspace.md#development-workspace-owned-session-runtime-and-disposable-runs) |
123
+ | Parallel warm servers and test-first provenance | [Parallel sessions](references/workspace.md#parallel-development-sessions) and [test-first provenance](references/feature-work.md#run-tests-before-chasing-commit-labels) |
124
+ | Builds, provisioning, device execution, cleanup and setup proof | [setup.md](references/setup.md); use [device-run.sh](scripts/device-run.sh) only without an existing resource owner |
125
+ | Feature/fix validation and handoff | [feature-work.md](references/feature-work.md) |
126
+ | Failure reproduction and correction | [diagnosis.md](references/diagnosis.md), then the relevant [gotcha](references/gotchas.md) |
127
+ | CI integration | [ci.md](references/ci.md), [template](assets/android-ci-job.yml), and `github-actions` |
@@ -0,0 +1,117 @@
1
+ ## Android development
2
+
3
+ This section records validation order, proof limits and this repo's verified command map.
4
+ Before a selected check, resolve only the commands and inputs it needs from the repo's scripts,
5
+ CI configuration and native project. Do not delay a verified source test while resolving an
6
+ unrelated native build, journey or CI command. Report unresolved commands for their affected
7
+ checks instead of guessing them. Add verified bindings during explicit initialization;
8
+ do not restate or contradict existing project policy.
9
+
10
+ Required CI, release gates, safety rules and cleanup ownership stay binding at every rung. The
11
+ ladder validates the corrected candidate; it never waives a gate the repository requires.
12
+
13
+ ### Principles
14
+
15
+ - **Minimize coordination cost.** Choose the smallest design that preserves the required
16
+ behavior and reduces demonstrated coordination cost.
17
+ - **Reuse valid state; invalidate only what changed.** A source edit does not automatically
18
+ invalidate the environment or every artifact.
19
+ - **Match proof to the claim.** Focused development feedback and release acceptance prove
20
+ different things. Use provenance to qualify evidence, not postpone runnable tests;
21
+ preserve explicit source/artifact identity gates.
22
+ - **Make ownership explicit.** State transitions and resources need an authoritative owner;
23
+ shared access does not imply permission to reset or modify them.
24
+
25
+ ### DOs
26
+
27
+ - Classify changes and verify actual command expansion: app assembly/install, test APK
28
+ packaging and test execution are different work. Inspect native build routes when needed;
29
+ do not make that a precondition for independent source tests. Retain required CI and consumers.
30
+ - Run independent source tests against the working changes immediately. Record actual HEAD
31
+ and dirty state once, verify the source/module/output loaded by the relevant test, and
32
+ report missing integration artifacts separately. Build affected package output only when
33
+ the test needs it; retain exact identity requirements for assigned workspaces, CI and releases.
34
+ - Start Metro once per owned development session for a Metro-backed debug app and reuse the
35
+ same server/port, installed app and booted emulator across edits and focused checks.
36
+ - Assign separate warm Metro servers, host ports and device mappings to independently
37
+ changing workspaces/configurations. Share one only for intentional same-source/config
38
+ work under one owner, with coordinated writes and exclusive mutating device checks.
39
+ Schedule device conflicts within host capacity; keep caches and test data isolated and
40
+ stop shared services only after every user releases them or an explicit handoff.
41
+ - Use Fast Refresh or reload for refreshable JS/TS edits; do not run Gradle, reinstall,
42
+ reboot or restart the backend solely because the source HEAD changed.
43
+ - Incrementally build/install the actual device ABI when native inputs change and check
44
+ the affected behavior. Retain compatible Metro, emulator, Gradle daemon and private outputs;
45
+ preserve the configured ABI matrix for setup/release acceptance.
46
+ - Restart only a resource invalidated by configuration, incompatibility or demonstrated
47
+ failure. Stop owned services or explicitly hand them off at session completion, not after
48
+ each check. Use the owner's bounded shutdown and verify exit; never reset peer resources.
49
+ - Track native artifact and served-JS identities separately. Invalidate shell reuse when
50
+ native inputs change; never relabel an older APK as a current-source build.
51
+ - Prefer shared RN UI for cross-platform forms/lists and Kotlin/Compose for new Android-only
52
+ native-heavy flows when making an explicit framework decision supported by product requirements.
53
+ Keep the existing stack for ordinary fixes; migration needs separate authorization.
54
+
55
+ ### Avoids
56
+
57
+ - Do not routinely build/install APKs, reboot the emulator, clean or prebuild for refreshable JS edits.
58
+ - Do not hide test packaging, all-ABI builds or acceptance campaigns inside a supposedly fast lane.
59
+ Preserve intentional test consumers and full required validation when separating commands.
60
+ - Do not share writable caches, reset peer runtimes, reuse invalid native artifacts or invent selectors.
61
+ - Do not guarantee timings, introduce emulator pools by default or add metrics infrastructure.
62
+ - Do not delay runnable tests while chasing matching package/commit labels, or publish/tag/
63
+ commit unrelated work to obtain them. Do not count an unchanged installed package as fix proof.
64
+ - Do not switch one Metro between candidate trees or alter another session's device mapping.
65
+ Do not let one blocked artifact prevent independent source checks or waive explicit CI gates.
66
+
67
+ ### Repository command map
68
+
69
+ During explicit initialization, record the verified working directory, command, native/JS
70
+ inputs, produced app/test artifacts and resource owner for L0-L3. Inspect effective Gradle
71
+ task expansion before calling a route app-only; keep unverified commands or graphs unresolved.
72
+ Prefer existing Expo/React Native scripts. Distinguish source inspection from an observed run;
73
+ init does not require provisioning, a cold build or a full acceptance campaign. Later init
74
+ runs preserve this section and its manual command bindings rather than refreshing them.
75
+
76
+ ### Debug, fix, validate
77
+
78
+ 1. Record the failed checkpoint, source SHA and the actual checkout, build variant, device or
79
+ ABI, and the evidence already kept. Name the earliest failing stage: build/install, launch,
80
+ load code and assets, initialize, render, interact.
81
+ 2. Reproduce the actual failing screen, action, build task or harness checkpoint. Reproduce a
82
+ failed CI checkpoint off CI before fixing and redispatching. Inspect the relevant compiler,
83
+ process/runtime log, app request or UI state; change one relevant variable at a time.
84
+ 3. Correct the cause and confirm that the original reproduction passes. Add a focused regression
85
+ test where it can expose the defect, then follow the applicable L0-L3 levels below. A passing
86
+ reproduction alone is not acceptance. If validation finds another defect, fix it and repeat
87
+ checks the correction invalidated rather than restarting the whole campaign.
88
+ 4. Report the commands used, their results, remaining gaps and any level still owed. Keep failed
89
+ attempts; a later pass does not erase them.
90
+
91
+ ### Validation ladder
92
+
93
+ Run L0 after code edits, L1 when native inputs change, and L2/L3 at their assigned project
94
+ checkpoints. Do not defer affected runtime checks merely to keep L0 fast. Feedback times are
95
+ targets, not deadlines, measured results or promises.
96
+
97
+ | Rung | Scope | Target feedback |
98
+ | --- | --- | --- |
99
+ | L0 | Edits to app code: affected fast tests, typecheck, Fast Refresh on the running app | 5–60 s |
100
+ | L1 | Native code, SDK/dependency or native configuration change: incremental emulator-ABI build, install/update, affected runtime check | 1–4 min |
101
+ | L2 | PR or feature checkpoint: candidate APK from current source, fresh-install smoke on disposable owned device and backend state, selected real journeys | 5–15 min |
102
+ | L3 | Merge and release: the repository-required regression, security, backend, device and ABI matrix | as required by the repository |
103
+
104
+ - L0 and Fast Refresh prove a source change in a running app, not a packaged artifact. A claim
105
+ about installed, packaged or distributed behavior needs L2 or L3 evidence from the same source
106
+ and configuration.
107
+ - Skip L1 when native inputs did not change. Retain required additional ABI checks for native
108
+ or ABI configuration changes. Setup proof and release acceptance build every configured ABI;
109
+ an emulator-ABI build proves only the emulator ABI. Compilation alone is not runtime proof.
110
+ - L2 installs on disposable state this run owns and records the identity of the APK it installed.
111
+ Reuse earlier evidence only while its source, configuration, artifact and environment still
112
+ apply to the behavior being claimed.
113
+ - Fresh-install proof does not cover upgrades or authorize clearing a borrowed device; preserve
114
+ upgrade-state checks when relevant. Reuse the existing resource owner, keep writable state
115
+ private, bound waits with cleanup time and never use shared/production fixture data.
116
+ - The developer owns focused validation and independent review checks the correction. The
117
+ coordinator schedules broader L2/L3 checks; keep remaining required levels explicitly pending.
@@ -19,8 +19,10 @@ trigger and required-check contract unless changing it is part of the task.
19
19
  never run on the self-hosted Android runners.
20
20
  3. Add `android` to `gate`'s `needs:` and a `check android "$ANDROID_RESULT" "$ANDROID"`
21
21
  line. Require only `gate`.
22
- 4. Before merging, open one Android-only PR and one docs-only PR. Confirm the job runs on
23
- the first, is skipped on the second, and `gate` passes on both.
22
+ 4. Verify both Android-only and docs-only changed-path cases: the job runs for the former,
23
+ skips for the latter, and the required gate handles both correctly. Reuse sufficient
24
+ existing run evidence or the repo's supported validation method. Open dedicated PRs
25
+ only when explicitly authorized and needed; this check does not grant delivery permission.
24
26
 
25
27
  ## Runner
26
28
 
@@ -50,8 +52,9 @@ trigger and required-check contract unless changing it is part of the task.
50
52
  - Build `x86_64` only (`-PreactNativeArchitectures=x86_64`), with `--no-daemon` and
51
53
  `-Pandroid.builder.sdkDownload=false`. Report
52
54
  this APK as emulator evidence only. The all-ABI build stays a local or release step.
53
- - Bundle the JavaScript with `expo export --platform android` before the native build so
54
- bundling errors fail fast.
55
+ - Bundle/export JavaScript with the repo's supported tooling before the native build so
56
+ bundling errors fail fast; use `expo export --platform android` only for Expo projects.
57
+ Preserve an existing bundle/build dependency order when it already provides this proof.
55
58
  - Give the job `timeout-minutes: 60`, the install step its own short timeout, and the
56
59
  APK build `timeout-minutes: 30`.
57
60
 
@@ -64,8 +67,9 @@ trigger and required-check contract unless changing it is part of the task.
64
67
  - Run the native auth/integration tests against that service before the device journey.
65
68
  - Unit-test the device orchestration scripts (journey wrapper, slot allocator, code
66
69
  lookup) before booting the emulator.
67
- - Pin the UI automation package in a venv at the path the journey wrapper reads; use the
68
- Python version the harness supports (3.12 on CI).
70
+ - If the existing harness uses Python UI automation, pin its package in the venv the
71
+ wrapper reads and use its supported Python version (3.12 in the example). Do not add
72
+ Python or replace an instrumentation harness solely to match the template.
69
73
  - Boot the emulator with the SHA-pinned `reactivecircus/android-emulator-runner`, or the
70
74
  runner's preinstalled emulator under an owned process group. Use the API level, target
71
75
  and ABI of the preinstalled image, `disable-animations: true`, `ram-size: 4096M` (or
@@ -1,8 +1,31 @@
1
1
  # Diagnose an existing Android failure
2
2
 
3
- Use the smallest investigation that can distinguish the remaining explanations. Reuse
4
- established resources and caches; do not build a second test platform to explain one
5
- failure. This procedure works without another diagnosis skill.
3
+ Get to a correction of the reported failure, then validate the corrected candidate through
4
+ the [L0-L3 ladder](../SKILL.md#validation-ladder). Reuse established resources and caches;
5
+ do not build a second test platform to explain one failure.
6
+
7
+ ## Reproduce, diagnose, fix
8
+
9
+ 1. Reproduce the actual failing screen, action, build task or harness checkpoint. For a
10
+ failed CI journey, reproduce that checkpoint off CI before fixing and redispatching.
11
+ Record the failed source, variant and environment; retain the original failure evidence.
12
+ 2. Inspect the first relevant error and the actual operation: compiler output for build
13
+ failures, process/crash logs for launch, app requests for loading, and screenshots,
14
+ hierarchy or state transitions for UI failures. Use the stage table below to narrow it.
15
+ 3. Find and correct the cause. Test one explanation at a time and add a focused regression
16
+ test at the boundary that exposes the defect where feasible. Do not substitute a
17
+ passing fake UI or readiness probe for the missing real app observation.
18
+ 4. Repeat the original reproduction and confirm the correction works. Then follow L0,
19
+ applicable L1, and the assigned L2/L3 checkpoints in [feature work](feature-work.md).
20
+ If validation exposes another defect, debug and fix it, then repeat invalidated checks.
21
+
22
+ The developer owns technical diagnosis and focused validation. The coordinator owns
23
+ scope and broader acceptance scheduling. After review handoff or a broader acceptance
24
+ failure, assign a bounded investigation with the failed checkpoint, evidence, next
25
+ question and return condition; the same developer may do it. Independent review checks
26
+ the fix. Return scope growth, missing access or inconclusive evidence to the coordinator,
27
+ not an unlimited campaign. Report local reproduction, source CI and post-deploy results
28
+ separately; another API/ABI or copied APK does not prove the original CI artifact.
6
29
 
7
30
  ## Locate the failing stage
8
31
 
@@ -80,6 +103,11 @@ worker's "running" status does not impose a timeout or demonstrate progress. The
80
103
  whole journey. Set a positive value for unattended runs; its backward-compatible
81
104
  zero default disables that deadline. Allow time for the owner to finish cleanup.
82
105
 
106
+ Use the harness's background-task mechanism when a journey can exceed the foreground
107
+ command limit. Budget for the selected journey and owned cleanup; feedback-time targets
108
+ are not kill deadlines. Continue independent work and inspect the terminal result when
109
+ notified, rather than waiting or polling in the foreground. Do not add another watcher.
110
+
83
111
  For a hung test, identify the actual outstanding command and last completed assertion.
84
112
  If the test waits for a child to exit, check whether its input actually requires exit.
85
113
  Reduce that question to a bounded host test before launching another emulator.
@@ -90,6 +118,12 @@ purpose and cost bound first. When no available experiment distinguishes the rem
90
118
  explanations, report the missing evidence/access. Do not restart an unchanged campaign
91
119
  or impose an arbitrary fixed number of retries on every kind of failure.
92
120
 
121
+ Carry the failed checkpoint and prior attempts across worker changes. Before adding a
122
+ service, transport or test abstraction, name the existing criterion it enables and why
123
+ the current path cannot answer the question. Use an existing known-working comparison
124
+ when available, but do not launch a baseline campaign or count it as candidate proof.
125
+ Report delivered behavior and remaining gaps first; a diagnostic helper is not acceptance.
126
+
93
127
  Choose the environment the assertion requires: local test resources for ordinary
94
128
  functional diagnosis, isolated deployed HTTPS when that behavior requires it, or an
95
129
  existing shared deployment for explicitly non-destructive smoke checks. Create only the
@@ -118,19 +152,14 @@ Do not kill another worker's server if the app accidentally connects to it.
118
152
  - Bundle succeeds, expected screen absent: inspect runtime exceptions, actual screen
119
153
  and selector.
120
154
 
121
- In fmm-express #2001, a local API36 ARM64 comparison failed without the preference,
122
- rendered Login after setting it, and failed again after removing it. The original API35
123
- x86_64 CI response was not retained; the local HTTP 500 was not claimed as that response.
124
- The corrected post-deploy CI subsequently passed on its deployed SHA. Ports, package,
125
- cloud infrastructure and issue identifiers are case-study details, not requirements.
155
+ Use any controlled comparison only for the source, API and ABI actually observed. A local
156
+ failure or correction does not reconstruct a missing CI response. Retain that evidence gap
157
+ and prove the corrected deployed artifact separately when the checkpoint requires it.
126
158
 
127
- Another repo-specific example was a Node first-login fixture with an empty Organization
128
- list consumed by Python. Passing the actual producer output through the real reader
129
- and journey seed selection exposed the mismatch before another cloud/device run. The
130
- general lesson is to test the composed contract, regardless of language or domain.
159
+ For a fixture consumed by another language or process, pass the real producer output
160
+ through the actual reader and journey selection. Empty collections or missing context
161
+ can expose a contract mismatch before another cloud/device run; handwritten fixtures on
162
+ each side cannot establish that the composed path works.
131
163
 
132
- - [Case study: issue #2001](https://github.com/1aboveio/fmm-express/issues/2001)
133
- - [Correction PR #2010](https://github.com/1aboveio/fmm-express/pull/2010)
134
- - [Passing post-deploy run](https://github.com/1aboveio/fmm-express/actions/runs/40329312705)
135
164
  - [RN 0.81.5 preference handling](https://raw.githubusercontent.com/facebook/react-native/v0.81.5/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/PackagerConnectionSettings.kt)
136
165
  - [RN 0.81.5 host selection](https://raw.githubusercontent.com/facebook/react-native/v0.81.5/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/AndroidInfoHelpers.kt)
@@ -0,0 +1,186 @@
1
+ # Feature work
2
+
3
+ Read the repository's validation and delivery policy first. Preserve required CI and
4
+ acceptance gates; this skill does not authorize skipping them or rewriting project
5
+ policy. Follow the [L0-L3 ladder](../SKILL.md#validation-ladder); do not duplicate setup
6
+ or full acceptance per edit. Name the immediate existing acceptance checkpoint, such as
7
+ opening the app and rendering the expected screen. Setup success is not that outcome.
8
+
9
+ | Stage | Scope | Ownership |
10
+ | --- | --- | --- |
11
+ | L0 and applicable L1 | Focused checks and affected runtime behavior during implementation. | Developer validates, reports evidence and gaps, then hands off to independent review. |
12
+ | L2 | Packaged-app startup and affected journeys through combined changes. | Coordinator schedules validation as soon as its prerequisites are ready, including before PR/merge when repo policy requires it. |
13
+ | L3 | Remaining cross-feature, device-matrix and release obligations, plus invalidated checks. | Coordinator accounts for required gates and reuses evidence only within its proven scope. |
14
+
15
+ ## Choose the work before building
16
+
17
+ Classify the changed inputs and affected behavior before selecting a command. Keep required
18
+ CI and assigned acceptance checks; fast feedback supplements them rather than replacing them.
19
+
20
+ | Changed input | Development response |
21
+ | --- | --- |
22
+ | JS/TS logic or styling loaded by the existing Metro-backed app | Keep the owned runtime; focused tests/typecheck and Fast Refresh or reload. Do not invoke Gradle, reinstall or reboot solely for this edit. |
23
+ | Native code, native dependency resolution, code generation, manifest/configuration or native resources | Incremental L1 build/install for the owned device ABI, then the affected runtime check. |
24
+ | Assets | Determine their delivery path: Metro-served assets may reload; packaged resources/embedded bundles need repackaging and affected install/runtime proof. Do not classify every asset as native or every JS edit as refreshable. |
25
+ | Authentication, payments, security or lifecycle contracts | Add the affected contract/device/integration checks at the assigned checkpoint; neither the filename nor a small diff justifies omitting them or automatically running every acceptance test. |
26
+
27
+ Use the repo's existing Expo/React Native development route before proposing a new wrapper.
28
+ An already installed compatible debug shell can load updated JS through the owned Metro.
29
+ Native/build-input changes invalidate that reuse; unknown compatibility calls for a scoped
30
+ rebuild, not an assertion that the old APK is current. Do not run `expo prebuild` routinely
31
+ against tracked native projects.
32
+
33
+ ### Check journey admission before reserving devices
34
+
35
+ Before an expensive native journey, verify the exact selected case and supported arguments
36
+ against the existing runner, required installation/resource owners, effective test flags,
37
+ and device settings. Use existing help, parser tests or preflight commands when available;
38
+ do not invent a selector or build another preflight framework. Missing admission support
39
+ is a harness limitation to resolve, not a reason to allocate devices and discover it later.
40
+ Continue independent source tests while device prerequisites are checked.
41
+
42
+ Apply lifecycle-changing display size, density and other required presentation settings
43
+ before app launch when the journey relies on retaining that Activity or observation scope.
44
+ Read back the effective settings through the existing owner. A later setting change may
45
+ recreate the Activity; do not hide scope retirement with registration retries or relaxed
46
+ identity checks. Keep this check scoped to the selected case, not every possible device cell.
47
+
48
+ ### Verify command expansion
49
+
50
+ Before adopting a native fast path, trace its package script, wrapper, Gradle tasks and
51
+ consumed artifacts. Inspect the effective task graph in the owned, prepared environment
52
+ with the repo's wrapper and a bounded `--dry-run` when available; this still configures the
53
+ project and may resolve plugins, so it is not an L0 check or permission to provision tools.
54
+ If it cannot be inspected, report the unverified expansion rather than calling it app-only.
55
+
56
+ Distinguish app assembly/install, instrumentation-test APK packaging, test execution and
57
+ broader journeys. For example, an `assembleDebug` dependency on `assembleDebugAndroidTest`
58
+ adds test packaging to that task, but does not prove every other debug/install route does
59
+ so. A task name such as `installDebug` is not proof of its dependency graph either.
60
+ Preserve an intentional separate-UID consumer or required test artifact. If separation is
61
+ needed, route the authorized build/CI change through `github-actions`, explicitly retain
62
+ the required test tasks/artifacts in validation, and verify both paths. Do not hide the
63
+ cost or bypass obligations with arbitrary task exclusions.
64
+
65
+ ### Run tests before chasing commit labels
66
+
67
+ Verify the code under test, not matching labels across every package and artifact. Record
68
+ the actual workspace, HEAD and uncommitted changes once, then run independent source tests
69
+ against those working changes. Do not require a clean tree or a new commit merely to start
70
+ L0 checks. Revisit identity when relevant inputs, resolution or the runtime change, not as
71
+ a repeated search for matching SHAs before every test.
72
+
73
+ For a changed package, verify the actual module path or build output loaded by its consumer.
74
+ Use the repo's supported workspace dependency, local build or package-install route to load
75
+ the correction. A package version, common Git label or passing test against an unchanged
76
+ installed copy does not prove the fix. If an integration check needs new compiled output,
77
+ build that affected output; do not hunt for an older artifact with a matching commit label.
78
+ Keep package lookup and identity checks bounded by the question they answer.
79
+
80
+ | Check | Identity needed before claiming the result |
81
+ | --- | --- |
82
+ | Focused source test | The actual changed source loaded by the test, including working changes |
83
+ | Package integration | The actual changed package output loaded by the real consumer |
84
+ | Metro-backed app behavior | Compatible native shell plus the actual JS source/endpoint served |
85
+ | Required CI, release or published-artifact verification | The exact identity mandated by that checkpoint |
86
+
87
+ Do not publish, tag, commit or rebuild unrelated components solely to manufacture matching
88
+ labels. If changed package output cannot yet be loaded, mark that integration check pending
89
+ or blocked and run other ready source checks. Report "source tests passed; installed-package
90
+ integration pending" when that is what the evidence proves; do not relabel a source pass as
91
+ integration success or substitute mocks for the changed first-party path.
92
+
93
+ Retain explicit current-source CI/release identity requirements. A wrong assigned checkout
94
+ or candidate revision is a real scope problem: follow [workspace precedence](workspace.md#precedence),
95
+ report it and do not silently reset, test a substitute revision or search indefinitely for
96
+ an equivalent package. Local test execution does not authorize waiving that assignment.
97
+
98
+ ### Track native and JS provenance separately
99
+
100
+ For a development session, record the installed native artifact's source/build inputs,
101
+ package, variant and ABI separately from the JS source and actual Metro endpoint serving
102
+ the current candidate. Compare native sources, resolved native dependencies, build/config
103
+ inputs and packaged resources before reusing that shell. A changed Git HEAD alone is not
104
+ a reason to rebuild if only Metro-served JS changed and policy allows shell reuse.
105
+
106
+ An APK built at A and JS served from B are valid scoped development evidence only when
107
+ those identities and native compatibility are known. Do not call the APK a build of B or
108
+ claim packaged/release proof from it. L2/L3 still use the artifact/source checks their
109
+ checkpoint requires. No new fingerprint service or cross-checkout artifact copying is implied.
110
+
111
+ ## Apply the levels
112
+
113
+ - At L0, use Fast Refresh only when the selected debug build supports it and the owned app
114
+ is running. It helps check JS/UI edits, but does not prove a fresh launch, install or
115
+ embedded release bundle. Use the repo's focused tests and relevant typecheck commands.
116
+ - At L1, changed Kotlin/Java/C++/Compose code, native SDKs/dependencies or native build
117
+ configuration require an incremental build, install/update and the affected device
118
+ interaction. Use the emulator ABI where repo policy permits; retain required additional
119
+ ABI checks. A successful compile is not native runtime proof.
120
+ Use the actual owned device ABI and a per-invocation override, not an assumed x86_64
121
+ target or a change to the shared all-ABI default; see [setup](setup.md).
122
+ - At L2, use the candidate APK and its actual bundle/asset-loading mechanism, not just a
123
+ development session. Fresh-install smoke uses disposable owned app state; it does not
124
+ prove upgrades or authorize clearing a borrowed device. Run upgrade-state coverage when
125
+ required. Exercise the changed journey using supported selectors.
126
+ - At L3, run the matrix and regression/security/backend checks the repo/spec assigns to
127
+ that checkpoint. This is not a new requirement to run every conceivable test per PR.
128
+ - Treat feedback times as targets to measure, not evidence of achieved speed. Set real
129
+ command deadlines for the selected work and leave time for owned cleanup.
130
+
131
+ ## Debug, fix, then validate
132
+
133
+ Reproduce the failure, inspect the relevant evidence, correct the cause and confirm that
134
+ the original reproduction passes. Then run L0, applicable L1, and L2/L3 at their assigned
135
+ checkpoints. The original reproduction passing does not replace the ladder. If a level
136
+ finds another defect, fix it and repeat the checks that correction invalidated; do not
137
+ restart unchanged setup or the entire campaign.
138
+
139
+ For example, a JS filter fix needs its focused regression test and open/edit/apply/result
140
+ check at L0, no L1 if native inputs are unchanged, and that journey in the candidate APK
141
+ at L2. Required CI and L3 obligations remain assigned, not silently waived or marked done.
142
+
143
+ ## Plan and hand off
144
+
145
+ - Name focused checks and integrated journey checkpoints in the plan before implementation,
146
+ with real prerequisites, an owner and observable results. Do not put all device testing
147
+ in the last task. Start independent ready work concurrently within device/host capacity
148
+ and existing ownership boundaries.
149
+ - Choose the smallest check that proves the affected behavior. Host tests can prove logic
150
+ or a harness correction; native integration, navigation, keyboard, lifecycle and
151
+ accessibility changes need targeted owned-device evidence where host tests cannot prove
152
+ runtime behavior. A successful build/export alone is not device proof.
153
+ - Use existing supported journey selectors. If the harness cannot select the affected
154
+ flow, report that limitation and schedule the smallest existing journey that covers it.
155
+ Do not invent a flag, weaken assertions or silently omit device validation. For example,
156
+ a filter change needs open/edit/apply/result evidence, not an unrelated payment campaign.
157
+ - Reuse the workspace's private caches, venv and AVD configuration. Rerun setup stages only
158
+ when their assumptions change. Rebuild when build inputs change, using the emulator ABI
159
+ for focused work only where repository policy permits it. Do not require a fresh full
160
+ build or full journey solely because the candidate HEAD changed. APK reuse still needs
161
+ the source/configuration and artifact checks the repo requires; never relabel an old
162
+ artifact or result as current-source proof.
163
+ - At each checkpoint, state what changed and which earlier evidence that change invalidates.
164
+ Reuse evidence only while source, configuration, artifact and environment remain applicable
165
+ to the claimed behavior. Required current-source CI still runs; evidence reuse cannot
166
+ replace a gate that requires a new run.
167
+ - After a failed journey, local or a CI dispatch, enter Diagnosis mode and reproduce the
168
+ failing checkpoint off CI before running it again. A fake UI can reproduce a harness
169
+ navigation/scrolling bug; it cannot prove that the app loaded a bundle or rendered.
170
+ Show the original reproduction passes, then follow the applicable ladder and rerun
171
+ the affected check once at its assigned checkpoint.
172
+ Never send a guessed fix to CI to see whether it passes. Use the Diagnosis continuation
173
+ rule for unreproduced or intermittent failures; report uncertainty until evidence
174
+ supports the cause.
175
+ - Report source SHA, commands, results and remaining gaps at review handoff. For device
176
+ checks, include the selected scenarios, `PASS` markers and cleanup exit. For a failure,
177
+ name the earliest failing checkpoint and link retained evidence; preserve failed attempts.
178
+ Separate build duration, device-check duration and total worker time when discussing cost.
179
+ Reuse existing logs to distinguish cold/warm builds, build count, ABI, test packaging,
180
+ runtime startup and edit-to-feedback time. Do not infer a task's cost from total job time,
181
+ claim measured savings from a flag change, or add a metrics pipeline for this purpose.
182
+ - Broader device acceptance (all ABIs, tablet, TalkBack, physical devices, a release device
183
+ campaign) runs at the integration, release or campaign checkpoint the spec or repo assigns
184
+ it. Do not recreate it per feature or postpone affected runtime checks until release.
185
+ Record outstanding criteria as pending in their owning task or issue, never as passed.
186
+