@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
@@ -0,0 +1,88 @@
1
+ # Choose Kotlin/Compose or React Native
2
+
3
+ Choose the smallest design that preserves the required behavior and reduces demonstrated
4
+ coordination cost. Recommend a concrete default below; do not answer a framework decision
5
+ with only "it depends." Apply the product's platform requirements and existing ADRs first.
6
+ If one missing requirement would reverse the choice, name that requirement and ask for it.
7
+
8
+ ## Choose by situation
9
+
10
+ | Situation | Recommendation | What must hold |
11
+ | --- | --- | --- |
12
+ | Existing React Native app; delay is repeated builds, cold setup or oversized verification | Keep React Native and repair the development loop. Do not propose migration for this evidence. | JS edits use the compatible running app; native edits use the verified incremental path; required acceptance stays intact. |
13
+ | New flow with required Android/iOS UI reuse, mostly forms, lists and API interaction | Prefer React Native. Use platform-specific code only for demonstrated platform needs. | Verify the required native SDKs and platform behavior can be integrated without unacceptable ownership/synchronization costs. |
14
+ | New Android-only flow dominated by hardware/SDK interaction, IME/Back/focus, windows or Activity lifecycle | Prefer Kotlin with Jetpack Compose as the starting design. Keep the related UI state and lifecycle under one coherent native owner. | Android-only scope is confirmed; backend/security contracts and required validation remain unchanged. Kotlin is not a promise of faster builds. |
15
+ | Existing React Native flow repeatedly fails at demonstrated RN/native event or state coordination | First remove duplicated authority in the existing design. If that cannot meet the requirement, recommend an explicitly authorized Kotlin-owned coherent screen/flow as the next candidate, not many tiny bridged controls. | Define the boundary and its API, navigation and lifecycle responsibilities. Compare retained integration cost with the coordination being removed; preserve iOS obligations. |
16
+ | Product-wide migration proposed, or platform/reuse/maintenance trade-offs remain unresolved | Keep the current stack for ordinary delivery. Present the candidate decision and obtain authorization for a bounded comparison or architecture change. | No migration, standalone host, benchmark campaign or new framework is implied by an ordinary bug fix. |
17
+
18
+ Use the native-heavy recommendation for new design decisions, not as permission to rewrite
19
+ working React Native code. A single native SDK is not by itself a reason to migrate a whole
20
+ app. Conversely, shared UI is not a reason to force a platform-specific workflow through
21
+ multiple owners when the required behavior cannot be supported reliably.
22
+
23
+ ## Compare the actual development paths
24
+
25
+ | Dimension | React Native with native modules | Kotlin with Jetpack Compose |
26
+ | --- | --- | --- |
27
+ | UI styling and state iteration | Fast Refresh/reload can update supported JS/TS edits in an owned running debug app without a native build. | Compose Preview/Live Edit can help when the actual tooling supports them; structural changes still require compilation/deployment. |
28
+ | Business logic | Focused JS/TS tests and runtime debugging; native contracts still need composition proof. | Focused Kotlin/JVM tests and runtime debugging; platform/backend contracts still need composition proof. |
29
+ | Android APIs, hardware and SDKs | Native modules or components add a contract between JS and Android when needed. | Direct Android API/SDK integration can remove that cross-runtime adapter. |
30
+ | IME, Back, focus and window lifecycle | Define ownership across the React tree, native component and Android host; asynchronous events must not create competing authority. | A coherent native screen can reduce inter-framework coordination, but still needs correct state, event and lifecycle handling. |
31
+ | Build feedback | JS-only feedback can avoid Gradle; changed native inputs require native rebuilding. | Native changes use the supported incremental build/run path; Kotlin is not automatically a cheaper cold build. |
32
+ | Tests | May combine JS, JVM, instrumentation and device journeys. | May combine JVM, instrumentation and device journeys; one UI toolkit does not eliminate integration or acceptance layers. |
33
+ | Android/iOS reuse | Can share UI and logic, with explicit platform-specific behavior. | An Android Compose UI does not supply an iOS UI. Account for separate iOS work or an independently approved sharing strategy. |
34
+
35
+ For an agent, compare tools it can actually operate. Do not count Android Studio Preview or
36
+ Live Edit as available feedback in a headless CLI workflow without verifying access. Live
37
+ Edit has edit/runtime constraints; preview or live updates do not prove native interaction,
38
+ packaged startup or release behavior. Use the pinned toolchain, not assumed IDE capabilities.
39
+
40
+ ## Decide where ownership belongs
41
+
42
+ For a native-heavy editor or sheet, assign one authoritative owner for draft state,
43
+ Apply/Cancel, IME/Back handling and focus restoration. Define who accepts the final result
44
+ and rejects stale events. Prefer a coherent screen/flow boundary over splitting each
45
+ gesture and transition across runtimes. Keep business authorization and backend authority
46
+ where the product contract requires them; moving UI ownership does not transfer those powers.
47
+
48
+ Do not delete process-death recovery, persistence, identity, authorization, stale-callback
49
+ guards or tests just because a bridge disappears. Identify which adapters become unnecessary
50
+ and which correctness contracts remain. More Kotlin inside a React Native host may retain
51
+ the boundary; it is not evidence for a pure-native architecture's cost.
52
+
53
+ ## Make and report the decision
54
+
55
+ 1. State the recommendation first: keep React Native, use React Native for the new flow,
56
+ prefer Kotlin/Compose for the new Android-only flow, or evaluate a specific native-owned
57
+ boundary. Name the platform and behavior facts that support it.
58
+ 2. Fix avoidable feedback-loop costs before comparing engineering effort: no repeated cold
59
+ setup, unnecessary test packaging or all-ABI build for every local edit. Keep the
60
+ [validation ladder](../SKILL.md#validation-ladder) and required CI in both paths.
61
+ 3. If a comparison is authorized, use the same representative behavior, backend/security
62
+ contracts and acceptance criteria. Compare total implementation/debug/verification effort,
63
+ failed iterations and their causes, plus build/startup cost using existing records.
64
+ Adapter lines are supporting evidence, not the decision metric. Do not invent timings,
65
+ a universal percentage threshold, or a new metrics service.
66
+ 4. A standalone native host can test whether an interaction becomes simpler, but excludes
67
+ production integration, navigation, deployment and iOS costs. Report that scope separately;
68
+ do not compare its narrow success with full production acceptance as equivalent work.
69
+ 5. Recommend adoption only for the scope supported by the evidence. Record platform/reuse
70
+ trade-offs, retained contracts, transition/rollback costs and unresolved proof in the
71
+ project's existing decision record. Ask for approval before changing an established stack
72
+ or launching a new experiment. Continue ordinary fixes within their authorized scope.
73
+
74
+ ## Avoids
75
+
76
+ - Do not choose a framework from one slow build, a PR count or generic "excellent" ratings.
77
+ - Do not promise that Kotlin removes Android lifecycle or backend correctness obligations.
78
+ - Do not replace an optimized React Native baseline with an artificially cheap native demo.
79
+ - Do not turn this guide into a Kotlin-only preference, mandatory experiment or migration gate.
80
+ - Do not assume Android-only deployment or that cross-platform reuse has no product value.
81
+
82
+ ## Public tooling references
83
+
84
+ Check behavior against the project's versions before selecting a feedback mechanism:
85
+
86
+ - [React Native 0.81 build scope and ABI selection](https://reactnative.dev/docs/0.81/build-speed)
87
+ - [Expo local development and Metro reuse](https://docs.expo.dev/guides/local-app-development/)
88
+ - [Compose iterative development and Live Edit limitations](https://developer.android.com/develop/ui/compose/tooling/iterative-development)
@@ -1,4 +1,36 @@
1
- # Android foundation gotchas
1
+ # Android development gotchas
2
+
3
+ ## Triage
4
+
5
+ Name the earliest stage that failed. In CI, that is the first failed step. If the same
6
+ journey passed on another run of the same commit, suspect the run or the journey before
7
+ the product.
8
+
9
+ | Stage | Typical signal |
10
+ | --- | --- |
11
+ | Prerequisites / install | missing SDK directory, wrong JDK, lockfile drift |
12
+ | Harness unit tests (CI, before the APK) | a harness test fails on host state its fixture should fake (`requires 2 GiB reserve`) |
13
+ | Export / APK | Metro bundling error, Gradle compile or dependency-resolution error |
14
+ | Gradle network | Maven download or TLS-handshake errors on a cold build: fix routing, not code |
15
+ | Emulator boot / ADB | `sys.boot_completed` never reaches 1, device offline, exit 124 |
16
+ | Device to Metro | red box, "unable to load script", missing `adb reverse` mapping |
17
+ | Bridge passes, debug app fails to load | possible app/probe endpoint mismatch; inspect the actual request before choosing a cause ([React Native example](diagnosis.md#example-react-native-debug-app-uses-another-metro)) |
18
+ | Device to Metro, mid-journey | a screen's first Metro asset fails (`Unable to download asset from url: http://127.0.0.1:8081/assets/…`) while API calls still succeed |
19
+ | Backend / Login | backend log errors, verification code not found in the database |
20
+ | Backend tool, CI only | a Backend-backed step gets a 5xx in CI only; the log names a missing program (`Browser was not found at the configured executablePath`) |
21
+ | adb transport, mid-journey | `connection terminated: read failed` in the adb trace after boot, then lost `adb reverse`: usually guest RAM |
22
+ | UiAutomator server | `RemoteDisconnected` while the adb transport stays up: the on-device server was relaunched |
23
+ | Journey harness | a wait right after a navigation times out while the destination is on screen |
24
+ | Journey harness, short screen | a wait for a label times out only on a short or landscape screen, which shows the content above it |
25
+ | Product assertion | a screen or state mismatch with a screenshot |
26
+
27
+ Then match the signal against [gotchas.md](gotchas.md). If nothing
28
+ matches, [confirm the suspected cause](gotchas.md#confirm-a-suspected-cause)
29
+ before changing code.
30
+
31
+ Preserve the failure evidence. Do not blindly replay steps that send codes, verify sessions
32
+ or charge payments just to get a passing screenshot. One passing run does not prove the
33
+ build is reliable.
2
34
 
3
35
  Known traps, each as signal, cause and fix. Match the signal before you dig. If none
4
36
  matches, [confirm the suspected cause](#confirm-a-suspected-cause) before changing code.
@@ -58,10 +90,12 @@ matches, [confirm the suspected cause](#confirm-a-suspected-cause) before changi
58
90
  recovers, Metro becomes unreachable, and a debug build loads assets from Metro. A
59
91
  backend reached at `10.0.2.2` does not use adb, so it keeps working. The usual trigger is
60
92
  an [adb transport drop](#the-adb-transport-drops-mid-journey); fix that first.
61
- - **Fix:** re-prove the bridge before every step whose screen is the first to load a Metro
62
- asset: re-apply the reverse and check, from inside the device, that Metro answers. Doing
63
- it only at app launch is not enough. Release builds embed their assets, so this is a
64
- harness failure, not a product failure.
93
+ - **Fix:** after a transport reconnect or observed mapping loss, restore the owned reverse
94
+ and verify device-to-Metro loading before continuing the affected check. Preserve a
95
+ harness's required checkpoints, but do not reset mappings or probe every screen by
96
+ default in an unchanged warm session. Determine the selected variant's real asset
97
+ mechanism before classifying the failure; an absent mapping alone does not prove
98
+ that the harness rather than the app caused the disconnect.
65
99
 
66
100
  ### The adb transport drops mid-journey
67
101
 
@@ -191,7 +225,10 @@ matches, [confirm the suspected cause](#confirm-a-suspected-cause) before changi
191
225
 
192
226
  - **Cause:** the slot's tool cache is empty, so the JDK or Python downloads from the
193
227
  internet.
194
- - **Fix:** seed the runner's `_tool/` directory from a sibling slot with the same image.
228
+ - **Fix:** report the cold tool cache and hand provisioning to the runner owner through
229
+ `github-actions` and the fleet policy. A compatible cache seed may be their remedy;
230
+ do not copy or mutate either slot's shared `_tool/` state during an ordinary Android
231
+ diagnosis without a separate provisioning assignment.
195
232
 
196
233
  ### A Backend call fails only in CI: the runner lacks a tool the app launches
197
234
 
@@ -0,0 +1,126 @@
1
+ # Project initialization
2
+
3
+ `android-development` persists one section of project Android guidance. This helper is the
4
+ deterministic writer behind that setup; `SKILL.md` owns the interactive choice that decides
5
+ whether anything is persisted.
6
+
7
+ ## Usage
8
+
9
+ ```sh
10
+ node {baseDir}/scripts/init.mjs [--repo-root <dir>] [--write]
11
+ ```
12
+
13
+ - Preview is the default: it prints the planned action per file and writes nothing.
14
+ - `--write` applies the plan. `--repo-root` selects the project; without it the nearest Git root
15
+ from the current directory is used, falling back to the current directory when there is none.
16
+ - `--help` prints the usage line.
17
+ - An unknown argument, an unresolvable root, a malformed marker, an unsafe target or a file that
18
+ ends inside an unclosed fenced code block or HTML comment exits non-zero with a message and no
19
+ writes, in preview and with `--write` alike.
20
+
21
+ ## Files and ownership
22
+
23
+ When Project or explicit init is selected, preview with the command above, then apply it
24
+ with `--write` for the authorized missing additions. Existing conflicting policy needs a
25
+ decision, not an overwrite. Verify the repo's actual commands and add only known bindings
26
+ to a newly created Android section; report unresolved commands instead of guessing them.
27
+
28
+ | File | Write |
29
+ | --- | --- |
30
+ | `CONTRIBUTING.md` | The `## Android development` section, wrapped in `<!-- conventions:android:start -->` / `<!-- conventions:android:end -->`, with `references/android-conventions.md` as its body. |
31
+ | `AGENTS.md` | An `Android task entry` skill-loading block between `conventions:android-task-entry` markers, plus a pointer to the selected `CONTRIBUTING.md` when missing. Check these independently: a contributor-guide link alone is not a skill loader. |
32
+
33
+ Each file is created only when it is absent. The helper never edits `CLAUDE.md`, never writes into
34
+ a parent project, a home directory or global agent configuration, and never reaches outside the
35
+ selected root.
36
+
37
+ After applying authorized additions, verify that each existing supported agent entrypoint
38
+ reaches both the skill task-entry instruction and the Android contributor-guide section,
39
+ directly or through its instruction chain. A direct link to `CONTRIBUTING.md` does not
40
+ establish that the entrypoint loads the skill rule in `AGENTS.md`. The helper configures
41
+ `AGENTS.md`; it does not certify an independent `CLAUDE.md` loader. Preserve existing chains
42
+ and do not edit that entrypoint under this init permission. If one does not reach the guide,
43
+ report the files configured and the unresolved loading path as partial setup. Obtain separate
44
+ authorization for any additional loader edit instead of silently claiming complete setup.
45
+
46
+ The task-entry block requires reading and applying the installed `android-development`
47
+ skill before Android-specific commands, during issue-unit preflight, in delegated Android
48
+ workers, and again after compaction when its rules are lost. Keep commands and validation
49
+ policy in `CONTRIBUTING.md`, not this loader. An existing direct read/load-before rule or
50
+ managed block is preserved. A managed block is preserved only while it still holds an active
51
+ loader: an empty block, or one whose only loader is commented out or written as a code example,
52
+ is refused rather than counted as configured. A direct `do not load`-style rule that conflicts
53
+ with the loader is refused too, wherever it sits in the file. Fenced code, indented code, HTML
54
+ comments and inline code are documentation, so an example never counts as an active loader or as
55
+ a conflict. An unrecognized `Android task entry` section requires manual reconciliation rather
56
+ than a competing block. Inspect existing rules for conflicts before applying the helper; it
57
+ cannot interpret every natural-language policy. This missing-loader addition is part of explicit
58
+ init even in previously initialized repos, not an automatic update.
59
+
60
+ ## Resolve the repo command map
61
+
62
+ The initializer, not the deterministic writer, inspects existing scripts and guidance.
63
+ Prefer the repo's working development route over adding another wrapper. For a new Android
64
+ section, persist verified bindings in that section using this compact convention:
65
+
66
+ | Lane | Working directory and command | Inputs/artifacts and owner | Verification status |
67
+ | --- | --- | --- | --- |
68
+ | L0 | Existing Metro start/reuse, focused tests and typecheck | JS delivery endpoint and owned running app | Observed or unresolved |
69
+ | L1 | Incremental native build/install | Actual device ABI, scoped override, Gradle graph, app vs test APKs | Observed or unresolved |
70
+ | L2 | Candidate startup/install and selected journey | Candidate artifact, supported selectors and disposable state owner | Observed or unresolved |
71
+ | L3 | Existing required CI and release checks | Required test artifacts, device/ABI matrix and acceptance owner | Existing binding requirement |
72
+
73
+ Inspect wrapper/task expansion using [feature work](feature-work.md#verify-command-expansion)
74
+ when the owned toolchain permits it; reading a script is not executing its graph. Record
75
+ what was inspected versus run and leave missing evidence unresolved. Initialization does
76
+ not require a cold build, emulator provisioning, CI dispatch or acceptance campaign.
77
+ Record native/JS invalidation triggers and [development-session ownership](workspace.md).
78
+ Do not invent a command, selector or flag to complete the table.
79
+
80
+ On later init runs, preserve the existing section and manual bindings without refreshing
81
+ them. An authorized correction to stale commands is a deliberate policy edit, not a side
82
+ effect of initialization or a new skill version.
83
+
84
+ ## Preservation
85
+
86
+ Existing guidance wins over the template:
87
+
88
+ - An existing `## Android development` heading, marked or hand-written, is left byte-for-byte,
89
+ including any repository-specific commands a caller added.
90
+ - Every other section, hand edit and file is preserved; initialization appends and never
91
+ rewrites, reorders or refreshes.
92
+ - Repeating the same initialization leaves configured files unchanged. There is no `--force` and
93
+ no update path: a new skill release never replaces saved project policy.
94
+ - A valid symlink inside the project stays a link and its target is updated once. A dangling
95
+ link, a link resolving outside the selected root, a directory, unreadable or non-UTF-8 content,
96
+ and two targets resolving to one file are refused. Every target is validated before the first
97
+ write, so a refusal leaves the project untouched.
98
+ - Refuse a mutation of a multiply hard-linked file or of an alias to the protected
99
+ `CLAUDE.md` entrypoint. This includes a shared AGENTS/CLAUDE target: preserve it and
100
+ report the boundary rather than silently granting a new write permission.
101
+ - Refuse an addition to a file that ends inside an unclosed fenced code block or HTML comment.
102
+ Appended guidance would land inside that construct, be inactive, and be appended again on
103
+ every run. The helper never closes it for you: preserve the manual text, repair the fence or
104
+ comment, and rerun. A file that needs no addition is reported unchanged, so an
105
+ already-configured project behind such a construct is not blocked.
106
+ - An existing pointer is reused only when its link resolves to the selected `CONTRIBUTING.md`,
107
+ and a new pointer is written relative to the real location of `AGENTS.md`. A link to some other
108
+ file, such as a nested package guide, does not count as this project's loader.
109
+
110
+ ## What it does not do
111
+
112
+ Initialization is not installation or delivery. It does not install dependencies, SDK components
113
+ or devices, provision an emulator, generate CI, open issues, push or release. It does not
114
+ discover commands automatically: the initializer follows the command map above and reports
115
+ what it could not resolve. Adding verified repository-specific bindings to the new section is
116
+ part of that explicit initialization; a
117
+ conflicting existing rule is reported rather than overwritten.
118
+
119
+ ## Scope and overrides
120
+
121
+ The section applies to the project root it was written in, for later sessions. A Session choice
122
+ keeps the ladder in conversation only and writes no files or configuration, including after
123
+ compaction; an ordinary Android task reads existing guidance and does not initialize or ask about
124
+ setup by itself. `SKILL.md` owns that interactive choice and its lifetime.
125
+
126
+ Initialization does not authorize a commit, push, pull request, enqueue or release.