@dailephd/my-dev-kit-lab 0.4.5 → 0.4.7
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 +26 -1
- package/README.md +43 -3
- package/dist/scripts/cli.js +9 -0
- package/dist/src/audits/core/typescriptJavaScriptAnalyzer.js +30 -12
- package/dist/src/browser/index.js +2 -0
- package/dist/src/browser/playwrightRuntime.js +74 -0
- package/dist/src/browser/types.js +10 -0
- package/dist/src/cli/help.js +376 -0
- package/dist/src/cli/index.js +2 -0
- package/dist/src/cli/runLabCli.js +257 -0
- package/dist/src/commands/runAuditCommand.js +132 -0
- package/dist/src/commands/runControlledExperimentCommand.js +7 -3
- package/dist/{scripts/experiments/describeExperiment.js → src/commands/runExperimentDescribeCommand.js} +14 -10
- package/dist/{scripts/experiments/listExperiments.js → src/commands/runExperimentListCommand.js} +3 -6
- package/dist/{scripts/experiments/runExperiment.js → src/commands/runExperimentRunCommand.js} +80 -22
- package/dist/src/commands/runFinalDemoCommand.js +2 -3
- package/dist/src/commands/runSecurityValidationCommand.js +271 -0
- package/dist/src/commands/runTutorialRunCommand.js +170 -0
- package/dist/src/commands/runTutorialValidateCommand.js +138 -0
- package/dist/src/core/processTree.js +52 -0
- package/dist/src/core/resolveCommand.js +34 -0
- package/dist/src/core/runMeasuredCommand.js +39 -31
- package/dist/src/runtime/index.js +4 -0
- package/dist/src/runtime/labExecutionContext.js +22 -0
- package/dist/src/runtime/managedProcess.js +380 -0
- package/dist/src/runtime/packageResource.js +22 -0
- package/dist/src/runtime/packageRoot.js +37 -0
- package/dist/src/screenshot/captureReportScreenshot.js +30 -27
- package/dist/src/securityValidation/packageChecks/requiredPackageContents.js +14 -1
- package/dist/src/tutorial/index.js +16 -0
- package/dist/src/tutorial/loadTutorialContracts.js +60 -0
- package/dist/src/tutorial/markdownTutorialWriter.js +53 -0
- package/dist/src/tutorial/runTutorial.js +465 -0
- package/dist/src/tutorial/scenarioValidation.js +383 -0
- package/dist/src/tutorial/subtitleWriter.js +88 -0
- package/dist/src/tutorial/targetContractValidation.js +212 -0
- package/dist/src/tutorial/tutorialActions.js +110 -0
- package/dist/src/tutorial/tutorialArtifacts.js +176 -0
- package/dist/src/tutorial/tutorialAssertions.js +249 -0
- package/dist/src/tutorial/tutorialCursor.js +149 -0
- package/dist/src/tutorial/tutorialLocators.js +37 -0
- package/dist/src/tutorial/tutorialManifest.js +74 -0
- package/dist/src/tutorial/tutorialOverlay.js +180 -0
- package/dist/src/tutorial/tutorialPaths.js +86 -0
- package/dist/src/tutorial/tutorialSession.js +398 -0
- package/dist/src/tutorial/types.js +48 -0
- package/dist/src/tutorial/validationPrimitives.js +141 -0
- package/examples/tutorial-browser/index.html +47 -0
- package/examples/tutorial-browser/prepare.mjs +14 -0
- package/examples/tutorial-browser/scenario.json +17 -0
- package/examples/tutorial-browser/server.mjs +14 -0
- package/package.json +13 -9
- package/dist/scripts/audits/runAudit.js +0 -135
- package/dist/scripts/build-gallery.js +0 -3
- package/dist/scripts/capture-demo-report.js +0 -3
- package/dist/scripts/evaluate-token-savings.js +0 -2
- package/dist/scripts/generate-experiment-plots.js +0 -3
- package/dist/scripts/generate-prompt-variants.js +0 -2
- package/dist/scripts/render-experiment-report.js +0 -2
- package/dist/scripts/report-context-integrity-smoke.js +0 -70
- package/dist/scripts/run-agent-prompt.js +0 -2
- package/dist/scripts/run-controlled-experiment.js +0 -2
- package/dist/scripts/run-lab-demo.js +0 -5
- package/dist/scripts/run-visualization-demos.js +0 -3
- package/dist/scripts/security/resolveToolRoot.js +0 -16
- package/dist/scripts/security/runCodeql.js +0 -58
- package/dist/scripts/security/runDependencyChecks.js +0 -58
- package/dist/scripts/security/runFuzzSmoke.js +0 -29
- package/dist/scripts/security/runPackageChecks.js +0 -57
- package/dist/scripts/security/runSemgrep.js +0 -64
- package/dist/scripts/security/validate.js +0 -266
- package/dist/scripts/verify-benchmarks.js +0 -202
- package/examples/demo-report-input.json +0 -78
- package/examples/lab-demo-cases.json +0 -35
- package/examples/real-agent-campaign-cases.json +0 -118
- package/tests/fixtures/android/advanced-security-fixtures/backup-configuration/module-a/src/debug/res/xml/ambiguous_backup_rules.xml +0 -4
- package/tests/fixtures/android/advanced-security-fixtures/backup-configuration/module-a/src/main/res/xml/ambiguous_backup_rules.xml +0 -4
- package/tests/fixtures/android/advanced-security-fixtures/backup-configuration/module-a/src/main/res/xml/backup_rules.xml +0 -5
- package/tests/fixtures/android/advanced-security-fixtures/backup-configuration/module-a/src/main/res/xml/broad_backup_rules.xml +0 -4
- package/tests/fixtures/android/advanced-security-fixtures/backup-configuration/module-a/src/main/res/xml/data_extraction_rules.xml +0 -10
- package/tests/fixtures/android/advanced-security-fixtures/backup-configuration/module-a/src/main/res/xml/unsupported_domain_rules.xml +0 -4
- package/tests/fixtures/android/advanced-security-fixtures/backup-configuration/module-b/src/main/res/xml/malformed_backup_rules.xml +0 -4
- package/tests/fixtures/android/advanced-security-fixtures/backup-configuration/module-b/src/main/res/xml/unsupported_root.xml +0 -4
- package/tests/fixtures/android/advanced-security-fixtures/network-security/module-a/src/debug/res/xml/ambiguous_config.xml +0 -4
- package/tests/fixtures/android/advanced-security-fixtures/network-security/module-a/src/main/res/xml/ambiguous_config.xml +0 -4
- package/tests/fixtures/android/advanced-security-fixtures/network-security/module-a/src/main/res/xml/base_cleartext_false.xml +0 -8
- package/tests/fixtures/android/advanced-security-fixtures/network-security/module-a/src/main/res/xml/broad_and_duplicate_domains.xml +0 -8
- package/tests/fixtures/android/advanced-security-fixtures/network-security/module-a/src/main/res/xml/empty_domain.xml +0 -6
- package/tests/fixtures/android/advanced-security-fixtures/network-security/module-a/src/main/res/xml/malformed_pin.xml +0 -11
- package/tests/fixtures/android/advanced-security-fixtures/network-security/module-a/src/main/res/xml/network_security_config.xml +0 -26
- package/tests/fixtures/android/advanced-security-fixtures/network-security/module-b/src/main/res/xml/malformed_network_security_config.xml +0 -6
- package/tests/fixtures/android/advanced-security-fixtures/network-security/module-b/src/main/res/xml/unsupported_root.xml +0 -4
- package/tests/fixtures/android/advanced-security-fixtures/release-configuration/groovy-release-debuggable-dynamic.gradle +0 -7
- package/tests/fixtures/android/advanced-security-fixtures/release-configuration/groovy-release-debuggable-false.gradle +0 -9
- package/tests/fixtures/android/advanced-security-fixtures/release-configuration/groovy-release-debuggable-true.gradle +0 -13
- package/tests/fixtures/android/advanced-security-fixtures/release-configuration/kotlin-release-debuggable-false.gradle.kts +0 -7
- package/tests/fixtures/android/advanced-security-fixtures/release-configuration/kotlin-release-debuggable-true.gradle.kts +0 -10
- package/tests/fixtures/android/advanced-security-fixtures/release-configuration/missing-release-build-type.gradle.kts +0 -7
- package/tests/fixtures/android/advanced-security-fixtures/resource-resolution/module-a/src/debug/res/xml/network_security_config.xml +0 -8
- package/tests/fixtures/android/advanced-security-fixtures/resource-resolution/module-a/src/main/res/xml/backup_rules.xml +0 -4
- package/tests/fixtures/android/advanced-security-fixtures/resource-resolution/module-a/src/main/res/xml/network_security_config.xml +0 -8
- package/tests/fixtures/android/advanced-security-fixtures/resource-resolution/module-b/src/main/res/xml/malformed_network_security_config.xml +0 -7
- package/tests/fixtures/android/advanced-security-fixtures/secret-candidates/SampleActivity.java +0 -8
- package/tests/fixtures/android/advanced-security-fixtures/secret-candidates/SampleActivity.kt +0 -9
- package/tests/fixtures/android/advanced-security-fixtures/secret-candidates/build.gradle +0 -11
- package/tests/fixtures/android/advanced-security-fixtures/secret-candidates/build.gradle.kts +0 -11
- package/tests/fixtures/android/advanced-security-fixtures/secret-candidates/google-services.json +0 -16
- package/tests/fixtures/android/advanced-security-fixtures/secret-candidates/local.properties +0 -3
- package/tests/fixtures/android/advanced-security-fixtures/secret-candidates-bounds/module/binary.properties +0 -0
- package/tests/fixtures/android/advanced-security-fixtures/secret-candidates-bounds/module/oversized.json +0 -1
- package/tests/fixtures/android/advanced-security-fixtures/signing-configuration/app/fake-release-keystore.jks +0 -1
- package/tests/fixtures/android/advanced-security-fixtures/signing-configuration/build/generated-fake.keystore +0 -1
- package/tests/fixtures/android/compose-app/app/build.gradle.kts +0 -21
- package/tests/fixtures/android/compose-app/app/src/main/AndroidManifest.xml +0 -22
- package/tests/fixtures/android/compose-app/app/src/main/java/com/example/composeapp/MainActivity.kt +0 -11
- package/tests/fixtures/android/compose-app/build.gradle.kts +0 -4
- package/tests/fixtures/android/compose-app/gradle/wrapper/gradle-wrapper.properties +0 -4
- package/tests/fixtures/android/compose-app/settings.gradle.kts +0 -2
- package/tests/fixtures/android/gradle-metadata-fixtures/catalog-only-plugin/build.gradle.kts +0 -3
- package/tests/fixtures/android/gradle-metadata-fixtures/catalog-only-plugin/gradle/libs.versions.toml +0 -5
- package/tests/fixtures/android/gradle-metadata-fixtures/comment-safety.gradle.kts +0 -21
- package/tests/fixtures/android/gradle-metadata-fixtures/dynamic-values.gradle.kts +0 -17
- package/tests/fixtures/android/gradle-metadata-fixtures/groovy-literal.gradle +0 -23
- package/tests/fixtures/android/gradle-metadata-fixtures/wrapper-malformed.properties +0 -4
- package/tests/fixtures/android/gradle-metadata-fixtures/wrapper-missing-url.properties +0 -3
- package/tests/fixtures/android/gradle-metadata-fixtures/wrapper-with-checksum.properties +0 -5
- package/tests/fixtures/android/java-app/app/build.gradle +0 -16
- package/tests/fixtures/android/java-app/app/src/main/AndroidManifest.xml +0 -19
- package/tests/fixtures/android/java-app/app/src/main/java/com/example/javaapp/MainActivity.java +0 -4
- package/tests/fixtures/android/java-app/build.gradle +0 -3
- package/tests/fixtures/android/java-app/gradle/wrapper/gradle-wrapper.properties +0 -4
- package/tests/fixtures/android/java-app/settings.gradle +0 -2
- package/tests/fixtures/android/library/build.gradle.kts +0 -3
- package/tests/fixtures/android/library/gradle/wrapper/gradle-wrapper.properties +0 -4
- package/tests/fixtures/android/library/mylibrary/build.gradle.kts +0 -13
- package/tests/fixtures/android/library/mylibrary/src/main/AndroidManifest.xml +0 -2
- package/tests/fixtures/android/library/settings.gradle.kts +0 -2
- package/tests/fixtures/android/manifest-audit-fixtures/incomplete-intent-filter.xml +0 -14
- package/tests/fixtures/android/manifest-audit-fixtures/malformed-exported.xml +0 -10
- package/tests/fixtures/android/manifest-audit-fixtures/malformed.xml +0 -5
- package/tests/fixtures/android/manifest-audit-fixtures/missing-application.xml +0 -7
- package/tests/fixtures/android/manifest-audit-fixtures/missing-component-name.xml +0 -11
- package/tests/fixtures/android/manifest-audit-fixtures/permission-coverage.xml +0 -29
- package/tests/fixtures/android/manifest-audit-fixtures/risky-components.xml +0 -62
- package/tests/fixtures/android/manifest-audit-fixtures/risky-deep-links.xml +0 -45
- package/tests/fixtures/android/manifest-audit-fixtures/unresolved-placeholder.xml +0 -14
- package/tests/fixtures/android/manifest-audit-fixtures/unusual-namespace-prefix.xml +0 -11
- package/tests/fixtures/android/multi-module/app/build.gradle.kts +0 -22
- package/tests/fixtures/android/multi-module/app/src/androidTest/java/com/example/multimodule/app/ExampleInstrumentedTest.kt +0 -3
- package/tests/fixtures/android/multi-module/app/src/main/AndroidManifest.xml +0 -11
- package/tests/fixtures/android/multi-module/app/src/test/java/com/example/multimodule/app/ExampleUnitTest.kt +0 -3
- package/tests/fixtures/android/multi-module/build.gradle.kts +0 -5
- package/tests/fixtures/android/multi-module/core/build.gradle.kts +0 -14
- package/tests/fixtures/android/multi-module/core/src/main/AndroidManifest.xml +0 -2
- package/tests/fixtures/android/multi-module/feature-login/build.gradle.kts +0 -18
- package/tests/fixtures/android/multi-module/feature-login/src/main/AndroidManifest.xml +0 -2
- package/tests/fixtures/android/multi-module/gradle/libs.versions.toml +0 -8
- package/tests/fixtures/android/multi-module/gradle/wrapper/gradle-wrapper.properties +0 -4
- package/tests/fixtures/android/multi-module/settings.gradle.kts +0 -4
- package/tests/fixtures/android/non-android-gradle/build.gradle.kts +0 -3
- package/tests/fixtures/android/non-android-gradle/core/build.gradle.kts +0 -3
- package/tests/fixtures/android/non-android-gradle/core/src/main/java/com/example/core/Core.java +0 -4
- package/tests/fixtures/android/non-android-gradle/gradle/wrapper/gradle-wrapper.properties +0 -4
- package/tests/fixtures/android/non-android-gradle/settings.gradle.kts +0 -2
- package/tests/fixtures/android/partial/app/build.gradle.kts +0 -7
- package/tests/fixtures/android/partial/settings.gradle.kts +0 -2
- package/tests/fixtures/android/xml-view-app/app/build.gradle.kts +0 -17
- package/tests/fixtures/android/xml-view-app/app/src/main/AndroidManifest.xml +0 -31
- package/tests/fixtures/android/xml-view-app/app/src/main/kotlin/com/example/xmlviewapp/MainActivity.kt +0 -7
- package/tests/fixtures/android/xml-view-app/app/src/main/res/layout/activity_main.xml +0 -4
- package/tests/fixtures/android/xml-view-app/build.gradle.kts +0 -4
- package/tests/fixtures/android/xml-view-app/gradle/wrapper/gradle-wrapper.properties +0 -4
- package/tests/fixtures/android/xml-view-app/settings.gradle.kts +0 -2
- package/tests/fixtures/audits/mixed-language/mixed-docs-claims/README.md +0 -16
- package/tests/fixtures/audits/mixed-language/mixed-docs-claims/build.gradle.kts +0 -4
- package/tests/fixtures/audits/mixed-language/mixed-docs-claims/src/main/java/com/example/Widget.java +0 -7
- package/tests/fixtures/audits/mixed-language/mixed-docs-claims/src/main/kotlin/com/example/Gadget.kt +0 -7
- package/tests/fixtures/audits/mixed-language/mixed-generated-vendor/README.md +0 -10
- package/tests/fixtures/audits/mixed-language/mixed-generated-vendor/build/Main.class +0 -1
- package/tests/fixtures/audits/mixed-language/mixed-generated-vendor/dist/index.js +0 -1
- package/tests/fixtures/audits/mixed-language/mixed-generated-vendor/generated/schema.ts +0 -1
- package/tests/fixtures/audits/mixed-language/mixed-generated-vendor/src/index.ts +0 -3
- package/tests/fixtures/audits/mixed-language/mixed-generated-vendor/vendor/lib.py +0 -2
- package/tests/fixtures/audits/mixed-language/mixed-java-kotlin/README.md +0 -10
- package/tests/fixtures/audits/mixed-language/mixed-java-kotlin/build.gradle.kts +0 -8
- package/tests/fixtures/audits/mixed-language/mixed-java-kotlin/settings.gradle.kts +0 -1
- package/tests/fixtures/audits/mixed-language/mixed-java-kotlin/src/main/java/com/example/FooService.java +0 -7
- package/tests/fixtures/audits/mixed-language/mixed-java-kotlin/src/main/kotlin/com/example/BarService.kt +0 -7
- package/tests/fixtures/audits/mixed-language/mixed-java-kotlin/src/test/java/com/example/FooServiceTest.java +0 -8
- package/tests/fixtures/audits/mixed-language/mixed-java-kotlin/src/test/kotlin/com/example/BarServiceTest.kt +0 -8
- package/tests/fixtures/audits/mixed-language/mixed-python-ts/README.md +0 -8
- package/tests/fixtures/audits/mixed-language/mixed-python-ts/src/app.py +0 -7
- package/tests/fixtures/audits/mixed-language/mixed-python-ts/src/index.ts +0 -3
- package/tests/fixtures/audits/mixed-language/mixed-python-ts/tests/test_app.py +0 -5
- package/tests/fixtures/audits/mixed-language/mixed-ts-js/README.md +0 -7
- package/tests/fixtures/audits/mixed-language/mixed-ts-js/src/helper.js +0 -5
- package/tests/fixtures/audits/mixed-language/mixed-ts-js/src/index.ts +0 -3
- package/tests/fixtures/audits/mixed-language/mixed-ts-js/tests/index.sample.ts +0 -5
- package/tests/fixtures/audits/mixed-language/mixed-ts-python-jvm/README.md +0 -10
- package/tests/fixtures/audits/mixed-language/mixed-ts-python-jvm/build.gradle.kts +0 -4
- package/tests/fixtures/audits/mixed-language/mixed-ts-python-jvm/pytests/test_app.py +0 -5
- package/tests/fixtures/audits/mixed-language/mixed-ts-python-jvm/src/app.py +0 -2
- package/tests/fixtures/audits/mixed-language/mixed-ts-python-jvm/src/helper.js +0 -5
- package/tests/fixtures/audits/mixed-language/mixed-ts-python-jvm/src/index.ts +0 -3
- package/tests/fixtures/audits/mixed-language/mixed-ts-python-jvm/src/main/java/com/example/Multiplier.java +0 -7
- package/tests/fixtures/audits/mixed-language/mixed-ts-python-jvm/src/main/kotlin/com/example/Divider.kt +0 -7
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/corrected-replay/derived/run-integrity-evidence.json +0 -99
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/corrected-replay/producer/implementation-audit.json +0 -1585
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/corrected-replay/producer/implementation-capsule.json +0 -11455
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/00-request.txt +0 -1
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/architecture-context-packet.txt +0 -82
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/behavior-model.txt +0 -104
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/final-report.txt +0 -41
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/implementation-context-packet.txt +0 -114
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/implementation-report.txt +0 -92
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/judge-report.txt +0 -34
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/pseudocode-packet.txt +0 -244
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/request-brief.txt +0 -40
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/test-context-packet.txt +0 -93
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/test-implementation-report.txt +0 -69
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/test-strategy-packet.txt +0 -354
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/verification-report.txt +0 -85
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/derived/run-integrity-evidence.json +0 -98
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/producer/architecture-audit.json +0 -1169
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/producer/architecture-request.json +0 -29
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/producer/implementation-audit.json +0 -1494
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/producer/implementation-capsule.json +0 -11364
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/producer/implementation-request.json +0 -33
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/producer/test-request.json +0 -74
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/reports/architecture-context-retrieval-report.txt +0 -58
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/reports/implementation-context-retrieval-report.txt +0 -75
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/reports/test-context-retrieval-report.txt +0 -84
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/run.json +0 -62
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/tool-versions/my-dev-kit-version.txt +0 -1
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/tool-versions/orchestrator-version.txt +0 -1
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/manifests/corrected-replay-manifest.json +0 -19
- package/tests/fixtures/ecosystem/context-integrity/v0.4.5/manifests/failed-run-manifest.json +0 -56
- package/tests/fixtures/fake-adversarial-cli.js +0 -152
- package/tests/fixtures/fake-my-dev-kit-cli.js +0 -83
- package/tests/fixtures/full-workflow-library/complete-v1.0.0.json +0 -24
- package/tests/fixtures/full-workflow-library/future-minor-v1.1.0-additive.json +0 -25
- package/tests/fixtures/stage-context-expectations/complete-v1.0.0.json +0 -230
- package/tests/fixtures/stage-context-expectations/future-minor-v1.1.0-additive.json +0 -232
- package/tests/fixtures/stage-context-expectations/invalid/malformed-json.txt +0 -1
- package/tests/fixtures/stage-context-expectations/invalid/non-object-root.json +0 -1
- package/tests/fixtures/stage-context-expectations/minimal-v1.0.0.json +0 -18
- package/tests/fixtures/upstream-artifacts/invalid/malformed-json.txt +0 -1
- package/tests/fixtures/upstream-artifacts/invalid/non-object-root.json +0 -1
- package/tests/fixtures/upstream-artifacts/my-dev-kit/1.10.2/context-capsule/complete-v1.0.0.json +0 -504
- package/tests/fixtures/upstream-artifacts/my-dev-kit/1.10.2/context-capsule/future-minor-v1.1.0-additive.json +0 -955
- package/tests/fixtures/upstream-artifacts/my-dev-kit/1.10.2/retrieval-audit-record/complete-v1.0.0.json +0 -190
- package/tests/fixtures/upstream-artifacts/my-dev-kit/1.10.2/retrieval-audit-record/future-minor-v1.1.0-additive.json +0 -327
- package/tests/fixtures/upstream-artifacts/my-dev-kit/1.10.4/PROVENANCE.txt +0 -18
- package/tests/fixtures/upstream-artifacts/my-dev-kit/1.10.4/context-capsule/complete-v1.0.0.json +0 -556
- package/tests/fixtures/upstream-artifacts/my-dev-kit/1.10.4/retrieval-audit-record/complete-v1.0.0.json +0 -238
- package/tests/fixtures/upstream-artifacts/my-dev-kit-1.10.2-identity/PROVENANCE.txt +0 -13
- package/tests/fixtures/upstream-artifacts/my-dev-kit-1.10.2-identity/context-capsule.json +0 -7874
- package/tests/fixtures/upstream-artifacts/my-dev-kit-1.10.2-identity/retrieval-audit-record.json +0 -1076
- package/tests/fixtures/upstream-artifacts/my-dev-kit-orchestrator/1.2.1/workflow-instruction-packet/complete-v1.0.0.json +0 -160
- package/tests/fixtures/upstream-artifacts/my-dev-kit-orchestrator/1.2.1/workflow-instruction-packet/future-minor-v1.1.0-additive.json +0 -186
- package/tests/fixtures/upstream-artifacts/my-dev-kit-orchestrator/1.2.3/run-integrity/PROVENANCE.txt +0 -31
- package/tests/fixtures/upstream-artifacts/my-dev-kit-orchestrator/1.2.3/run-integrity/ready-pass-final-pass.json +0 -132
- package/tests/fixtures/upstream-artifacts/my-dev-kit-orchestrator/1.2.3/run-integrity/refresh-required-need-context.json +0 -146
package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/pseudocode-packet.txt
DELETED
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
Artifact: PseudocodePacket
|
|
2
|
-
Workflow mode: feature
|
|
3
|
-
Inputs used:
|
|
4
|
-
- Z:\Users\newuser\Projects\my-dev-kit-v1\.my-dev-kit-orchestrator\runs\20260730T113740-implement-my-dev-kit-v1-11-0-b/artifacts/request-brief.txt
|
|
5
|
-
- Z:\Users\newuser\Projects\my-dev-kit-v1\.my-dev-kit-orchestrator\runs\20260730T113740-implement-my-dev-kit-v1-11-0-b/artifacts/architecture-context-packet.txt
|
|
6
|
-
- Z:\Users\newuser\Projects\my-dev-kit-v1\.my-dev-kit-orchestrator\runs\20260730T113740-implement-my-dev-kit-v1-11-0-b/artifacts/behavior-model.txt
|
|
7
|
-
|
|
8
|
-
Behavior references: BEH-001..BEH-015, INV-001..INV-007, TRN-001..TRN-003 (behavior-model.txt)
|
|
9
|
-
|
|
10
|
-
--- Types (androidComposeTypes.ts) ---
|
|
11
|
-
|
|
12
|
-
PSE-001: (BEH-014, external contract 14.1) Define constants mirroring androidNavigationTypes.ts conventions:
|
|
13
|
-
ANDROID_COMPOSE_SEMANTIC_ARTIFACT_KIND = 'my-dev-kit-v1-android-compose-semantic'
|
|
14
|
-
ANDROID_COMPOSE_SEMANTIC_SCHEMA_VERSION = '1.0.0'
|
|
15
|
-
ANDROID_COMPOSE_SEMANTIC_FILENAME = 'android-compose-semantic.json'
|
|
16
|
-
|
|
17
|
-
PSE-002: (INV-002) Define:
|
|
18
|
-
type ComposeDeclarationScope = 'top-level' | 'function-local'
|
|
19
|
-
type ComposeDeclarationVisibility = 'public' | 'internal' | 'private'
|
|
20
|
-
(no 'protected' — Kotlin top-level declarations cannot be protected; if scanner ever sees `protected` on a depth-0 fun, treat as unsupported -> warning, not a new enum value)
|
|
21
|
-
|
|
22
|
-
PSE-003: Define ComposeAnnotationEvidence = { raw: string } (verbatim recognized annotation text, capped like every other artifact's signature capture, SIGNATURE_MAX_LENGTH = 120, matching kotlin/adapter.ts's existing constant value for consistency though independently declared per INV-007)
|
|
23
|
-
|
|
24
|
-
PSE-004: Define ComposeParameterSummary = { name: string, typeText: string | null } — typeText is the raw text after ':' up to the next top-level comma/close-paren, or null if not staticaly extractable (default value expression, complex generic, etc. are NOT parsed further — store null rather than guess)
|
|
25
|
-
|
|
26
|
-
PSE-005: Define ComposeSourceRange = { file: string, startLine: number, endLine: number } (1-based inclusive, matching the repository's existing 1-based `location.line` convention used throughout symbol-index/types.ts and androidNavigationTypes.ts's AndroidNavigationSourceRef)
|
|
27
|
-
|
|
28
|
-
PSE-006: Define ComposeChildCallEvidence = { calleeDeclarationId: string, calleeName: string, line: number }
|
|
29
|
-
(only ever populated via exact same-file declaration-ID resolution, INV-003; never a "candidate"/"unresolved" record — Batch 1's contract does not model unresolved child calls as data, only as warnings when independently warranted)
|
|
30
|
-
|
|
31
|
-
PSE-007: Define ComposeStructuralRegionKind = 'Scaffold' | 'LazyColumn' | 'LazyRow' | 'Column' | 'Row' | 'Box' | 'NavHost'
|
|
32
|
-
Define ComposeStructuralRegionEvidence = { kind: ComposeStructuralRegionKind, line: number }
|
|
33
|
-
|
|
34
|
-
PSE-008: Define ComposeDeclarationEntry = {
|
|
35
|
-
id: string, -- see PSE-020 ID rule
|
|
36
|
-
name: string,
|
|
37
|
-
kind: 'composable', -- fixed literal now; leaves room for a future non-composable Compose-related kind without a breaking rename (NOT a Batch 2+ field — this is Batch 1's own kind discriminant, currently single-valued)
|
|
38
|
-
scope: ComposeDeclarationScope,
|
|
39
|
-
visibility: ComposeDeclarationVisibility,
|
|
40
|
-
isPreview: boolean,
|
|
41
|
-
enclosingDeclarationId: string | null, -- non-null only when scope === 'function-local'
|
|
42
|
-
annotations: ComposeAnnotationEvidence[],
|
|
43
|
-
parameters: ComposeParameterSummary[],
|
|
44
|
-
sourceRange: ComposeSourceRange,
|
|
45
|
-
moduleId: string | null, -- resolved via the same resolveModuleAndSourceSet-style lookup buildComposeNavigationRoutes.ts already performs against androidProject.modules; reuse the pattern, not the function (that helper is file-local/unexported in buildComposeNavigationRoutes.ts)
|
|
46
|
-
sourceSet: string | null,
|
|
47
|
-
childCalls: ComposeChildCallEvidence[],
|
|
48
|
-
structuralRegions: ComposeStructuralRegionEvidence[],
|
|
49
|
-
warnings: string[],
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
PSE-009: Define ComposeSemanticSummary = {
|
|
53
|
-
declarationCount, previewCount, topLevelCount, functionLocalCount,
|
|
54
|
-
privateTopLevelCount, childCallCount, structuralRegionCallCount, warningCount: number
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
PSE-010: Define AndroidComposeSemanticArtifact = {
|
|
58
|
-
artifactKind: typeof ANDROID_COMPOSE_SEMANTIC_ARTIFACT_KIND,
|
|
59
|
-
schemaVersion: typeof ANDROID_COMPOSE_SEMANTIC_SCHEMA_VERSION,
|
|
60
|
-
createdAt: string,
|
|
61
|
-
projectRoot: string,
|
|
62
|
-
detected: boolean,
|
|
63
|
-
filesExamined: string[], -- sorted, deterministic; mirrors androidNavigationTypes.ts's filesExamined field
|
|
64
|
-
declarations: ComposeDeclarationEntry[], -- sorted by id
|
|
65
|
-
warnings: string[], -- deduped + sorted, mirrors buildAndroidNavigationProject.ts's `[...new Set(...)].sort()` pattern
|
|
66
|
-
summary: ComposeSemanticSummary,
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
PSE-011: Define BuildAndroidComposeSemanticProjectResult = { artifact: AndroidComposeSemanticArtifact }
|
|
70
|
-
(no evidenceFingerprint field — BEH-015 established no early-fingerprint/eligibility-gate role is needed for this artifact, unlike androidNavigation's XML-only early-fingerprint split)
|
|
71
|
-
|
|
72
|
-
--- Analyzer (buildAndroidComposeSemanticProject.ts) ---
|
|
73
|
-
|
|
74
|
-
PSE-012: (BEH-001, BEH-006) function buildAndroidComposeSemanticProject(options: { projectRoot, symbolIndex, androidProject, createdAt }): BuildAndroidComposeSemanticProjectResult
|
|
75
|
-
IF NOT androidProject.detected:
|
|
76
|
-
RETURN emptyArtifact() -- detected:false, empty arrays, empty summary (mirrors buildComposeNavigationRoutes.ts's `if (!androidProject.detected) return {...empty}`)
|
|
77
|
-
kotlinFiles = symbolIndex.files.filter(f => f.language === 'kotlin').sort by path
|
|
78
|
-
allDeclarations = []
|
|
79
|
-
allWarnings = []
|
|
80
|
-
filesExamined = []
|
|
81
|
-
FOR EACH file IN kotlinFiles:
|
|
82
|
-
text = readFileSafely(projectRoot, file.path) -- null on I/O error -> skip file silently (BEH: error states)
|
|
83
|
-
IF text is null: CONTINUE
|
|
84
|
-
filesExamined.push(file.path)
|
|
85
|
-
{ declarations, warnings } = scanFileForComposeDeclarations(file.path, text, androidProject)
|
|
86
|
-
allDeclarations.push(...declarations)
|
|
87
|
-
allWarnings.push(...warnings)
|
|
88
|
-
resolveChildCalls(allDeclarations) -- PSE-018, cross-declaration pass AFTER all files scanned so same-file forward/backward references both resolve
|
|
89
|
-
sortedDeclarations = sortById(allDeclarations) -- reuse buildComposeNavigationRoutes.ts's sortById<T extends {id:string}> pattern verbatim (or a locally duplicated equivalent — INV-007 forbids importing shared logic FROM the base Kotlin adapter, but this small comparator has no adapter dependency and may be shared/imported from buildComposeNavigationRoutes.ts's module if exported, or duplicated if not — implementation stage decides based on whether sortById is exported)
|
|
90
|
-
detected = sortedDeclarations.length > 0
|
|
91
|
-
artifact = {
|
|
92
|
-
artifactKind, schemaVersion, createdAt, projectRoot: toForwardSlash(projectRoot),
|
|
93
|
-
detected, filesExamined: filesExamined.sort(), declarations: detected ? sortedDeclarations : [],
|
|
94
|
-
warnings: dedupeSort(allWarnings),
|
|
95
|
-
summary: computeSummary(sortedDeclarations, allWarnings),
|
|
96
|
-
}
|
|
97
|
-
RETURN { artifact }
|
|
98
|
-
|
|
99
|
-
PSE-013: (BEH-007) function scanFileForComposeDeclarations(filePath, text, androidProject):
|
|
100
|
-
lines = text.split('\n')
|
|
101
|
-
state = { depth: 0, inBlockComment: false, pendingAnnotations: [], declarationStack: [] } -- declarationStack holds enclosing supported-function-declaration frames for scope/enclosingId resolution
|
|
102
|
-
declarations = []; warnings = []
|
|
103
|
-
FOR i, rawLine IN lines:
|
|
104
|
-
line = stripComments(rawLine, state) -- reuse stripLineComment/stripBlockCommentSpans-equivalent logic (duplicated locally per INV-007, same algorithm as kotlin/adapter.ts's existing helpers)
|
|
105
|
-
trimmed = line.trim()
|
|
106
|
-
depthBeforeLine = state.depth
|
|
107
|
-
state.depth += countNetBraces(line)
|
|
108
|
-
IF trimmed is empty: CONTINUE
|
|
109
|
-
IF trimmed starts with '@': state.pendingAnnotations.push(trimmed); CONTINUE
|
|
110
|
-
composableMatch = matchComposableAnnotatedFunction(state.pendingAnnotations, trimmed)
|
|
111
|
-
-- composableMatch present only if state.pendingAnnotations contains a recognized @Composable (or qualified .Composable) annotation AND trimmed matches a `fun` declaration pattern (reuse FUNCTION_PATTERN shape from kotlin/adapter.ts, duplicated locally)
|
|
112
|
-
IF composableMatch:
|
|
113
|
-
scope = (depthBeforeLine === 0) ? 'top-level'
|
|
114
|
-
: (state.declarationStack.top is a supported enclosing declaration) ? 'function-local'
|
|
115
|
-
: null -- nested inside something that is not itself a tracked supported declaration (e.g. inside an `if` block, inside a class body) -> unsupported
|
|
116
|
-
IF scope is null:
|
|
117
|
-
warnings.push(`${filePath}:${lineNumber}: @Composable function "${name}" is nested in an unsupported enclosing context and was not extracted.`)
|
|
118
|
-
ELSE:
|
|
119
|
-
bodyRange = captureDeclarationRange(lines, i, state) -- PSE-014
|
|
120
|
-
entry = buildDeclarationEntry(filePath, composableMatch, scope, state, bodyRange, androidProject)
|
|
121
|
-
declarations.push(entry)
|
|
122
|
-
state.declarationStack.push({ id: entry.id, name: entry.name, startLine: bodyRange.startLine, endLine: bodyRange.endLine })
|
|
123
|
-
state.pendingAnnotations = []
|
|
124
|
-
ELSE IF trimmed matches plain FUNCTION_PATTERN (any `fun`, Compose-annotated or not):
|
|
125
|
-
-- track ALL function declarations (not just Compose ones) on declarationStack while inside their body, so a Compose-annotated function nested inside a *non*-Compose enclosing function is still correctly scoped 'function-local' with the right enclosingDeclarationId; the enclosing frame's OWN id is only referenced (via enclosingDeclarationId), never itself added to `declarations` unless it is separately Compose-annotated
|
|
126
|
-
pushNonComposeFunctionFrame(state, trimmed, lineNumber)
|
|
127
|
-
state.pendingAnnotations = []
|
|
128
|
-
ELSE:
|
|
129
|
-
state.pendingAnnotations = []
|
|
130
|
-
popDeclarationStackFramesClosedByThisLine(state, depthBeforeLine, state.depth) -- pop any frame whose body brace-closed at or before this line
|
|
131
|
-
RETURN { declarations, warnings }
|
|
132
|
-
|
|
133
|
-
PSE-014: (BEH-013 sourceRange) function captureDeclarationRange(lines, startIndex, state):
|
|
134
|
-
-- startLine = index of the FIRST pending-annotation line if any were consumed this declaration, else the `fun` line itself (1-based)
|
|
135
|
-
-- endLine: if body is block-form (`{ ... }`), scan forward tracking brace depth from the `fun` line until net-zero (reuse countNetBraces incrementally); if expression-form (`fun x(...): T = expr` with no trailing `{`), endLine is the line where the statement's logical end is reached — conservative rule: same line as the `=` if the expression contains no unmatched open bracket/paren by end of line, else scan forward until the opened bracket/paren/string is closed, capped at MAX_SCAN_LINES (reuse buildComposeNavigationRoutes.ts's 2000-line bound) with a truncation warning beyond the cap, mirroring the existing precedent exactly
|
|
136
|
-
RETURN { startLine, endLine }
|
|
137
|
-
|
|
138
|
-
PSE-015: (BEH-011) function extractStructuralRegionCalls(bodyText) -> ComposeStructuralRegionEvidence[]
|
|
139
|
-
FOR EACH of the 7 fixed names: regex-match `\bName\s*\(` at any nesting depth WITHIN the captured body text (not just top-level statements — Scaffold/Column/etc. commonly nest), record { kind: Name, line: lineNumberWithinBody }
|
|
140
|
-
Do not attempt to resolve nested content further (no route/child extraction from inside NavHost — BEH-011 explicit non-goal)
|
|
141
|
-
|
|
142
|
-
PSE-016: (BEH-010) function extractChildCallCandidates(bodyText) -> Array<{ calleeName: string, line: number }>
|
|
143
|
-
Reuse the same "uppercase-start call at statement position" syntactic detection buildComposeNavigationRoutes.ts's detectDirectScreenCandidate uses for its narrower single-call case, generalized to scan every direct call in the body (not just a single-statement lambda), still requiring: call must look like `Identifier(...)` where Identifier[0] is uppercase (a necessary but NOT sufficient condition — PSE-018 below applies the sufficient condition, exact-declaration-match)
|
|
144
|
-
This function only produces CANDIDATES; it never writes to the artifact directly (enforces INV-003 structurally by construction, not by later filtering discipline alone)
|
|
145
|
-
|
|
146
|
-
PSE-017: (BEH-012) function matchComposableAnnotatedFunction(pendingAnnotations, trimmedLine):
|
|
147
|
-
hasComposable = pendingAnnotations.some(a => /^@(\w+\.)*Composable\b/.test(a))
|
|
148
|
-
IF NOT hasComposable: RETURN null
|
|
149
|
-
functionMatch = trimmedLine.match(FUNCTION_PATTERN_LOCAL) -- local duplicate of kotlin/adapter.ts's FUNCTION_PATTERN regex shape
|
|
150
|
-
IF NOT functionMatch: RETURN null -- e.g. `@Composable` followed by something that isn't a `fun` line at all -> not a warning (annotation may legitimately precede something Batch 1 doesn't track, e.g. a property use is invalid Kotlin so this is purely defensive) — no warning needed since this is not a "close call", it is simply not a function
|
|
151
|
-
isPreview = pendingAnnotations.some(a => /^@(\w+\.)*Preview\b/.test(a))
|
|
152
|
-
visibility = /\bprivate\b/.test(trimmedLine) ? 'private' : /\binternal\b/.test(trimmedLine) ? 'internal' : 'public'
|
|
153
|
-
name = functionMatch group for function name
|
|
154
|
-
parameters = parseParameterList(trimmedLine or, if signature spans multiple lines, the accumulated multiline signature text — BEH: "multiline annotations/signatures" fixture requirement)
|
|
155
|
-
RETURN { name, isPreview, visibility, annotations: pendingAnnotations.map(a => ({raw: a})), parameters, rawSignatureLine: trimmedLine }
|
|
156
|
-
|
|
157
|
-
PSE-018: (INV-003) function resolveChildCalls(allDeclarations):
|
|
158
|
-
byNameThenFile = group allDeclarations by (file, name) -- exact match requires same-file scope (Batch 1 does not resolve cross-file child calls: "resolved to a supported Compose declaration in the CURRENT artifact" per external contract 14.6, current artifact = whole run, but conservatively restrict to same-file to avoid ambiguous multi-file same-name resolution -- documented assumption, see "assumptions removed or guarded" below)
|
|
159
|
-
FOR EACH declaration d IN allDeclarations:
|
|
160
|
-
FOR EACH candidate IN d.rawChildCallCandidates (captured during scan, PSE-016 output attached transiently):
|
|
161
|
-
matches = byNameThenFile[(d.sourceRange.file, candidate.calleeName)] MINUS d itself
|
|
162
|
-
IF matches.length === 1:
|
|
163
|
-
d.childCalls.push({ calleeDeclarationId: matches[0].id, calleeName: candidate.calleeName, line: candidate.line })
|
|
164
|
-
ELSE IF matches.length === 0:
|
|
165
|
-
-- no exact resolution; omit silently per BEH-010 (not a "close call" — most calls are ordinary Kotlin API calls, warning on every miss would be noise)
|
|
166
|
-
ELSE (matches.length > 1, e.g. two function-local composables with the same name in different enclosing functions):
|
|
167
|
-
d.warnings.push(`Ambiguous child-composable call "${candidate.calleeName}" at line ${candidate.line}: multiple same-named declarations in this file; not recorded as a child-call edge.`)
|
|
168
|
-
strip transient rawChildCallCandidates field before returning (not part of the public artifact type, PSE-008 has no such field)
|
|
169
|
-
|
|
170
|
-
PSE-019: (BEH-014) function buildAndroidComposeSemanticAnalyzerStatus(result): IndexAnalyzerStatus
|
|
171
|
-
Mirror buildAndroidNavigationAnalyzerStatus exactly:
|
|
172
|
-
status = !artifact.detected ? 'skipped' : artifact.warnings.length > 0 ? 'partial' : 'complete'
|
|
173
|
-
id: 'android-compose-semantic', version/schemaVersion: ANDROID_COMPOSE_SEMANTIC_SCHEMA_VERSION,
|
|
174
|
-
artifacts: detected ? [{name:'androidComposeSemantic', path: ANDROID_COMPOSE_SEMANTIC_FILENAME, artifactKind: ANDROID_COMPOSE_SEMANTIC_ARTIFACT_KIND}] : [],
|
|
175
|
-
warningCount: artifact.warnings.length, errorCount: 0,
|
|
176
|
-
summary: artifact.summary
|
|
177
|
-
Wrapped at the finishIndexBuild() call site in the SAME try/catch shape runAndroidComponentsAnalyzer already uses, so an unexpected internal exception (not a per-file I/O error, which is already handled inside the builder) produces status 'failed', errorCount:1, per BEH "Error states".
|
|
178
|
-
|
|
179
|
-
PSE-020: (INV-005) ID rule (function computeDeclarationId(filePath, enclosingChain, name, ordinal)):
|
|
180
|
-
base = `android-compose-declaration:${filePath}#${enclosingChain.join('>')}${enclosingChain.length ? '>' : ''}${name}`
|
|
181
|
-
IF a declaration with an identical `base` was already assigned in this same file's scan pass (duplicate name+scope collision — rare, only from malformed/in-progress source since valid Kotlin forbids true duplicates):
|
|
182
|
-
append `#${ordinal}` where ordinal is the 0-based count of prior identical `base` values seen so far in file-scan order (itself deterministic: file-scan order is always the same for identical source text)
|
|
183
|
-
RETURN base (unsuffixed) for the first occurrence, base + '#N' for the Nth later duplicate
|
|
184
|
-
-- top-level declaration: enclosingChain = [] -> id = `android-compose-declaration:src/foo/Bar.kt#MyScreen`
|
|
185
|
-
-- function-local declaration inside `fun Outer()`: enclosingChain = ['Outer'] -> id = `android-compose-declaration:src/foo/Bar.kt#Outer>InnerComposable`
|
|
186
|
-
|
|
187
|
-
--- Integration (runIndexCommand.ts, managedArtifacts.ts, writeIndexManifest.ts, android/index.ts) ---
|
|
188
|
-
|
|
189
|
-
PSE-021: (BEH-014) managedArtifacts.ts: add
|
|
190
|
-
export const ANDROID_COMPOSE_SEMANTIC_FILENAME = 'android-compose-semantic.json'
|
|
191
|
-
append ANDROID_COMPOSE_SEMANTIC_FILENAME to OPTIONAL_INDEX_ARTIFACT_FILENAMES array (single insertion point, order-stable — append at end to avoid disturbing any snapshot/golden-file test asserting exact array order)
|
|
192
|
-
|
|
193
|
-
PSE-022: (BEH-014) writeIndexManifest.ts: add
|
|
194
|
-
import type { AndroidComposeSemanticArtifact } from '../android/androidComposeTypes.js'
|
|
195
|
-
import { ANDROID_COMPOSE_SEMANTIC_FILENAME } from './managedArtifacts.js'
|
|
196
|
-
add `androidComposeSemantic?: AndroidComposeSemanticArtifact | null` to the writeIndexArtifacts options type (mirroring `androidNavigation?: AndroidNavigationArtifact | null` exactly)
|
|
197
|
-
add `if (options.androidComposeSemantic) { writeJson(path.join(options.outputDir, ANDROID_COMPOSE_SEMANTIC_FILENAME), options.androidComposeSemantic) }` immediately after the existing androidNavigation write block
|
|
198
|
-
|
|
199
|
-
PSE-023: (BEH-014, BEH-001) runIndexCommand.ts, inside finishIndexBuild(), immediately after the existing androidNavigationResult/androidNavigationAnalyzerStatus block (so roledSymbolIndex already exists) and BEFORE androidRelationships is computed (Batch 1 must not feed the new artifact into buildAndroidArtifactRelationships — that call's argument list is a forbidden-edit-area file and Batch 1 does not add a parameter to it):
|
|
200
|
-
const androidComposeSemanticResult = buildAndroidComposeSemanticProject({ projectRoot, symbolIndex: roledSymbolIndex, androidProject: androidResult.artifact, createdAt })
|
|
201
|
-
const androidComposeSemanticAnalyzerStatus = buildAndroidComposeSemanticAnalyzerStatus(androidComposeSemanticResult)
|
|
202
|
-
-- append androidComposeSemanticAnalyzerStatus to the array passed into replaceAnalyzerStatuses(...) (after androidRelationshipsAnalyzerStatus, preserving existing entries' relative order)
|
|
203
|
-
-- add `androidComposeSemantic: androidComposeSemanticResult.artifact.detected ? androidComposeSemanticResult.artifact : null` to the writeIndexArtifacts(...) call
|
|
204
|
-
-- add `androidComposeSemanticPath: androidComposeSemanticResult.artifact.detected ? toForwardSlash(path.join(outputDir, ANDROID_COMPOSE_SEMANTIC_FILENAME)) : null` to the returned RunIndexCommandIndexResult (new field on that interface, additive)
|
|
205
|
-
-- NOTE: do NOT alter the early androidResult/androidGradleResult/androidManifestResult/androidResourcesResult block near the top of runIndexCommand() (those remain the four early-computed builders; the new analyzer joins android-navigation/android-components/android-relationships as a "late, post-symbol-index" builder, per BEH-014/PSE-011's explicit no-early-fingerprint decision)
|
|
206
|
-
|
|
207
|
-
PSE-024: (BEH-014) android/index.ts: append barrel exports for buildAndroidComposeSemanticProject, its option/result types, and every exported type from androidComposeTypes.ts, following the exact same block-per-artifact grouping the file already uses for android-navigation.
|
|
208
|
-
|
|
209
|
-
--- Manifest type impact ---
|
|
210
|
-
|
|
211
|
-
PSE-025: (external contract 14.9) manifestTypes.ts is NOT expected to require a change: `IndexAnalyzerStatus`'s existing shape (id, status, version, schemaVersion, artifacts[], warningCount, errorCount, summary) already accommodates the new analyzer entry with no new fields, exactly as it did for android-navigation. If implementation discovers `summary` cannot structurally hold ComposeSemanticSummary's shape (it is typed `Record<string, unknown>` or equivalent loose type per existing analyzer entries — to be confirmed by direct inspection of manifestTypes.ts at the start of the implementation stage), no change is needed since summary is already loosely typed for every other analyzer. If it is NOT loosely typed, implementation stage must stop and report the exact conflict per Section 6 of the external contract rather than silently widening manifestTypes.ts beyond a narrow additive change.
|
|
212
|
-
|
|
213
|
-
--- Acceptance criteria (traced to behavior-model) ---
|
|
214
|
-
|
|
215
|
-
PSE-026: BEH-002, BEH-003 -> presence/absence integration test
|
|
216
|
-
PSE-027: INV-001, INV-002, INV-003 -> unit tests on scanFileForComposeDeclarations / resolveChildCalls
|
|
217
|
-
PSE-028: INV-005 -> determinism test (run analyzer twice over identical fixture text, assert byte-identical output modulo createdAt)
|
|
218
|
-
PSE-029: BEH-015, TRN-003 -> incremental regression test (add/change/remove a Compose declaration under --incremental, assert artifact refreshes; unrelated file change under --incremental, assert byte-identical Compose artifact)
|
|
219
|
-
PSE-030: BEH-005, INV-006 -> existing android-navigation snapshot/fixture test re-run unchanged (regression guard)
|
|
220
|
-
|
|
221
|
-
Likely files or modules to modify: (unchanged from architecture-context-packet.txt's list — no new files identified during pseudocode)
|
|
222
|
-
- New: src/android/androidComposeTypes.ts, src/android/buildAndroidComposeSemanticProject.ts
|
|
223
|
-
- Modified: src/android/index.ts, src/indexing/managedArtifacts.ts, src/indexing/writeIndexManifest.ts, src/indexing/runIndexCommand.ts
|
|
224
|
-
- Possibly modified (only if PSE-025's conflict check fails): src/indexing/manifestTypes.ts
|
|
225
|
-
|
|
226
|
-
Implementation constraints:
|
|
227
|
-
- No import from or modification of src/languages/kotlin/adapter.ts (INV-007)
|
|
228
|
-
- No modification of src/graph/buildAndroidArtifactRelationships.ts or addAndroidRelationshipsToCodeGraph.ts (forbidden edit area; PSE-023 explicitly does not thread the new artifact into that call)
|
|
229
|
-
- No modification of any command file (forbidden edit area)
|
|
230
|
-
- Bounded scan (MAX_SCAN_LINES precedent) to avoid pathological runtime on huge generated Kotlin files, matching buildComposeNavigationRoutes.ts
|
|
231
|
-
|
|
232
|
-
Assumptions preserved (from architecture-context-packet.txt / behavior-model.txt):
|
|
233
|
-
- Compose scanning gates on androidProject.detected (resolved in behavior-model.txt's "Unresolved design questions" section, by direct precedent from buildComposeNavigationRoutes.ts)
|
|
234
|
-
- No new incremental cache/fingerprint (BEH-015)
|
|
235
|
-
- No manifestTypes.ts change expected (PSE-025, pending direct confirmation at implementation start)
|
|
236
|
-
|
|
237
|
-
Assumptions removed or guarded:
|
|
238
|
-
- PSE-018 narrows external-contract Section 14.6's "resolved to a supported Compose declaration in the current artifact" to same-FILE resolution rather than whole-project resolution, to avoid ambiguous cross-file same-name matches that the fixed contract's "never guess" principle (INV-003) would otherwise force into either an arbitrary pick or a blanket cross-file warning flood. This is a scope-narrowing guard, not a contract violation: the external contract's Section 14.6 says "exact declaration identity or another existing exact repository mechanism" — no existing repository mechanism resolves cross-file Kotlin symbol references today (resolveKotlinImportToFile exists but is best-effort/heuristic per its own doc comment, which fails INV-003's "never guess" bar), so same-file-only is the only mechanism meeting the "exact" requirement without inventing new import-resolution machinery Batch 1 is not scoped to build.
|
|
239
|
-
|
|
240
|
-
Unresolved implementation questions:
|
|
241
|
-
- Whether `sortById` from buildComposeNavigationRoutes.ts is exported (reuse) or must be duplicated locally (small, low-risk, resolved trivially at implementation start by checking the file's export list — not a design blocker)
|
|
242
|
-
- Exact shape of manifestTypes.ts's `summary` field typing (PSE-025) — resolved by direct inspection at implementation start, not blocking pseudocode completion
|
|
243
|
-
|
|
244
|
-
Status: complete
|
package/tests/fixtures/ecosystem/context-integrity/v0.4.5/failed-run/artifacts/request-brief.txt
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
Artifact: RequestBrief
|
|
2
|
-
Workflow mode: feature
|
|
3
|
-
|
|
4
|
-
Original request: Implement my-dev-kit v1.11.0 Batch 1: add the optional android-compose-semantic.json artifact, conservatively extract deterministic top-level, private top-level, function-local, preview, child-composable, and structural UI-region declaration evidence from indexed Kotlin files, integrate it with the existing Android artifact lifecycle, and add focused tests without adding state/effect/ViewModel/test/retrieval/graph behavior.
|
|
5
|
-
|
|
6
|
-
Requested change: Add a new optional, managed Android artifact `android-compose-semantic.json`, owned by src/android/, produced by a new dedicated Compose declaration analyzer (not the base Kotlin adapter). The analyzer conservatively scans already-indexed Kotlin source files (reusing symbolIndex.files as its bounded input set, following the src/android/buildComposeNavigationRoutes.ts precedent) and extracts: top-level named @Composable declarations, top-level private @Composable declarations, named function-local @Composable declarations, @Preview classification, visibility, statically available parameter summaries, complete deterministic source ranges, direct exactly-resolved child-composable calls, and a fixed set of structural UI-region calls (Scaffold, LazyColumn, LazyRow, Column, Row, Box, NavHost). The artifact is registered through the existing managed-artifact/manifest/analyzer-status/writer/stale-cleanup owners (managedArtifacts.ts, writeIndexManifest.ts, runIndexCommand.ts, refreshIndexOutput.ts) rather than new parallel machinery.
|
|
7
|
-
|
|
8
|
-
Target area: src/android/ (new Compose analyzer + types), src/indexing/ (managedArtifacts.ts, writeIndexManifest.ts, runIndexCommand.ts, manifestTypes.ts only if strictly required), plus focused test/fixture additions under the repository's existing Android/Kotlin test structure. Package: @dailephd/my-dev-kit, version 1.10.3 (pre-release, unreleased v1.11.0 Batch 1 work).
|
|
9
|
-
|
|
10
|
-
User-visible or external behavior: Running `my-dev-kit index` (full or incremental) against a project containing supported Compose declarations produces a new optional `android-compose-semantic.json` file in the output directory and a corresponding `android-compose-semantic` entry in manifest.json's analyzer registry. Projects with no Android evidence, or Android/Kotlin projects with no supported Compose declarations, do not produce the file (and any previously-written file is removed by the existing stale-artifact cleanup on the next full refresh if evidence disappears). No new CLI command, flag, or output shape is added to index/search/lookup/slice/source/view/context/graph-diff in this batch.
|
|
11
|
-
|
|
12
|
-
Constraints:
|
|
13
|
-
- Do not modify src/languages/kotlin/adapter.ts (base Kotlin adapter stays a conservative top-level-only extractor).
|
|
14
|
-
- Do not duplicate android-navigation.json's ownership of routes/destinations/navigation graphs/route-to-screen candidates.
|
|
15
|
-
- Do not create a second index, a Compose-specific search/graph engine, or a new top-level CLI command.
|
|
16
|
-
- Reuse the existing analyzer-registry, managed-artifact-filename, artifact-writer, and stale-cleanup owners; do not build parallel machinery.
|
|
17
|
-
- Do not add a new incremental-cache/fingerprint system; reuse existing changed-file detection unless proven insufficient (in which case: BLOCKED_INCREMENTAL_INVALIDATION_CONTRACT).
|
|
18
|
-
- Conservative, non-compiler parsing only, consistent with the buildComposeNavigationRoutes.ts precedent; if that precedent cannot safely meet minimum acceptance criteria, stop with BLOCKED_COMPOSE_SCANNER_REQUIRES_KOTLIN_PARSER_REDESIGN rather than building a general Kotlin lexer.
|
|
19
|
-
- No code-graph nodes/edges, no retrieval/search/lookup/slice/source/view/context integration, no graph-diff integration in this batch (explicitly deferred to Batches 2-6).
|
|
20
|
-
- No version bump, release prep, or publication in this batch.
|
|
21
|
-
- Forbidden edit areas: src/languages/kotlin/adapter.ts, src/graph-diff/, src/commands/{search,lookup,slice,source,view,context}Command.ts, src/graph/buildAndroidArtifactRelationships.ts, src/graph/addAndroidRelationshipsToCodeGraph.ts, frontend analyzer/reachability implementation, package versions, release docs/branches, roadmap feature assignments, orchestrator source, my-dev-kit-lab source.
|
|
22
|
-
|
|
23
|
-
Non-goals: State (remember/rememberSaveable/collectAsState/collectAsStateWithLifecycle), effects (LaunchedEffect/DisposableEffect), ViewModel references, UI text/string-resource/test-tag extraction, event handlers, navigation-call extraction, Android/Compose UI-test/Espresso/Robolectric indexing, code-graph projection, search/lookup/slice/source/view/context command integration, graph-diff sections, retrieval benchmarking, Kotlin compiler/PSI integration, runtime/emulator/build validation, broad documentation reconciliation, version bump, release/publish workflow. These belong to my-dev-kit v1.11.0 Batches 2-6 per the fixed, already-decided roadmap.
|
|
24
|
-
|
|
25
|
-
Success criteria:
|
|
26
|
-
- android-compose-semantic.json has one clear schema owner under src/android/, is optional/managed, registered in the manifest analyzer registry, written via the existing artifact writer, and cleaned up via existing stale-artifact cleanup when evidence disappears.
|
|
27
|
-
- Top-level, private top-level, and named function-local composables are distinguished and extracted per the fixed Section 2.3 definitions; @Preview declarations are identified.
|
|
28
|
-
- Source ranges, IDs, and output ordering are complete and deterministic.
|
|
29
|
-
- Direct child-composable calls and the seven named structural UI-region calls are recorded only via exact, non-guessed evidence; unsupported patterns are omitted or warned, never fabricated.
|
|
30
|
-
- Existing Android navigation ownership, symbol-index/code-graph shapes, non-Android behavior, Kotlin-without-Compose behavior, and old-manifest compatibility are all unchanged.
|
|
31
|
-
- Incremental indexing does not leave stale Compose artifacts (verified against existing changed-file detection, not a new cache).
|
|
32
|
-
- Focused and full test suites pass; typecheck/build/verify pass; smoke checks confirm artifact presence/absence and absence of Batch 2-6 fields; no generated smoke output is left in the tree.
|
|
33
|
-
|
|
34
|
-
Ambiguity or missing information:
|
|
35
|
-
- Whether existing Kotlin changed-file content-hash classification is sufficient to invalidate android-compose-semantic.json on relevant Kotlin changes under --incremental (Section 2.4/14.10) is not yet confirmed against current cacheMetadata.ts/partialRebuild.ts/runIndexCommand.ts behavior -- this must be verified in architecture-context before implementation proceeds, per the fixed decision tree (reuse if sufficient; BLOCKED_INCREMENTAL_INVALIDATION_CONTRACT if not, without redesigning).
|
|
36
|
-
- Exact deterministic-ID convention (e.g., same-name-ordinal tie-breaking for two same-named declarations in one file) is not yet fixed and must be resolved during pseudocode/implementation against existing repository ID conventions (e.g., buildComposeNavigationRoutes.ts's `file#index` pattern).
|
|
37
|
-
- Whether manifestTypes.ts requires any change is unconfirmed pending architecture-context evidence; current expectation (per Stage 0 and the android-navigation precedent) is no manifest schema change is needed, only an analyzer-registry entry.
|
|
38
|
-
|
|
39
|
-
Expected next stage: architecture-context
|
|
40
|
-
Status: complete
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
Schema version: 1.0.0
|
|
2
|
-
Document kind: test-context-packet
|
|
3
|
-
Role: test-implementation
|
|
4
|
-
Status: populated
|
|
5
|
-
Repository scope: single-repository
|
|
6
|
-
Context capsule schema version: 1.0.0
|
|
7
|
-
Retrieval audit schema version: 1.0.0
|
|
8
|
-
Tool name: my-dev-kit
|
|
9
|
-
Tool version: 1.10.3
|
|
10
|
-
Index identity: Z:/Users/newuser/Projects/my-dev-kit-v1/.my-dev-kit-context/v1.11.0-batch-1-compose-artifact-foundation/test
|
|
11
|
-
Freshness: fresh
|
|
12
|
-
Adequacy: sufficient-with-assumptions
|
|
13
|
-
Required evidence truncated: no
|
|
14
|
-
Source context capsule: Z:/Users/newuser/Projects/my-dev-kit-v1/.my-dev-kit-context/v1.11.0-batch-1-compose-artifact-foundation/test-capsule.json
|
|
15
|
-
Source retrieval audit: Z:/Users/newuser/Projects/my-dev-kit-v1/.my-dev-kit-context/v1.11.0-batch-1-compose-artifact-foundation/test-audit.json
|
|
16
|
-
After index: Z:/Users/newuser/Projects/my-dev-kit-v1/.my-dev-kit-context/v1.11.0-batch-1-compose-artifact-foundation/test
|
|
17
|
-
Responsibility mappings truncated: no
|
|
18
|
-
Critical responsibility mapping status: not-applicable
|
|
19
|
-
|
|
20
|
-
## Changed surface
|
|
21
|
-
6 production files: src/android/androidComposeTypes.ts (new), src/android/buildAndroidComposeSemanticProject.ts (new), src/android/index.ts (modified, barrel exports), src/indexing/managedArtifacts.ts (modified, new filename constant), src/indexing/writeIndexManifest.ts (modified, new optional write parameter), src/indexing/runIndexCommand.ts (modified, new builder call + analyzer-status function + wiring). Confirmed via graph-diff between the implementation and test indexes: additive-only symbol/edge growth, no unexpected file changed or removed.
|
|
22
|
-
|
|
23
|
-
## Production owners
|
|
24
|
-
src/android/ owns the new artifact type contract and analyzer (androidComposeTypes.ts, buildAndroidComposeSemanticProject.ts, index.ts barrel). src/indexing/ owns orchestration/registration/writing (managedArtifacts.ts, writeIndexManifest.ts, runIndexCommand.ts's finishIndexBuild()). Same ownership confirmed across architecture-context-packet.txt, implementation-context-packet.txt, and this stage's retrieval report.
|
|
25
|
-
|
|
26
|
-
## Production contracts
|
|
27
|
-
AndroidComposeSemanticArtifact / ComposeDeclarationEntry / ComposeChildCallEvidence / ComposeStructuralRegionEvidence / ComposeSemanticSummary (androidComposeTypes.ts) — see docs/GRAPH_SCHEMA.md's new "android-compose-semantic.json (v1.11.0 Batch 1)" section for the full field-level contract. buildAndroidComposeSemanticProject(options): BuildAndroidComposeSemanticProjectResult — the sole production entry point tests call directly (mirroring composeNavigationRoutes.spec.ts's pattern of calling the analyzer function directly rather than only through the CLI).
|
|
28
|
-
|
|
29
|
-
## Validators
|
|
30
|
-
No new shared validator module. Conservative parsing validators (annotation/function-pattern matching, brace/paren/string-literal handling) are internal to buildAndroidComposeSemanticProject.ts and are exercised indirectly through its public output, not unit-tested in isolation — consistent with how buildComposeNavigationRoutes.ts's internal helpers are tested only through its public `routes`/`screenCandidates`/`warnings` output in composeNavigationRoutes.spec.ts.
|
|
31
|
-
|
|
32
|
-
## Constants
|
|
33
|
-
ANDROID_COMPOSE_SEMANTIC_ARTIFACT_KIND = 'my-dev-kit-v1-android-compose-semantic', ANDROID_COMPOSE_SEMANTIC_SCHEMA_VERSION = '1.0.0', ANDROID_COMPOSE_SEMANTIC_FILENAME = 'android-compose-semantic.json' (androidComposeTypes.ts, re-exported from android/index.ts and consumed by managedArtifacts.ts/writeIndexManifest.ts/runIndexCommand.ts).
|
|
34
|
-
|
|
35
|
-
## Errors
|
|
36
|
-
No new thrown-error type. Per-file I/O errors are swallowed internally (file skipped, no warning). A genuine internal exception during the builder's own construction is caught at the finishIndexBuild() call site (runAndroidComposeSemanticAnalyzer's try/catch) and reported as analyzer status 'failed' with errorCount:1 — mirrors the classification/android-components failure-mode contract exactly; not independently tested with a forced-throw fixture in this batch (no existing sibling analyzer test does this either).
|
|
37
|
-
|
|
38
|
-
## Schemas
|
|
39
|
-
android-compose-semantic.json's on-disk JSON shape — see "## Production contracts" above and docs/GRAPH_SCHEMA.md. manifest.json's analyzers[] array gains one additive entry (id: 'android-compose-semantic'); no manifest schema type change (confirmed: IndexAnalyzerStatus.summary is already Record<string, number|string|boolean|null>, IndexAnalyzerId already ends `| (string & {})`).
|
|
40
|
-
|
|
41
|
-
## Closest tests
|
|
42
|
-
tests/android/composeNavigationRoutes.spec.ts (unit/component pattern reused for tests/android/composeSemanticDeclarations.spec.ts: temp fixture app + buildIndex + detectAndroidProject + direct analyzer call). tests/index/androidNavigationIncremental.spec.ts (CLI-spawn + fixture-copy pattern reused for tests/index/androidComposeSemanticIncremental.spec.ts). tests/integration/androidV110Artifacts.spec.ts / androidV110Incremental.spec.ts (multi-artifact full-pipeline pattern, referenced but not directly extended — this batch's own new integration file covers the equivalent surface for the one new artifact).
|
|
43
|
-
|
|
44
|
-
## Test infrastructure
|
|
45
|
-
vitest (vitest.config.ts: include tests/**/*.spec.ts, exclude tests/**/fixtures/**, testTimeout/hookTimeout 20000ms, maxWorkers 4 — confirmed via raw capsule testInfrastructure.testConfigurations). Per-test temp-directory isolation via mkdtempSync/writeFileSync/rmSync in afterEach (established pattern, reused verbatim in both new test files). New fixture directories tests/fixtures/android-compose-semantic/basic-app and .../no-compose-app (correctly excluded from direct spec-file discovery by the vitest include/exclude configuration above, matching the existing tests/fixtures/android-navigation/ convention).
|
|
46
|
-
|
|
47
|
-
## Test commands
|
|
48
|
-
node_modules/.bin/vitest run tests/android/composeSemanticDeclarations.spec.ts (focused unit)
|
|
49
|
-
node_modules/.bin/vitest run tests/index/androidComposeSemanticIncremental.spec.ts (focused integration)
|
|
50
|
-
npm test (full suite, package.json "test": "vitest run")
|
|
51
|
-
npm run typecheck / npm run build / npm run verify (static/build)
|
|
52
|
-
All grounded in package.json scripts and vitest.config.ts (raw capsule testInfrastructure.packageScripts + testConfigurations), none invented. npm run benchmark:retrieval explicitly excluded per the external task contract (retrieval behavior unchanged in this batch).
|
|
53
|
-
|
|
54
|
-
## Test responsibilities
|
|
55
|
-
TST-001 through TST-032, as fully specified with criticality/traces-to/setup/action/expected-result/test-level in test-strategy-packet.txt. Not re-copied verbatim here (that file is the authoritative source); this packet only confirms each responsibility maps to an existing, passing test:
|
|
56
|
-
- TST-001..TST-020 (unit): tests/android/composeSemanticDeclarations.spec.ts — 20/20 passing.
|
|
57
|
-
- TST-021, TST-022, TST-025..TST-029 (integration): tests/index/androidComposeSemanticIncremental.spec.ts — 10/10 passing.
|
|
58
|
-
- TST-023, TST-024, TST-030, TST-031 (regression, existing suites unmodified): confirmed passing via `vitest run tests/android tests/index tests/graph-diff tests/integration` (708/708) and the full suite (`npm test`, 1908/1908).
|
|
59
|
-
- TST-032 (build/static-analysis): confirmed via `npm run typecheck` / `npm run build` / `npm run verify`, all exit 0.
|
|
60
|
-
|
|
61
|
-
## Responsibility mappings
|
|
62
|
-
Raw capsule responsibilityMappings.operational: false (no testResponsibilityRefs supplied — see retrieval report). Manual mapping (above, under "Test responsibilities") is authoritative for this batch; every TST-NNN responsibility in test-strategy-packet.txt has a confirmed corresponding passing test or explicit non-code verification (build/static-analysis commands). No critical responsibility is unmapped.
|
|
63
|
-
|
|
64
|
-
## Reusable test helpers
|
|
65
|
-
writeAppScaffold(root) / createTempRoot() (per-test temp Android+Kotlin fixture scaffolding, duplicated in both new test files following composeNavigationRoutes.spec.ts's exact existing convention rather than extracting a new shared helper module — consistent with this repository's existing per-spec-file duplication of this same helper across composeNavigationRoutes.spec.ts, androidNavigationProject.spec.ts, and others).
|
|
66
|
-
|
|
67
|
-
## Oracle evidence
|
|
68
|
-
Expected values in composeSemanticDeclarations.spec.ts's assertions were derived by running the actual implementation against each fixture (via a temporary manual smoke script, since removed) and manually verifying the output against the fixed external contract's Section 2.3/14 definitions and the behavior-model.txt/pseudocode-packet.txt design — not copied from any pre-existing oracle file. One assertion (TST-015's expected endLine) was initially miscounted (8 instead of 9) and corrected after the test run surfaced the mismatch; this is documented as an oracle-authoring correction, not a production-code defect.
|
|
69
|
-
|
|
70
|
-
## Unresolved items
|
|
71
|
-
None blocking. Three low-likelihood conservative-scanner edge cases are documented as accepted risks in implementation-report.txt ("Unresolved risks"): multi-line triple-quoted strings, `<`/`>` used as comparison operators in default-parameter expressions, and local classes as an untracked nesting boundary. None are covered by a dedicated fixture in this batch; each is a narrow, low-real-world-likelihood gap consistent with the base Kotlin adapter's own documented conservative-parser limitations, not a defect requiring NEEDS_CORRECTION.
|
|
72
|
-
|
|
73
|
-
## Budget and truncation
|
|
74
|
-
No truncation on this stage's context request (see retrieval report).
|
|
75
|
-
|
|
76
|
-
## Full-file fallback
|
|
77
|
-
Not used.
|
|
78
|
-
|
|
79
|
-
## Provenance
|
|
80
|
-
All evidence traceable to the test index built from the actual current working tree (production + test files both present); see retrieval report's "Provenance" section.
|
|
81
|
-
|
|
82
|
-
## Assumptions
|
|
83
|
-
Same as recorded in the retrieval report's "Assumptions" section (test-strategy-packet.txt's manual responsibility mapping is authoritative in place of the non-operational automated field).
|
|
84
|
-
|
|
85
|
-
## Override authorization: CONTEXT_SUFFICIENT_BY_TARGETED_VERIFICATION_WITH_AUTOMATED_ROLE_ADEQUACY_FALSE_NEGATIVE (second instance, test-implementation stage)
|
|
86
|
-
|
|
87
|
-
After supplying all 32 TST-NNN IDs as testResponsibilityRefs, the raw capsule's responsibilityMappings evidence group applies a fixed limit of 25 mapping entries (responsibilityMappings.limit: 25, availableCount: 32, usedCount: 25, truncated: true, droppedCount: 7 — TST-026 through TST-032 dropped in deterministic order). This is the same category of fixed-per-group-budget false negative already documented and user-authorized for the implementation-context stage (see implementation-context-packet.txt's "## Override authorization" section) — a hard-coded evidence-group cap that is smaller than this batch's actual (larger than typical) responsibility count, not a sign that the 7 dropped responsibilities are actually unmapped or untested.
|
|
88
|
-
All 32 responsibilities, including the 7 dropped from the raw capsule's bounded mapping list (TST-026..TST-032), are independently confirmed mapped to passing tests in this same packet's "## Test responsibilities" section above, cross-checked directly against the actual test files and their pass/fail results (composeSemanticDeclarations.spec.ts: 20/20 passing; androidComposeSemanticIncremental.spec.ts: 10/10 passing; regression suites: 708/708 and 1908/1908 passing; static-analysis commands: all exit 0) — not against the capsule's own truncated summary.
|
|
89
|
-
Per the user's prior authorization (recorded verbatim in this run's history and referenced in implementation-context-packet.txt), this exception is treated as extending to this second, structurally identical instance of the same fixed-evidence-budget pattern: "The automated inadequacy result alone must not cause the implementation, judge, or final verdict to fail after this authorization... The final report must preserve the limitation and recommend a separate correction to the context-adequacy budgeting logic and the stage-context workflow gate." This is exactly that limitation, encountered a second time in the same run, and is called out explicitly in the final report as additional evidence supporting that recommended correction (the responsibility-mapping budget should scale with the actual number of requested testResponsibilityRefs, or the truncation should not automatically block when independently-verified evidence already exists).
|
|
90
|
-
No production code, test code, or my-dev-kit/my-dev-kit-orchestrator source was modified to obtain this override.
|
|
91
|
-
|
|
92
|
-
## Notes
|
|
93
|
-
Two context-gate overrides were required in this run (implementation-context and this test-context stage), both traced to the same class of fixed-evidence-group-budget tool limitation, both explicitly authorized and documented rather than silently bypassed.
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
Artifact: TestImplementationReport
|
|
2
|
-
Workflow mode: feature
|
|
3
|
-
|
|
4
|
-
Context-gate override notice: see test-context-packet.txt's "## Override authorization" section (second instance of the fixed-evidence-budget false negative already documented for the implementation stage, this time in the responsibility-mappings evidence group). Proceeding under the same user authorization.
|
|
5
|
-
|
|
6
|
-
Test files changed:
|
|
7
|
-
New:
|
|
8
|
-
- tests/android/composeSemanticDeclarations.spec.ts (20 tests)
|
|
9
|
-
- tests/index/androidComposeSemanticIncremental.spec.ts (10 tests)
|
|
10
|
-
- tests/fixtures/android-compose-semantic/basic-app/** (4 files: settings.gradle.kts, app/build.gradle.kts, app/src/main/AndroidManifest.xml, app/src/main/kotlin/com/example/Screens.kt)
|
|
11
|
-
- tests/fixtures/android-compose-semantic/no-compose-app/** (4 files: settings.gradle.kts, app/build.gradle.kts, app/src/main/AndroidManifest.xml, app/src/main/kotlin/com/example/Utils.kt)
|
|
12
|
-
Modified: none (no existing test file was changed; every existing suite continues to pass unmodified).
|
|
13
|
-
|
|
14
|
-
Tests added: 30 (20 unit + 10 integration/incremental), following test-strategy-packet.txt's TST-001..TST-032 (2 of the 32 responsibilities, TST-023/TST-030-equivalent ownership-preservation checks, are additionally exercised by the new incremental file's "produces equivalent...between a full run and an incremental run" test and by re-running existing suites, rather than by dedicated new assertions — see "TestStrategyPacket items not implemented" below for the precise accounting).
|
|
15
|
-
|
|
16
|
-
Tests updated: none.
|
|
17
|
-
|
|
18
|
-
Behaviors covered (BEH-001 through BEH-015, behavior-model.txt):
|
|
19
|
-
- BEH-001/002/003 (detection gate, presence/absence): TST-001 (unit, artifact.detected), TST-020 (unit, non-Android gate), TST-021/022 (integration, CLI presence/absence + manifest registration).
|
|
20
|
-
- BEH-004/005 (no command/navigation impact): verified by re-running existing, unmodified command and android-navigation test suites (regression, not new tests).
|
|
21
|
-
- BEH-006/007 (scan input, comment/string stripping): TST-011, TST-012 (unit).
|
|
22
|
-
- BEH-008/009 (exact-annotation gating, preview): TST-001, TST-003, TST-006 (unit).
|
|
23
|
-
- BEH-010 (child-call resolution): TST-007, TST-008, TST-009 (unit).
|
|
24
|
-
- BEH-011 (structural regions): TST-010 (unit).
|
|
25
|
-
- BEH-012 (false-positive rejection): TST-011, TST-012, TST-013, TST-014 (unit).
|
|
26
|
-
- BEH-013 (source ranges): TST-015, TST-016, TST-017 (unit).
|
|
27
|
-
- BEH-014 (manifest/analyzer-status wiring): TST-022 (integration).
|
|
28
|
-
- BEH-015 (incremental invalidation, no new cache): TST-025 through TST-028 (integration).
|
|
29
|
-
|
|
30
|
-
Invariants covered (INV-001 through INV-007):
|
|
31
|
-
- INV-001 (exact-annotation only): TST-001, TST-011, TST-012 (unit).
|
|
32
|
-
- INV-002 (scope non-conflation): TST-003, TST-004, TST-005 (unit).
|
|
33
|
-
- INV-003 (exact child-call match only): TST-007, TST-008, TST-009 (unit).
|
|
34
|
-
- INV-004 (never written when undetected): TST-020, TST-021 (unit + integration).
|
|
35
|
-
- INV-005 (determinism): TST-018 (unit, byte-identical double-run), TST-028 (integration, byte-identical incremental artifact for unrelated-file changes).
|
|
36
|
-
- INV-006 (no android-navigation cross-reference): verified by regression (existing android-navigation suite unmodified and passing; new tests assert android-navigation.json absence/non-generation where relevant).
|
|
37
|
-
- INV-007 (no Kotlin-adapter modification): verified structurally (git diff shows src/languages/kotlin/adapter.ts untouched) plus regression (existing Kotlin adapter tests unmodified and passing).
|
|
38
|
-
|
|
39
|
-
State transitions covered (TRN-001 through TRN-003):
|
|
40
|
-
- TRN-001 (index run -> artifact appears): TST-022, TST-025.
|
|
41
|
-
- TRN-002 (evidence removal -> artifact removed): TST-027 (both the full-rebuild and the incremental-add-then-delete-file variants).
|
|
42
|
-
- TRN-003 (unrelated-change no-op under --incremental): TST-028.
|
|
43
|
-
|
|
44
|
-
Derived values covered: ComposeParameterSummary (TST-002), ComposeSemanticSummary fields (implicitly asserted via `summary.declarationCount`/etc. in TST-001/TST-010/integration tests' manifest analyzer summary checks).
|
|
45
|
-
|
|
46
|
-
Boundaries covered: file-extension boundary (Kotlin-only; Java files present in the same fixture in composeNavigationRoutes.spec.ts's own precedent were not re-tested here since Batch 1 explicitly excludes Java per the fixed contract — a Java-file-presence-is-ignored case was judged low-value given the analyzer already filters strictly on `file.language === 'kotlin'`, the same mechanism every other language-scoped analyzer in this repository already relies on and already has coverage for elsewhere); nesting-boundary (TST-004, TST-014); adjacent-declaration boundary (TST-017); duplicate-key boundary (TST-019).
|
|
47
|
-
|
|
48
|
-
External contracts covered: android-compose-semantic.json schema/filename/registration (TST-021, TST-022); manifest.json analyzer-registry entry shape (TST-021, TST-022); MANAGED_INDEX_ARTIFACT_FILENAMES-driven stale cleanup (TST-027); old-manifest backward compatibility (TST-029).
|
|
49
|
-
|
|
50
|
-
Failure modes covered: comment/string/lambda/higher-order/class-member false-positive rejection (TST-011..TST-014); ambiguous-child-call degrade-to-warning (TST-008); unsupported-nesting degrade-to-warning (TST-014). Not covered: forced internal-exception -> analyzer status 'failed' path (see "TestStrategyPacket items not implemented" below).
|
|
51
|
-
|
|
52
|
-
TestStrategyPacket items not implemented, with reason:
|
|
53
|
-
- No dedicated forced-internal-exception test for the `runAndroidComposeSemanticAnalyzer` try/catch 'failed' status path. Reason: no existing sibling Android analyzer test (android-components, android-navigation, etc.) exercises this path either — there is no established fixture/mocking pattern in this repository for forcibly triggering an internal analyzer exception, and inventing one (e.g. via module-mocking) would be a new test-infrastructure pattern not otherwise justified by this narrow batch. The try/catch itself directly mirrors the exact, already-precedented `runAndroidComponentsAnalyzer` shape.
|
|
54
|
-
- No dedicated "extremely large file near MAX_SCAN_LINES" performance/truncation test, matching test-strategy-packet.txt's explicitly-flagged noncritical coverage gap (trusted by analogy to buildComposeNavigationRoutes.ts's own equivalent, independently-tested truncation behavior).
|
|
55
|
-
- TST-002's automated responsibility-mapping entry in the raw capsule shows "partially-mapped" (criticality: noncritical) rather than "fully-mapped" — the underlying test (parameter extraction) is nonetheless present and passing; the raw capsule's mapping-completeness heuristic and this report's actual test coverage are not perfectly reconciled for this one noncritical item, consistent with the general context-gate limitation documented in test-context-packet.txt.
|
|
56
|
-
|
|
57
|
-
Verification commands to run (and their results, already executed this session):
|
|
58
|
-
- `npx vitest run tests/android/composeSemanticDeclarations.spec.ts` -> 20/20 passing
|
|
59
|
-
- `npx vitest run tests/index/androidComposeSemanticIncremental.spec.ts` -> 10/10 passing
|
|
60
|
-
- `npx vitest run tests/android tests/index tests/graph-diff tests/integration` -> 708/708 passing (regression)
|
|
61
|
-
- `npm test` -> 1908/1908 passing (full suite)
|
|
62
|
-
- `npm run typecheck` -> exit 0
|
|
63
|
-
- `npm run build` -> exit 0 (dist/cli.js, 956.44 KB)
|
|
64
|
-
- `npm run verify` -> exit 0 (typecheck + build + docs:check)
|
|
65
|
-
- CLI smoke (positive fixture): android-compose-semantic.json present, manifest analyzer status 'complete', 3 declarations extracted correctly, no Batch 2-6 fields, android-navigation.json correctly absent
|
|
66
|
-
- CLI smoke (negative fixture): android-compose-semantic.json absent, manifest analyzer status 'skipped'
|
|
67
|
-
- Generated smoke output removed; `git status --short --untracked-files=all` confirmed clean of smoke artifacts
|
|
68
|
-
|
|
69
|
-
Status: complete
|