@mmerterden/multi-agent-pipeline 20.33.0 → 20.35.0
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.
- package/CHANGELOG.md +98 -1
- package/README.md +3 -1
- package/README.tr.md +2 -1
- package/docs/adr/0018-cross-repo-links-not-a-global-graph.md +43 -0
- package/docs/adr/README.md +2 -1
- package/docs/facts.json +5 -4
- package/docs/features.md +1 -1
- package/install/_dev-only-files.mjs +1 -0
- package/install/catalog-history.json +1 -1
- package/install/claude.mjs +24 -2
- package/install/templates/claude-hooks.json +34 -1
- package/manifest.json +393 -339
- package/package.json +3 -1
- package/pipeline/agents/bulk-reader.md +3 -0
- package/pipeline/agents/code-reviewer.md +9 -0
- package/pipeline/agents/explorer.md +4 -0
- package/pipeline/agents/plan-critic.md +4 -2
- package/pipeline/commands/multi-agent/SKILL.md +17 -136
- package/pipeline/commands/multi-agent/channels/SKILL.md +16 -298
- package/pipeline/commands/multi-agent/graph/SKILL.md +5 -2
- package/pipeline/commands/multi-agent/language/SKILL.md +3 -3
- package/pipeline/commands/multi-agent/office-on/SKILL.md +7 -3
- package/pipeline/commands/multi-agent/office-status/SKILL.md +3 -2
- package/pipeline/commands/multi-agent/resume/SKILL.md +8 -22
- package/pipeline/commands/multi-agent/review/SKILL.md +7 -131
- package/pipeline/commands/multi-agent/setup/SKILL.md +19 -224
- package/pipeline/contract/CHANGELOG.md +9 -0
- package/pipeline/contract/README.md +6 -2
- package/pipeline/contract/fixtures/error-invalid-request.json +1 -1
- package/pipeline/contract/fixtures/error-unauthorized.json +1 -1
- package/pipeline/contract/fixtures/error-unsigned.json +1 -1
- package/pipeline/contract/manifest.json +14 -1
- package/pipeline/contract/types/index.d.ts +24 -2
- package/pipeline/lib/json-file-lock.mjs +61 -15
- package/pipeline/lib/office-remote.mjs +228 -0
- package/pipeline/lib/qr-code.mjs +360 -0
- package/pipeline/lib/repo-hygiene.sh +1 -0
- package/pipeline/lib/run-completion.mjs +17 -0
- package/pipeline/multi-agent-refs/channels/generator.md +146 -0
- package/pipeline/multi-agent-refs/channels/issue-comment.md +1 -1
- package/pipeline/multi-agent-refs/channels/menu.md +55 -0
- package/pipeline/multi-agent-refs/channels/multi-repo.md +6 -0
- package/pipeline/multi-agent-refs/channels/preview.md +25 -0
- package/pipeline/multi-agent-refs/channels/reference.md +98 -0
- package/pipeline/multi-agent-refs/features/autopilot-circuit-breaker.md +1 -1
- package/pipeline/multi-agent-refs/features/code-graph.md +27 -0
- package/pipeline/multi-agent-refs/features/office-remote-protocol.md +166 -0
- package/pipeline/multi-agent-refs/features/office-threat-model.md +2 -2
- package/pipeline/multi-agent-refs/features/plan-critic.md +5 -2
- package/pipeline/multi-agent-refs/features/review-delta.md +4 -1
- package/pipeline/multi-agent-refs/features/scope-check.md +25 -1
- package/pipeline/multi-agent-refs/features/verify-by-test.md +10 -0
- package/pipeline/multi-agent-refs/keychain.md +7 -0
- package/pipeline/multi-agent-refs/knowledge.md +9 -0
- package/pipeline/multi-agent-refs/orchestrator/dispatcher.md +163 -0
- package/pipeline/multi-agent-refs/phases/phase-0-init.md +6 -2
- package/pipeline/multi-agent-refs/phases/phase-1-plan.md +8 -10
- package/pipeline/multi-agent-refs/phases/phase-2-dev.md +18 -20
- package/pipeline/multi-agent-refs/phases/phase-3-review.md +20 -14
- package/pipeline/multi-agent-refs/phases/phase-4-commit.md +8 -7
- package/pipeline/multi-agent-refs/phases/phase-5-report.md +6 -3
- package/pipeline/multi-agent-refs/picker-contract.md +1 -1
- package/pipeline/multi-agent-refs/resume/details.md +35 -0
- package/pipeline/multi-agent-refs/review/inputs.md +87 -0
- package/pipeline/multi-agent-refs/review/module-guides.md +25 -0
- package/pipeline/multi-agent-refs/review/valven.md +42 -0
- package/pipeline/multi-agent-refs/rules.md +3 -2
- package/pipeline/multi-agent-refs/setup/accounts.md +27 -0
- package/pipeline/multi-agent-refs/setup/app-store-connect.md +5 -0
- package/pipeline/multi-agent-refs/setup/firebase.md +5 -0
- package/pipeline/multi-agent-refs/setup/google-play.md +4 -0
- package/pipeline/multi-agent-refs/setup/hooks-and-plugins.md +21 -0
- package/pipeline/multi-agent-refs/setup/language.md +46 -0
- package/pipeline/multi-agent-refs/setup/multi-repo-group.md +51 -0
- package/pipeline/multi-agent-refs/setup/summaries.md +63 -0
- package/pipeline/multi-agent-refs/setup/token-save-flow.md +51 -0
- package/pipeline/multi-agent-refs/tracker-contract.md +1 -1
- package/pipeline/office/NOTICE.md +4 -1
- package/pipeline/office/assets/char_12.png +0 -0
- package/pipeline/office/assets/char_13.png +0 -0
- package/pipeline/office/assets/char_14.png +0 -0
- package/pipeline/office/assets/char_15.png +0 -0
- package/pipeline/office/assets/char_16.png +0 -0
- package/pipeline/office/assets/char_17.png +0 -0
- package/pipeline/office/assets/char_18.png +0 -0
- package/pipeline/office/assets/char_19.png +0 -0
- package/pipeline/office/assets/char_20.png +0 -0
- package/pipeline/office/assets/char_21.png +0 -0
- package/pipeline/office/assets/char_22.png +0 -0
- package/pipeline/office/assets/char_23.png +0 -0
- package/pipeline/office/assets/char_24.png +0 -0
- package/pipeline/office/assets/char_25.png +0 -0
- package/pipeline/office/assets/char_26.png +0 -0
- package/pipeline/office/assets/char_27.png +0 -0
- package/pipeline/office/assets/char_28.png +0 -0
- package/pipeline/office/assets/char_29.png +0 -0
- package/pipeline/office/assets/char_30.png +0 -0
- package/pipeline/office/index.html +304 -55
- package/pipeline/office/toolkit.json +1 -1
- package/pipeline/rules/response-shape.md +6 -7
- package/pipeline/schemas/agent-state.schema.json +36 -0
- package/pipeline/schemas/phases.json +4 -4
- package/pipeline/schemas/plan-critique.schema.json +9 -2
- package/pipeline/schemas/planning-output.schema.json +43 -2
- package/pipeline/schemas/pr-reach.schema.json +55 -0
- package/pipeline/schemas/prefs.schema.json +37 -8
- package/pipeline/schemas/reviewer-output.schema.json +20 -2
- package/pipeline/schemas/token-budget.json +4 -4
- package/pipeline/schemas/triage-output.schema.json +32 -3
- package/pipeline/schemas/unattended-policy.json +2 -1
- package/pipeline/scripts/_graph-analysis.mjs +270 -0
- package/pipeline/scripts/_guard_rules.py +449 -1
- package/pipeline/scripts/_memory-policy.mjs +165 -0
- package/pipeline/scripts/_secret-scan.mjs +105 -0
- package/pipeline/scripts/_test-gaming.mjs +36 -0
- package/pipeline/scripts/_unified-diff.mjs +2 -2
- package/pipeline/scripts/agent-guard.py +79 -19
- package/pipeline/scripts/anonymize-findings.mjs +99 -0
- package/pipeline/scripts/answer-check.mjs +113 -0
- package/pipeline/scripts/answer-check.sh +20 -0
- package/pipeline/scripts/autopilot-publish.mjs +9 -2
- package/pipeline/scripts/capture-flush.sh +12 -2
- package/pipeline/scripts/check-read-size.sh +9 -0
- package/pipeline/scripts/code-graph-rules/android.json +8 -3
- package/pipeline/scripts/contract-server.mjs +71 -16
- package/pipeline/scripts/debt-ledger.mjs +323 -0
- package/pipeline/scripts/file-context.mjs +261 -0
- package/pipeline/scripts/file-context.sh +20 -0
- package/pipeline/scripts/gate-ledger.mjs +144 -21
- package/pipeline/scripts/graph-links.mjs +230 -0
- package/pipeline/scripts/graph-query.mjs +133 -1
- package/pipeline/scripts/graph-report.mjs +65 -0
- package/pipeline/scripts/learn-from-transcripts.mjs +12 -48
- package/pipeline/scripts/learnings-ledger.mjs +143 -24
- package/pipeline/scripts/office-build.mjs +276 -5
- package/pipeline/scripts/office-control.mjs +70 -10
- package/pipeline/scripts/office-pair.mjs +407 -0
- package/pipeline/scripts/office-remote-client.mjs +463 -0
- package/pipeline/scripts/phase-tracker.sh +8 -0
- package/pipeline/scripts/phase0-exit-gate.mjs +40 -37
- package/pipeline/scripts/phone-devices.mjs +9 -1
- package/pipeline/scripts/plan-critique-gate.mjs +11 -2
- package/pipeline/scripts/pre-commit-check.sh +28 -2
- package/pipeline/scripts/pre-push-check.sh +6 -12
- package/pipeline/scripts/rework-base.mjs +87 -0
- package/pipeline/scripts/rework-rulings.mjs +106 -0
- package/pipeline/scripts/run-commit-check.mjs +104 -0
- package/pipeline/scripts/run-scope-guard.mjs +58 -3
- package/pipeline/scripts/run-scope-guard.sh +13 -1
- package/pipeline/scripts/scope-check-gate.mjs +213 -2
- package/pipeline/scripts/task-mirror.mjs +106 -15
- package/pipeline/scripts/task-mirror.sh +3 -2
- package/pipeline/scripts/test-stability-gate.mjs +112 -0
- package/pipeline/scripts/triage-memory.mjs +64 -37
- package/pipeline/scripts/update-check.sh +7 -1
- package/pipeline/scripts/update-issue-progress.sh +73 -8
- package/pipeline/scripts/validate-planning.mjs +172 -4
- package/pipeline/scripts/validate-reviewer.mjs +20 -0
- package/pipeline/scripts/validate-triage.mjs +149 -4
- package/pipeline/scripts/work-items.mjs +119 -1
- package/pipeline/scripts/worktree-prepare-all.mjs +200 -0
- package/pipeline/scripts/worktree-prepare.sh +40 -4
- package/pipeline/scripts/write-state.mjs +67 -24
- package/pipeline/skills/.skill-manifest.json +9 -9
- package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +5 -5
- package/pipeline/skills/shared/core/google-play-compliance/references/rules.yml +1 -1
- package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-graph/SKILL.md +5 -2
- package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +4 -4
- package/pipeline/skills/shared/core/multi-agent-office-status/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +2 -0
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +4 -4
- package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +14 -0
- package/pipeline/skills/shared/external/android-architecture/references/patterns.md +6 -0
- package/pipeline/skills/shared/external/android-build-quality-gates/references/patterns.md +10 -0
- package/pipeline/skills/shared/external/android-datastore/references/patterns.md +11 -0
- package/pipeline/skills/shared/external/android-design-tokens-codegen/references/patterns.md +8 -0
- package/pipeline/skills/shared/external/android-jetpack-compose-expert/references/patterns.md +6 -0
- package/pipeline/skills/shared/external/android-mvi-viewmodel/references/patterns.md +10 -0
- package/pipeline/skills/shared/external/android-performance/references/patterns.md +13 -0
- package/pipeline/skills/shared/external/android-security/references/patterns.md +16 -0
- package/pipeline/skills/shared/external/api-patterns/references/contract-details.md +9 -0
- package/pipeline/skills/shared/external/api-security-best-practices/references/abuse-controls.md +12 -0
- package/pipeline/skills/shared/external/api-security-best-practices/references/identity-and-access.md +13 -0
- package/pipeline/skills/shared/external/api-security-best-practices/references/request-handling.md +12 -0
- package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +9 -0
- package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +8 -0
- package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +10 -0
- package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +21 -0
- package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +9 -0
- package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +7 -0
- package/pipeline/skills/shared/external/app-store-review/SKILL.md +2 -2
- package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +10 -0
- package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +10 -1
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +22 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +17 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +22 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +17 -0
- package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +9 -0
- package/pipeline/skills/shared/external/authentication/references/passkeys.md +11 -0
- package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +13 -0
- package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +9 -0
- package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +10 -0
- package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +15 -0
- package/pipeline/skills/shared/external/compose-components/references/patterns.md +7 -0
- package/pipeline/skills/shared/external/compose-navigation/references/patterns.md +7 -0
- package/pipeline/skills/shared/external/compose-testing/references/patterns.md +15 -0
- package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +9 -0
- package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +11 -0
- package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +10 -0
- package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +13 -0
- package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +20 -0
- package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +16 -0
- package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +16 -0
- package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +14 -0
- package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +13 -0
- package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +10 -0
- package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +10 -0
- package/pipeline/skills/shared/external/fastapi-pro/references/app-structure.md +10 -0
- package/pipeline/skills/shared/external/gradle-kotlin-dsl/references/patterns.md +17 -0
- package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +12 -0
- package/pipeline/skills/shared/external/hig-app-icons/references/icon-workflow.md +10 -0
- package/pipeline/skills/shared/external/hig-components-content/references/content-views.md +10 -0
- package/pipeline/skills/shared/external/hig-components-layout/references/bars-and-tabs.md +11 -0
- package/pipeline/skills/shared/external/hig-foundations/references/foundations-detail.md +13 -0
- package/pipeline/skills/shared/external/hig-foundations/references/type-color-spacing.md +13 -0
- package/pipeline/skills/shared/external/hig-patterns/references/onboarding-and-states.md +11 -0
- package/pipeline/skills/shared/external/hig-platforms/references/ipad-layout.md +12 -0
- package/pipeline/skills/shared/external/hig-technologies/references/technologies.md +16 -0
- package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +9 -0
- package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +18 -0
- package/pipeline/skills/shared/external/ios-accessibility/references/large-content-and-appearance.md +9 -0
- package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +9 -0
- package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +7 -0
- package/pipeline/skills/shared/external/ios-coding-standard/references/STANDARD.md +13 -0
- package/pipeline/skills/shared/external/ios-design-review/references/appearance-matrix.md +9 -0
- package/pipeline/skills/shared/external/ios-design-review/references/checklist.md +15 -0
- package/pipeline/skills/shared/external/ios-haptics/references/core-haptics.md +11 -0
- package/pipeline/skills/shared/external/ios-iphone-duo/references/api-map.md +11 -0
- package/pipeline/skills/shared/external/ios-iphone-duo/references/fixed-assumptions.md +15 -0
- package/pipeline/skills/shared/external/ios-iphone-duo/references/poses-and-panes.md +11 -0
- package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +18 -0
- package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +19 -0
- package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +15 -0
- package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +7 -0
- package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +8 -0
- package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +12 -0
- package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +17 -0
- package/pipeline/skills/shared/external/ios-security/references/app-review-guidelines.md +8 -0
- package/pipeline/skills/shared/external/ios-security/references/cryptokit-advanced.md +14 -0
- package/pipeline/skills/shared/external/ios-security/references/file-storage-patterns.md +8 -0
- package/pipeline/skills/shared/external/ios-security/references/privacy-manifest.md +9 -0
- package/pipeline/skills/shared/external/ios-sf-symbols/references/effects-and-custom-symbols.md +9 -0
- package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +13 -0
- package/pipeline/skills/shared/external/kotlin-coroutines-expert/references/patterns.md +8 -0
- package/pipeline/skills/shared/external/live-activities/references/activitykit-patterns.md +21 -0
- package/pipeline/skills/shared/external/localization-reuse-map/reference/format-and-output.md +9 -0
- package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +12 -0
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-corelocation-patterns.md +16 -0
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +21 -0
- package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +10 -0
- package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +9 -0
- package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +12 -0
- package/pipeline/skills/shared/external/nodejs-backend-patterns/references/runtime-patterns.md +11 -0
- package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +11 -0
- package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +18 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +11 -0
- package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +11 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +15 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +14 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +14 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/photokit-patterns.md +14 -0
- package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +14 -0
- package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +10 -0
- package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +12 -0
- package/pipeline/skills/shared/external/retrofit-networking/references/patterns.md +14 -0
- package/pipeline/skills/shared/external/room-database/references/patterns.md +16 -0
- package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +10 -0
- package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +10 -0
- package/pipeline/skills/shared/external/spm-build-analysis/references/build-optimization-sources.md +14 -0
- package/pipeline/skills/shared/external/spm-build-analysis/references/spm-analysis-checks.md +19 -0
- package/pipeline/skills/shared/external/storekit/references/core-patterns.md +13 -0
- package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +31 -0
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +8 -0
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +9 -0
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +10 -0
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +8 -0
- package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +24 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +8 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md +14 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +12 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +10 -0
- package/pipeline/skills/shared/external/swift-concurrency-expert/references/swift-6-2-concurrency.md +8 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/actors.md +10 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/cancellation.md +7 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/interop.md +10 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/new-features.md +11 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/structured.md +9 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/testing.md +13 -0
- package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +7 -0
- package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +14 -0
- package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +16 -0
- package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +17 -0
- package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +19 -0
- package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +16 -0
- package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +19 -0
- package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +18 -0
- package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +16 -0
- package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +17 -0
- package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +17 -0
- package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +17 -0
- package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +18 -0
- package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +21 -0
- package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +16 -0
- package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +16 -0
- package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +9 -0
- package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +24 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/async-tests.md +9 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +11 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/writing-better-tests.md +13 -0
- package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +8 -0
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +17 -0
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +12 -0
- package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +11 -0
- package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +7 -0
- package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +13 -0
- package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +24 -0
- package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +12 -0
- package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +15 -0
- package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +15 -0
- package/pipeline/skills/shared/external/swiftui-animation/references/scroll-effects.md +12 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/accessibility-patterns.md +11 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-advanced.md +7 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-basics.md +13 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-transitions.md +9 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts-accessibility.md +9 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts.md +17 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/image-optimization.md +9 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/latest-apis.md +10 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/layout-best-practices.md +12 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/list-patterns.md +12 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-scenes.md +13 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-views.md +12 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-window-styling.md +12 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/performance-patterns.md +7 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/scroll-patterns.md +9 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/sheet-navigation-patterns.md +10 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/state-management.md +18 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/view-structure.md +16 -0
- package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +11 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +8 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +14 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +9 -0
- package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +22 -0
- package/pipeline/skills/shared/external/swiftui-liquid-glass/references/uikit-glass.md +14 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +10 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +10 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +13 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +10 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +14 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +30 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +16 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +11 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +11 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +10 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/references/code-smells.md +8 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/app-wiring.md +12 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/menu-bar.md +10 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/navigationstack.md +11 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/scroll-reveal.md +12 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/sheets.md +14 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/tabview.md +10 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +10 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +13 -0
- package/pipeline/skills/shared/external/swiftui-view-refactor/references/mv-patterns.md +12 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +8 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +8 -0
- package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +14 -0
- package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +17 -0
- package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +11 -0
- package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +11 -0
- package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +27 -0
- package/pipeline/skills/shared/external/xcode-build-fixer/references/build-settings-best-practices.md +9 -0
- package/pipeline/skills/shared/external/xcode-build-fixer/references/fix-patterns.md +7 -0
- package/pipeline/skills/shared/external/xcode-build-orchestrator/references/build-settings-best-practices.md +9 -0
- package/pipeline/skills/shared/external/xcode-compilation-analyzer/references/build-optimization-sources.md +14 -0
- package/pipeline/skills/shared/external/xcode-compilation-analyzer/references/code-compilation-checks.md +8 -0
- package/pipeline/skills/shared/external/xcode-project-analyzer/references/build-optimization-sources.md +14 -0
- package/pipeline/skills/shared/external/xcode-project-analyzer/references/build-settings-best-practices.md +9 -0
- package/pipeline/skills/shared/external/xcode-project-analyzer/references/project-audit-checks.md +13 -0
|
@@ -69,8 +69,9 @@ import {
|
|
|
69
69
|
import { dirname, basename } from "path";
|
|
70
70
|
import { Buffer } from "node:buffer";
|
|
71
71
|
import { runMain } from "../lib/fatal.mjs";
|
|
72
|
+
import { readLockOwner, reapLock } from "../lib/json-file-lock.mjs";
|
|
72
73
|
import { invokedDirectly } from "../lib/invoked-directly.mjs";
|
|
73
|
-
import { completionGaps } from "../lib/run-completion.mjs";
|
|
74
|
+
import { completionGaps, modeOf } from "../lib/run-completion.mjs";
|
|
74
75
|
|
|
75
76
|
/**
|
|
76
77
|
* @typedef {{ replace: boolean, path: string, ifRev: number|null }} ParsedArgs
|
|
@@ -156,15 +157,7 @@ async function acquireLock(
|
|
|
156
157
|
// file that is there.
|
|
157
158
|
const stale = lockIdentityIfStale(lockPath, staleMs);
|
|
158
159
|
if (stale) {
|
|
159
|
-
|
|
160
|
-
const now = statSync(lockPath);
|
|
161
|
-
if (now.ino === stale.ino && now.mtimeMs === stale.mtimeMs) {
|
|
162
|
-
unlinkSync(lockPath);
|
|
163
|
-
}
|
|
164
|
-
// Changed under us: somebody else's live lock. Leave it and retry.
|
|
165
|
-
} catch {
|
|
166
|
-
/* vanished on its own - fall through and retry */
|
|
167
|
-
}
|
|
160
|
+
reapLock(lockPath, stale);
|
|
168
161
|
continue;
|
|
169
162
|
}
|
|
170
163
|
await new Promise((r) => setTimeout(r, 50));
|
|
@@ -205,19 +198,11 @@ async function acquireLock(
|
|
|
205
198
|
* @returns {{ino: number, mtimeMs: number} | null}
|
|
206
199
|
*/
|
|
207
200
|
function lockIdentityIfStale(lockPath, staleMs) {
|
|
208
|
-
let
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
const st = statSync(lockPath);
|
|
214
|
-
mtimeMs = st.mtimeMs;
|
|
215
|
-
ino = st.ino;
|
|
216
|
-
} catch {
|
|
217
|
-
// Lock vanished between EEXIST and our read - let the retry re-open it.
|
|
218
|
-
return null;
|
|
219
|
-
}
|
|
220
|
-
const identity = { ino, mtimeMs };
|
|
201
|
+
// Lock vanished between EEXIST and our read: let the retry re-open it.
|
|
202
|
+
const owner = readLockOwner(lockPath);
|
|
203
|
+
if (!owner) return null;
|
|
204
|
+
const { pid, mtimeMs } = owner;
|
|
205
|
+
const identity = { ino: owner.ino, mtimeMs };
|
|
221
206
|
const abandonMs = Number(process.env.WRITE_STATE_LOCK_ABANDON_MS) || staleMs * 10;
|
|
222
207
|
const age = Date.now() - mtimeMs;
|
|
223
208
|
|
|
@@ -397,6 +382,62 @@ export function completionRefusal(next, payload, replace, diskStatus) {
|
|
|
397
382
|
return `write-state: refusing status "${next.status}": ${gaps.join("; ")}. Nothing was written. Finish the missing step, or record a halt (status "paused" with a haltReason).`;
|
|
398
383
|
}
|
|
399
384
|
|
|
385
|
+
/**
|
|
386
|
+
* The refusal message for a phase move the run has not earned, or null.
|
|
387
|
+
*
|
|
388
|
+
* - Phase 1 to a later phase in an attended full run needs the plan approval
|
|
389
|
+
* the Phase 1 gate writes (`phases["1"].planApprovedAt`). Autopilot and
|
|
390
|
+
* background launches approve nothing by design, and in analysis mode
|
|
391
|
+
* Phase 1 is not a plan, so neither is asked.
|
|
392
|
+
* - A `sessionId` already set is the run's identity for resume; a write that
|
|
393
|
+
* changes it detaches the run from the session that started it.
|
|
394
|
+
* - Phase 2 to a later phase in an attended run with a tracked issue (jiraId
|
|
395
|
+
* or githubIssue) needs `phases["2"].trackerStatus` verified, declined or
|
|
396
|
+
* not-tracked: the issue moves to In Progress before any code, and a failed
|
|
397
|
+
* move stops the phase. Unattended runs leave tracker writes to the runner.
|
|
398
|
+
*
|
|
399
|
+
* @param {object} next the document as it would be written
|
|
400
|
+
* @param {unknown} payload the patch as sent
|
|
401
|
+
* @param {object} current the document on disk
|
|
402
|
+
* @returns {string|null}
|
|
403
|
+
*/
|
|
404
|
+
export function transitionRefusal(next, payload, current) {
|
|
405
|
+
const patch = payload && typeof payload === "object" ? payload : {};
|
|
406
|
+
const was = current && typeof current === "object" ? current : {};
|
|
407
|
+
if (
|
|
408
|
+
typeof was.sessionId === "string" &&
|
|
409
|
+
was.sessionId &&
|
|
410
|
+
Object.hasOwn(patch, "sessionId") &&
|
|
411
|
+
next.sessionId !== was.sessionId
|
|
412
|
+
) {
|
|
413
|
+
return `write-state: refusing to change sessionId from "${was.sessionId}". It identifies the run for resume; nothing was written.`;
|
|
414
|
+
}
|
|
415
|
+
const unattended =
|
|
416
|
+
next.autopilot === true || ["autopilot", "background"].includes(next.launchRequest?.mode);
|
|
417
|
+
if (
|
|
418
|
+
modeOf(next) === "full" &&
|
|
419
|
+
!unattended &&
|
|
420
|
+
Number(was.currentPhase) === 1 &&
|
|
421
|
+
Number(next.currentPhase) > 1 &&
|
|
422
|
+
!next.phases?.["1"]?.planApprovedAt
|
|
423
|
+
) {
|
|
424
|
+
return 'write-state: refusing to leave Phase 1: the plan has no approval (phases["1"].planApprovedAt). Nothing was written. Record the approval when the user approves the plan, or a halt.';
|
|
425
|
+
}
|
|
426
|
+
const tracked = Boolean(next.jiraId) || Boolean(next.githubIssue?.number);
|
|
427
|
+
const tracker = next.phases?.["2"]?.trackerStatus?.status;
|
|
428
|
+
if (
|
|
429
|
+
["full", "dev"].includes(modeOf(next)) &&
|
|
430
|
+
!unattended &&
|
|
431
|
+
tracked &&
|
|
432
|
+
Number(was.currentPhase) === 2 &&
|
|
433
|
+
Number(next.currentPhase) > 2 &&
|
|
434
|
+
!["verified", "declined", "not-tracked"].includes(tracker)
|
|
435
|
+
) {
|
|
436
|
+
return `write-state: refusing to leave Phase 2: the issue's move to In Progress is ${tracker ? `"${tracker}"` : "not recorded"} (phases["2"].trackerStatus). Nothing was written. Move the issue and re-read it, record "declined" if the user refused the write, or record a halt.`;
|
|
437
|
+
}
|
|
438
|
+
return null;
|
|
439
|
+
}
|
|
440
|
+
|
|
400
441
|
/**
|
|
401
442
|
* Bind the run to the host session that drives it.
|
|
402
443
|
*
|
|
@@ -554,7 +595,9 @@ async function main() {
|
|
|
554
595
|
}
|
|
555
596
|
}
|
|
556
597
|
|
|
557
|
-
const refusal =
|
|
598
|
+
const refusal =
|
|
599
|
+
completionRefusal(next, payload, replace, diskStatus) ||
|
|
600
|
+
transitionRefusal(next, payload, current);
|
|
558
601
|
if (refusal) {
|
|
559
602
|
console.error(refusal);
|
|
560
603
|
releaseLock(path);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-10-
|
|
3
|
+
"generatedAt": "2026-10-27T13:35:46Z",
|
|
4
4
|
"skillCount": 237,
|
|
5
5
|
"entries": [
|
|
6
6
|
{
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
},
|
|
10
10
|
{
|
|
11
11
|
"path": "shared/core/google-play-compliance/SKILL.md",
|
|
12
|
-
"sha256": "
|
|
12
|
+
"sha256": "34e87f1e6fde51dd19c9ccff00e21cd7cee74f487b5dec54deec2268ff831b3b"
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
"path": "shared/core/multi-agent-analysis-jira/SKILL.md",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
},
|
|
50
50
|
{
|
|
51
51
|
"path": "shared/core/multi-agent-channels/SKILL.md",
|
|
52
|
-
"sha256": "
|
|
52
|
+
"sha256": "74008ae717bb9662ac6ab8838e3659a5006859fc6129f655094780bc97b90423"
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
"path": "shared/core/multi-agent-complaint-analysis/SKILL.md",
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
},
|
|
90
90
|
{
|
|
91
91
|
"path": "shared/core/multi-agent-graph/SKILL.md",
|
|
92
|
-
"sha256": "
|
|
92
|
+
"sha256": "d81b8470c9d571f3c1b70529bf9f010ab830b71086663e1075573c229345f235"
|
|
93
93
|
},
|
|
94
94
|
{
|
|
95
95
|
"path": "shared/core/multi-agent-help/SKILL.md",
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
115
|
"path": "shared/core/multi-agent-language/SKILL.md",
|
|
116
|
-
"sha256": "
|
|
116
|
+
"sha256": "0d3b7df6702356073c11c9ec76e69b39a0d9ecc45b1cf3e3270a639324b3633f"
|
|
117
117
|
},
|
|
118
118
|
{
|
|
119
119
|
"path": "shared/core/multi-agent-log/SKILL.md",
|
|
@@ -137,7 +137,7 @@
|
|
|
137
137
|
},
|
|
138
138
|
{
|
|
139
139
|
"path": "shared/core/multi-agent-office-status/SKILL.md",
|
|
140
|
-
"sha256": "
|
|
140
|
+
"sha256": "fbe2f99e789facebe89f10655389ea1988dd5a6db03b054487a9c4a8e6d43f2f"
|
|
141
141
|
},
|
|
142
142
|
{
|
|
143
143
|
"path": "shared/core/multi-agent-postmortem/SKILL.md",
|
|
@@ -181,7 +181,7 @@
|
|
|
181
181
|
},
|
|
182
182
|
{
|
|
183
183
|
"path": "shared/core/multi-agent-review/SKILL.md",
|
|
184
|
-
"sha256": "
|
|
184
|
+
"sha256": "91e238e9a6d1144582a0a73c580630fd1356214672db3cb399acad77ee8b19e5"
|
|
185
185
|
},
|
|
186
186
|
{
|
|
187
187
|
"path": "shared/core/multi-agent-route-off/SKILL.md",
|
|
@@ -229,7 +229,7 @@
|
|
|
229
229
|
},
|
|
230
230
|
{
|
|
231
231
|
"path": "shared/core/multi-agent-setup/SKILL.md",
|
|
232
|
-
"sha256": "
|
|
232
|
+
"sha256": "eaf7d4db93ddd392ba96da48d6dc2859b645b8c630ed9a73423498dd3e1d0b4a"
|
|
233
233
|
},
|
|
234
234
|
{
|
|
235
235
|
"path": "shared/core/multi-agent-stack/SKILL.md",
|
|
@@ -361,7 +361,7 @@
|
|
|
361
361
|
},
|
|
362
362
|
{
|
|
363
363
|
"path": "shared/external/app-store-review/SKILL.md",
|
|
364
|
-
"sha256": "
|
|
364
|
+
"sha256": "32e8b9de2894010fd584e6e4aada7270b85756be8608d7593127255fd6737a6e"
|
|
365
365
|
},
|
|
366
366
|
{
|
|
367
367
|
"path": "shared/external/apple-on-device-ai/SKILL.md",
|
|
@@ -10,7 +10,7 @@ metadata:
|
|
|
10
10
|
|
|
11
11
|
# google-play-compliance - Google Play Store Publication Compliance Skill
|
|
12
12
|
|
|
13
|
-
Pre-submission compliance check for Android App Bundle (`.aab`) and APK artifacts. Unlike the iOS side (single
|
|
13
|
+
Pre-submission compliance check for Android App Bundle (`.aab`) and APK artifacts. Unlike the iOS side (single wrapper around the multi-agent-toolkit MCP server's `ios_app_store_audit`), Android has **no single official scanner** - this skill orchestrates Google's own tools (`bundletool`, `aapt2`, `apksigner`, `adb`) plus a curated policy catalog to produce an equivalent pre-flight report.
|
|
14
14
|
|
|
15
15
|
**The catalog is the value.** The 21-rule knowledge base reflects current Google Play policies (target API requirements, 64-bit enforcement, data safety rules, permission policies). Tool invocations gather the evidence; this skill maps it against policy and humanizes.
|
|
16
16
|
|
|
@@ -118,7 +118,7 @@ Current Google Play policies + Play Console rejection codes. Sourced from `suppo
|
|
|
118
118
|
|
|
119
119
|
| # | ruleID | Play ref | What it checks | Default severity |
|
|
120
120
|
|---|---|---|---|---|
|
|
121
|
-
| 1 | `target-api-level` | Policy - Target API | `android:targetSdkVersion` ≥
|
|
121
|
+
| 1 | `target-api-level` | Policy - Target API | `android:targetSdkVersion` ≥ 36 for new apps and updates on phones and tablets (from 31 Aug 2026, extension to 1 Nov 2026), ≥ 35 on Wear OS and Automotive, ≥ 34 on TV and XR. Lower → rejected. | error |
|
|
122
122
|
| 2 | `native-64bit` | Policy - 64-bit | Every native `.so` has an `arm64-v8a` counterpart. `armeabi-v7a`-only rejected since Aug 2019. | error |
|
|
123
123
|
| 3 | `app-bundle-format` | Policy - AAB | New apps must ship `.aab`. `.apk` uploads rejected on new apps since Aug 2021. | error |
|
|
124
124
|
| 4 | `base-module-size` | Platform limit | Base APK from bundle ≤ 150 MB (bundletool `--mode=universal` size). Beyond → rejected. | error |
|
|
@@ -331,7 +331,7 @@ The appended section is structured:
|
|
|
331
331
|
|
|
332
332
|
⚠️ 3 blocker(s), 2 warning(s) - run /multi-agent:test "store-ready" for the full report.
|
|
333
333
|
|
|
334
|
-
- `target-api-level` - Policy - Target API: targetSdkVersion =
|
|
334
|
+
- `target-api-level` - Policy - Target API: targetSdkVersion = 35 but Play Console requires ≥ 36 for new apps and updates
|
|
335
335
|
- `native-64bit` - Policy - 64-bit: lib/armeabi-v7a/libfoo.so has no arm64-v8a counterpart
|
|
336
336
|
- `foreground-service-types` - Android 14: <service> missing android:foregroundServiceType
|
|
337
337
|
+ 2 more
|
|
@@ -339,9 +339,9 @@ The appended section is structured:
|
|
|
339
339
|
|
|
340
340
|
## Notes
|
|
341
341
|
|
|
342
|
-
- **Policy thresholds change yearly.**
|
|
342
|
+
- **Policy thresholds change yearly.** The target API level in Rule #1 advances each August for new apps / November for updates. When a new Android version ships, update Rule #1 `target-api-level` with the new threshold.
|
|
343
343
|
- **Not a substitute for Play Console pre-launch report.** This skill catches static issues (manifest, signing, size, debug tools). Dynamic issues (crashes, ANRs, security vulnerabilities) require Play Console's own pre-launch testing on real devices.
|
|
344
|
-
- **Data Safety form audit is partial.** Rule #14 flags manifest permissions that commonly trigger form updates, but the declared answers live in Play Console and cannot be cross-checked from here. The Android Publisher API has no Data Safety read: its only operation, `applications.dataSafety`, writes the declaration. With `google_play` onboarded, `store_search` / `store_call` reach the rest of the Android Publisher and Play Developer Reporting APIs (tracks, bundles, vitals), but the gap for Data Safety stays.
|
|
344
|
+
- **Data Safety form audit is partial.** Rule #14 flags manifest permissions that commonly trigger form updates, but the declared answers live in Play Console and cannot be cross-checked from here. The Android Publisher API has no Data Safety read: its only operation, `applications.dataSafety`, writes the declaration. With `google_play` onboarded, the toolkit's `store_search` / `store_call` reach the rest of the Android Publisher and Play Developer Reporting APIs (tracks, bundles, vitals), but the gap for Data Safety stays.
|
|
345
345
|
|
|
346
346
|
## Version history
|
|
347
347
|
|
|
@@ -37,7 +37,7 @@ enforcement_kinds:
|
|
|
37
37
|
rules:
|
|
38
38
|
- id: target-api-level
|
|
39
39
|
title: >
|
|
40
|
-
`android:targetSdkVersion` ≥
|
|
40
|
+
`android:targetSdkVersion` ≥ 36 for new apps and updates on phones and tablets (from 31 Aug 2026, extension to 1 Nov 2026), ≥ 35 on Wear OS and Automotive, ≥ 34 on TV and XR. Lower → rejected.
|
|
41
41
|
severity: blocking
|
|
42
42
|
enforcement: scan
|
|
43
43
|
policy_ref: Policy - Target API
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: multi-agent-channels
|
|
3
|
-
description: "Multi-channel reporter - Jira/Confluence/Wiki/PR description. Multi-select channels + content, humanizer pass, reviewer-preserving Bitbucket PR PUT.
|
|
3
|
+
description: "Multi-channel reporter - Jira/Confluence/Wiki/PR description. Multi-select channels + content, humanizer pass, reviewer-preserving Bitbucket PR PUT. Use to post or redo a run's report; Phase 5 delegates here, or invoke by Jira ID / PR URL / branch."
|
|
4
4
|
user-invocable: true
|
|
5
5
|
argument-hint: '<Jira-id | PR-url | #N | Jira-url> [--channels pr,jira,confluence,wiki] [--content normal,technical,test,auto-diff,note,test-run] [--flow-run <runId>[,<runId>...]] [--message "..."] [--message-file path] [--dry-run] [--append] [--ready]'
|
|
6
6
|
metadata:
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: multi-agent-graph
|
|
3
3
|
description: "Build and query this repo's code graph: a deterministic, LLM-free map of symbols, imports and references used to narrow Phase 1's Explore scope and to keep the knowledge base current. Read-only on code, costs no API tokens. Use when a task needs to know where something lives or what depends on it before reading files."
|
|
4
4
|
user-invocable: true
|
|
5
|
-
argument-hint: "[build | refresh | ask \"<question>\" | affected \"<symbol>\" | report | status]"
|
|
5
|
+
argument-hint: "[build | refresh | ask \"<question>\" | affected \"<symbol>\" | path <from> <to> | links <a,b> | report | diff <older> | status]"
|
|
6
6
|
metadata:
|
|
7
7
|
language: en
|
|
8
8
|
---
|
|
@@ -27,7 +27,10 @@ No worktree, no branch, no commit, no pipeline chaining.
|
|
|
27
27
|
| `refresh` | same as `build` | A full rebuild takes seconds, so there is no separate incremental path |
|
|
28
28
|
| `ask "<question>"` | `graph-query.mjs "<question>" --budget N` | Token-budgeted traversal; default budget 2000 |
|
|
29
29
|
| `affected "<symbol>"` | `graph-affected.mjs "<symbol>" --depth N` | Reverse traversal: the blast radius of a change |
|
|
30
|
-
| `
|
|
30
|
+
| `path <from> <to>` | `graph-query.mjs --path <from> <to>` | Shortest path between two symbols or files (id or name). An ambiguous name is refused with candidate ids, an unknown one gets its nearest names (exit 3); external modules are never walked through |
|
|
31
|
+
| `links <a,b,...>` | `graph-links.mjs build --projects <a,b,...>`, then `graph-links.mjs affected --project <b>` | Which files of one repository import another (package, module or Kotlin type names), for a run across a main repo and its libraries. Graphs stay separate (ADR-0018) |
|
|
32
|
+
| `report` | `graph-report.mjs` | Writes `GRAPH_REPORT.md` beside the graph: hubs, import cycles, clusters with cohesion, questions worth asking, modules, external dependencies, unconnected files, and symbols no other file references (candidates only - the extractor is regex, not a parser, so nothing gates on that list) |
|
|
33
|
+
| `diff <older-graph>` | `graph-report.mjs --diff <older-graph>` | Files, symbols and edges added or removed since an older build, and the import-cycle count before and after |
|
|
31
34
|
| `status` | `graph-report.mjs --status` | One line: stack, scale, build time and whether `baseCommit` still matches HEAD. Never read the graph file yourself - it is 22MB on a large repo |
|
|
32
35
|
|
|
33
36
|
With no argument, run `status`, then offer `build` when no graph exists and
|
|
@@ -16,11 +16,11 @@ Two-axis language preference for the pipeline:
|
|
|
16
16
|
| Field | Controls | Stored at | Mutability |
|
|
17
17
|
|---|---|---|---|
|
|
18
18
|
| `promptLanguage` | Interactive prompts during a pipeline run (account picker, project picker, dev-context picker, base-branch picker, branch-name picker, maturity ack, channels picker, Phase 3 test prompt, Phase 4 local-checkout prompt) | `prefs.global.promptLanguage` | **Fixed to `en`** - never toggled by this skill |
|
|
19
|
-
| `outputLanguage` | Assistant's explanations, status updates, error messages, and pipeline-generated reports rendered to the user (
|
|
19
|
+
| `outputLanguage` | Assistant's explanations, status updates, error messages, and pipeline-generated reports rendered to the user, and PR, Jira, issue and wiki bodies (commits, branch names and agent prompts stay English) | `prefs.global.outputLanguage` | Toggled by this skill |
|
|
20
20
|
|
|
21
21
|
**Why promptLanguage is fixed:** it governs the picker's structural chrome only - the `AskUserQuestion` `header` chip, host error UI, and internal contract identifiers. The chip stays English because it is capped at 12 characters and most Turkish equivalents overflow it. Everything a user actually reads follows `outputLanguage`: the picker `question`, each option's `label`, and each option's `description`, per the canonical per-field matrix in `multi-agent-refs/rules.md`. A picker whose question or buttons are English on a Turkish run is a bug, not the contract. The host's own **Other** row is injected by the CLI and stays English on every run; nothing in the pipeline can localize it.
|
|
22
22
|
|
|
23
|
-
**Always English regardless of either field**: commit messages, PR
|
|
23
|
+
**Always English regardless of either field**: commit messages, PR title prefixes (`feat:`, `fix:`), branch names, code identifiers, file paths, `agent-log.md` payloads, reviewer/triage system prompts, and confirmation / error UI exposed by the CLI host. PR descriptions, Jira comments, GitHub issue comments and wiki/Confluence page **bodies** follow `outputLanguage`, per the `rules.md` matrix.
|
|
24
24
|
|
|
25
25
|
## Invocations
|
|
26
26
|
|
|
@@ -72,8 +72,8 @@ jq --arg ol "$NEW_OUTPUT" '
|
|
|
72
72
|
|
|
73
73
|
Render in the new outputLanguage:
|
|
74
74
|
|
|
75
|
-
- `en`: `outputLanguage=<Y>. promptLanguage stays "en".
|
|
76
|
-
- `tr`: `outputLanguage=<Y>. promptLanguage "en" sabit.
|
|
75
|
+
- `en`: `outputLanguage=<Y>. promptLanguage stays "en". Commits, branch names and agent prompts stay English; PR, Jira and wiki bodies follow outputLanguage.`
|
|
76
|
+
- `tr`: `outputLanguage=<Y>. promptLanguage "en" sabit. Commit'ler, branch adları ve ajan istemleri İngilizce kalır; PR, Jira ve wiki metinleri outputLanguage'i izler.`
|
|
77
77
|
|
|
78
78
|
## Validation
|
|
79
79
|
|
|
@@ -10,8 +10,8 @@ metadata:
|
|
|
10
10
|
|
|
11
11
|
1. `node "$HOME/.copilot/scripts/office-control.mjs" status --json`
|
|
12
12
|
2. Report in `outputLanguage`: `running`, `url` and `idleMinutes`; the
|
|
13
|
-
`remote` line as given ("
|
|
14
|
-
|
|
13
|
+
`remote` line as given ("off" until `office-pair.mjs` pairs a phone, then
|
|
14
|
+
"paired"); `pairedDevices`; `recentActions`
|
|
15
15
|
(route, step, status, when; never a request body).
|
|
16
16
|
|
|
17
17
|
Never print the token or read the token file.
|
|
@@ -120,6 +120,8 @@ Skip Phase 0-3 and review a diff only. Input shapes: a PR (`#N`, `repo#N`, GitHu
|
|
|
120
120
|
- 🟡 **Important** → fix recommended
|
|
121
121
|
- 🟢 **Suggestion** → optional
|
|
122
122
|
|
|
123
|
+
Triage also settles every reviewer `cannotVerify` row: `verified` with the file:line read, `finding` with the file:line of the accepted or deferred finding, or `out-of-scope`. Unsettled rows are listed in the summary.
|
|
124
|
+
|
|
123
125
|
6. **Show a summary** (always prints, any mode):
|
|
124
126
|
```
|
|
125
127
|
🔍 Review Complete
|
|
@@ -39,7 +39,7 @@ Ask BEFORE anything else, so every subsequent setup prompt and the rest of the p
|
|
|
39
39
|
- `promptLanguage`: picker chrome only (the `AskUserQuestion` `header` chip, host error UI, internal contract identifiers). **Not configurable - fixed to `en`**; the chip is capped at 12 chars, which most Turkish equivalents overflow.
|
|
40
40
|
- `outputLanguage`: the assistant's non-interactive explanations, status updates, error messages and pipeline-generated reports. Set here, changeable later via `/multi-agent-language <en|tr>`.
|
|
41
41
|
|
|
42
|
-
`promptLanguage` is seeded as `"en"` and never offered to the user.
|
|
42
|
+
`promptLanguage` is seeded as `"en"` and never offered to the user. Language matrix: `multi-agent-refs/rules.md`.
|
|
43
43
|
|
|
44
44
|
The wizard asks one question (English UI per skill-prompt rules):
|
|
45
45
|
|
|
@@ -55,8 +55,8 @@ Select (1-2):
|
|
|
55
55
|
|
|
56
56
|
- **Already set in prefs** → skip silently. User can change later with `/multi-agent-language <en|tr>` or `/multi-agent-language output <en|tr>`.
|
|
57
57
|
- **New value** → validate against the schema enum (`en`, `tr`), write `prefs.global.outputLanguage` via atomic rename, force `prefs.global.promptLanguage = "en"`, then echo a confirmation in the just-chosen `outputLanguage`:
|
|
58
|
-
- `en`: `outputLanguage=<Y>. promptLanguage stays "en".
|
|
59
|
-
- `tr`: `outputLanguage=<Y>. promptLanguage "en" sabit.
|
|
58
|
+
- `en`: `outputLanguage=<Y>. promptLanguage stays "en". Commits stay English; PR/Jira/wiki bodies follow it.`
|
|
59
|
+
- `tr`: `outputLanguage=<Y>. promptLanguage "en" sabit. Commit'ler İngilizce; PR/Jira/wiki metinleri onu izler.`
|
|
60
60
|
- **Unknown input** → re-ask once, then abort setup with a hint pointing to `/multi-agent-language`.
|
|
61
61
|
|
|
62
62
|
From here on, every prompt in Steps 1-6 follows the per-field matrix in
|
|
@@ -324,7 +324,7 @@ All tokens are optional in the sense that every service can be answered with Ski
|
|
|
324
324
|
|
|
325
325
|
### Step 8 - Enforcement hooks (optional)
|
|
326
326
|
|
|
327
|
-
On Claude Code, offer to merge `$HOME/.claude/templates/claude-hooks.json`: three blocking `PreToolUse` gates (secret scan, agent-guard, read-size) plus
|
|
327
|
+
On Claude Code, offer to merge `$HOME/.claude/templates/claude-hooks.json`: three blocking `PreToolUse` gates (secret scan, agent-guard, read-size) plus non-blocking hooks on `PreCompact`, `SessionEnd`, `SessionStart` and `PostToolUse`, and a blocking `Stop` hook (`run-stop-guard.sh`). What each does: `$HOME/.claude/multi-agent-refs/picker-contract.md`.
|
|
328
328
|
|
|
329
329
|
- Ask (picker): "Install the pipeline's hooks into `~/.claude/settings.json`?" Default Yes.
|
|
330
330
|
- On Yes, deep-merge EVERY event in the template's `hooks` object (merging `PreToolUse` alone drops the capture hooks); keep existing hooks, never duplicate a matcher calling the same script.
|
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# AlarmKit patterns
|
|
2
2
|
|
|
3
|
+
<!-- toc -->
|
|
4
|
+
- [Contents](#contents)
|
|
5
|
+
- [Full alarm flow with intents](#full-alarm-flow-with-intents)
|
|
6
|
+
- [Full timer flow](#full-timer-flow)
|
|
7
|
+
- [Authorization manager](#authorization-manager)
|
|
8
|
+
- [State store with async sequences](#state-store-with-async-sequences)
|
|
9
|
+
- [Widget extension for countdown and paused UI](#widget-extension-for-countdown-and-paused-ui)
|
|
10
|
+
- [Recurrence](#recurrence)
|
|
11
|
+
- [Snooze and custom secondary actions](#snooze-and-custom-secondary-actions)
|
|
12
|
+
- [Info.plist](#infoplist)
|
|
13
|
+
- [Error handling](#error-handling)
|
|
14
|
+
- [Apple documentation](#apple-documentation)
|
|
15
|
+
<!-- /toc -->
|
|
16
|
+
|
|
3
17
|
Longer, end-to-end examples. Everything here targets iOS 26 and iPadOS 26 with
|
|
4
18
|
Swift 6.3. Code that uses the stopButton-free
|
|
5
19
|
`AlarmPresentation.Alert(title:secondaryButton:secondaryButtonBehavior:)`
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Android Clean Architecture -- Reference Patterns
|
|
2
2
|
|
|
3
|
+
<!-- toc -->
|
|
4
|
+
- [Contents](#contents)
|
|
5
|
+
- [Feature api/impl Split](#feature-apiimpl-split)
|
|
6
|
+
- [Cross-Module Navigation Graph Aggregation](#cross-module-navigation-graph-aggregation)
|
|
7
|
+
<!-- /toc -->
|
|
8
|
+
|
|
3
9
|
Full code for the patterns summarized in `SKILL.md`. Load the section you need
|
|
4
10
|
when implementing that specific structure.
|
|
5
11
|
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Android Build Quality Gates - Patterns
|
|
2
2
|
|
|
3
|
+
<!-- toc -->
|
|
4
|
+
- [Contents](#contents)
|
|
5
|
+
- [Layer-dependency gate](#layer-dependency-gate)
|
|
6
|
+
- [Coverage floor with Kover](#coverage-floor-with-kover)
|
|
7
|
+
- [Compose-stability gate](#compose-stability-gate)
|
|
8
|
+
- [Lint on diff](#lint-on-diff)
|
|
9
|
+
- [Screenshot validation task](#screenshot-validation-task)
|
|
10
|
+
- [Wiring gates into check](#wiring-gates-into-check)
|
|
11
|
+
<!-- /toc -->
|
|
12
|
+
|
|
3
13
|
Full, copy-ready code for the gates summarized in
|
|
4
14
|
[../SKILL.md](../SKILL.md). Each section mirrors a heading there. Adapt names to
|
|
5
15
|
the project's module conventions; nothing here hardcodes a product.
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Android DataStore Patterns
|
|
2
2
|
|
|
3
|
+
<!-- toc -->
|
|
4
|
+
- [Contents](#contents)
|
|
5
|
+
- [Preferences DataStore](#preferences-datastore)
|
|
6
|
+
- [Typed DataStore with a Serializer](#typed-datastore-with-a-serializer)
|
|
7
|
+
- [Encrypted Typed DataStore](#encrypted-typed-datastore)
|
|
8
|
+
- [Migrating from SharedPreferences](#migrating-from-sharedpreferences)
|
|
9
|
+
- [Versioned Data Migrations](#versioned-data-migrations)
|
|
10
|
+
- [Reading and Writing as Flow](#reading-and-writing-as-flow)
|
|
11
|
+
- [Testing](#testing)
|
|
12
|
+
<!-- /toc -->
|
|
13
|
+
|
|
3
14
|
Full code examples backing the guidance in `SKILL.md`. Headings mirror the
|
|
4
15
|
SKILL.md sections. Package, class, and key names are placeholders; adapt them.
|
|
5
16
|
|
package/pipeline/skills/shared/external/android-design-tokens-codegen/references/patterns.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Android Design Tokens Codegen - Patterns
|
|
2
2
|
|
|
3
|
+
<!-- toc -->
|
|
4
|
+
- [Task wrapper](#task-wrapper)
|
|
5
|
+
- [preBuild wiring](#prebuild-wiring)
|
|
6
|
+
- [Check mode](#check-mode)
|
|
7
|
+
- [Caching](#caching)
|
|
8
|
+
- [Generated shapes](#generated-shapes)
|
|
9
|
+
<!-- /toc -->
|
|
10
|
+
|
|
3
11
|
Copy-ready Gradle and Kotlin for the schema-to-typed-code pipeline. Each heading
|
|
4
12
|
mirrors a section in `SKILL.md`. All input is a local JSON schema; all output is
|
|
5
13
|
generated Kotlin under the build directory. Names are illustrative and generic.
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Android MVI BaseViewModel Patterns
|
|
2
2
|
|
|
3
|
+
<!-- toc -->
|
|
4
|
+
- [Contents](#contents)
|
|
5
|
+
- [Assembled BaseViewModel](#assembled-baseviewmodel)
|
|
6
|
+
- [MVI contracts for a screen](#mvi-contracts-for-a-screen)
|
|
7
|
+
- [A concrete ViewModel](#a-concrete-viewmodel)
|
|
8
|
+
- [Lifecycle-aware event collector](#lifecycle-aware-event-collector)
|
|
9
|
+
- [Stateless screen composable](#stateless-screen-composable)
|
|
10
|
+
- [Testing the ViewModel](#testing-the-viewmodel)
|
|
11
|
+
<!-- /toc -->
|
|
12
|
+
|
|
3
13
|
Full code examples backing the guidance in `SKILL.md`. Load this file when you
|
|
4
14
|
need a complete implementation to adapt. Headings mirror the SKILL.md sections.
|
|
5
15
|
|
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# Android Performance Patterns
|
|
2
2
|
|
|
3
|
+
<!-- toc -->
|
|
4
|
+
- [Contents](#contents)
|
|
5
|
+
- [Baseline Profiles](#baseline-profiles)
|
|
6
|
+
- [Compose Stability](#compose-stability)
|
|
7
|
+
- [Recomposition Debugging](#recomposition-debugging)
|
|
8
|
+
- [Lazy Layout Performance](#lazy-layout-performance)
|
|
9
|
+
- [R8 Optimization](#r8-optimization)
|
|
10
|
+
- [Memory Leak Detection](#memory-leak-detection)
|
|
11
|
+
- [Startup Optimization](#startup-optimization)
|
|
12
|
+
- [Image Loading with Coil](#image-loading-with-coil)
|
|
13
|
+
- [General Performance Patterns](#general-performance-patterns)
|
|
14
|
+
<!-- /toc -->
|
|
15
|
+
|
|
3
16
|
Full code examples for the Android Performance skill. Each section mirrors a
|
|
4
17
|
heading in `SKILL.md`. Load the section named in the guide when implementing or
|
|
5
18
|
reviewing that area.
|
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Android Security -- Reference Patterns
|
|
2
2
|
|
|
3
|
+
<!-- toc -->
|
|
4
|
+
- [Contents](#contents)
|
|
5
|
+
- [Secure Data Storage](#secure-data-storage)
|
|
6
|
+
- [Encrypted DataStore](#encrypted-datastore)
|
|
7
|
+
- [Database Key Hierarchy](#database-key-hierarchy)
|
|
8
|
+
- [Build-Type Security Gating](#build-type-security-gating)
|
|
9
|
+
- [Biometric Authentication](#biometric-authentication)
|
|
10
|
+
- [Certificate Pinning](#certificate-pinning)
|
|
11
|
+
- [API Key Protection](#api-key-protection)
|
|
12
|
+
- [R8 Obfuscation](#r8-obfuscation)
|
|
13
|
+
- [Play Integrity API](#play-integrity-api)
|
|
14
|
+
- [Root Detection](#root-detection)
|
|
15
|
+
- [Secure Network Communication](#secure-network-communication)
|
|
16
|
+
- [Secure Coding Patterns](#secure-coding-patterns)
|
|
17
|
+
<!-- /toc -->
|
|
18
|
+
|
|
3
19
|
Full code for the patterns summarized in `SKILL.md`. Load the section you need
|
|
4
20
|
when implementing that specific security feature.
|
|
5
21
|
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# API contract details
|
|
2
2
|
|
|
3
|
+
<!-- toc -->
|
|
4
|
+
- [Contents](#contents)
|
|
5
|
+
- [Evolving a contract](#evolving-a-contract)
|
|
6
|
+
- [Pagination](#pagination)
|
|
7
|
+
- [Idempotency for retried writes](#idempotency-for-retried-writes)
|
|
8
|
+
- [One error shape everywhere](#one-error-shape-everywhere)
|
|
9
|
+
- [Webhooks done properly](#webhooks-done-properly)
|
|
10
|
+
<!-- /toc -->
|
|
11
|
+
|
|
3
12
|
Versioning rules and worked examples for the pagination, idempotency, error-shape and webhook rules summarised in SKILL.md.
|
|
4
13
|
|
|
5
14
|
## Contents
|
package/pipeline/skills/shared/external/api-security-best-practices/references/abuse-controls.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Abuse Controls
|
|
2
2
|
|
|
3
|
+
<!-- toc -->
|
|
4
|
+
- [Contents](#contents)
|
|
5
|
+
- [1. Layers of limits](#1-layers-of-limits)
|
|
6
|
+
- [2. Choosing a rate limit algorithm](#2-choosing-a-rate-limit-algorithm)
|
|
7
|
+
- [3. Keys: what to limit by](#3-keys-what-to-limit-by)
|
|
8
|
+
- [4. A shared-store limiter](#4-a-shared-store-limiter)
|
|
9
|
+
- [5. Telling clients about limits](#5-telling-clients-about-limits)
|
|
10
|
+
- [6. Size, time and cost limits](#6-size-time-and-cost-limits)
|
|
11
|
+
- [7. Protecting business flows](#7-protecting-business-flows)
|
|
12
|
+
- [8. Operating the limits](#8-operating-the-limits)
|
|
13
|
+
<!-- /toc -->
|
|
14
|
+
|
|
3
15
|
Limits that keep one caller, script or bug from exhausting the service or its
|
|
4
16
|
budget. Covers OWASP API4 (unrestricted resource consumption) and API6
|
|
5
17
|
(unrestricted access to sensitive business flows).
|
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# Identity and Access
|
|
2
2
|
|
|
3
|
+
<!-- toc -->
|
|
4
|
+
- [Contents](#contents)
|
|
5
|
+
- [1. Choosing a credential type](#1-choosing-a-credential-type)
|
|
6
|
+
- [2. Validating JWT access tokens](#2-validating-jwt-access-tokens)
|
|
7
|
+
- [3. Refresh tokens and sessions](#3-refresh-tokens-and-sessions)
|
|
8
|
+
- [4. API keys for machine clients](#4-api-keys-for-machine-clients)
|
|
9
|
+
- [5. Service-to-service identity](#5-service-to-service-identity)
|
|
10
|
+
- [6. Authorization models](#6-authorization-models)
|
|
11
|
+
- [7. Enforcing authorization in code](#7-enforcing-authorization-in-code)
|
|
12
|
+
- [8. Credential endpoints](#8-credential-endpoints)
|
|
13
|
+
- [9. Scoping a lookup by principal](#9-scoping-a-lookup-by-principal)
|
|
14
|
+
<!-- /toc -->
|
|
15
|
+
|
|
3
16
|
How a request proves who it is, and how the server decides what that identity
|
|
4
17
|
may do. Examples use TypeScript on Node with `jose` and Python with `PyJWT`;
|
|
5
18
|
the rules are the same in any stack.
|
package/pipeline/skills/shared/external/api-security-best-practices/references/request-handling.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Request Handling
|
|
2
2
|
|
|
3
|
+
<!-- toc -->
|
|
4
|
+
- [Contents](#contents)
|
|
5
|
+
- [1. Validate at the edge with a schema](#1-validate-at-the-edge-with-a-schema)
|
|
6
|
+
- [2. Writable fields only (mass assignment)](#2-writable-fields-only-mass-assignment)
|
|
7
|
+
- [3. Shape every response explicitly](#3-shape-every-response-explicitly)
|
|
8
|
+
- [4. Injection](#4-injection)
|
|
9
|
+
- [5. Files and uploads](#5-files-and-uploads)
|
|
10
|
+
- [6. Fetching user-supplied URLs (SSRF)](#6-fetching-user-supplied-urls-ssrf)
|
|
11
|
+
- [7. Errors that do not leak](#7-errors-that-do-not-leak)
|
|
12
|
+
- [8. Consuming third-party APIs](#8-consuming-third-party-apis)
|
|
13
|
+
<!-- /toc -->
|
|
14
|
+
|
|
3
15
|
Everything that crosses the boundary is untrusted until a schema says
|
|
4
16
|
otherwise: body, query, path, headers, cookies, uploaded files, and responses
|
|
5
17
|
from other services.
|
package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Data handoff, notifications and location
|
|
2
2
|
|
|
3
|
+
<!-- toc -->
|
|
4
|
+
- [Handing data to the full app](#handing-data-to-the-full-app)
|
|
5
|
+
- [Keychain](#keychain)
|
|
6
|
+
- [Sign in with Apple](#sign-in-with-apple)
|
|
7
|
+
- [Ephemeral notifications](#ephemeral-notifications)
|
|
8
|
+
- [Location confirmation](#location-confirmation)
|
|
9
|
+
- [Lifecycle and short-lived state](#lifecycle-and-short-lived-state)
|
|
10
|
+
<!-- /toc -->
|
|
11
|
+
|
|
3
12
|
Moving state to the full app, signing people in once, notifying them within
|
|
4
13
|
the clip's window, and proving they are where the code is. Summary in
|
|
5
14
|
`../SKILL.md`.
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Routing and experiences
|
|
2
2
|
|
|
3
|
+
<!-- toc -->
|
|
4
|
+
- [Handling the invocation URL](#handling-the-invocation-url)
|
|
5
|
+
- [App Store Connect experiences](#app-store-connect-experiences)
|
|
6
|
+
- [Invocation sources](#invocation-sources)
|
|
7
|
+
- [Smart App Banner](#smart-app-banner)
|
|
8
|
+
- [Local testing](#local-testing)
|
|
9
|
+
<!-- /toc -->
|
|
10
|
+
|
|
3
11
|
How an App Clip learns what to show, how App Store Connect maps URLs to
|
|
4
12
|
experiences, which sources can launch a clip, and how to test it. Summary in
|
|
5
13
|
`../SKILL.md`.
|