declapract-typescript-ehmpathy 0.49.14 → 0.50.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.
Files changed (440) hide show
  1. package/dist/.test/assets/cicd-common/declarations/declapract.declare.yml +8 -0
  2. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/.declapract.integration.test.ts +597 -0
  3. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/.test/assets/repo-with-unpinned-workflow/.github/workflows/.test.yml +19 -0
  4. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/.test/assets/repo-with-unpinned-workflow/.github/workflows/consumer-owned.yml +21 -0
  5. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/.test/assets/repo-with-unpinned-workflow/.github/workflows/review.yml +26 -0
  6. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/.test/assets/repo-with-unpinned-workflow/declapract.use.yml +6 -0
  7. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/.test/assets/repo-with-unpinned-workflow/package.json +4 -0
  8. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/__snapshots__/.declapract.integration.test.ts.snap +604 -0
  9. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/__snapshots__/declastruct-insync-grep.declapract.integration.test.ts.snap +3 -0
  10. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/__snapshots__/report-slow-tests.play.declapract.integration.test.ts.snap +28 -0
  11. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/bad-practices/has-changelog-file/changelog.md.declapract.ts +11 -0
  12. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/bad-practices/old-names/.github/workflows/ci-on-commit.yml.declapract.ts +3 -0
  13. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/bad-practices/old-names/.github/workflows/ci_on_commit.yml.declapract.ts +3 -0
  14. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/bad-practices/old-names/.github/workflows/pr-release-on-main.yml.declapract.ts +3 -0
  15. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/bad-practices/old-names/.github/workflows/test-on-commit.yml.declapract.ts +3 -0
  16. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/bad-practices/old-names/.github/workflows/test_on_commit.yml.declapract.ts +3 -0
  17. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/bad-practices/old-use-apikeys/.agent/repo=.this/role=any/skills/use.apikeys.json.declapract.ts +7 -0
  18. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/bad-practices/old-use-apikeys/.agent/repo=.this/role=any/skills/use.apikeys.sh.declapract.ts +7 -0
  19. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.declapract.readme.md +8 -0
  20. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/actions/please-release/action.yml +469 -0
  21. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/actions/test-shards-setup/action.yml +68 -0
  22. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/workflows/.declastruct.yml +218 -0
  23. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/workflows/.install.yml +56 -0
  24. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/workflows/.test.yml +434 -0
  25. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/workflows/.test.yml.declapract.ts +26 -0
  26. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/workflows/release.yml +32 -0
  27. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/workflows/report-slow-tests.sh +65 -0
  28. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/workflows/review.yml +26 -0
  29. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/workflows/test.yml +25 -0
  30. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/best-practice/.github/workflows/test.yml.declapract.ts +15 -0
  31. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/declastruct-insync-grep.declapract.integration.test.ts +49 -0
  32. package/dist/.test/assets/cicd-common/declarations/practices/cicd-common/report-slow-tests.play.declapract.integration.test.ts +161 -0
  33. package/dist/.test/assets/cicd-common/declarations/useCases.yml +11 -0
  34. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/.test/assets/repo-with-hand-patch/declapract.use.yml +4 -0
  35. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/.test/assets/repo-with-hand-patch/package.json +17 -0
  36. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/.test/assets/repo-with-hand-patch/patches/left-pad@1.3.0.patch +6 -0
  37. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/.test/assets/repo-with-hand-patch/patches/pg-pool@3.14.0.patch +12 -0
  38. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/__snapshots__/pg-pool-patch.declapract.integration.test.ts.snap +147 -0
  39. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/.declapract.readme.md +29 -0
  40. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/.gitattributes.declapract.ts +64 -0
  41. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/package.json +5 -0
  42. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/best-practice/patches/pg-pool.patch +21 -0
  43. package/dist/.test/assets/cicd-service/declarations/practices/persist-with-rds/pg-pool-patch.declapract.integration.test.ts +884 -0
  44. package/dist/.test/assets/expo-fullusecase/declarations/practices/cicd-common/.declapract.integration.test.ts +15 -21
  45. package/dist/.test/assets/expo-fullusecase/declarations/practices/git/.declapract.integration.test.ts +2 -2
  46. package/dist/.test/assets/expo-fullusecase/declarations/practices/git/.gitattributes.declapract.integration.test.ts +34 -19
  47. package/dist/.test/assets/expo-fullusecase/declarations/practices/git/.test/assets/repo-with-legacy-gitattributes/declapract.use.yml +3 -3
  48. package/dist/.test/assets/expo-fullusecase/declarations/practices/git/__snapshots__/.gitattributes.declapract.integration.test.ts.snap +4 -4
  49. package/dist/.test/assets/expo-fullusecase/declarations/practices/git/best-practice/.declapract.readme.md +37 -0
  50. package/dist/.test/assets/expo-fullusecase/declarations/practices/git/best-practice/.gitattributes.declapract.ts +42 -63
  51. package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/declapract.use.yml +4 -0
  52. package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/package.json +15 -0
  53. package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/rhachet-roles-ehmpathy.patch +6 -0
  54. package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/rhachet-roles-ehmpathy@1.39.1.patch +6 -0
  55. package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/type-fns@1.21.3.patch +6 -0
  56. package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/pnpm-lock.yaml +19 -0
  57. package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/__snapshots__/stale-patched-dependency.declapract.integration.test.ts.snap +39 -0
  58. package/dist/.test/assets/expo-fullusecase/declarations/practices/pnpm/stale-patched-dependency.declapract.integration.test.ts +53 -0
  59. package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/best-practice/.declapract.readme.md +8 -0
  60. package/dist/.test/assets/expo-fullusecase/declarations/practices/rhachet/best-practice/.gitattributes.declapract.ts +65 -0
  61. package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-any/best-practice/.declapract.readme.md +7 -0
  62. package/dist/.test/assets/expo-fullusecase/declarations/practices/tests-any/best-practice/.gitattributes.declapract.ts +60 -0
  63. package/dist/.test/assets/expo-migration/declarations/practices/git/.declapract.integration.test.ts +2 -2
  64. package/dist/.test/assets/expo-migration/declarations/practices/git/.gitattributes.declapract.integration.test.ts +34 -19
  65. package/dist/.test/assets/expo-migration/declarations/practices/git/.test/assets/repo-with-legacy-gitattributes/declapract.use.yml +3 -3
  66. package/dist/.test/assets/expo-migration/declarations/practices/git/__snapshots__/.gitattributes.declapract.integration.test.ts.snap +4 -4
  67. package/dist/.test/assets/expo-migration/declarations/practices/git/best-practice/.declapract.readme.md +37 -0
  68. package/dist/.test/assets/expo-migration/declarations/practices/git/best-practice/.gitattributes.declapract.ts +42 -63
  69. package/dist/.test/assets/expo-migration/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/declapract.use.yml +4 -0
  70. package/dist/.test/assets/expo-migration/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/package.json +15 -0
  71. package/dist/.test/assets/expo-migration/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/rhachet-roles-ehmpathy.patch +6 -0
  72. package/dist/.test/assets/expo-migration/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/rhachet-roles-ehmpathy@1.39.1.patch +6 -0
  73. package/dist/.test/assets/expo-migration/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/type-fns@1.21.3.patch +6 -0
  74. package/dist/.test/assets/expo-migration/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/pnpm-lock.yaml +19 -0
  75. package/dist/.test/assets/expo-migration/declarations/practices/pnpm/__snapshots__/stale-patched-dependency.declapract.integration.test.ts.snap +39 -0
  76. package/dist/.test/assets/expo-migration/declarations/practices/pnpm/stale-patched-dependency.declapract.integration.test.ts +53 -0
  77. package/dist/.test/assets/expo-migration/declarations/practices/rhachet/best-practice/.declapract.readme.md +8 -0
  78. package/dist/.test/assets/expo-migration/declarations/practices/rhachet/best-practice/.gitattributes.declapract.ts +65 -0
  79. package/dist/.test/assets/expo-migration/declarations/practices/tests-any/best-practice/.declapract.readme.md +7 -0
  80. package/dist/.test/assets/expo-migration/declarations/practices/tests-any/best-practice/.gitattributes.declapract.ts +60 -0
  81. package/dist/.test/assets/expo-toolchain/declarations/practices/tests-any/best-practice/.declapract.readme.md +7 -0
  82. package/dist/.test/assets/expo-toolchain/declarations/practices/tests-any/best-practice/.gitattributes.declapract.ts +60 -0
  83. package/dist/.test/assets/git/declarations/declapract.declare.yml +8 -0
  84. package/dist/.test/assets/git/declarations/practices/git/.declapract.integration.test.ts +1001 -0
  85. package/dist/.test/assets/git/declarations/practices/git/.gitattributes.declapract.integration.test.ts +120 -0
  86. package/dist/.test/assets/git/declarations/practices/git/.test/assets/repo-with-legacy-gitattributes/.gitattributes +6 -0
  87. package/dist/.test/assets/git/declarations/practices/git/.test/assets/repo-with-legacy-gitattributes/declapract.use.yml +7 -0
  88. package/dist/.test/assets/git/declarations/practices/git/.test/assets/repo-with-legacy-gitattributes/package.json +4 -0
  89. package/dist/.test/assets/git/declarations/practices/git/.test/assets/repo-with-rhachet-only/declapract.use.yml +6 -0
  90. package/dist/.test/assets/git/declarations/practices/git/.test/assets/repo-with-rhachet-only/package.json +4 -0
  91. package/dist/.test/assets/git/declarations/practices/git/.test/assets/repo-without-cache-ignores/declapract.use.yml +9 -0
  92. package/dist/.test/assets/git/declarations/practices/git/.test/assets/repo-without-cache-ignores/package.json +4 -0
  93. package/dist/.test/assets/git/declarations/practices/git/__snapshots__/.declapract.integration.test.ts.snap +55 -0
  94. package/dist/.test/assets/git/declarations/practices/git/__snapshots__/.gitattributes.declapract.integration.test.ts.snap +24 -0
  95. package/dist/.test/assets/git/declarations/practices/git/best-practice/.declapract.readme.md +60 -0
  96. package/dist/.test/assets/git/declarations/practices/git/best-practice/.gitattributes.declapract.ts +77 -0
  97. package/dist/.test/assets/git/declarations/practices/git/best-practice/.gitignore.declapract.ts +100 -0
  98. package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/.declapract.integration.test.ts +181 -0
  99. package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/.test/assets/demo-repo-with-dynamodb/declapract.declare.yml +4 -0
  100. package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/.test/assets/demo-repo-with-dynamodb/declapract.use.yml +11 -0
  101. package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/.test/assets/demo-repo-with-dynamodb/package.json +1 -0
  102. package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/.test/assets/demo-repo-with-dynamodb/useCases.yml +8 -0
  103. package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/__snapshots__/.declapract.integration.test.ts.snap +234 -0
  104. package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/best-practice/.gitattributes.declapract.ts +56 -0
  105. package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/best-practice/codegen.dynamodb.dao.ts +16 -0
  106. package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/best-practice/package.json +16 -0
  107. package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/best-practice/package.json.declapract.ts +3 -0
  108. package/dist/.test/assets/git/declarations/practices/persist-with-dynamodb/best-practice/provision/docker/integration-test-db/docker-compose.yml +9 -0
  109. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.declapract.integration.test.ts +237 -0
  110. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.extensions.sql.declapract.integration.test.ts +159 -0
  111. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-config-schema/declapract.use.yml +20 -0
  112. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-config-schema/declarations/declapract.declare.yml +6 -0
  113. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-config-schema/package.json +4 -0
  114. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-on-a-prior-major/codegen.sql.dao.yml +20 -0
  115. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-on-a-prior-major/declapract.declare.yml +4 -0
  116. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-on-a-prior-major/declapract.use.yml +19 -0
  117. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-on-a-prior-major/package.json +4 -0
  118. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-on-a-prior-major/provision/docker/testdb/build-image.dockerfile +6 -0
  119. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-with-custom-extensions/declapract.declare.yml +4 -0
  120. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-with-custom-extensions/declapract.use.yml +21 -0
  121. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-with-custom-extensions/package.json +4 -0
  122. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-with-custom-extensions/provision/schema/sql/init/.extensions.sql +9 -0
  123. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-with-dev-config/config/dev.json +18 -0
  124. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-with-dev-config/declapract.declare.yml +4 -0
  125. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-with-dev-config/declapract.use.yml +18 -0
  126. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/demo-repo-with-dev-config/package.json +4 -0
  127. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/repo-with-hand-patch/declapract.use.yml +4 -0
  128. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/repo-with-hand-patch/package.json +17 -0
  129. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/repo-with-hand-patch/patches/left-pad@1.3.0.patch +6 -0
  130. package/dist/.test/assets/git/declarations/practices/persist-with-rds/.test/assets/repo-with-hand-patch/patches/pg-pool@3.14.0.patch +12 -0
  131. package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/.declapract.integration.test.ts.snap +45 -0
  132. package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/.extensions.sql.declapract.integration.test.ts.snap +77 -0
  133. package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/config-validates-schema.declapract.integration.test.ts.snap +500 -0
  134. package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/database-wrappers-typecheck.declapract.integration.test.ts.snap +10 -0
  135. package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/deploy-database-gerunds.declapract.integration.test.ts.snap +102 -0
  136. package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/engine-upgrade.declapract.integration.test.ts.snap +151 -0
  137. package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/pg-pool-patch.declapract.integration.test.ts.snap +147 -0
  138. package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/provision-testdb-access.declapract.integration.test.ts.snap +3 -0
  139. package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/ssm-param-names.declapract.integration.test.ts.snap +9 -0
  140. package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/testdb-preflight-failloud.declapract.integration.test.ts.snap +30 -0
  141. package/dist/.test/assets/git/declarations/practices/persist-with-rds/__snapshots__/with-connection-in-input.declapract.integration.test.ts.snap +57 -0
  142. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/legacy-change-id/.declapract.integration.test.ts +71 -0
  143. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/legacy-change-id/.declapract.readme.md +6 -0
  144. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/legacy-change-id/.test/assets/demo-repo-with-legacy-change-id/declapract.declare.yml +4 -0
  145. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/legacy-change-id/.test/assets/demo-repo-with-legacy-change-id/declapract.use.yml +19 -0
  146. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/legacy-change-id/.test/assets/demo-repo-with-legacy-change-id/package.json +4 -0
  147. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/legacy-change-id/.test/assets/demo-repo-with-legacy-change-id/provision/schema/sql/init.yml +15 -0
  148. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/legacy-change-id/__snapshots__/.declapract.integration.test.ts.snap +39 -0
  149. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/legacy-change-id/provision/schema/<star><star>/<star>.yml.declapract.ts +68 -0
  150. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/.declapract.readme.md +5 -0
  151. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/database.sql.declapract.ts +3 -0
  152. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/extensions.sql.declapract.ts +13 -0
  153. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/schema.sql.declapract.ts +3 -0
  154. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/user.cicd.sql.declapract.ts +3 -0
  155. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/non-prefixed-manual-init-sqls/provision/schema/sql/init/user.datalakedb.sql.declapract.ts +3 -0
  156. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-config-file-names/codegen.sql.yml.declapract.ts +3 -0
  157. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-dev-config-location/config/dev.json.declapract.ts +23 -0
  158. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.declapract.integration.test.ts +221 -0
  159. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.declapract.readme.md +11 -0
  160. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/demo-repo-with-old-get-database-connection/declapract.declare.yml +4 -0
  161. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/demo-repo-with-old-get-database-connection/declapract.use.yml +19 -0
  162. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/demo-repo-with-old-get-database-connection/package.json +4 -0
  163. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/demo-repo-with-old-get-database-connection/src/access/daos/daoSurfer.ts +15 -0
  164. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/demo-repo-with-old-get-database-connection/src/domain.operations/getSurfLesson.ts +14 -0
  165. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/demo-repo-with-old-get-database-connection/src/utils/database/getDatabaseConnection.integration.test.ts +10 -0
  166. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/demo-repo-with-old-get-database-connection/src/utils/database/getDatabaseConnection.ts +68 -0
  167. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.3a193e5.ts +65 -0
  168. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.66284e3.ts +30 -0
  169. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.68cf8ba.ts +90 -0
  170. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.9e1bdc4.ts +65 -0
  171. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.c6cef7e.ts +68 -0
  172. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.c8eb35b.ts +90 -0
  173. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.d1e8cd7.ts +31 -0
  174. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.e0c53d8.ts +90 -0
  175. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.eab15c0.ts +89 -0
  176. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.ef25ae0.ts +32 -0
  177. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/.test/assets/old-templates/getDatabaseConnection.integration.test.66284e3.ts +10 -0
  178. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/__snapshots__/.declapract.integration.test.ts.snap +75 -0
  179. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/src/<star><star>/<star>.ts.declapract.ts +33 -0
  180. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/src/utils/database/getDatabaseConnection.integration.test.ts.declapract.ts +43 -0
  181. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-get-database-connection/src/utils/database/getDatabaseConnection.ts.declapract.ts +51 -0
  182. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-integration-test-db-dir/.declapract.readme.md +1 -0
  183. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-integration-test-db-dir/provision/docker/integration_test_db/<star><star>/<star>.declapract.ts +15 -0
  184. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-integration-test-db-hyphen-dir/.declapract.readme.md +1 -0
  185. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-integration-test-db-hyphen-dir/provision/docker/integration-test-db/<star><star>/<star>.declapract.ts +15 -0
  186. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-integration-test-db-paths/.declapract.readme.md +1 -0
  187. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-integration-test-db-paths/package.json +8 -0
  188. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-integration-test-db-paths/package.json.declapract.ts +10 -0
  189. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-packagejson-script-names/package.json +9 -0
  190. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-packagejson-script-names/package.json.declapract.ts +22 -0
  191. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/old-param-placeholder/config/<star>.json.declapract.ts +14 -0
  192. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/pg-client-without-ssl/.declapract.integration.test.ts +86 -0
  193. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/pg-client-without-ssl/.declapract.readme.md +9 -0
  194. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/pg-client-without-ssl/.test/assets/demo-repo-with-plaintext-pg-client/declapract.declare.yml +4 -0
  195. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/pg-client-without-ssl/.test/assets/demo-repo-with-plaintext-pg-client/declapract.use.yml +19 -0
  196. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/pg-client-without-ssl/.test/assets/demo-repo-with-plaintext-pg-client/package.json +4 -0
  197. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/pg-client-without-ssl/.test/assets/demo-repo-with-plaintext-pg-client/src/access/sdks/sdkWaveArchive.ts +7 -0
  198. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/pg-client-without-ssl/.test/assets/demo-repo-with-plaintext-pg-client/src/utils/database/getSurfReportConnection.ts +19 -0
  199. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/pg-client-without-ssl/__snapshots__/.declapract.integration.test.ts.snap +72 -0
  200. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/pg-client-without-ssl/src/<star><star>/<star>.ts.declapract.ts +32 -0
  201. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/schema-entities-dir/.declapract.readme.md +1 -0
  202. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/schema-entities-dir/provision/schema/entities/<star>.ts.declapract.ts +12 -0
  203. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/schema-entities-dir/provision/schema/sql/entities.yml.declapract.ts +13 -0
  204. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/terraform-parameters/.declapract.integration.test.ts +95 -0
  205. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/terraform-parameters/.test/assets/demo-repo-with-terraform-ssm/declapract.declare.yml +4 -0
  206. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/terraform-parameters/.test/assets/demo-repo-with-terraform-ssm/declapract.use.yml +18 -0
  207. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/terraform-parameters/.test/assets/demo-repo-with-terraform-ssm/package.json +4 -0
  208. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/terraform-parameters/.test/assets/demo-repo-with-terraform-ssm/provision/aws/product/parameter-store.tf +32 -0
  209. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/terraform-parameters/__snapshots__/.declapract.integration.test.ts.snap +60 -0
  210. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/terraform-parameters/provision/aws/product/parameter-store.tf.declapract.ts +94 -0
  211. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/with-connection-in-input/.declapract.readme.md +10 -0
  212. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/with-connection-in-input/.test/assets/demo-repo-with-connection-in-input/declapract.use.yml +2 -0
  213. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/with-connection-in-input/.test/assets/demo-repo-with-connection-in-input/package.json +4 -0
  214. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/with-connection-in-input/.test/assets/demo-repo-with-connection-in-input/src/domain.operations/findSurferById.ts +9 -0
  215. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/with-connection-in-input/.test/assets/demo-repo-with-connection-in-input/src/utils/database/withDatabaseConnection.ts +10 -0
  216. package/dist/.test/assets/git/declarations/practices/persist-with-rds/bad-practices/with-connection-in-input/src/<star><star>/<star>.ts.declapract.ts +55 -0
  217. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/.declapract.readme.md +114 -0
  218. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/.gitattributes.declapract.ts +64 -0
  219. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/codegen.sql.dao.yml +18 -0
  220. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/codegen.sql.dao.yml.declapract.ts +35 -0
  221. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/codegen.sql.schema.yml +6 -0
  222. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/codegen.sql.types.yml +16 -0
  223. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/config/prep.json +40 -0
  224. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/config/prep.json.declapract.ts +11 -0
  225. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/config/prod.json +40 -0
  226. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/config/prod.json.declapract.ts +11 -0
  227. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/config/test.json +37 -0
  228. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/config/test.json.declapract.ts +11 -0
  229. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/package.json +36 -0
  230. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/package.json.declapract.ts +3 -0
  231. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/patches/pg-pool.patch +21 -0
  232. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/aws/readme.md +113 -0
  233. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/aws/resources.parameters.ts +60 -0
  234. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/aws/resources.ts +30 -0
  235. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/build-image.dockerfile +7 -0
  236. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/build-image.dockerfile.declapract.ts +37 -0
  237. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/check-engine-skew.integration.test.ts +115 -0
  238. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/check-engine-skew.sh +165 -0
  239. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/compose.sh +43 -0
  240. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/docker-compose.yml +19 -0
  241. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/init/.gitignore +3 -0
  242. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/init/readme.md +3 -0
  243. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/docker/testdb/wait-for-postgres.sh +25 -0
  244. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/connection.config.js +36 -0
  245. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/control.yml +7 -0
  246. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/deploy.database.sh +97 -0
  247. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/.database.sql +10 -0
  248. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/.extensions.sql +16 -0
  249. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/.extensions.sql.declapract.ts +46 -0
  250. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/.schema.sql +11 -0
  251. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/.user.cicd.sql +14 -0
  252. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/.user.datalakedb.sql +12 -0
  253. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/default_transaction_isolation.sql +6 -0
  254. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init/user.service.sql +16 -0
  255. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init.yml +9 -0
  256. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/provision/schema/sql/init.yml.declapract.ts +3 -0
  257. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/.test/assets/database/getTestdbIdentity.ts +52 -0
  258. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/.test/assets/database/getTestdbPort.ts +17 -0
  259. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/config/config.schema.ts +77 -0
  260. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/database/asDatabaseClientSsl.test.ts +82 -0
  261. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/database/asDatabaseClientSsl.ts +52 -0
  262. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/database/databaseClientTimeouts.ts +14 -0
  263. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/database/getOneDatabaseConnection.integration.test.ts +10 -0
  264. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/database/getOneDatabaseConnection.ts +119 -0
  265. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/database/getOneDatabasePort.ts +30 -0
  266. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/database/rdsCaBundleUsEast1.test.ts +51 -0
  267. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/database/rdsCaBundleUsEast1.ts +86 -0
  268. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/database/withDatabaseContext.ts +54 -0
  269. package/dist/.test/assets/git/declarations/practices/persist-with-rds/best-practice/src/utils/database/withDatabaseTransaction.ts +35 -0
  270. package/dist/.test/assets/git/declarations/practices/persist-with-rds/config-validates-schema.declapract.integration.test.ts +332 -0
  271. package/dist/.test/assets/git/declarations/practices/persist-with-rds/database-client.declapract.integration.test.ts +291 -0
  272. package/dist/.test/assets/git/declarations/practices/persist-with-rds/database-wrappers-typecheck.declapract.integration.test.ts +225 -0
  273. package/dist/.test/assets/git/declarations/practices/persist-with-rds/deploy-database-gerunds.declapract.integration.test.ts +57 -0
  274. package/dist/.test/assets/git/declarations/practices/persist-with-rds/empty-template-declares-zero-clusters.declapract.integration.test.ts +71 -0
  275. package/dist/.test/assets/git/declarations/practices/persist-with-rds/engine-upgrade.declapract.integration.test.ts +243 -0
  276. package/dist/.test/assets/git/declarations/practices/persist-with-rds/pg-pool-patch.declapract.integration.test.ts +884 -0
  277. package/dist/.test/assets/git/declarations/practices/persist-with-rds/provision-testdb-access.declapract.integration.test.ts +50 -0
  278. package/dist/.test/assets/git/declarations/practices/persist-with-rds/ssm-param-names.declapract.integration.test.ts +154 -0
  279. package/dist/.test/assets/git/declarations/practices/persist-with-rds/testdb-per-worktree.declapract.integration.test.ts +332 -0
  280. package/dist/.test/assets/git/declarations/practices/persist-with-rds/testdb-preflight-failloud.declapract.integration.test.ts +83 -0
  281. package/dist/.test/assets/git/declarations/practices/persist-with-rds/with-connection-in-input.declapract.integration.test.ts +97 -0
  282. package/dist/.test/assets/git/declarations/practices/rhachet/.declapract.integration.test.ts +98 -0
  283. package/dist/.test/assets/git/declarations/practices/rhachet/.test/assets/demo-repo-with-consumer-boot/.agent/repo=.this/role=any/boot.yml +9 -0
  284. package/dist/.test/assets/git/declarations/practices/rhachet/.test/assets/demo-repo-with-consumer-boot/declapract.declare.yml +4 -0
  285. package/dist/.test/assets/git/declarations/practices/rhachet/.test/assets/demo-repo-with-consumer-boot/declapract.use.yml +2 -0
  286. package/dist/.test/assets/git/declarations/practices/rhachet/.test/assets/demo-repo-with-consumer-boot/package.json +4 -0
  287. package/dist/.test/assets/git/declarations/practices/rhachet/.test/assets/repo-keyrack-extant/.agent/keyrack.yml +9 -0
  288. package/dist/.test/assets/git/declarations/practices/rhachet/.test/assets/repo-keyrack-extant/declapract.use.node.yml +4 -0
  289. package/dist/.test/assets/git/declarations/practices/rhachet/.test/assets/repo-keyrack-extant/declapract.use.yml +4 -0
  290. package/dist/.test/assets/git/declarations/practices/rhachet/.test/assets/repo-keyrack-extant/package.json +4 -0
  291. package/dist/.test/assets/git/declarations/practices/rhachet/.test/assets/repo-self-linked/declapract.use.yml +4 -0
  292. package/dist/.test/assets/git/declarations/practices/rhachet/.test/assets/repo-self-linked/package.json +22 -0
  293. package/dist/.test/assets/git/declarations/practices/rhachet/__snapshots__/.declapract.integration.test.ts.snap +46 -0
  294. package/dist/.test/assets/git/declarations/practices/rhachet/__snapshots__/boot-refs-glossary.declapract.integration.test.ts.snap +6 -0
  295. package/dist/.test/assets/git/declarations/practices/rhachet/__snapshots__/boot-yml-findsert.declapract.integration.test.ts.snap +33 -0
  296. package/dist/.test/assets/git/declarations/practices/rhachet/__snapshots__/keyrack-yml-findsert.declapract.integration.test.ts.snap +28 -0
  297. package/dist/.test/assets/git/declarations/practices/rhachet/__snapshots__/self-link-build-order.declapract.integration.test.ts.snap +81 -0
  298. package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/deprecated-use-file/.declapract.readme.md +11 -0
  299. package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/deprecated-use-file/rhachet.use.ts.declapract.ts +12 -0
  300. package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/prod-deps/.declapract.readme.md +59 -0
  301. package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/prod-deps/.test/assets/demo-repo-with-rhachet-prod-deps/declapract.declare.yml +4 -0
  302. package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/prod-deps/.test/assets/demo-repo-with-rhachet-prod-deps/declapract.use.yml +2 -0
  303. package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/prod-deps/.test/assets/demo-repo-with-rhachet-prod-deps/package.json +12 -0
  304. package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/prod-deps/package.json +5 -0
  305. package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/prod-deps/package.json.declapract.ts +88 -0
  306. package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/review-peer-artifacts/.behavior/<star><star>/.reviews/<star><star>/<star>peer-review<star>.md.declapract.ts +16 -0
  307. package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/review-peer-artifacts/.behavior/<star><star>/.reviews/peer/<star><star>/<star>.md.declapract.ts +16 -0
  308. package/dist/.test/assets/git/declarations/practices/rhachet/bad-practices/review-peer-artifacts/.declapract.readme.md +12 -0
  309. package/dist/.test/assets/git/declarations/practices/rhachet/best-practice/.agent/keyrack.yml.declapract.ts +143 -0
  310. package/dist/.test/assets/git/declarations/practices/rhachet/best-practice/.agent/repo=.this/role=any/boot.yml +22 -0
  311. package/dist/.test/assets/git/declarations/practices/rhachet/best-practice/.agent/repo=.this/role=any/boot.yml.declapract.ts +189 -0
  312. package/dist/.test/assets/git/declarations/practices/rhachet/best-practice/.declapract.readme.md +40 -0
  313. package/dist/.test/assets/git/declarations/practices/rhachet/best-practice/.gitattributes.declapract.ts +65 -0
  314. package/dist/.test/assets/git/declarations/practices/rhachet/best-practice/.gitignore.declapract.ts +94 -0
  315. package/dist/.test/assets/git/declarations/practices/rhachet/best-practice/package.json +19 -0
  316. package/dist/.test/assets/git/declarations/practices/rhachet/best-practice/package.json.declapract.ts +51 -0
  317. package/dist/.test/assets/git/declarations/practices/rhachet/boot-refs-glossary.declapract.integration.test.ts +91 -0
  318. package/dist/.test/assets/git/declarations/practices/rhachet/boot-yml-findsert.declapract.integration.test.ts +149 -0
  319. package/dist/.test/assets/git/declarations/practices/rhachet/keyrack-yml-findsert.declapract.integration.test.ts +105 -0
  320. package/dist/.test/assets/git/declarations/practices/rhachet/self-link-build-order.declapract.integration.test.ts +88 -0
  321. package/dist/.test/assets/git/declarations/practices/tests-any/.test/assets/repo-old-acceptance-utils/blackbox/lambdas/consumeSESEmailEventFromSNS.acceptance.test.ts +23 -0
  322. package/dist/.test/assets/git/declarations/practices/tests-any/.test/assets/repo-old-acceptance-utils/declapract.use.yml +9 -0
  323. package/dist/.test/assets/git/declarations/practices/tests-any/.test/assets/repo-old-acceptance-utils/package.json +4 -0
  324. package/dist/.test/assets/git/declarations/practices/tests-any/.test/assets/repo-old-acceptance-utils-2/blackbox/lambdas/addDecoratedImage.acceptance.test.ts +19 -0
  325. package/dist/.test/assets/git/declarations/practices/tests-any/.test/assets/repo-old-acceptance-utils-2/declapract.use.yml +9 -0
  326. package/dist/.test/assets/git/declarations/practices/tests-any/.test/assets/repo-old-acceptance-utils-2/package.json +4 -0
  327. package/dist/.test/assets/git/declarations/practices/tests-any/.test/assets/repo-old-acceptance-utils-3/blackbox/lambdas/addDecoratedImage.acceptance.test.ts +19 -0
  328. package/dist/.test/assets/git/declarations/practices/tests-any/.test/assets/repo-old-acceptance-utils-3/declapract.use.yml +9 -0
  329. package/dist/.test/assets/git/declarations/practices/tests-any/.test/assets/repo-old-acceptance-utils-3/package.json +4 -0
  330. package/dist/.test/assets/git/declarations/practices/tests-any/__snapshots__/changedsince-origin-main.declapract.integration.test.ts.snap +8 -0
  331. package/dist/.test/assets/git/declarations/practices/tests-any/__snapshots__/livedb-wake-branches.declapract.integration.test.ts.snap +6 -0
  332. package/dist/.test/assets/git/declarations/practices/tests-any/__snapshots__/old-acceptance-test-utils.declapract.integration.test.ts.snap +162 -0
  333. package/dist/.test/assets/git/declarations/practices/tests-any/__snapshots__/test-kind-seam.declapract.integration.test.ts.snap +9 -0
  334. package/dist/.test/assets/git/declarations/practices/tests-any/autoprune-hooks.declapract.integration.test.ts +111 -0
  335. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/dev-tool-in-dependencies/.declapract.integration.test.ts +69 -0
  336. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/dev-tool-in-dependencies/.declapract.readme.md +19 -0
  337. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/dev-tool-in-dependencies/.test/assets/demo-repo-with-stale-test-fns-dep/declapract.use.yml +3 -0
  338. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/dev-tool-in-dependencies/.test/assets/demo-repo-with-stale-test-fns-dep/package.json +11 -0
  339. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/dev-tool-in-dependencies/__snapshots__/.declapract.integration.test.ts.snap +43 -0
  340. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/dev-tool-in-dependencies/package.json.declapract.ts +81 -0
  341. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/javascript-config-files/.declapract.readme.md +1 -0
  342. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/javascript-config-files/jest.<star>.js.declapract.ts +17 -0
  343. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/mocks/.declapract.readme.md +8 -0
  344. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/mocks/<star><star>/__mock__/<star>.js +3 -0
  345. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/mocks/<star><star>/__mock__/<star>.ts +3 -0
  346. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-dir-location/.declapract.integration.test.ts +83 -0
  347. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-dir-location/.declapract.readme.md +22 -0
  348. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-dir-location/.test/assets/demo-repo-with-accept-blackbox-dir/accept.blackbox/.test/assets/.agent/config.yml +1 -0
  349. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-dir-location/.test/assets/demo-repo-with-accept-blackbox-dir/accept.blackbox/.test/assets/.rhachet/manifest.json +1 -0
  350. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-dir-location/.test/assets/demo-repo-with-accept-blackbox-dir/accept.blackbox/somefile.ts +1 -0
  351. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-dir-location/.test/assets/demo-repo-with-accept-blackbox-dir/declapract.use.yml +6 -0
  352. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-dir-location/.test/assets/demo-repo-with-accept-blackbox-dir/package.json +4 -0
  353. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-dir-location/accept.blackbox/<star><star>/<star>.declapract.ts +19 -0
  354. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-dir-location/acceptance/<star><star>/<star>.declapract.ts +19 -0
  355. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-import-paths/.declapract.readme.md +31 -0
  356. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-import-paths/<star><star>/<star>.ts.declapract.ts +25 -0
  357. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-test-utils/blackbox/_utils/getDataFromLastOpenBracketAtStartOfLine.ts.declapract.ts +3 -0
  358. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-test-utils/blackbox/_utils/invokeLambda.ts.declapract.ts +3 -0
  359. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-test-utils/blackbox/lambdas/<star>.ts.declapract.ts +49 -0
  360. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-test-utils-2/blackbox/lambdas/<star>.ts.declapract.ts +27 -0
  361. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-test-utils-3/blackbox/_utils/environment.ts.declapract.ts +3 -0
  362. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-acceptance-test-utils-3/blackbox/lambdas/<star>.ts.declapract.ts +23 -0
  363. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-extension-pattern/.declapract.readme.md +3 -0
  364. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-extension-pattern/<star><star>/<star>.test.acceptance.ts.declapract.ts +11 -0
  365. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-extension-pattern/<star><star>/<star>.test.integration.ts.declapract.ts +11 -0
  366. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-test-utils-and-assets-location/.declapract.readme.md +8 -0
  367. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-test-utils-and-assets-location/<star><star>/<star>.ts.declapract.ts +27 -0
  368. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-test-utils-and-assets-location/<star><star>/__test_assets__/<star><star>/<star>.declapract.ts +17 -0
  369. package/dist/.test/assets/git/declarations/practices/tests-any/bad-practices/old-test-utils-and-assets-location/<star><star>/__test_utils__/<star><star>/<star>.declapract.ts +17 -0
  370. package/dist/.test/assets/git/declarations/practices/tests-any/best-practice/.declapract.readme.md +52 -0
  371. package/dist/.test/assets/git/declarations/practices/tests-any/best-practice/.declapract.todo.md +3 -0
  372. package/dist/.test/assets/git/declarations/practices/tests-any/best-practice/.gitattributes.declapract.ts +60 -0
  373. package/dist/.test/assets/git/declarations/practices/tests-any/best-practice/package.json +18 -0
  374. package/dist/.test/assets/git/declarations/practices/tests-any/best-practice/package.json.declapract.ts +3 -0
  375. package/dist/.test/assets/git/declarations/practices/tests-any/best-practice/src/.test/useWakeOfLivedb.ts +209 -0
  376. package/dist/.test/assets/git/declarations/practices/tests-any/best-practice/src/<star><star>/<star>.integration.test.ts.declapract.ts +8 -0
  377. package/dist/.test/assets/git/declarations/practices/tests-any/best-practice/src/<star><star>/<star>.test.ts.declapract.ts +7 -0
  378. package/dist/.test/assets/git/declarations/practices/tests-any/build-ifstale.declapract.integration.test.ts +124 -0
  379. package/dist/.test/assets/git/declarations/practices/tests-any/changedsince-origin-main.declapract.integration.test.ts +58 -0
  380. package/dist/.test/assets/git/declarations/practices/tests-any/livedb-wake-branches.declapract.integration.test.ts +315 -0
  381. package/dist/.test/assets/git/declarations/practices/tests-any/old-acceptance-test-utils.declapract.integration.test.ts +122 -0
  382. package/dist/.test/assets/git/declarations/practices/tests-any/package.json.shell-flags.declapract.integration.test.ts +139 -0
  383. package/dist/.test/assets/git/declarations/practices/tests-any/test-kind-seam.declapract.integration.test.ts +87 -0
  384. package/dist/.test/assets/git/declarations/useCases.yml +29 -0
  385. package/dist/.test/assets/{expo-fullusecase/declarations/practices/git/best-practice → git/repo-with-all-gitattributes-declarers}/.gitattributes +3 -0
  386. package/dist/.test/assets/git/repo-with-all-gitattributes-declarers/declapract.use.yml +26 -0
  387. package/dist/.test/assets/git/repo-with-all-gitattributes-declarers/package.json +4 -0
  388. package/dist/.test/assets/pnpm/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/declapract.use.yml +4 -0
  389. package/dist/.test/assets/pnpm/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/package.json +15 -0
  390. package/dist/.test/assets/pnpm/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/rhachet-roles-ehmpathy.patch +6 -0
  391. package/dist/.test/assets/pnpm/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/rhachet-roles-ehmpathy@1.39.1.patch +6 -0
  392. package/dist/.test/assets/pnpm/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/type-fns@1.21.3.patch +6 -0
  393. package/dist/.test/assets/pnpm/declarations/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/pnpm-lock.yaml +19 -0
  394. package/dist/.test/assets/pnpm/declarations/practices/pnpm/__snapshots__/stale-patched-dependency.declapract.integration.test.ts.snap +39 -0
  395. package/dist/.test/assets/pnpm/declarations/practices/pnpm/stale-patched-dependency.declapract.integration.test.ts +53 -0
  396. package/dist/.test/assets/rhachet/declarations/practices/rhachet/best-practice/.declapract.readme.md +8 -0
  397. package/dist/.test/assets/rhachet/declarations/practices/rhachet/best-practice/.gitattributes.declapract.ts +65 -0
  398. package/dist/.test/assets/tests-any-only/declarations/practices/tests-any/best-practice/.declapract.readme.md +7 -0
  399. package/dist/.test/assets/tests-any-only/declarations/practices/tests-any/best-practice/.gitattributes.declapract.ts +60 -0
  400. package/dist/__snapshots__/gitattributesDeclarers.declapract.integration.test.ts.snap +79 -0
  401. package/dist/__snapshots__/repoSkills.declapract.acceptance.test.ts.snap +512 -0
  402. package/dist/__snapshots__/typecheckBestPracticeTemplates.declapract.integration.test.ts.snap +80 -0
  403. package/dist/gitattributesDeclarers.declapract.integration.test.ts +438 -0
  404. package/dist/practiceOwnerPerFile.declapract.integration.test.ts +53 -0
  405. package/dist/practices/cicd-common/.declapract.integration.test.ts +15 -21
  406. package/dist/practices/git/.declapract.integration.test.ts +2 -2
  407. package/dist/practices/git/.gitattributes.declapract.integration.test.ts +34 -19
  408. package/dist/practices/git/.test/assets/repo-with-legacy-gitattributes/declapract.use.yml +3 -3
  409. package/dist/practices/git/__snapshots__/.gitattributes.declapract.integration.test.ts.snap +4 -4
  410. package/dist/practices/git/best-practice/.declapract.readme.md +37 -0
  411. package/dist/practices/git/best-practice/.gitattributes.declapract.ts +42 -63
  412. package/dist/practices/persist-with-dynamodb/best-practice/.gitattributes.declapract.ts +56 -0
  413. package/dist/practices/persist-with-rds/.test/assets/repo-with-hand-patch/declapract.use.yml +4 -0
  414. package/dist/practices/persist-with-rds/.test/assets/repo-with-hand-patch/package.json +17 -0
  415. package/dist/practices/persist-with-rds/.test/assets/repo-with-hand-patch/patches/left-pad@1.3.0.patch +6 -0
  416. package/dist/practices/persist-with-rds/.test/assets/repo-with-hand-patch/patches/pg-pool@3.14.0.patch +12 -0
  417. package/dist/practices/persist-with-rds/__snapshots__/pg-pool-patch.declapract.integration.test.ts.snap +147 -0
  418. package/dist/practices/persist-with-rds/best-practice/.declapract.readme.md +29 -0
  419. package/dist/practices/persist-with-rds/best-practice/.gitattributes.declapract.ts +64 -0
  420. package/dist/practices/persist-with-rds/best-practice/package.json +5 -0
  421. package/dist/practices/persist-with-rds/best-practice/patches/pg-pool.patch +21 -0
  422. package/dist/practices/persist-with-rds/pg-pool-patch.declapract.integration.test.ts +884 -0
  423. package/dist/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/declapract.use.yml +4 -0
  424. package/dist/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/package.json +15 -0
  425. package/dist/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/rhachet-roles-ehmpathy.patch +6 -0
  426. package/dist/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/rhachet-roles-ehmpathy@1.39.1.patch +6 -0
  427. package/dist/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/patches/type-fns@1.21.3.patch +6 -0
  428. package/dist/practices/pnpm/.test/assets/repo-stale-patch-beside-bare/pnpm-lock.yaml +19 -0
  429. package/dist/practices/pnpm/__snapshots__/stale-patched-dependency.declapract.integration.test.ts.snap +39 -0
  430. package/dist/practices/pnpm/stale-patched-dependency.declapract.integration.test.ts +53 -0
  431. package/dist/practices/rhachet/best-practice/.declapract.readme.md +8 -0
  432. package/dist/practices/rhachet/best-practice/.gitattributes.declapract.ts +65 -0
  433. package/dist/practices/tests-any/best-practice/.declapract.readme.md +7 -0
  434. package/dist/practices/tests-any/best-practice/.gitattributes.declapract.ts +60 -0
  435. package/dist/repoSkills.declapract.acceptance.test.ts +1150 -0
  436. package/dist/typecheckBestPracticeTemplates.declapract.integration.test.ts +181 -19
  437. package/dist/utils/defineExpectedGitattributesContents.ts +247 -0
  438. package/package.json +6 -6
  439. package/dist/.test/assets/expo-migration/declarations/practices/git/best-practice/.gitattributes +0 -7
  440. package/dist/practices/git/best-practice/.gitattributes +0 -7
