Files
tsl-devkit/skills/thirdparty/ui-ux-pro-max/data/stacks/jetpack-compose.csv
T
csh 3d83740f88 Squashed 'docs/standards/playbook/' changes from c3f8137..25d895d
25d895d 🐛 fix(gitea_workflow): clean up temp repos after job steps
2bc3b11 🐛 fix(gitea_workflow): clean up temporary repo dirs in workflows
98c3f30 📝 docs(agent_rules): allow plan execution on current branch
16c7230 📝 docs(prompts): define custom verify layering
8efc4dd 🐛 fix(skills): quote commit-message description
bc8498f 🐛 fix(ci): install tomli for gitea tests
55cda3b 🐛 fix(tests): report missing toml parser clearly
c0729c7 🐛 fix(playbook): import Optional for cli compatibility
63e24bf 📦 deps(skills): sync thirdparty skills
d2f9356 🐛 fix(ci): isolate gitea workflow repos
588b81d 🐛 fix(ci): inline gitea workflow bootstrap
e0b1c3a ♻️ refactor(skills): standardize first-party skill contracts
2c5050d ♻️ refactor(skills): rename repo skills source dir
f049dfb 📦 deps(skills): drop duplicate first-party superpowers skills
234b335  feat(workflow): add superpowers planning and execution state tracking
c1702a6 📝 docs(markdown): format tracked markdown and drop stale templates
2325409 📝 docs(markdown): clarify optional markdownlint usage
214c44e 🔧 chore(markdown): add markdownlint baseline and lint fixes
a22b324 📝 docs(templates): add execution and memory-bank prompt templates
223a797 📝 docs(templates): update README for Claude Code and current features
4ac8672 📝 docs: simplify README + platform-agnostic tools + auto-create local rules
2431c9d 📝 docs: add claude_md config and use cross-platform paths
d64b248 📝 docs: fix README.md inaccuracies and add Claude Code info
c8d6bf2 🐛 fix(playbook): use relative paths in CLAUDE.md when not at project root
6518f0f  feat(playbook): auto-create CLAUDE.md with path discovery
6ec9a45  feat(skills): add skill_link symlink support + platform-agnostic prompt
9f8b6b5 📝 docs: update README and config example for Claude Code support
79cff6c 📝 docs(skills): add Claude Code platform support
452c6f5  feat(playbook): auto-inject AGENTS.md into CLAUDE.md
e1dbf3c 🐛 fix(skills): remove dual-path from commit-message skill
f3a7259 🔧 chore(ci): use prepare_repo.sh in both workflows
da08212 🔧 chore(ci): extract prepare_repo.sh and clean up workflows
7ade85e 🗑️ remove(tsl): drop syntax_book/, data/ source and build script
f94dba0 ♻️ refactor(skills): update playbook.py and tests for thirdparty/ layout
b3df412 ♻️ refactor(skills): separate thirdparty skills into thirdparty/ subdirectory
64950e7 📦 deps(skills): sync thirdparty skills
a2e3cb0  feat(playbook): add no_backup deploy controls
8609d59 🐛 fix(docs): repair reference catalog source links
956da11 🐛 fix(playbook): publish hidden ci test fixes
3f67754 📦 deps(skills): sync thirdparty skills
08ca87b 📦 deps(skills): add karpathy thirdparty sync
96b705b 📝 docs(tsl): rebuild canonical syntax and routing manual
3ed5052 📦 deps(skills): sync thirdparty skills
60108dd 📦 deps(skills): sync thirdparty skills
da85d4e 🐛 fix(thirdparty): prune nested project snapshots
a2a697e 📦 deps(skills): sync thirdparty skills
9df610a 🐛 fix(thirdparty): exclude duplicated superpowers skills
33dd5bb 🐛 fix(thirdparty): preserve optional manifest fields
91b0ea7 🐛 fix(thirdparty): preserve manifest during snapshot update
2e26f98 🔧 chore(thirdparty): generalize skills sync pipeline
5b9c1e3 📦 deps(skills): sync superpowers
2f2d34a 📝 docs(readme): normalize subtree command spacing
62db7db 🐛 fix(ci): serialize superpowers update and sync
3463223 🐛 fix(ci): use literal superpowers sync paths
48f6de8 📦 deps(skills): sync superpowers
4b23529 🔧 chore(ci): merge superpowers update and sync workflow
a56d75b 📦 deps(skills): sync superpowers
84bcefa 🔧 chore(ci): use ci[bot] commit author name
00a07e5 📦 deps(skills): sync superpowers
7b84daf 🐛 fix(templates): enforce main loop progress tracking
51373d7 🔧 chore(ci): automate superpowers sync workflow
eaaa39c 🐛 fix(ci): prevent stale superpowers sync from restoring skills block
79755c6 📦 deps(skills): sync superpowers
836d878 📦 deps(skills): sync superpowers
8216c9f 📦 deps(skills): sync superpowers
9439505 🐛 fix(playbook): address reported repo issues

