docs: post-android-skills hygiene — layering rule, stale facts, §5 CameraX collapse, align docs to code (#143) - #144
Open
stozo04 wants to merge 1 commit into
Open
Conversation
…meraX collapse, align docs to code (#143) Closes #143 and lands the PR #141 follow-up (fresh-clone behaviour of the android-skills plugin: the marketplace name resolves, the skills do not load until `claude plugin install android-skills@android-skills --scope project`). ANDROID_STANDARDS.md: layering rule in the header; §5 CameraX collapsed to a pointer at /android-skills:camerax + the repo-only rules (lessons 012/022/025/ 031/036); §8 re-verified against the live Play page 2026-08-22 (API 36 floor from 2026-08-31, extension to 2026-11-01); "zero network, zero tracking" → the Firebase truth; compileSdk 37; dead PreviewScreen refs → real BackHandler sites. docs/README.md: FIREBASE.md row, six root files, layering sentence, full PRD list. elvis-asset-processing.md → docs/guides/ (+ index row). docs/e2e retention applied per #143's procedure → zero deletions (every unreferenced area has exactly one proof); the 8d6093b-style broader prune (9.43 MiB) is proposed in the PR, not done. Align-to-code pass (mechanical only, one hunk each): CLAUDE.md compileSdk; PRD-mission-control status banner; TEST_COVERAGE renamed/dead test names and closed gaps; dead symbol/line cites in PRD-camera-lenses/photo-booth/ photo-capture/speed-curves/capture-zoom/aso; 7 lesson checklists; play-store README + release-signing facts; reverse-video-research dead file refs; index.html lens list; cspell en-GB + dictionary. Tier 3: markdownlint 0 · cspell 0 · markdown-link-check 0 on all changed .md. Docs-only — zero files under app/ changed; Gradle gate not run (as #109/#119). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JVeJv8UjqrwGSzHMZHbVu9
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Documentation audit + cleanup: the post-android-skills hygiene pass specced in #143 (layering rule, stale facts, §5 CameraX collapse, e2e retention), the PR #141 follow-up (fresh-clone behaviour of the
android-skillsplugin, with the explicit--scope project), and an align-docs-to-code pass overdocs/— every version number, symbol, file path, status header and feature list checked against the current tree (three read-only sub-agent sweeps + hand verification). Mechanical corrections only; nothing restructured; proposals that need an owner decision are listed, not applied.Docs-only.
git diff --name-only main..HEAD -- app/→ 0 files. No Kotlin, Gradle, manifest, or resource touched.Related Issue
Closes #143. Follow-up to #141 (review recommendation on Lesson 007 / fresh-clone accuracy).
Type of Change
What this PR does
#143 tasks
ANDROID_STANDARDS.mdplay-store/data-safety.md). Also fixed:compileSdk/targetSdk36 →targetSdk36,compileSdk37 (lines 196, 251 —app/build.gradle.kts:25,35), and §11's deadPreviewScreenreferences → the realBackHandlersites (CameraScreen,GalleryScreen,TrimScreen,ProcessingScreen— grepped) and inset consumers (camera, gallery, trim, editor)./android-skills:camerax+ the Google links (kept);CLAUDE.mdprecedence caveat (MlKitAnalyzervs manualFaceTracker); repo-only rules as a lesson-linked list: 012, 022, 025, 031, 036 (025 added — it is aPreviewViewrule no skill knows). §5: 18 → 16 lines, all ours.ANDROID_STANDARDS.mdheader; matching sentence in theANDROID_STANDARDS.mdrow ofdocs/README.md's folder map.FIREBASE.mdgets a folder-map row and stays put (workflow path); the "do not create" sentence now names the six root files + thePRD-<feature>.mdset.elvis-asset-processing.mdgit mv'd todocs/guides/(history follows) + row inguides/README.md; zero inbound links existed (re-grepped), so nothing orphaned. Alternative the owner may prefer: fold it intoPRD-camera-lenses.mdas an appendix — say so and I'll re-home it.docs/e2e/retentionpr-reviewerCameraX checklistPR #141 recommendation (Lesson 007 accuracy)
docs/guides/android-skills.md→ "Scope: this project only" gained a "Fresh clone / new machine — the skills do not load by themselves" paragraph, citing Configure team marketplaces (read 2026-08-22, verbatim: "As of Claude Code v2.1.195 … A plugin that only the project's.claude/settings.jsonenables, and that comes from an external source such as a GitHub repository … doesn't load until the team member installs it. Until then, Claude Code reports the plugin as not installed and shows theclaude plugin installcommand to run.") — with the explicit--scope projectand why omitting it re-creates the user-scope drift.PRD-android-skills.mdDecision note got the matching one-liner ("self-contained on a fresh clone" = the marketplace name resolves, not that the skills load).Task 5 — e2e retention, applied step by step
git ls-files docs/e2e= 29 files. Step 2 (anything cited by a PRD / guide / README stays) — grepped every filename across all*.md/*.html/*.yml:.webp(248 KB)PRD-camera-lenses.md.png(1.79 MB)PRD-speed-curves.md.png(1.92 MB)twisted-tounge/GUIDE.md.png(1.31 MB).webp(156 KB).png(109 KB).png(1.69 MB).png(559 KB)Step 3 ("group by feature area, keep the newest per area, delete the rest") deletes nothing: every unreferenced area has exactly one proof set — the 2026-08-10 pass (
8d6093b) already pruned the older ones.The owner's option (not done — deletion needs an explicit "proceed"): commit
8d6093bread the rule more aggressively — every proof for an already-merged PR goes unless a live doc cites it (it deleted the only capture-zoom / issue-95 / photo-capture / in-app-updates proofs). Applying that reading here would delete 15 files, 9,890,168 bytes (9.43 MiB), leaving 3.78 MiB:2026-08-10-in-app-review-proof.md+2026-08-10-in-app-review-saved-after-ask-pixel8.png— PR feat(review)+docs(aso): in-app review gate, landing page, and listing reconciliation #124 merged2026-08-16-localization-readiness-proof.md+2026-08-16-localization-{loop-help,onboarding,trim}.webp— PR feat(i18n): externalize every user-facing string so Play can translate the app #132 merged2026-08-17-launcher-icon-proof.png— PR chore(lint): fix all 11 baselined findings, delete the baseline (-5.9 MB APK, themed icons) #133 merged2026-08-17-lens-removal-proof.md+2026-08-17-lens-removal-carousel.png— PR Remove Big Mouth and Bug Eyes (and the warp engine they were the only users of) #134 merged2026-08-20-booth-{countdown,gallery,idle-controls,postfix-countdown,share-sheet}.png,2026-08-20-booth-strip-{bw,color}.jpg,2026-08-20-upgrade-reverse-save.png— PR feat(booth): photo-booth strip — 5-4-3-2-1 ×3 capture into a printed strip #138 merged (its description embeds these by relative repo path, so those thumbnails break; git history keeps the files)Say "proceed" and it's a one-commit follow-up. (One-line aside: the 1.3–1.9 MB PNGs would shrink ~15× as WebP q90 — measured 1,645 KB → 113 KB — but that's lossy and renames files merged PR bodies embed, so not done.)
Task 6 —
pr-reviewer§5 CameraX checklist (owner decision).claude/skills/pr-reviewer/references/google-standards-checklist.md§5 (lines 72–85) is the same generic paraphrase §5 ofANDROID_STANDARDS.mdjust shed.android-skills:cameraxfor the CameraX review; then apply the repo rules — single camera-bound call site (012), release CameraX whenPreviewViewleaves composition (022), parent-intercept pinch (025),CameraEffectattached once / switched by uniform (031),getBitmap()stale after stop (036)." Keeps the review rubric aligned with the standards doc; the skill body is maintained by Google.Recommendation: (a), with one line retained for the no-plugin case ("if
android-skills:cameraxis unavailable, fall back to the Google links"). Not changed in this PR.Edits beyond #143's letter — per the "align docs to code" instruction
#143's acceptance list says "Nothing in
PRD-*.md,lessons_learned/,guides/… orplay-store/was modified." The owner's instruction for this PR was broader ("ensure documentation matches and aligns to our current code") and explicitly asked for the #141 change insideguides/. So that box is deliberately not ticked. Rule applied: mechanical falsehoods only (dead paths/symbols/line cites, wrong versions asserted as current, status headers contradicted by shipped code, one-liners contradicted by their own file) — no restructuring, no rewritten design text. Every edit is a one-linegit diffhunk:CLAUDE.md:100—compileSdk/targetSdk36 →targetSdk36 /compileSdk37 (it contradicted its own line 98).PRD-mission-control.md— status banner at the top: §1–§5/§7/§9 describe the 2026-05 build (PreviewScreen,LoopingPreview, 1.5 s bursts, phases 3–5 "planned"); current architecture =CLAUDE.mdsnapshot + feature PRDs; still-authoritative = tokens, data layout, decision log. "Zero network requirements" → the Firebase truth. Nothing else in it touched — see Proposal 1.TEST_COVERAGE.md— 6 renamed ViewModel test names corrected to the live ones (startBurstCapture starts recording and auto-caps at 30 seconds,finalize success auto-routes to Trim …,commitPendingDeletion …, etc.); six deadpage0_/page1_/page2_onboarding rows → the two realOnboardingScreenTesttests; the fourPermissionExplanationScreenTestrows re-headed under their own class; the false "advanceTimeBy(1500)" sentence; "Gallery, Camera, Preview screens untested" gap row removed (all have suites — listed under Closed gaps (screen UI)); accessibility gap narrowed to contrast;AppUpdateFlowRobolectricTest+InAppReviewRobolectricTestadded to the Robolectric table; compact class-name inventories for the ~43 suites the doc omitted.PRD-camera-lenses.md—LensEffect→LensSurfaceProcessor; three deadCameraScreen.kt:<line>cites → file only;contentDescription = "Lenses"→camera_drawer_open("Lenses and Photo Booth"); "No category tab row in v1" marked superseded by the drawer'sPhoto Booth | Lensestabs (photo-booth D2).PRD-photo-booth.md—boothSaveInProgress(never existed) → the sharedphotoSaveInProgress; "Booth button (provisional placement)" struck per its own D2.PRD-photo-capture.md— Status: Awaiting sign-off → Shipped (feat(camera): photo capture mode (v1.0.37) #120 → feat(camera): photo capture mode (v1.0.37) — merge camera-lenses into main #123, v1.0.37); one empty(#)link → plain text.PRD-speed-curves.md— draft API namessample/sliceFor→ shippedmaxSpeed()/sampleClip(…); one never-committed image link (e2e/2026-08-17-speed-curve-drag.png, no git history at all) removed.PRD-capture-zoom.md— deadCameraManager.kt:58cite → file only.PRD-aso-discoverability.md—main1.0.37 → 1.0.47 (dated); "README says Zero network calls… verified" → said, fixed; "docs/index.htmlis 11 lines" pre-feat(review)+docs(aso): in-app review gate, landing page, and listing reconciliation #124 paragraph prefixed with a shipped note; "Three lenses ship" → seven (Big Mouth/Bug Eyes removed in Remove Big Mouth and Bug Eyes (and the warp engine they were the only users of) #134); §5.3 tasks 1–6 marked ✅ with evidence; "In-App Review would be a fourth" → is.lessons_learned/(7 files, one hunk each) —PermissionDeniedScreen→PermissionExplanationScreen(006); a dated-hand-off note on 012's slice-02 section (namesPreviewScreen/LoopingPreview/MAX_RECORDING_MS, all gone); 014's grep check re-scoped toOpenLoopNavHost(the bare grep now hits the permissionswhen); 015'sPreviewScreen.ktexample →TrimScreen.kt; 030updateTrimWindow→updateTrim; 032 dead test name →sticker_offsetOrbitsWithTheHead_keepingItsDistance; 034 broken[[016-…]]wikilink slug. (Sub-agent also verified all 36 index links, Origin columns, and every other cited symbol — live.)play-store/README.md— data-safety row said "(no data collected/shared)" while its own checklist says the opposite → fixed; permissions line now lists the threeFOREGROUND_SERVICE*entries (manifest lines 31–33) and legacyWRITE_EXTERNAL_STORAGE≤ 28; dead pointer to a non-existentdocs/local/play-store-beginner-guide.mdremoved (also fromdocs/README.md).play-store/release-signing-and-aab.md— "versionCode currently1/ versionName1.0.0" (it is 47 / 1.0.47) → "readapp/build.gradle.kts"; "CAMERAonly" → the real permission list.guides/reverse-video-research.md— two dead file references (HEY_CLAUDE_ITS_ME.md, the deleted slice docs) → plain text + a dated note. The Media3 1.10.x content is a datedCOMPLETEDrecord and was left alone.docs/index.html— "Broccoli, Shades and Elvis" → the seven shipped lenses (matchesLens.ktand the README).cspell.json—"language": "en,en-GB"(the docs are written in British English — one line instead of ~15 spellings) + 86 real terms/proper nouns the files surfaced.Sub-agent sweeps found clean: all
guides/(localization, oem-regression-testing, robolectric-testing-explained, samsung-rtl-steps — every script/test/symbol verified),FIREBASE.md,play-store/{content-rating,data-safety}.md.Proposals needing an owner decision (not done)
PRD-mission-control.mdrealignment. It is the docCLAUDE.mdcalls "authoritative architecture" and it describes May. Options: (a) rewrite §1–§5/§7/§9 against the current code (state machine fromOpenLoopUiState.kt, components from the package map, test architecture fromTEST_COVERAGE.md) — a PRD-sized change that needs sign-off; (b) demote it to "decision log + design tokens + data layout" and letCLAUDE.md+ feature PRDs be the architecture — delete §4/§5/§7/§9 (~250 lines). Recommendation: (b) — less to keep true. The banner makes either safe in the meantime.play-store/privacy-policy.md+docs/privacy-policy.html, identical content) is materially inaccurate — not changed because it is the Play-facing legal text with an effective date: (i) "Files OpenLoop stores … private, app-specific storage (not visible to other apps) … Uninstalling the app removes all of them" — false since photo/booth:work/MediaStoreVideoPublisher.ktpublishes every finished render to publicMediaStore(Movies/OpenLoop,Pictures/OpenLoop), visible to gallery apps and surviving uninstall; (ii) "Camera — to record video" — photo mode ships; (iii) the permissions list omitsWRITE_EXTERNAL_STORAGE(≤ 28) and the threeFOREGROUND_SERVICE*entries. Proposed replacement text (needs both files + a new effective date):Movies/OpenLoop,Pictures/OpenLoop) so your Gallery/Photos app can show them — those copies are visible to other apps you have given media access, and they stay on your device if you uninstall OpenLoop (delete them from your Gallery app). Everything in the app's private storage is removed on uninstall."FOREGROUND_SERVICE,…_MEDIA_PROCESSING,…_DATA_SYNC) — lets a loop finish rendering if you switch apps; shown by Android as a system indicator, not a notification" and "Storage (WRITE_EXTERNAL_STORAGE, Android 9 and below only) — to save finished loops to your media library".play-store/store-listing.md:75full-description copy names 3 of 7 lenses — Console text, your call.functions/package.json:3still describes the Cloud Function as "DRAFT" whilePRD-crashlytics-autotriage.md/FIREBASE.mdsay shipped — one-word code-side fix, out of scope for a docs PR.Gates
npx markdownlint-cli2 <25 changed .md>→ 0 issues (after--fixon blank-lines/list-marker rules,texttags on bare fences per Lesson 010, one table cell, one empty link).npx cspell --no-progress <changed .md>→ 0 issues (en,en-GB+ dictionary additions).npx markdown-link-check --config .markdown-link-check.jsonon every changed file → 0 dead links (one pre-existing dead image link inPRD-speed-curves.mdfixed).doc-layout.yml: no.mdadded outsidedocs/(git diff --diff-filter=A→ none; the Elvis move is a rename insidedocs/).app/changed (git diff --name-only -- app/→ empty), same as docs: prune generic guides, fix 6 rot defects, tier the lessons read order #109 and docs: refresh the CLAUDE.md source map (it was missing five packages) #119. Android Studio Engine 2 inspections: not run (headless is vacuous on this machine —STATIC_ANALYSIS.mdTier 2 gotcha).Numbers
ANDROID_STANDARDS.md: 281 → 281 lines (§5 18 → 16; header +2, §8 re-written at equal length).docs/e2e/: 13.21 MiB → 13.21 MiB (zero deletions under the procedure; 9.43 MiB deletable under the8d6093breading — awaiting "proceed").#143 acceptance criteria
docs/e2e/asset listed with proof — none deleted; the inventory + proof is aboveHow Has This Been Tested?
grep/Globon the cited symbols,gradle/libs.versions.toml+app/build.gradle.ktsfor versions,BackHandler/inset/GridCellscall sites for §11,git logfor the e2e assets, the livedeveloper.android.comandcode.claude.compages for the two external claims (dates in the text). Three read-only sub-agents swept PRDs / guides+play-store / lessons+test-inventory; their clean verdicts are listed above..mdfiles (27 files in the diff incl.cspell.json+index.html) —markdownlint-cli20,cspell0,markdown-link-check0;doc-layout.ymlconditions checked locally. No Gradle task run — docs-only, zeroapp/files (precedent docs: prune generic guides, fix 6 rot defects, tier the lessons read order #109 / docs: refresh the CLAUDE.md source map (it was missing five packages) #119).Checklist
git diffread;--fixhunks are whitespace / fence tags / one list marker only).main); the two pre-existing.claude/worktrees/checkouts on other branches were left untouched — not this PR's to prune.🤖 Generated with Claude Code
https://claude.ai/code/session_01JVeJv8UjqrwGSzHMZHbVu9
Note
Low Risk
Documentation and dictionary only; no app, Gradle, or manifest changes. Remaining owner decisions (mission-control rewrite, privacy-policy legal text) are explicitly not applied.
Overview
Docs-only pass that makes agent/Play docs match the tree after android-skills and shipped features. No Kotlin, Gradle, or resources.
Standards layering.
ANDROID_STANDARDS.mdnow states that generic Google guidance lives inandroid/skills; §5 CameraX collapses to a skill pointer plus repo lessons (012, 022, 025, 031, 036). §8 is re-verified (2026-08-22): Play’s API-36 floor from 2026-08-31,targetSdk36 /compileSdk37, and Firebase telemetry instead of “zero network.” §11 BackHandler/inset lists match current screens.Fresh-clone plugin truth.
guides/android-skills.mdandPRD-android-skills.mddocument that marketplace enablement does not load skills untilclaude plugin install … --scope project.Align-to-code. Dead symbols, line cites, test names, lens counts (seven), version 1.0.47, ASO task checkmarks, and Play permission/data-safety wording are corrected across PRDs, lessons,
TEST_COVERAGE.md, landing page, and play-store pack.PRD-mission-control.mdgets a “May 2026 snapshot” banner rather than a rewrite.cspelladdsen-GBplus dictionary terms.Owner follow-ups (mission-control realignment, privacy-policy legal text, pr-reviewer CameraX checklist, aggressive e2e prune) are listed, not done.
Reviewed by Cursor Bugbot for commit 5cf2129. Bugbot is set up for automated code reviews on this repo. Configure here.