@@ -0,0 +1,8 @@
1
+ # minimal declarations for the action-pin integration test
2
+ #
3
+ # .note = this dir lives OUTSIDE src/practices on purpose. declapract deep-walks
4
+ # src/practices/** through symlinks, so a fixture that symlinks back to an
5
+ # ancestor it lives under forms a cycle -> ELOOP under full-suite load.
6
+ declare:
7
+ practices: practices
8
+ use-cases: useCases.yml
@@ -0,0 +1,597 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+
4
+ import { executeApply } from 'declapract';
5
+ import { given, then, useBeforeAll, useThen, when } from 'test-fns';
6
+
7
+ import { genTempRepoWithDeclarationsOutside } from '../../utils/genTempRepoWithDeclarationsOutside';
8
+
9
+ // executeApply is slow (full practice evaluation before the file filter narrows it)
10
+ // .note = this suite scopes each apply with `file: '.github/workflows/review.yml'`, which
11
+ // narrows the work enough that a run settles in seconds. the cap matches the
12
+ // single-apply suites rather than a multiple of them, so a hang surfaces promptly
13
+ // instead of after a budget sized for a slowness we do not have.
14
+ jest.setTimeout(300_000); // 5 minutes
15
+
16
+ /**
17
+ * .what = the template a consumer is held to, read from the practice as it ships
18
+ * .why = read rather than transcribed. a hand-copied expectation is a SECOND source of truth
19
+ * that drifts the moment the template is bumped, and this repo already carries a live
20
+ * instance of exactly that decay: `.test.yml.declapract.test.ts` hand-writes a
21
+ * `templateContent` string that still says `actions/checkout@v4` while the real
22
+ * template says `@11d5960…`. it passes, because it only ever compares its copy to
23
+ * itself. read the file and the drift is unrepresentable
24
+ */
25
+ const PATH_OF_TEMPLATE = path.join(
26
+ __dirname,
27
+ 'best-practice/.github/workflows/review.yml',
28
+ );
29
+
30
+ const PATH_IN_CONSUMER = '.github/workflows/review.yml';
31
+
32
+ /**
33
+ * .what = the one pinned template whose delivery runs through a HAND-WRITTEN fix
34
+ * .why = `[case2]` exists for this file alone. see its docblock for why the tenth template
35
+ * cannot inherit the ninth's proof
36
+ */
37
+ const PATH_OF_TEST_TEMPLATE = path.join(
38
+ __dirname,
39
+ 'best-practice/.github/workflows/.test.yml',
40
+ );
41
+
42
+ const PATH_OF_TEST_IN_CONSUMER = '.github/workflows/.test.yml';
43
+
44
+ /**
45
+ * .what = a workflow in the consumer's repo that NO practice declares
46
+ * .why = `[case3]` proves the practice leaves it alone. it carries tag refs on purpose
47
+ */
48
+ const PATH_OF_CONSUMER_OWNED = '.github/workflows/consumer-owned.yml';
49
+
50
+ /**
51
+ * .what = the lines of a workflow that name a third-party action, in either yaml form —
52
+ * `uses: <owner>/<repo>@<ref>` and its `- uses:` sequence-item variant
53
+ * .why = a count of these is how a TRUNCATED delivery is caught. the `@` is what bounds the
54
+ * set to third-party refs: a local ref (`uses: ./.github/workflows/.install.yml`)
55
+ * names a path rather than a version, so it carries no `@` and is never counted
56
+ */
57
+ const getAllActionRefLines = (input: { contents: string }): string[] =>
58
+ input.contents
59
+ .split('\n')
60
+ .filter((line) => /^\s*(?:-\s+)?uses:\s*\S+\/\S+@/.test(line));
61
+
62
+ /**
63
+ * .what = the wish's second acceptance criterion, proven by an executed pipeline
64
+ * .why = "a repo that runs the upgrade against this template comes away with its
65
+ * template-owned refs pinned, WITHOUT A HAND-EDIT". every other clamp on the pin is
66
+ * static — `src/actionPins.declapract.integration.test.ts` proves the templates in THIS repo hold
67
+ * pinned refs, and that is a claim about files at rest. it has no word on whether
68
+ * declapract delivers them
69
+ * .why = and the delivery was, until this suite, an INFERENCE: the vision verified it by a
70
+ * read of declapract's source (the `EQUALS` default plus its whole-file fix), never by
71
+ * a run against these templates. a source read proves what the code does; it does not
72
+ * prove this practice is wired to that path. the two l3 reviewers named the gap
73
+ * independently, and they were right — a reasoned delivery is not a delivered delivery
74
+ * .note = `review.yml` is the subject because it is the smallest template that carries a
75
+ * third-party ref (exactly 1, of 85). the mechanism under test is declapract's file
76
+ * delivery, which does not vary with a file's size — so the cheapest template proves
77
+ * it as well as the largest, and keeps the apply quick
78
+ */
79
+ describe('cicd-common workflow templates', () => {
80
+ given('[case1] a consumer repo whose workflow still carries a tag ref', () => {
81
+ const tempDir = genTempRepoWithDeclarationsOutside({
82
+ slug: 'cicd-common-action-pins',
83
+ clone:
84
+ './src/practices/cicd-common/.test/assets/repo-with-unpinned-workflow',
85
+ declarations: './src/.test/assets/cicd-common/declarations',
86
+ symlink: [{ at: 'node_modules', to: 'node_modules' }],
87
+ });
88
+
89
+ when('[t0] before any apply', () => {
90
+ /**
91
+ * .why = a diff is only legible against a before, per
92
+ * rule.require.declapract-integration-tests. this one carries a second duty: it
93
+ * states that the fixture really is unpinned, so the after-assertion below is a
94
+ * measured CHANGE rather than a file that was already correct
95
+ */
96
+ then('the input file matches snapshot', async () => {
97
+ const contents = await fs.readFile(
98
+ path.join(tempDir, PATH_IN_CONSUMER),
99
+ 'utf-8',
100
+ );
101
+
102
+ expect(contents).toMatchSnapshot('review.yml -- before');
103
+ });
104
+
105
+ then('the consumer carries an unpinned tag ref -- the state the org control kills', async () => {
106
+ const contents = await fs.readFile(
107
+ path.join(tempDir, PATH_IN_CONSUMER),
108
+ 'utf-8',
109
+ );
110
+
111
+ expect(contents).toContain('amannn/action-semantic-pull-request@v5');
112
+ });
113
+ });
114
+
115
+ when('[t1] the cicd-common practice is applied', () => {
116
+ useBeforeAll(async () => {
117
+ await executeApply({
118
+ config: path.join(tempDir, 'declapract.use.yml'),
119
+ practice: 'cicd-common',
120
+ file: PATH_IN_CONSUMER,
121
+ });
122
+ }, 120_000);
123
+
124
+ // .note = one read, shared across the assertions below, per
125
+ // rule.prefer.usethen-and-usewhen-for-shared-results. the value is wrapped in an
126
+ // object because useThen hands back a proxy, and a bare string proxy compares as
127
+ // a char-indexed object.
128
+ const fileAfter = useThen('the apply settles', async () => ({
129
+ contents: await fs.readFile(
130
+ path.join(tempDir, PATH_IN_CONSUMER),
131
+ 'utf-8',
132
+ ),
133
+ }));
134
+
135
+ /**
136
+ * .what = THE acceptance criterion — the consumer's file now equals the template's
137
+ * .why = a `toContain` on the sha would prove the pin arrived and stay silent on the rest
138
+ * of the file. byte-equality is the actual promise declapract's `EQUALS` default
139
+ * makes, and it is what lets this repo be the single place that has to be right:
140
+ * whatever the template says, the consumer receives
141
+ * .note = the template is read from disk on BOTH sides, so a future bump moves the
142
+ * expectation with the artifact and this assertion never needs a hand-edit —
143
+ * which is the same property the criterion claims for the consumer
144
+ */
145
+ then(
146
+ "the consumer's file is byte-identical to the template -- if red, declapract did not deliver the template verbatim",
147
+ async () => {
148
+ const expected = await fs.readFile(PATH_OF_TEMPLATE, 'utf-8');
149
+
150
+ expect(fileAfter.contents).toEqual(expected);
151
+ },
152
+ );
153
+
154
+ /**
155
+ * .why = stated in its own right, rather than left implied by byte-equality. the wish is
156
+ * about the PIN, and a failure that names the pin sends a reader to the right
157
+ * place; a byte diff alone reads as "the file changed somehow"
158
+ * (`rule.require.errors-name-the-fix`)
159
+ * .note = it is also the only assertion here that can see an unpinned TEMPLATE, and that
160
+ * asymmetry was measured rather than assumed. the two injections:
161
+ * apply scoped away from this file -> 4 red, byte-equality among them
162
+ * template reverted to `@v5` -> 2 red, byte-equality stays GREEN
163
+ * byte-equality reads the template on BOTH sides, so it proves DELIVERY and is
164
+ * blind to what was delivered. this line and the snapshot carry the other half.
165
+ * the primary guard on pinnedness is `src/actionPins.declapract.integration.test.ts`, over
166
+ * all 85 template refs; this is the one that catches it here, in the pipeline
167
+ */
168
+ then('the tag ref is gone, and a pinned ref stands where it was', () => {
169
+ expect(fileAfter.contents).not.toContain(
170
+ 'amannn/action-semantic-pull-request@v5\n',
171
+ );
172
+ expect(fileAfter.contents).toContain(
173
+ 'amannn/action-semantic-pull-request@e32d7e603df1aa1ba07e981f2a23455dee596825 # v5',
174
+ );
175
+ });
176
+
177
+ then('no declapract template syntax leaked into the output', () => {
178
+ expect(fileAfter.contents).not.toContain('@declapract{');
179
+ });
180
+
181
+ then('the settled file matches snapshot', () => {
182
+ expect(fileAfter.contents).toMatchSnapshot('review.yml -- after');
183
+ });
184
+ });
185
+
186
+ /**
187
+ * .what = the fixed point, per rule.require.idempotent-fixes
188
+ * .why = a consumer runs the upgrade on every bump, not once. a fix that lands correctly
189
+ * and then rewrites the file on each later run would churn a diff into every
190
+ * consumer's repo forever, and the wish's "without a hand-edit" quietly becomes
191
+ * "with a hand-revert"
192
+ */
193
+ when('[t2] the practice is applied a second time', () => {
194
+ const fileBefore = useBeforeAll(async () => ({
195
+ contents: await fs.readFile(
196
+ path.join(tempDir, PATH_IN_CONSUMER),
197
+ 'utf-8',
198
+ ),
199
+ }));
200
+
201
+ useBeforeAll(async () => {
202
+ await executeApply({
203
+ config: path.join(tempDir, 'declapract.use.yml'),
204
+ practice: 'cicd-common',
205
+ file: PATH_IN_CONSUMER,
206
+ });
207
+ }, 120_000);
208
+
209
+ then('the file is byte-identical -- the apply is a fixed point', async () => {
210
+ const contentsAfterRerun = await fs.readFile(
211
+ path.join(tempDir, PATH_IN_CONSUMER),
212
+ 'utf-8',
213
+ );
214
+
215
+ expect(contentsAfterRerun).toEqual(fileBefore.contents);
216
+ });
217
+ });
218
+ });
219
+
220
+ /**
221
+ * .what = the same delivery proof, for the ONE template that does not take declapract's
222
+ * default path
223
+ * .why = `[case1]` justified its choice of `review.yml` on the ground that "the mechanism does
224
+ * not vary with a file's size". that holds for 9 of the 10 pinned templates — the ones
225
+ * with no `.declapract.ts` companion, which all reach delivery through declapract's
226
+ * built-in `EQUALS` default. it does NOT hold for `.test.yml`, the tenth: it carries an
227
+ * explicit, HAND-WRITTEN `fix`, so its delivery runs through code this repo owns rather
228
+ * than code declapract owns. a source read of declapract cannot vouch for that at all
229
+ * .why = and it is the file that matters most, not an edge case:
230
+ * - 25 of the 85 template pin sites live here — 29%, the largest concentration
231
+ * - it is the workflow the wish's `.why` is ABOUT: `publish` needs `test`, so a tag
232
+ * ref here kills the release before any template reaches a consumer
233
+ * - it is the only template whose fix could regress independently of declapract
234
+ * .note = the custom fix returns `context.declaredFileContents ?? ''`. that `?? ''` writes an
235
+ * EMPTY FILE rather than fail, if the declared contents were ever absent — a fail-hide
236
+ * no unit test with a mocked context can see, because the mock supplies the value. this
237
+ * case runs the real pipeline, so an empty delivery goes red on byte-equality
238
+ */
239
+ given('[case2] a consumer whose .test.yml is stale, on the custom-fix path', () => {
240
+ const tempDir = genTempRepoWithDeclarationsOutside({
241
+ slug: 'cicd-common-action-pins-test-yml',
242
+ clone:
243
+ './src/practices/cicd-common/.test/assets/repo-with-unpinned-workflow',
244
+ declarations: './src/.test/assets/cicd-common/declarations',
245
+ symlink: [{ at: 'node_modules', to: 'node_modules' }],
246
+ });
247
+
248
+ when('[t0] before any apply', () => {
249
+ then('the input file matches snapshot', async () => {
250
+ const contents = await fs.readFile(
251
+ path.join(tempDir, PATH_OF_TEST_IN_CONSUMER),
252
+ 'utf-8',
253
+ );
254
+
255
+ expect(contents).toMatchSnapshot('.test.yml -- before');
256
+ });
257
+
258
+ then('the consumer carries unpinned tag refs -- the state the org control kills', async () => {
259
+ const contents = await fs.readFile(
260
+ path.join(tempDir, PATH_OF_TEST_IN_CONSUMER),
261
+ 'utf-8',
262
+ );
263
+
264
+ expect(contents).toContain('actions/checkout@v4');
265
+ expect(contents).toContain('actions/setup-node@v4');
266
+ });
267
+ });
268
+
269
+ when('[t1] the cicd-common practice is applied', () => {
270
+ useBeforeAll(async () => {
271
+ await executeApply({
272
+ config: path.join(tempDir, 'declapract.use.yml'),
273
+ practice: 'cicd-common',
274
+ file: PATH_OF_TEST_IN_CONSUMER,
275
+ });
276
+ }, 120_000);
277
+
278
+ const fileAfter = useThen('the apply settles', async () => ({
279
+ contents: await fs.readFile(
280
+ path.join(tempDir, PATH_OF_TEST_IN_CONSUMER),
281
+ 'utf-8',
282
+ ),
283
+ }));
284
+
285
+ /**
286
+ * .why = the same byte-equality claim as `[case1]`, but here it clears a genuinely
287
+ * different mechanism: the hand-written fix, not declapract's default. it is also
288
+ * the assertion that catches the `?? ''` empty-file path, which would otherwise
289
+ * deliver a zero-byte workflow to a consumer with every unit test still green
290
+ */
291
+ then(
292
+ "the consumer's file is byte-identical to the template -- if red, the custom fix did not deliver the template verbatim",
293
+ async () => {
294
+ const expected = await fs.readFile(PATH_OF_TEST_TEMPLATE, 'utf-8');
295
+
296
+ expect(fileAfter.contents).toEqual(expected);
297
+ },
298
+ );
299
+
300
+ /**
301
+ * .why = stated of the pins in their own right, and over MORE than one action — this file
302
+ * carries 25 ref sites across 6 action repos, so a partial delivery is a shape a
303
+ * one-ref assertion could not see
304
+ */
305
+ then('every tag ref is gone, and pins stand where they were', () => {
306
+ expect(fileAfter.contents).not.toContain('actions/checkout@v4');
307
+ expect(fileAfter.contents).not.toContain('actions/setup-node@v4');
308
+ expect(fileAfter.contents).toContain(
309
+ 'actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4',
310
+ );
311
+ expect(fileAfter.contents).toContain(
312
+ 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4',
313
+ );
314
+ });
315
+
316
+ /**
317
+ * .why = the delivery is only worth as much as its completeness. a fix that shipped a
318
+ * TRUNCATED template would satisfy a `toContain` on the two refs above while it
319
+ * silently dropped the other 23 — and `?? ''` proves this fix has a path that
320
+ * returns less than the whole file
321
+ */
322
+ then('every ref site of the template arrived -- if red, the fix delivered a partial file', async () => {
323
+ // .note = the count is read off the template, not hand-kept, so a job added to or dropped
324
+ // from `.test.yml` does not stale this assertion; the snapshot below shows the count
325
+ const sitesExpected = getAllActionRefLines({
326
+ contents: await fs.readFile(PATH_OF_TEST_TEMPLATE, 'utf-8'),
327
+ });
328
+ const sites = getAllActionRefLines({ contents: fileAfter.contents });
329
+
330
+ expect(sitesExpected.length).toBeGreaterThan(20);
331
+ expect(sites.length).toEqual(sitesExpected.length);
332
+ });
333
+
334
+ then('no declapract template syntax leaked into the output', () => {
335
+ expect(fileAfter.contents).not.toContain('@declapract{');
336
+ });
337
+
338
+ /**
339
+ * .what = #595 — the PR acceptance shard defaults to IN-PROCESS (LOCALLY=true), so a
340
+ * fleetless service (one that publishes only dev/prep, no `test` fleet) inherits a
341
+ * green PR gate rather than 404ing against a `svc-<name>-test-*` slug that does not
342
+ * exist. this is the delivered template, through the real pipeline — so it proves a
343
+ * consumer receives the in-process default, not that the source file merely holds it.
344
+ * .teeth = both acceptance shard steps (explicit + dynamic) carry `LOCALLY=true`, and NO
345
+ * acceptance step runs a bare `THOROUGH=true npm run test:acceptance` without it —
346
+ * the cloud-invoke default that regressed a fleetless service to all-404. revert
347
+ * either step to the bare command and the count assertions redden.
348
+ */
349
+ then('the acceptance shard defaults to in-process (LOCALLY=true) -- #595 fleetless gate', () => {
350
+ // every `test:acceptance` shard command carries LOCALLY=true (the explicit + both dynamic branches)
351
+ const acceptanceRuns = (
352
+ fileAfter.contents.match(/npm run test:acceptance/g) || []
353
+ ).length;
354
+ const localAcceptanceRuns = (
355
+ fileAfter.contents.match(/LOCALLY=true THOROUGH=true npm run test:acceptance/g) || []
356
+ ).length;
357
+ expect(acceptanceRuns).toBeGreaterThan(0);
358
+ // teeth: EVERY acceptance run carries LOCALLY=true — a bare cloud-invoke step (the all-404
359
+ // regression) would make localAcceptanceRuns < acceptanceRuns.
360
+ expect(localAcceptanceRuns).toEqual(acceptanceRuns);
361
+ });
362
+
363
+ /**
364
+ * .why = the wish's third acceptance criterion — "the pin is LEGIBLE: a reader can tell
365
+ * WHICH version each SHA corresponds to" — is the one criterion no assertion can
366
+ * settle, because legibility is a property a human reads rather than a machine
367
+ * checks. a snapshot is what puts the `@<sha> # <tag>` shape in front of a
368
+ * reviewer, per `rule.require.snapshots`
369
+ * .note = and this file is the only place that criterion can be eyeballed at scale. the
370
+ * committed pin table in `src/actionPins.declapract.integration.test.ts` deliberately records
371
+ * `<repo>@<sha> — N sites` WITHOUT the tag tail, so it cannot show a tail arrive.
372
+ * 25 sites across 6 action repos land here, in the workflow that gates `publish`
373
+ * — the file the wish's `.why` is about
374
+ */
375
+ then('the settled file matches snapshot', () => {
376
+ expect(fileAfter.contents).toMatchSnapshot('.test.yml -- after');
377
+ });
378
+ });
379
+
380
+ when('[t2] the practice is applied a second time', () => {
381
+ const fileBefore = useBeforeAll(async () => ({
382
+ contents: await fs.readFile(
383
+ path.join(tempDir, PATH_OF_TEST_IN_CONSUMER),
384
+ 'utf-8',
385
+ ),
386
+ }));
387
+
388
+ useBeforeAll(async () => {
389
+ await executeApply({
390
+ config: path.join(tempDir, 'declapract.use.yml'),
391
+ practice: 'cicd-common',
392
+ file: PATH_OF_TEST_IN_CONSUMER,
393
+ });
394
+ }, 120_000);
395
+
396
+ then('the file is byte-identical -- the custom fix is a fixed point', async () => {
397
+ const contentsAfterRerun = await fs.readFile(
398
+ path.join(tempDir, PATH_OF_TEST_IN_CONSUMER),
399
+ 'utf-8',
400
+ );
401
+
402
+ expect(contentsAfterRerun).toEqual(fileBefore.contents);
403
+ });
404
+ });
405
+ });
406
+
407
+ /**
408
+ * .what = the wish's second CONSTRAINT, which is a bound on the fix rather than a promise
409
+ * of it: "the template's reach ends at the refs it owns. do not silently rewrite
410
+ * what the practice does not own"
411
+ * .why = every other case here proves the pin ARRIVES. this one proves it STOPS. a fix that
412
+ * pinned every tag ref it could find would satisfy all of them and still be wrong —
413
+ * it would rewrite a consumer's own workflows, which the wish forbids outright
414
+ * .note = the apply here is deliberately UNSCOPED — no `file:` filter. a scoped apply cannot
415
+ * prove this: it would leave the consumer's file alone because it was told to, not
416
+ * because the practice declines to own it. the whole practice must run for the
417
+ * claim to mean what it says
418
+ */
419
+ given('[case3] a consumer repo that also has a workflow of its OWN', () => {
420
+ const tempDir = genTempRepoWithDeclarationsOutside({
421
+ slug: 'cicd-common-consumer-owned',
422
+ clone:
423
+ './src/practices/cicd-common/.test/assets/repo-with-unpinned-workflow',
424
+ declarations: './src/.test/assets/cicd-common/declarations',
425
+ symlink: [{ at: 'node_modules', to: 'node_modules' }],
426
+ });
427
+
428
+ when('[t0] the whole practice is applied, unscoped', () => {
429
+ const fileBefore = useBeforeAll(async () => ({
430
+ contents: await fs.readFile(
431
+ path.join(tempDir, PATH_OF_CONSUMER_OWNED),
432
+ 'utf-8',
433
+ ),
434
+ }));
435
+
436
+ useBeforeAll(async () => {
437
+ await executeApply({
438
+ config: path.join(tempDir, 'declapract.use.yml'),
439
+ practice: 'cicd-common',
440
+ });
441
+ }, 240_000);
442
+
443
+ then(
444
+ "the consumer's own workflow is byte-identical -- if red, the practice rewrote a file it does not own",
445
+ async () => {
446
+ const contentsAfter = await fs.readFile(
447
+ path.join(tempDir, PATH_OF_CONSUMER_OWNED),
448
+ 'utf-8',
449
+ );
450
+
451
+ expect(contentsAfter).toEqual(fileBefore.contents);
452
+ },
453
+ );
454
+
455
+ /**
456
+ * .why = the assertion above passes vacuously if the apply did no work at all — a
457
+ * misconfigured fixture, a practice that failed to evaluate, an apply that
458
+ * matched zero files would each leave the consumer's file untouched for the
459
+ * wrong reason. so the same run must be shown to have delivered elsewhere
460
+ */
461
+ then(
462
+ 'and the template-owned file DID change in the same run -- if red, the check above is vacuous',
463
+ async () => {
464
+ const contentsOfTemplateOwned = await fs.readFile(
465
+ path.join(tempDir, PATH_IN_CONSUMER),
466
+ 'utf-8',
467
+ );
468
+
469
+ expect(contentsOfTemplateOwned).toContain(
470
+ 'amannn/action-semantic-pull-request@e32d7e603df1aa1ba07e981f2a23455dee596825 # v5',
471
+ );
472
+ },
473
+ );
474
+
475
+ /**
476
+ * .why = stated of the tag refs directly, so the claim reads as what it is: the
477
+ * consumer's `@v4` and `@v3` are STILL THERE. byte-equality already implies it,
478
+ * but a reader of the failure output should not have to diff two files to see
479
+ * which property broke
480
+ */
481
+ then("the consumer's own tag refs are untouched", async () => {
482
+ const contentsAfter = await fs.readFile(
483
+ path.join(tempDir, PATH_OF_CONSUMER_OWNED),
484
+ 'utf-8',
485
+ );
486
+
487
+ expect(contentsAfter).toContain('actions/checkout@v4');
488
+ expect(contentsAfter).toContain('actions/setup-node@v3');
489
+ });
490
+
491
+ /**
492
+ * .why = `[case1]` and `[case2]` each snapshot their file before AND after, so a reviewer
493
+ * reads the pin arrive as a diff. this case had assertions and no snapshot, which
494
+ * made the ONE property the wish states as a constraint — the practice does not
495
+ * rewrite what it does not own — the only outcome here a reviewer could not see.
496
+ * `rule.require.declapract-integration-tests` asks for both, and is explicit that
497
+ * an assertion alone checks only the substrings its author thought of
498
+ * .note = both halves are snapped even though byte-equality is asserted above, because a
499
+ * snapshot of the AFTER alone cannot show a reviewer what it was compared against.
500
+ * two identical blocks in the file are the legible form of "untouched"
501
+ */
502
+ then('and both halves of the untouched file match snapshot', async () => {
503
+ const contentsAfter = await fs.readFile(
504
+ path.join(tempDir, PATH_OF_CONSUMER_OWNED),
505
+ 'utf-8',
506
+ );
507
+
508
+ expect(fileBefore.contents).toMatchSnapshot('consumer-owned.yml -- before');
509
+ expect(contentsAfter).toMatchSnapshot('consumer-owned.yml -- after');
510
+ });
511
+ });
512
+ });
513
+
514
+ /**
515
+ * .what = the ABSENT-file path — a repo where the declared workflow does not exist at all
516
+ * .why = this is the wish's FIRST acceptance criterion, and until now it had no executed
517
+ * proof. "a fresh scaffold's CI starts" describes a repo with no `.github/workflows/`
518
+ * yet; every other case here starts from a file that is already present and merely
519
+ * wrong. a fix that only ever REWROTE would satisfy all of them and leave a fresh
520
+ * scaffold with no workflow at all — which fails the criterion silently, since a repo
521
+ * with no workflow has no red ci to notice
522
+ * .why = it is also the negative variant `rule.require.contract-snapshot-exhaustiveness` asks
523
+ * for on this contract: absent input. the error variants beside it — a malformed
524
+ * config, an unresolvable practice — belong to declapract's own cli and are not this
525
+ * behavior's to snapshot
526
+ * .note = the file is removed from a CLONE rather than carried by a second fixture, so the
527
+ * before-state is derived from the same asset the cases above use. a second fixture
528
+ * could drift from the first and quietly cease to be the same repo
529
+ */
530
+ given('[case4] a consumer repo where the declared workflow is ABSENT', () => {
531
+ const tempDir = genTempRepoWithDeclarationsOutside({
532
+ slug: 'cicd-common-absent-workflow',
533
+ clone:
534
+ './src/practices/cicd-common/.test/assets/repo-with-unpinned-workflow',
535
+ declarations: './src/.test/assets/cicd-common/declarations',
536
+ symlink: [{ at: 'node_modules', to: 'node_modules' }],
537
+ });
538
+
539
+ when('[t0] before any apply, with the workflow removed', () => {
540
+ const stateBefore = useThen('the workflow is removed', async () => {
541
+ await fs.rm(path.join(tempDir, PATH_IN_CONSUMER));
542
+ return {
543
+ report: await fs
544
+ .readFile(path.join(tempDir, PATH_IN_CONSUMER), 'utf-8')
545
+ .then(() => 'present')
546
+ .catch(() => 'absent'),
547
+ };
548
+ });
549
+
550
+ // .why = the absent state is SNAPPED rather than only asserted, so the negative path has a
551
+ // recorded before to read the after against. a reviewer who sees only the after
552
+ // cannot tell a created file from a rewritten one
553
+ then('the before-state reads as absent', () => {
554
+ expect(stateBefore.report).toMatchSnapshot('review.yml -- before (absent)');
555
+ });
556
+ });
557
+
558
+ when('[t1] the cicd-common practice is applied', () => {
559
+ useBeforeAll(async () => {
560
+ await executeApply({
561
+ config: path.join(tempDir, 'declapract.use.yml'),
562
+ practice: 'cicd-common',
563
+ file: PATH_IN_CONSUMER,
564
+ });
565
+ }, 120_000);
566
+
567
+ const fileAfter = useThen('the apply settles', async () => ({
568
+ contents: await fs.readFile(
569
+ path.join(tempDir, PATH_IN_CONSUMER),
570
+ 'utf-8',
571
+ ),
572
+ }));
573
+
574
+ then(
575
+ 'the workflow is CREATED, not skipped -- if red, a fresh scaffold comes away with no workflow and no red ci to reveal it',
576
+ async () => {
577
+ const expected = await fs.readFile(PATH_OF_TEMPLATE, 'utf-8');
578
+
579
+ expect(fileAfter.contents).toEqual(expected);
580
+ },
581
+ );
582
+
583
+ then('and it arrives already pinned', () => {
584
+ expect(fileAfter.contents).toContain(
585
+ 'amannn/action-semantic-pull-request@e32d7e603df1aa1ba07e981f2a23455dee596825 # v5',
586
+ );
587
+ expect(fileAfter.contents).not.toContain(
588
+ 'amannn/action-semantic-pull-request@v5',
589
+ );
590
+ });
591
+
592
+ then('the created file matches snapshot', () => {
593
+ expect(fileAfter.contents).toMatchSnapshot('review.yml -- after (created)');
594
+ });
595
+ });
596
+ });
597
+ });
@@ -0,0 +1,19 @@
1
+ name: .test
2
+
3
+ on:
4
+ workflow_call:
5
+
6
+ jobs:
7
+ test:
8
+ runs-on: ubuntu-24.04
9
+ steps:
10
+ - name: checkout
11
+ uses: actions/checkout@v4
12
+
13
+ - name: node
14
+ uses: actions/setup-node@v4
15
+ with:
16
+ node-version: 22
17
+
18
+ - name: test:unit
19
+ run: npm run test:unit
@@ -0,0 +1,21 @@
1
+ # .what = a workflow NO practice declares — it belongs to the consumer alone
2
+ # .why = wish constraint 2: "the template's reach ends at the refs it owns. do not silently
3
+ # rewrite what the practice does not own."
4
+ # .note = the tag refs below are DELIBERATE and must NOT be pinned. they are what the test
5
+ # asserts survives untouched. a "helpful" pin here makes the clamp vacuous
6
+ name: consumer-owned
7
+
8
+ on:
9
+ workflow_dispatch:
10
+
11
+ jobs:
12
+ whatever:
13
+ runs-on: ubuntu-24.04
14
+ steps:
15
+ - name: checkout
16
+ uses: actions/checkout@v4
17
+
18
+ - name: setup node
19
+ uses: actions/setup-node@v3
20
+ with:
21
+ node-version: 20
@@ -0,0 +1,26 @@
1
+ name: review
2
+
3
+ on:
4
+ pull_request:
5
+ types:
6
+ - opened
7
+ - edited
8
+ - synchronize
9
+
10
+ permissions:
11
+ pull-requests: read
12
+
13
+ jobs:
14
+ pullreq-title:
15
+ runs-on: ubuntu-24.04
16
+ steps:
17
+ - name: test:pullreq:title
18
+ uses: amannn/action-semantic-pull-request@v5
19
+ env:
20
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
21
+ with:
22
+ # https://github.com/commitizen/conventional-commit-types
23
+ types: |
24
+ fix
25
+ feat
26
+ chore
@@ -0,0 +1,6 @@
1
+ # .note = declarations dir is symlinked by the test
2
+ # .why = `typescript-project` here carries `cicd-common` ALONE, so the apply exercises
3
+ # the workflow declarations and no others. the claim under test is about one
4
+ # file's delivery, not about a full scaffold
5
+ declarations: 'declarations/declapract.declare.yml'
6
+ useCase: typescript-project