git-subtree-dir: docs/standards/playbook
git-subtree-split: 25d895d8b3f56624ccfe99ad7289e9eb49e0f316
2026-05-24 13:04:14 +08:00

8.0 KiB

1NoCategoryGuidelineDescriptionDoDon'tCode GoodCode BadSeverityDocs URL
21ComposablePure UI composablesComposable functions should only render UIAccept state and callbacksCalling usecase/repoPure UI composableBusiness logic in UIHighhttps://developer.android.com/jetpack/compose/mental-model
32ComposableSmall composablesEach composable has single responsibilitySplit into componentsHuge composableReusable UIMonolithic UIMedium
43ComposableStateless by defaultPrefer stateless composablesHoist stateLocal mutable stateStateless UIHidden stateHighhttps://developer.android.com/jetpack/compose/state#state-hoisting
54StateSingle source of truthUI state comes from one sourceStateFlow from VMMultiple statesUnified UiStateScattered stateHighhttps://developer.android.com/topic/architecture/ui-layer
65StateModel UI StateUse sealed interface/data classUiState.LoadingBoolean flagsExplicit stateFlag hellHigh
76Stateremember only UI stateremember for UI-only stateScroll, animationBusiness stateCorrect rememberMisuse rememberHighhttps://developer.android.com/jetpack/compose/state
87StaterememberSaveablePersist state across configrememberSaveablerememberState survivesState lostHighhttps://developer.android.com/jetpack/compose/state#restore-ui-state
98StatederivedStateOfOptimize recompositionderivedStateOfRecompute alwaysOptimizedJankMediumhttps://developer.android.com/jetpack/compose/performance
109SideEffectLaunchedEffect keysUse correct keysLaunchedEffect(id)LaunchedEffect(Unit)Scoped effectInfinite loopHighhttps://developer.android.com/jetpack/compose/side-effects
1110SideEffectrememberUpdatedStateAvoid stale lambdasrememberUpdatedStateCapture directlySafe callbackStale stateMediumhttps://developer.android.com/jetpack/compose/side-effects
1211SideEffectDisposableEffectClean up resourcesonDisposeNo cleanupNo leakMemory leakHigh
1312ArchitectureUnidirectional data flowUI → VM → StateonEventTwo-way bindingPredictable flowHard debugHighhttps://developer.android.com/topic/architecture
1413ArchitectureNo business logic in UILogic belongs to VMCollect stateCall repoClean UIFat UIHigh
1514ArchitectureExpose immutable stateExpose StateFlowasStateFlowMutable exposedSafe APIState mutationHigh
1615LifecycleLifecycle-aware collectUse collectAsStateWithLifecycleLifecycle awarecollectAsStateNo leakLeakHighhttps://developer.android.com/jetpack/compose/lifecycle
1716NavigationEvent-based navigationVM emits navigation eventVM: Channel + receiveAsFlow(), V: Collect with Dispatchers.Main.immediateNav in UIDecoupled navUsing State / SharedFlow for navigation -> event is replayed and navigation fires again (StateFlow)Highhttps://developer.android.com/jetpack/compose/navigation
1817NavigationTyped routesUse sealed routessealed class RouteString routesType-safeRuntime crashMedium
1918PerformanceStable parametersPrefer immutable/stable params@ImmutableMutable paramsStable recompositionExtra recompositionHighhttps://developer.android.com/jetpack/compose/performance
2019PerformanceUse key in LazyProvide stable keyskey=idNo keyStable listItem jumpHigh
2120PerformanceAvoid heavy workNo heavy computation in UIPrecompute in VMCompute in UISmooth UIJankHigh
2221PerformanceRemember expensive objectsremember heavy objectsrememberRecreate each recompositionEfficientWastefulMedium
2322ThemingDesign systemCentralized themeMaterial3 tokensHardcoded valuesConsistent UIInconsistentHighhttps://developer.android.com/jetpack/compose/themes
2423ThemingDark mode supportTheme-based colorscolorSchemeFixed colorAdaptive UIBroken darkMedium
2524LayoutPrefer Modifier over extra layoutsUse Modifier to adjust layout instead of adding wrapper composablesUse Modifier.padding()Wrap content with extra BoxPadding via modifierBox just for paddingHighhttps://developer.android.com/jetpack/compose/modifiers
2625LayoutAvoid deep layout nestingDeep layout trees increase measure & layout costKeep layout flatBox ? Column ? Box ? RowFlat hierarchyDeep nested treeHigh
2726LayoutUse Row/Column for linear layoutLinear layouts are simpler and more performantUse Row / ColumnCustom layout for simple casesRow/Column usageOver-engineered layoutHigh
2827LayoutUse Box only for overlapping contentBox should be used only when children overlapStack elementsUse Box as ColumnProper overlayMisused BoxMedium
2928LayoutPrefer LazyColumn over Column scrollLazy layouts are virtualized and efficientLazyColumnColumn.verticalScroll()Lazy listScrollable ColumnHighhttps://developer.android.com/jetpack/compose/lists
3029LayoutAvoid nested scroll containersNested scrolling causes UX & performance issuesSingle scroll containerScroll inside scrollOne scroll per screenNested scrollHigh
3130LayoutAvoid fillMaxSize by defaultfillMaxSize may break parent constraintsUse exact sizeFill max everywhereConstraint-aware sizeOverfilled layoutMedium
3231LayoutAvoid intrinsic size unless necessaryIntrinsic measurement is expensiveExplicit sizingIntrinsicSize.MinPredictable layoutExpensive measureHighhttps://developer.android.com/jetpack/compose/layout/intrinsics
3332LayoutUse Arrangement and Alignment APIsDeclare layout intent explicitlyUse Arrangement / AlignmentManual spacing hacksDeclarative spacingMagic spacingHigh
3433LayoutExtract reusable layout patternsRepeated layouts should be sharedCreate layout composableCopy-paste layoutsReusable scaffoldDuplicated layoutHigh
3534ThemingNo hardcoded text styleUse typographyMaterialTheme.typographyHardcode spScalableInconsistentMedium
3635TestingStateless UI testingComposable easy to testPass stateHidden stateTestableHard testHighhttps://developer.android.com/jetpack/compose/testing
3736TestingUse testTagStable UI selectorsModifier.testTagFind by textStable testsFlaky testsMedium
3837PreviewMultiple previewsPreview multiple states@PreviewSingle previewBetter dev UXMisleadingLowhttps://developer.android.com/jetpack/compose/tooling/preview
3938DIInject VM via HiltUse hiltViewModel@HiltViewModelManual VMClean DICouplingHighhttps://developer.android.com/training/dependency-injection/hilt-jetpack
4039DINo DI in UIInject in VMConstructor injectInject composableProper scopeWrong scopeHigh
4140AccessibilityContent descriptionAccessible UIcontentDescriptionIgnore a11yInclusiveA11y failMediumhttps://developer.android.com/jetpack/compose/accessibility
4241AccessibilitySemanticsUse semantics APIModifier.semanticsNoneTestable a11yInvisibleMedium
4342AnimationCompose animation APIsUse animate*AsStateAnimatedVisibilityManual animSmoothJankMediumhttps://developer.android.com/jetpack/compose/animation
4443AnimationAvoid animation logic in VMAnimation is UI concernAnimate in UIAnimate in VMCorrect layeringMixed concernLow
4544ModularizationFeature-based UI modulesUI per feature:feature:uiGod moduleScalableTight couplingHighhttps://developer.android.com/topic/modularization
4645ModularizationPublic UI contractsExpose minimal UI APIInterface/RouteExpose implEncapsulatedLeaky moduleMedium
4746StateSnapshot state onlyUse Compose statemutableStateOfCustom observableCompose awareBuggy UIMedium
4847StateAvoid mutable collectionsImmutable list/mapPersistentListMutableListStable UISilent bugHigh
4948LifecycleRememberCoroutineScope usageOnly for UI jobsUI coroutineLong jobsScoped jobLeakMediumhttps://developer.android.com/jetpack/compose/side-effects#remembercoroutinescope
5049InteropInterop View carefullyUse AndroidViewIsolated usageMix everywhereSafe interopMessy UILowhttps://developer.android.com/jetpack/compose/interop
5150InteropAvoid legacy patternsNo LiveData in UIStateFlowLiveDataModern stackLegacy debtMedium
5251DebugUse layout inspectorInspect recompositionToolsBlind debugFast debugGuessingLowhttps://developer.android.com/studio/debug/layout-inspector
5352DebugEnable recomposition countsTrack recompositionDebug flagsIgnorePerformance awareHidden jankLow