pactkit 2.4.0__tar.gz → 2.4.1__tar.gz
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.
- {pactkit-2.4.0 → pactkit-2.4.1}/.github/workflows/pactkit.yml +1 -1
- pactkit-2.4.1/.github/workflows/publish.yml +61 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/.opencode/pactkit.yaml +1 -1
- {pactkit-2.4.0 → pactkit-2.4.1}/CHANGELOG.md +13 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/PKG-INFO +3 -3
- {pactkit-2.4.0 → pactkit-2.4.1}/pyproject.toml +3 -3
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/__init__.py +1 -1
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/generators/deployer.py +2 -1
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/skills/board.py +54 -1
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/skills/visualize.py +101 -15
- pactkit-2.4.1/tests/unit/test_story_slim049.py +200 -0
- pactkit-2.4.0/.opencode/.gitignore +0 -4
- pactkit-2.4.0/.opencode/bun.lock +0 -18
- pactkit-2.4.0/.opencode/memory/.gitignore +0 -1
- pactkit-2.4.0/.opencode/memory/project.md +0 -7
- pactkit-2.4.0/.opencode/node_modules/@opencode-ai/plugin/package.json +0 -34
- pactkit-2.4.0/.opencode/node_modules/@opencode-ai/sdk/package.json +0 -52
- pactkit-2.4.0/.opencode/node_modules/zod/LICENSE +0 -21
- pactkit-2.4.0/.opencode/node_modules/zod/README.md +0 -208
- pactkit-2.4.0/.opencode/node_modules/zod/index.cjs +0 -33
- pactkit-2.4.0/.opencode/node_modules/zod/index.d.cts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/index.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/index.js +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/locales/index.cjs +0 -17
- pactkit-2.4.0/.opencode/node_modules/zod/locales/index.d.cts +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/locales/index.d.ts +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/locales/index.js +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/locales/package.json +0 -6
- pactkit-2.4.0/.opencode/node_modules/zod/mini/index.cjs +0 -17
- pactkit-2.4.0/.opencode/node_modules/zod/mini/index.d.cts +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/mini/index.d.ts +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/mini/index.js +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/mini/package.json +0 -6
- pactkit-2.4.0/.opencode/node_modules/zod/package.json +0 -135
- pactkit-2.4.0/.opencode/node_modules/zod/src/index.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/src/locales/index.ts +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/src/mini/index.ts +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/ZodError.ts +0 -330
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/benchmarks/datetime.ts +0 -58
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +0 -80
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/benchmarks/index.ts +0 -59
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/benchmarks/ipv4.ts +0 -57
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/benchmarks/object.ts +0 -69
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/benchmarks/primitives.ts +0 -162
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/benchmarks/realworld.ts +0 -63
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/benchmarks/string.ts +0 -55
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/benchmarks/union.ts +0 -80
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/errors.ts +0 -13
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/external.ts +0 -6
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/helpers/enumUtil.ts +0 -17
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/helpers/errorUtil.ts +0 -8
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/helpers/parseUtil.ts +0 -176
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/helpers/partialUtil.ts +0 -34
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/helpers/typeAliases.ts +0 -2
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/helpers/util.ts +0 -224
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/index.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/locales/en.ts +0 -124
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/standard-schema.ts +0 -113
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/Mocker.ts +0 -54
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/all-errors.test.ts +0 -157
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/anyunknown.test.ts +0 -28
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/array.test.ts +0 -71
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/async-parsing.test.ts +0 -388
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/async-refinements.test.ts +0 -46
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/base.test.ts +0 -29
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/bigint.test.ts +0 -55
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/branded.test.ts +0 -53
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/catch.test.ts +0 -220
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/coerce.test.ts +0 -133
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/complex.test.ts +0 -56
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/custom.test.ts +0 -31
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/date.test.ts +0 -32
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/deepmasking.test.ts +0 -186
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/default.test.ts +0 -112
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/description.test.ts +0 -33
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +0 -315
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/enum.test.ts +0 -80
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/error.test.ts +0 -551
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/firstparty.test.ts +0 -87
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +0 -21
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/function.test.ts +0 -257
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/generics.test.ts +0 -48
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/instanceof.test.ts +0 -37
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/intersection.test.ts +0 -110
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/language-server.source.ts +0 -76
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/language-server.test.ts +0 -207
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/literal.test.ts +0 -36
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/map.test.ts +0 -110
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/masking.test.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/mocker.test.ts +0 -19
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/nan.test.ts +0 -21
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/nativeEnum.test.ts +0 -87
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/nullable.test.ts +0 -42
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/number.test.ts +0 -176
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/object-augmentation.test.ts +0 -29
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +0 -29
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/object.test.ts +0 -434
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/optional.test.ts +0 -42
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/parseUtil.test.ts +0 -23
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/parser.test.ts +0 -41
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/partials.test.ts +0 -243
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/pickomit.test.ts +0 -111
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/pipeline.test.ts +0 -29
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/preprocess.test.ts +0 -186
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/primitive.test.ts +0 -440
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/promise.test.ts +0 -90
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/readonly.test.ts +0 -194
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/record.test.ts +0 -171
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/recursive.test.ts +0 -197
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/refine.test.ts +0 -313
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/safeparse.test.ts +0 -27
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/set.test.ts +0 -142
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/standard-schema.test.ts +0 -83
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/string.test.ts +0 -916
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/transformer.test.ts +0 -233
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/tuple.test.ts +0 -90
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/unions.test.ts +0 -57
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/validations.test.ts +0 -133
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/tests/void.test.ts +0 -15
- pactkit-2.4.0/.opencode/node_modules/zod/src/v3/types.ts +0 -5138
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/checks.ts +0 -31
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/coerce.ts +0 -27
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/compat.ts +0 -70
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/errors.ts +0 -82
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/external.ts +0 -50
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/index.ts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/iso.ts +0 -90
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/parse.ts +0 -82
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/schemas.ts +0 -2205
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +0 -26
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/array.test.ts +0 -264
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/assignability.test.ts +0 -210
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +0 -381
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +0 -68
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/base.test.ts +0 -7
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/bigint.test.ts +0 -54
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/brand.test.ts +0 -63
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/catch.test.ts +0 -276
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +0 -20
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +0 -573
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/codec.test.ts +0 -562
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/coerce.test.ts +0 -160
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/continuability.test.ts +0 -352
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/custom.test.ts +0 -40
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/date.test.ts +0 -31
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/datetime.test.ts +0 -302
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/default.test.ts +0 -365
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/description.test.ts +0 -32
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +0 -661
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/enum.test.ts +0 -285
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +0 -595
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/error.test.ts +0 -711
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/file.test.ts +0 -96
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +0 -179
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/function.test.ts +0 -308
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/generics.test.ts +0 -72
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/hash.test.ts +0 -68
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/index.test.ts +0 -844
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +0 -34
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/intersection.test.ts +0 -171
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/json.test.ts +0 -108
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/lazy.test.ts +0 -227
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/literal.test.ts +0 -117
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/map.test.ts +0 -196
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/nan.test.ts +0 -21
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +0 -168
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +0 -101
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/nullable.test.ts +0 -22
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/number.test.ts +0 -270
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/object.test.ts +0 -609
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/optional.test.ts +0 -136
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/partial.test.ts +0 -340
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +0 -127
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/pipe.test.ts +0 -101
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/prefault.test.ts +0 -74
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +0 -282
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/primitive.test.ts +0 -175
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/promise.test.ts +0 -81
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +0 -23
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -252
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/record.test.ts +0 -356
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +0 -539
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/refine.test.ts +0 -605
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/registries.test.ts +0 -204
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/set.test.ts +0 -181
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +0 -57
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +0 -125
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/string.test.ts +0 -1080
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +0 -106
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +0 -763
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +0 -2622
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/transform.test.ts +0 -361
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/tuple.test.ts +0 -163
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/union.test.ts +0 -181
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/validations.test.ts +0 -283
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/classic/tests/void.test.ts +0 -12
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/api.ts +0 -1621
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/checks.ts +0 -1287
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/config.ts +0 -15
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/core.ts +0 -115
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/doc.ts +0 -44
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/errors.ts +0 -423
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/index.ts +0 -14
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/json-schema.ts +0 -147
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/parse.ts +0 -195
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/regexes.ts +0 -177
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/registries.ts +0 -97
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/schemas.ts +0 -4303
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/standard-schema.ts +0 -64
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/tests/extend.test.ts +0 -18
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/tests/index.test.ts +0 -46
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/tests/locales/be.test.ts +0 -124
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/tests/locales/en.test.ts +0 -22
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/tests/locales/es.test.ts +0 -181
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +0 -128
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +0 -69
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/to-json-schema.ts +0 -1044
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/util.ts +0 -910
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/versions.ts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/core/zsf.ts +0 -323
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/index.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/ar.ts +0 -125
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/az.ts +0 -121
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/be.ts +0 -184
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/bg.ts +0 -136
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/ca.ts +0 -127
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/cs.ts +0 -142
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/da.ts +0 -141
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/de.ts +0 -124
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/en.ts +0 -127
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/eo.ts +0 -125
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/es.ts +0 -159
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/fa.ts +0 -134
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/fi.ts +0 -131
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/fr-CA.ts +0 -126
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/fr.ts +0 -124
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/he.ts +0 -125
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/hu.ts +0 -126
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/id.ts +0 -125
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/index.ts +0 -46
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/is.ts +0 -127
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/it.ts +0 -125
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/ja.ts +0 -122
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/ka.ts +0 -138
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/kh.ts +0 -7
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/km.ts +0 -126
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/ko.ts +0 -131
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/lt.ts +0 -265
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/mk.ts +0 -127
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/ms.ts +0 -124
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/nl.ts +0 -126
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/no.ts +0 -124
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/ota.ts +0 -125
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/pl.ts +0 -126
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/ps.ts +0 -133
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/pt.ts +0 -123
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/ru.ts +0 -184
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/sl.ts +0 -126
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/sv.ts +0 -127
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/ta.ts +0 -125
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/th.ts +0 -126
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/tr.ts +0 -121
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/ua.ts +0 -7
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/uk.ts +0 -126
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/ur.ts +0 -126
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/vi.ts +0 -125
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/yo.ts +0 -131
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/zh-CN.ts +0 -123
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/locales/zh-TW.ts +0 -125
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/mini/checks.ts +0 -32
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/mini/coerce.ts +0 -22
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/mini/external.ts +0 -40
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/mini/index.ts +0 -3
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/mini/iso.ts +0 -62
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/mini/parse.ts +0 -14
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/mini/schemas.ts +0 -1739
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/mini/tests/assignability.test.ts +0 -129
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/mini/tests/brand.test.ts +0 -51
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/mini/tests/checks.test.ts +0 -144
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/mini/tests/codec.test.ts +0 -529
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/mini/tests/computed.test.ts +0 -36
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/mini/tests/error.test.ts +0 -22
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/mini/tests/functions.test.ts +0 -43
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/mini/tests/index.test.ts +0 -899
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/mini/tests/number.test.ts +0 -95
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/mini/tests/object.test.ts +0 -200
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +0 -43
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +0 -275
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4/mini/tests/string.test.ts +0 -315
- pactkit-2.4.0/.opencode/node_modules/zod/src/v4-mini/index.ts +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/v3/ZodError.cjs +0 -138
- pactkit-2.4.0/.opencode/node_modules/zod/v3/ZodError.d.cts +0 -164
- pactkit-2.4.0/.opencode/node_modules/zod/v3/ZodError.d.ts +0 -164
- pactkit-2.4.0/.opencode/node_modules/zod/v3/ZodError.js +0 -133
- pactkit-2.4.0/.opencode/node_modules/zod/v3/errors.cjs +0 -17
- pactkit-2.4.0/.opencode/node_modules/zod/v3/errors.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v3/errors.d.ts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v3/errors.js +0 -9
- pactkit-2.4.0/.opencode/node_modules/zod/v3/external.cjs +0 -22
- pactkit-2.4.0/.opencode/node_modules/zod/v3/external.d.cts +0 -6
- pactkit-2.4.0/.opencode/node_modules/zod/v3/external.d.ts +0 -6
- pactkit-2.4.0/.opencode/node_modules/zod/v3/external.js +0 -6
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/enumUtil.cjs +0 -2
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/enumUtil.d.cts +0 -8
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/enumUtil.d.ts +0 -8
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/enumUtil.js +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/errorUtil.cjs +0 -9
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/errorUtil.d.cts +0 -9
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/errorUtil.d.ts +0 -9
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/errorUtil.js +0 -6
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/parseUtil.cjs +0 -124
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/parseUtil.d.cts +0 -78
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/parseUtil.d.ts +0 -78
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/parseUtil.js +0 -109
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/partialUtil.cjs +0 -2
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/partialUtil.d.cts +0 -8
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/partialUtil.d.ts +0 -8
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/partialUtil.js +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/typeAliases.cjs +0 -2
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/typeAliases.d.cts +0 -2
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/typeAliases.d.ts +0 -2
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/typeAliases.js +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/util.cjs +0 -137
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/util.d.cts +0 -85
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/util.d.ts +0 -85
- pactkit-2.4.0/.opencode/node_modules/zod/v3/helpers/util.js +0 -133
- pactkit-2.4.0/.opencode/node_modules/zod/v3/index.cjs +0 -33
- pactkit-2.4.0/.opencode/node_modules/zod/v3/index.d.cts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v3/index.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v3/index.js +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v3/locales/en.cjs +0 -112
- pactkit-2.4.0/.opencode/node_modules/zod/v3/locales/en.d.cts +0 -3
- pactkit-2.4.0/.opencode/node_modules/zod/v3/locales/en.d.ts +0 -3
- pactkit-2.4.0/.opencode/node_modules/zod/v3/locales/en.js +0 -109
- pactkit-2.4.0/.opencode/node_modules/zod/v3/package.json +0 -6
- pactkit-2.4.0/.opencode/node_modules/zod/v3/standard-schema.cjs +0 -2
- pactkit-2.4.0/.opencode/node_modules/zod/v3/standard-schema.d.cts +0 -102
- pactkit-2.4.0/.opencode/node_modules/zod/v3/standard-schema.d.ts +0 -102
- pactkit-2.4.0/.opencode/node_modules/zod/v3/standard-schema.js +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/v3/types.cjs +0 -3777
- pactkit-2.4.0/.opencode/node_modules/zod/v3/types.d.cts +0 -1034
- pactkit-2.4.0/.opencode/node_modules/zod/v3/types.d.ts +0 -1034
- pactkit-2.4.0/.opencode/node_modules/zod/v3/types.js +0 -3695
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/checks.cjs +0 -32
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/checks.d.cts +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/checks.d.ts +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/checks.js +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/coerce.cjs +0 -47
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/coerce.d.cts +0 -17
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/coerce.d.ts +0 -17
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/coerce.js +0 -17
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/compat.cjs +0 -61
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/compat.d.cts +0 -50
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/compat.d.ts +0 -50
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/compat.js +0 -31
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/errors.cjs +0 -74
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/errors.d.cts +0 -30
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/errors.d.ts +0 -30
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/errors.js +0 -48
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/external.cjs +0 -70
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/external.d.cts +0 -13
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/external.d.ts +0 -13
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/external.js +0 -18
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/index.cjs +0 -33
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/index.d.cts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/index.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/index.js +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/iso.cjs +0 -60
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/iso.d.cts +0 -22
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/iso.d.ts +0 -22
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/iso.js +0 -30
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/package.json +0 -6
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/parse.cjs +0 -41
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/parse.d.cts +0 -31
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/parse.d.ts +0 -31
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/parse.js +0 -15
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/schemas.cjs +0 -1161
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/schemas.d.cts +0 -673
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/schemas.d.ts +0 -673
- pactkit-2.4.0/.opencode/node_modules/zod/v4/classic/schemas.js +0 -1050
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/api.cjs +0 -1060
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/api.d.cts +0 -295
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/api.d.ts +0 -295
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/api.js +0 -925
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/checks.cjs +0 -595
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/checks.d.cts +0 -278
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/checks.d.ts +0 -278
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/checks.js +0 -569
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/core.cjs +0 -74
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/core.d.cts +0 -52
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/core.d.ts +0 -52
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/core.js +0 -67
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/doc.cjs +0 -39
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/doc.d.cts +0 -14
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/doc.d.ts +0 -14
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/doc.js +0 -35
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/errors.cjs +0 -221
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/errors.d.cts +0 -210
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/errors.d.ts +0 -210
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/errors.js +0 -190
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/index.cjs +0 -43
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/index.d.cts +0 -14
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/index.d.ts +0 -14
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/index.js +0 -14
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/json-schema.cjs +0 -2
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/json-schema.d.cts +0 -88
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/json-schema.d.ts +0 -88
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/json-schema.js +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/package.json +0 -6
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/parse.cjs +0 -131
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/parse.d.cts +0 -49
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/parse.d.ts +0 -49
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/parse.js +0 -93
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/regexes.cjs +0 -136
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/regexes.d.cts +0 -78
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/regexes.d.ts +0 -78
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/regexes.js +0 -127
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/registries.cjs +0 -57
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/registries.d.cts +0 -35
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/registries.d.ts +0 -35
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/registries.js +0 -52
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/schemas.cjs +0 -1972
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/schemas.d.cts +0 -1113
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/schemas.d.ts +0 -1113
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/schemas.js +0 -1941
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/standard-schema.cjs +0 -2
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/standard-schema.d.cts +0 -55
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/standard-schema.d.ts +0 -55
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/standard-schema.js +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/to-json-schema.cjs +0 -920
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/to-json-schema.d.cts +0 -90
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/to-json-schema.d.ts +0 -90
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/to-json-schema.js +0 -915
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/util.cjs +0 -658
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/util.d.cts +0 -197
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/util.d.ts +0 -197
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/util.js +0 -601
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/versions.cjs +0 -8
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/versions.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/versions.d.ts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/core/versions.js +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/index.cjs +0 -22
- pactkit-2.4.0/.opencode/node_modules/zod/v4/index.d.cts +0 -3
- pactkit-2.4.0/.opencode/node_modules/zod/v4/index.d.ts +0 -3
- pactkit-2.4.0/.opencode/node_modules/zod/v4/index.js +0 -3
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ar.cjs +0 -143
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ar.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ar.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ar.js +0 -116
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/az.cjs +0 -142
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/az.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/az.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/az.js +0 -115
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/be.cjs +0 -191
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/be.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/be.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/be.js +0 -164
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/bg.cjs +0 -156
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/bg.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/bg.d.ts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/bg.js +0 -128
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ca.cjs +0 -145
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ca.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ca.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ca.js +0 -118
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/cs.cjs +0 -162
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/cs.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/cs.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/cs.js +0 -135
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/da.cjs +0 -158
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/da.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/da.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/da.js +0 -131
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/de.cjs +0 -143
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/de.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/de.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/de.js +0 -116
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/en.cjs +0 -145
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/en.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/en.d.ts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/en.js +0 -117
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/eo.cjs +0 -144
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/eo.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/eo.d.ts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/eo.js +0 -116
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/es.cjs +0 -176
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/es.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/es.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/es.js +0 -149
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/fa.cjs +0 -149
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/fa.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/fa.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/fa.js +0 -122
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/fi.cjs +0 -149
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/fi.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/fi.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/fi.js +0 -122
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/fr-CA.cjs +0 -144
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/fr-CA.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/fr-CA.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/fr-CA.js +0 -117
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/fr.cjs +0 -143
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/fr.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/fr.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/fr.js +0 -116
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/he.cjs +0 -144
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/he.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/he.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/he.js +0 -117
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/hu.cjs +0 -144
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/hu.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/hu.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/hu.js +0 -117
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/id.cjs +0 -143
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/id.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/id.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/id.js +0 -116
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/index.cjs +0 -98
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/index.d.cts +0 -46
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/index.d.ts +0 -46
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/index.js +0 -46
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/is.cjs +0 -145
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/is.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/is.d.ts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/is.js +0 -117
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/it.cjs +0 -144
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/it.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/it.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/it.js +0 -117
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ja.cjs +0 -142
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ja.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ja.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ja.js +0 -115
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ka.cjs +0 -153
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ka.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ka.d.ts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ka.js +0 -125
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/kh.cjs +0 -12
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/kh.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/kh.d.ts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/kh.js +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/km.cjs +0 -144
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/km.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/km.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/km.js +0 -117
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ko.cjs +0 -148
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ko.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ko.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ko.js +0 -121
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/lt.cjs +0 -258
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/lt.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/lt.d.ts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/lt.js +0 -230
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/mk.cjs +0 -145
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/mk.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/mk.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/mk.js +0 -118
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ms.cjs +0 -143
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ms.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ms.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ms.js +0 -116
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/nl.cjs +0 -144
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/nl.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/nl.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/nl.js +0 -117
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/no.cjs +0 -143
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/no.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/no.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/no.js +0 -116
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ota.cjs +0 -144
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ota.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ota.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ota.js +0 -117
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/package.json +0 -6
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/pl.cjs +0 -144
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/pl.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/pl.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/pl.js +0 -117
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ps.cjs +0 -149
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ps.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ps.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ps.js +0 -122
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/pt.cjs +0 -143
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/pt.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/pt.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/pt.js +0 -116
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ru.cjs +0 -191
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ru.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ru.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ru.js +0 -164
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/sl.cjs +0 -144
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/sl.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/sl.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/sl.js +0 -117
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/sv.cjs +0 -145
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/sv.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/sv.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/sv.js +0 -118
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ta.cjs +0 -144
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ta.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ta.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ta.js +0 -117
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/th.cjs +0 -144
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/th.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/th.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/th.js +0 -117
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/tr.cjs +0 -143
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/tr.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/tr.d.ts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/tr.js +0 -115
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ua.cjs +0 -12
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ua.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ua.d.ts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ua.js +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/uk.cjs +0 -144
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/uk.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/uk.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/uk.js +0 -117
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ur.cjs +0 -144
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ur.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ur.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/ur.js +0 -117
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/vi.cjs +0 -143
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/vi.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/vi.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/vi.js +0 -116
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/yo.cjs +0 -142
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/yo.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/yo.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/yo.js +0 -115
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/zh-CN.cjs +0 -143
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/zh-CN.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/zh-CN.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/zh-CN.js +0 -116
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/zh-TW.cjs +0 -144
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/zh-TW.d.cts +0 -5
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/zh-TW.d.ts +0 -4
- pactkit-2.4.0/.opencode/node_modules/zod/v4/locales/zh-TW.js +0 -117
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/checks.cjs +0 -34
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/checks.d.cts +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/checks.d.ts +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/checks.js +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/coerce.cjs +0 -47
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/coerce.d.cts +0 -7
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/coerce.d.ts +0 -7
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/coerce.js +0 -17
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/external.cjs +0 -62
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/external.d.cts +0 -11
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/external.d.ts +0 -11
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/external.js +0 -13
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/index.cjs +0 -32
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/index.d.cts +0 -3
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/index.d.ts +0 -3
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/index.js +0 -3
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/iso.cjs +0 -60
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/iso.d.cts +0 -22
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/iso.d.ts +0 -22
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/iso.js +0 -30
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/package.json +0 -6
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/parse.cjs +0 -16
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/parse.d.cts +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/parse.d.ts +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/parse.js +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/schemas.cjs +0 -906
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/schemas.d.cts +0 -407
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/schemas.d.ts +0 -407
- pactkit-2.4.0/.opencode/node_modules/zod/v4/mini/schemas.js +0 -789
- pactkit-2.4.0/.opencode/node_modules/zod/v4/package.json +0 -6
- pactkit-2.4.0/.opencode/node_modules/zod/v4-mini/index.cjs +0 -17
- pactkit-2.4.0/.opencode/node_modules/zod/v4-mini/index.d.cts +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/v4-mini/index.d.ts +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/v4-mini/index.js +0 -1
- pactkit-2.4.0/.opencode/node_modules/zod/v4-mini/package.json +0 -6
- pactkit-2.4.0/.opencode/package.json +0 -5
- {pactkit-2.4.0 → pactkit-2.4.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/.github/dependabot.yml +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/.github/workflows/ci.yml +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/.gitignore +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/AGENTS.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/CODE_OF_CONDUCT.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/CONTRIBUTING.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/LICENSE +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/README.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/SECURITY.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/assets/logo.png +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/guides/codex-integration-preresearch.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/guides/tool-integration-checklist.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-001.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-002.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-003.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-004.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-005.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-006.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-007.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-008.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-009.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-010.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-011.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-012.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-013.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-014.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-015.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-016.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-017.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-018.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-019.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-020.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-021.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-022.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-023.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-024.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-025.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-026.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-027.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-028.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-029.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-030.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-031.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-032.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-033.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-034.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-035.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-slim-001.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-slim-002.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-slim-003.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-slim-004.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-slim-005.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-slim-006.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/specs/BUG-slim-007.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/test_cases/BUG-001_case.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/docs/test_cases/BUG-002_case.md +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/opencode.json +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/backfill.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/cleaners.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/cli.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/config.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/context_gen.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/coverage_gate.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/doctor.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/generators/__init__.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/generators/adapter.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/guards.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/id_generator.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/invariants.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/issue_sync.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/lazy_visualize.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/lessons.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/lint_runner.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/profiles.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/prompts/__init__.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/prompts/agents.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/prompts/commands.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/prompts/references.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/prompts/rules.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/prompts/skills.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/prompts/workflows.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/regression.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/schemas.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/scripts.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/sec_scope.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/skills/__init__.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/skills/scaffold.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/skills/spec_linter.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/spec_status.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/test_mapper.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/utils.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/src/pactkit/validators.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/conftest.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/e2e/__init__.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/e2e/cli/__init__.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/e2e/cli/test_cli_e2e.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/integration/__init__.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/integration/test_deploy_classic.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_agent_features.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_agent_frontmatter.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_agents_enrichment.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_board_bug027.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_board_sections.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug001_skill_path.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug002_plugin_paths.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug003_multi_import.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug004_dead_set.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug005_archive_taskless.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug006_scan_excludes.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug007_stale_trace_refs.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug008_stale_command_refs.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug009_project_config_backfill.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug010_rewrite_yaml.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug011_stale_refs.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug012_call_graph_filter.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug013_config_single_source.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug014_version_hygiene.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug017_project_init_playbook.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug018_issue_tracker_verification.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug019_venv_deployment.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug020_claude_md_backup.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug025_release_delegation.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug026_version_sync.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug028_ghost_refs.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug029_stack_detection_fallback.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug030_spec_lint_cli.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug031_docstring_accuracy.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug034_plan_metadata_template.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug035_opencode_dual_layer.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug_021.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug_022.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug_023.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug_024.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug_slim001_env_detection.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug_slim002_instruction_collision.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug_slim003.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug_slim004.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug_slim005.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_bug_slim006.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_check_command.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_command_frontmatter.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_command_visualize_modes.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_config.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_config_auto_merge.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_constitution_sharpening.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_create_skill.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_cross_flow_matrix.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_deploy_opencode_parity.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_deployer_cleanup.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_deployer_plugin.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_design_command.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_done_gates.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_draw_prompt.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_draw_references.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_drawio_mcp.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_home_path_fix.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_hotfix_command.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_init_guard.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_lang_profiles.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_list_stories.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_mcp_integration.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_model_config.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_modular_constitution.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_multi_prefix.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_pdca_slim.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_profiles.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_project_visibility.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_prompt_cli_refs.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_prompt_structural_invariants.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_prompts_package.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_release.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_release_field.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_release_v110.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_render_prompt.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_review_command.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_rules_enrichment.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_scaffold.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_scaffold_developer_prefix.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_schemas.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_script_extraction.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_selective_deploy.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_session_context.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_skill_structure.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_skills_enrichment.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_smart_regression.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_sprint_command.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_stack_references.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_status_command.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_statusline.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story014_release.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story015_ci_lint_gate.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story016_claude_md.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story017_init_claude_md.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story018_arch_staleness.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story019_bailout.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story020_horizon.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story021_rfc.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story022_decision_tree.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story023_test_quality.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story024_native_agent.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story025_ci_pipeline.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story026_issue_tracker.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story027_hooks.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story028_rule_scoping.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story029_doctor.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story030_lint.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story031_git_init_guard.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story032_greenfield_redirect.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story033_config_backfill.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story034_plan_config_refresh.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story035_readme_docs.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story037_regression_fix.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story038_call_graph_update.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story039_venv_config.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story040_layered_claude_md.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story042_spec_linter.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story043_active_clarify.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story044_consistency_check.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story045_auto_pr.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story046_agent_adapter.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story047_enterprise_flags.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story048_worktree_isolation.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story049_community_standards.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story050_doc_only_shortcut.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story051_workflow_streamlining.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story052_conditional_github_release.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story053_impact_regression.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story055_commands.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story055_config.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story055_spec_linter.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story056_commands.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story056_config.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story057_implicit_cleanup.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story058_routing_fix.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story060_init_hang.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story061_remove_thinking.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story062_mcp_recommendations.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story063_prompt_slimming.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story064_venv_local_md.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story065_sprint_model.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story069_opencode_format.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story070_opencode_compliance.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story071_opencode_config_parity.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story072_developer_prefix.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story073_command_model_routing.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim009_lazy_rules.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim010_dry_refactor.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim011_command_rules.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim012_ci.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim014_clean.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim014_context.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim014_guard.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim014_lazy_viz.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim014_next_id.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim014_regression.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim014_sec_scope.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim014_validators.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim015_doctor.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim016_testmap_lint.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim017.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim018.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim019_plan_subphases.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim020_explore_stall_fix.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim021.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim022.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim023.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim024.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim025.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim026.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim027.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim028.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim029.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim030.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim031.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim032.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim033.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim034.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim035.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim036.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim037.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim038.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim039.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim040.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim041.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim042.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim043.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim044.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim045.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim046.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim047.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_story_slim048.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_tools.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_update_task.py +0 -0
- {pactkit-2.4.0 → pactkit-2.4.1}/tests/unit/test_visualize_modes.py +0 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
test:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
strategy:
|
|
15
|
+
matrix:
|
|
16
|
+
python-version: ["3.10", "3.11", "3.12", "3.13"]
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
with:
|
|
20
|
+
fetch-depth: 0
|
|
21
|
+
|
|
22
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
23
|
+
uses: actions/setup-python@v5
|
|
24
|
+
with:
|
|
25
|
+
python-version: ${{ matrix.python-version }}
|
|
26
|
+
|
|
27
|
+
- name: Install dependencies
|
|
28
|
+
run: |
|
|
29
|
+
python -m pip install --upgrade pip
|
|
30
|
+
pip install -e ".[dev]" || pip install -e .
|
|
31
|
+
pip install pytest ruff
|
|
32
|
+
|
|
33
|
+
- name: Lint
|
|
34
|
+
run: ruff check src/ tests/
|
|
35
|
+
|
|
36
|
+
- name: Test
|
|
37
|
+
run: pytest tests/ -v --ignore=tests/unit/test_story_slim032.py --ignore=tests/unit/test_story_slim033.py --ignore=tests/unit/test_story_slim034.py
|
|
38
|
+
|
|
39
|
+
publish:
|
|
40
|
+
needs: test
|
|
41
|
+
runs-on: ubuntu-latest
|
|
42
|
+
environment: pypi
|
|
43
|
+
permissions:
|
|
44
|
+
contents: read
|
|
45
|
+
id-token: write
|
|
46
|
+
steps:
|
|
47
|
+
- uses: actions/checkout@v4
|
|
48
|
+
|
|
49
|
+
- name: Set up Python
|
|
50
|
+
uses: actions/setup-python@v5
|
|
51
|
+
with:
|
|
52
|
+
python-version: "3.12"
|
|
53
|
+
|
|
54
|
+
- name: Install build tools
|
|
55
|
+
run: python -m pip install --upgrade pip build
|
|
56
|
+
|
|
57
|
+
- name: Build package
|
|
58
|
+
run: python -m build
|
|
59
|
+
|
|
60
|
+
- name: Publish to PyPI
|
|
61
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -4,6 +4,19 @@ All notable changes to PactKit will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
Format follows [Keep a Changelog](https://keepachangelog.com/).
|
|
6
6
|
|
|
7
|
+
## [2.4.1] - 2026-03-26
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
- **CI Template Override** (HOTFIX-slim-051) — `_build_github_workflow()` now reads `ci.install_cmd` from `pactkit.yaml` before falling back to `CI_PROFILES` default, preventing `pactkit update` from reverting custom install commands.
|
|
11
|
+
- **Board ITEM_ID_RE** (HOTFIX-slim-052) — Regex now supports developer-prefixed IDs (`HOTFIX-slim-052`, `STORY-alice-001`), matching the pattern already used by `backfill.py` and `doctor.py`.
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
- **Board `move_story` Command** (HOTFIX-slim-052) — New `board.py move_story <ID> <target>` CLI subcommand moves stories between Backlog/In Progress/Done sections regardless of checkbox state.
|
|
15
|
+
- **Automated PyPI Publish** — New `publish.yml` GitHub Actions workflow triggers on `v*` tags; runs full test matrix (Python 3.10-3.13) then publishes via PyPI trusted publisher (OIDC).
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
- **Closed-Source Migration** — Source repo moved to `pactkit/pactkit-src` (private); public entry point at `pactkit/pactkit-public` (README, issues, install guide). PyPI distribution unchanged.
|
|
19
|
+
|
|
7
20
|
## [2.4.0] - 2026-03-25
|
|
8
21
|
|
|
9
22
|
### Added
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pactkit
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.1
|
|
4
4
|
Summary: Spec-driven agentic DevOps toolkit for AI coding assistants
|
|
5
5
|
Project-URL: Homepage, https://pactkit.dev
|
|
6
|
-
Project-URL: Repository, https://github.com/pactkit/pactkit
|
|
6
|
+
Project-URL: Repository, https://github.com/pactkit/pactkit-public
|
|
7
7
|
Project-URL: Documentation, https://pactkit.dev/docs
|
|
8
|
-
Project-URL: Issues, https://github.com/pactkit/pactkit/issues
|
|
8
|
+
Project-URL: Issues, https://github.com/pactkit/pactkit-public/issues
|
|
9
9
|
Author: Slim
|
|
10
10
|
License-Expression: MIT
|
|
11
11
|
License-File: LICENSE
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pactkit"
|
|
7
|
-
version = "2.4.
|
|
7
|
+
version = "2.4.1"
|
|
8
8
|
description = "Spec-driven agentic DevOps toolkit for AI coding assistants"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -55,9 +55,9 @@ multilang = [
|
|
|
55
55
|
|
|
56
56
|
[project.urls]
|
|
57
57
|
Homepage = "https://pactkit.dev"
|
|
58
|
-
Repository = "https://github.com/pactkit/pactkit"
|
|
58
|
+
Repository = "https://github.com/pactkit/pactkit-public"
|
|
59
59
|
Documentation = "https://pactkit.dev/docs"
|
|
60
|
-
Issues = "https://github.com/pactkit/pactkit/issues"
|
|
60
|
+
Issues = "https://github.com/pactkit/pactkit-public/issues"
|
|
61
61
|
|
|
62
62
|
[project.scripts]
|
|
63
63
|
pactkit = "pactkit.cli:main"
|
|
@@ -996,9 +996,10 @@ def _build_github_workflow(stack, ci_config, lang_profile, is_ghe=False):
|
|
|
996
996
|
for key, val in ci_prof["extra_setup"].items():
|
|
997
997
|
lines.append(f" {key}: {val}")
|
|
998
998
|
lines.append("")
|
|
999
|
+
install_cmd = ci_config.get("install_cmd", ci_prof["install_cmd"])
|
|
999
1000
|
lines.append(" - name: Install dependencies")
|
|
1000
1001
|
lines.append(" run: |")
|
|
1001
|
-
lines.append(f" {
|
|
1002
|
+
lines.append(f" {install_cmd}")
|
|
1002
1003
|
lines.append("")
|
|
1003
1004
|
lines.append(" - name: Lint")
|
|
1004
1005
|
lines.append(f" run: {lint_command}")
|
|
@@ -16,7 +16,7 @@ def nl():
|
|
|
16
16
|
# === SCRIPT BODY ===
|
|
17
17
|
|
|
18
18
|
# Shared pattern for all recognized work item prefixes
|
|
19
|
-
ITEM_ID_RE = r"(?:STORY|HOTFIX|BUG)
|
|
19
|
+
ITEM_ID_RE = r"(?:STORY|HOTFIX|BUG)(?:-[a-z]+)?-\d+"
|
|
20
20
|
|
|
21
21
|
# Flexible story title pattern: matches ### or #### (tolerant) with [ID] or ID: or ID formats
|
|
22
22
|
# Group 1: story ID, Group 2: title text
|
|
@@ -206,6 +206,54 @@ def snapshot_graph(version):
|
|
|
206
206
|
return f"✅ Snapshot {version}: {count} graphs saved"
|
|
207
207
|
|
|
208
208
|
|
|
209
|
+
# --- MOVE ---
|
|
210
|
+
def move_story(sid, target):
|
|
211
|
+
"""Move a story to the specified section regardless of checkbox state."""
|
|
212
|
+
valid_targets = {"backlog": _BACKLOG, "in_progress": _IN_PROGRESS, "done": _DONE}
|
|
213
|
+
if target not in valid_targets:
|
|
214
|
+
return f"❌ Invalid target: {target}. Use: backlog, in_progress, done"
|
|
215
|
+
p = Path.cwd() / "docs/product/sprint_board.md"
|
|
216
|
+
if not p.exists():
|
|
217
|
+
return "❌ No Board"
|
|
218
|
+
content = p.read_text(encoding="utf-8")
|
|
219
|
+
blocks = _parse_story_blocks(content)
|
|
220
|
+
# Find the target story
|
|
221
|
+
story_block = None
|
|
222
|
+
for block_sid, block_text in blocks:
|
|
223
|
+
if block_sid == sid:
|
|
224
|
+
story_block = block_text
|
|
225
|
+
break
|
|
226
|
+
if story_block is None:
|
|
227
|
+
return f"❌ Story {sid} not found on board"
|
|
228
|
+
# Remove the story block from its current position
|
|
229
|
+
idx = content.find(story_block)
|
|
230
|
+
if idx == -1:
|
|
231
|
+
return f"❌ Story {sid} block not found in content"
|
|
232
|
+
content = content[:idx] + content[idx + len(story_block):]
|
|
233
|
+
content = re.sub(r"\n{3,}", nl() + nl(), content)
|
|
234
|
+
# Find target section and the next section after it
|
|
235
|
+
target_header = valid_targets[target]
|
|
236
|
+
section_order = [_BACKLOG, _IN_PROGRESS, _DONE]
|
|
237
|
+
target_idx = content.find(target_header)
|
|
238
|
+
if target_idx == -1:
|
|
239
|
+
return f"❌ Section '{target_header}' not found"
|
|
240
|
+
# Find the next section header after target
|
|
241
|
+
next_section_idx = len(content)
|
|
242
|
+
for sec in section_order:
|
|
243
|
+
sec_idx = content.find(sec)
|
|
244
|
+
if sec_idx > target_idx and sec_idx < next_section_idx:
|
|
245
|
+
next_section_idx = sec_idx
|
|
246
|
+
# Insert story block just before the next section (or at end)
|
|
247
|
+
insert_point = next_section_idx
|
|
248
|
+
entry = nl() + story_block + nl() + nl()
|
|
249
|
+
content = content[:insert_point].rstrip() + entry + content[insert_point:]
|
|
250
|
+
content = re.sub(r"\n{3,}", nl() + nl(), content)
|
|
251
|
+
tmp = p.with_suffix(".tmp")
|
|
252
|
+
tmp.write_text(content, encoding="utf-8")
|
|
253
|
+
os.replace(tmp, p)
|
|
254
|
+
return f"✅ Moved {sid} to {target}"
|
|
255
|
+
|
|
256
|
+
|
|
209
257
|
# --- LIST ---
|
|
210
258
|
def list_stories():
|
|
211
259
|
p = Path.cwd() / "docs/product/sprint_board.md"
|
|
@@ -289,6 +337,9 @@ if __name__ == "__main__":
|
|
|
289
337
|
p_ver.add_argument("version")
|
|
290
338
|
p_snap = sub.add_parser("snapshot")
|
|
291
339
|
p_snap.add_argument("version")
|
|
340
|
+
p_move = sub.add_parser("move_story")
|
|
341
|
+
p_move.add_argument("story_id")
|
|
342
|
+
p_move.add_argument("target", choices=["backlog", "in_progress", "done"])
|
|
292
343
|
sub.add_parser("archive")
|
|
293
344
|
sub.add_parser("list_stories")
|
|
294
345
|
sub.add_parser("fix_board")
|
|
@@ -306,5 +357,7 @@ if __name__ == "__main__":
|
|
|
306
357
|
print(archive_stories())
|
|
307
358
|
elif a.cmd == "list_stories":
|
|
308
359
|
print(list_stories())
|
|
360
|
+
elif a.cmd == "move_story":
|
|
361
|
+
print(move_story(a.story_id, a.target))
|
|
309
362
|
elif a.cmd == "fix_board":
|
|
310
363
|
print(fix_board())
|
|
@@ -875,9 +875,24 @@ def impact(target='.', entry=None):
|
|
|
875
875
|
|
|
876
876
|
|
|
877
877
|
# --- MAIN VISUALIZE (v1.3.0 Multi-Mode) ---
|
|
878
|
-
def visualize(target='.', focus=None, mode='file', entry=None, depth=0, max_nodes=0, reverse=False, lazy=False):
|
|
878
|
+
def visualize(target='.', focus=None, mode='file', entry=None, depth=0, max_nodes=0, reverse=False, lazy=False, split=False):
|
|
879
879
|
root = Path(target).resolve()
|
|
880
880
|
|
|
881
|
+
# --- Unified mode (STORY-slim-049) ---
|
|
882
|
+
if mode == 'unified':
|
|
883
|
+
graph = build_unified_graph(root)
|
|
884
|
+
graphs_dir = root / 'docs' / 'architecture' / 'graphs'
|
|
885
|
+
graphs_dir.mkdir(parents=True, exist_ok=True)
|
|
886
|
+
dest = graphs_dir / 'unified_graph.mmd'
|
|
887
|
+
dest.write_text(graph.to_mermaid(), encoding='utf-8')
|
|
888
|
+
result = f'✅ Graph: {dest}'
|
|
889
|
+
# HOTFIX-slim-050: auto-split only for large graphs; --split forces it
|
|
890
|
+
if split or len(graph.nodes) > MAX_WORKFLOW_NODES:
|
|
891
|
+
focus_dir = graphs_dir / 'focus'
|
|
892
|
+
written = export_focus_graphs(graph, focus_dir)
|
|
893
|
+
result += f' + {len(written)} focus graphs in {focus_dir}'
|
|
894
|
+
return result
|
|
895
|
+
|
|
881
896
|
# --- Workflow mode (STORY-slim-036) ---
|
|
882
897
|
if mode == 'workflow':
|
|
883
898
|
dest = root / 'docs' / 'architecture' / 'graphs' / 'workflow_graph.mmd'
|
|
@@ -1006,7 +1021,7 @@ class WorkflowGraph:
|
|
|
1006
1021
|
"""Sanitize a string for use as a Mermaid node ID."""
|
|
1007
1022
|
return re.sub(r'[^a-zA-Z0-9_]', '_', raw)
|
|
1008
1023
|
|
|
1009
|
-
def to_mermaid(self) -> str:
|
|
1024
|
+
def to_mermaid(self, max_render_nodes: int = 0) -> str:
|
|
1010
1025
|
lines = ['graph TD']
|
|
1011
1026
|
if self.layered:
|
|
1012
1027
|
# STORY-slim-048 R3: Group by dimension for unified/layered graphs
|
|
@@ -1044,13 +1059,54 @@ class WorkflowGraph:
|
|
|
1044
1059
|
sid = self._sanitize_id(n.id)
|
|
1045
1060
|
lines.append(f' {sid}["{n.label}"]')
|
|
1046
1061
|
lines.append(' end')
|
|
1062
|
+
# STORY-slim-049 R3: max_render_nodes truncation for human-readable output
|
|
1063
|
+
if max_render_nodes > 0:
|
|
1064
|
+
node_lines = [ln for ln in lines[1:] if '[' in ln and 'NOTE' not in ln]
|
|
1065
|
+
if len(node_lines) > max_render_nodes:
|
|
1066
|
+
truncated_count = len(node_lines) - max_render_nodes
|
|
1067
|
+
keep_ids = set()
|
|
1068
|
+
for ln in node_lines[:max_render_nodes]:
|
|
1069
|
+
nid = ln.strip().split('[')[0].strip()
|
|
1070
|
+
keep_ids.add(nid)
|
|
1071
|
+
filtered = ['graph TD']
|
|
1072
|
+
for ln in lines[1:]:
|
|
1073
|
+
if '[' in ln:
|
|
1074
|
+
line_id = ln.strip().split('[')[0].strip()
|
|
1075
|
+
if line_id in keep_ids:
|
|
1076
|
+
filtered.append(ln)
|
|
1077
|
+
elif 'subgraph' in ln or 'end' == ln.strip():
|
|
1078
|
+
filtered.append(ln)
|
|
1079
|
+
filtered.append(f' NOTE["... and {truncated_count} more nodes"]')
|
|
1080
|
+
lines = filtered
|
|
1081
|
+
|
|
1047
1082
|
for e in self.edges:
|
|
1048
1083
|
src = self._sanitize_id(e.source)
|
|
1049
1084
|
dst = self._sanitize_id(e.target)
|
|
1050
1085
|
arrow = '-.->' if e.relation == 'sequence' else '-->'
|
|
1086
|
+
if max_render_nodes > 0 and len(lines) > 1:
|
|
1087
|
+
rendered_ids = {ln.strip().split('[')[0].strip() for ln in lines if '[' in ln and 'NOTE' not in ln}
|
|
1088
|
+
if src not in rendered_ids or dst not in rendered_ids:
|
|
1089
|
+
continue
|
|
1051
1090
|
lines.append(f' {src} {arrow}|{e.relation}| {dst}')
|
|
1052
1091
|
return nl().join(lines)
|
|
1053
1092
|
|
|
1093
|
+
def forward_reach(self, entry_id: str) -> set[str]:
|
|
1094
|
+
"""Forward BFS from entry_id — follow edges forward (source→target)."""
|
|
1095
|
+
forward_map: dict[str, list[str]] = {}
|
|
1096
|
+
for e in self.edges:
|
|
1097
|
+
forward_map.setdefault(e.source, []).append(e.target)
|
|
1098
|
+
visited: set[str] = set()
|
|
1099
|
+
queue = [entry_id]
|
|
1100
|
+
while queue:
|
|
1101
|
+
current = queue.pop(0)
|
|
1102
|
+
if current in visited:
|
|
1103
|
+
continue
|
|
1104
|
+
visited.add(current)
|
|
1105
|
+
for dst in forward_map.get(current, []):
|
|
1106
|
+
if dst not in visited:
|
|
1107
|
+
queue.append(dst)
|
|
1108
|
+
return visited
|
|
1109
|
+
|
|
1054
1110
|
def reverse_reach(self, entry_id: str) -> set[str]:
|
|
1055
1111
|
"""Reverse BFS from entry_id — follow edges backward (target→source)."""
|
|
1056
1112
|
reverse_map: dict[str, list[str]] = {}
|
|
@@ -1963,9 +2019,8 @@ def build_unified_graph(root) -> 'WorkflowGraph':
|
|
|
1963
2019
|
"""Build a unified layered graph merging all topology dimensions with code-level graph (STORY-slim-048 R1).
|
|
1964
2020
|
|
|
1965
2021
|
Returns WorkflowGraph with layered=True.
|
|
1966
|
-
|
|
2022
|
+
STORY-slim-049 R1: No truncation — full graph for accurate reverse_reach() impact analysis.
|
|
1967
2023
|
"""
|
|
1968
|
-
import warnings as _warnings
|
|
1969
2024
|
root = Path(root).resolve()
|
|
1970
2025
|
unified = WorkflowGraph()
|
|
1971
2026
|
unified.layered = True
|
|
@@ -1987,19 +2042,49 @@ def build_unified_graph(root) -> 'WorkflowGraph':
|
|
|
1987
2042
|
# Bridge edges across dimensions
|
|
1988
2043
|
_build_bridge_edges(func_registry, topology_graph, unified)
|
|
1989
2044
|
|
|
1990
|
-
#
|
|
1991
|
-
|
|
1992
|
-
_warnings.warn(
|
|
1993
|
-
f'Unified graph has {len(unified.nodes)} nodes, truncating to {MAX_WORKFLOW_NODES}',
|
|
1994
|
-
stacklevel=2,
|
|
1995
|
-
)
|
|
1996
|
-
keep_ids = set(list(unified.nodes.keys())[:MAX_WORKFLOW_NODES])
|
|
1997
|
-
unified.nodes = {k: v for k, v in unified.nodes.items() if k in keep_ids}
|
|
1998
|
-
unified.edges = [e for e in unified.edges if e.source in keep_ids and e.target in keep_ids]
|
|
2045
|
+
# STORY-slim-049 R1: No truncation — full graph for accurate reverse_reach() impact analysis.
|
|
2046
|
+
# MAX_WORKFLOW_NODES constant retained for backward compatibility but not enforced here.
|
|
1999
2047
|
|
|
2000
2048
|
return unified
|
|
2001
2049
|
|
|
2002
2050
|
|
|
2051
|
+
# --- STORY-slim-049: Focused Sub-Graph Export ---
|
|
2052
|
+
|
|
2053
|
+
_ENTRY_POINT_KINDS = {'command', 'service', 'page'}
|
|
2054
|
+
|
|
2055
|
+
|
|
2056
|
+
def export_focus_graphs(graph: WorkflowGraph, output_dir) -> list:
|
|
2057
|
+
"""Export per-entry-point focused sub-graph .mmd files (STORY-slim-049 R2).
|
|
2058
|
+
|
|
2059
|
+
Identifies first-level entry points (command/service/page), extracts
|
|
2060
|
+
reachable sub-graphs via reverse_reach(), writes each as a standalone .mmd.
|
|
2061
|
+
Returns list of Path objects for written files.
|
|
2062
|
+
"""
|
|
2063
|
+
output_dir = Path(output_dir)
|
|
2064
|
+
entry_points = [n for n in graph.nodes.values() if n.kind in _ENTRY_POINT_KINDS]
|
|
2065
|
+
if not entry_points:
|
|
2066
|
+
return []
|
|
2067
|
+
output_dir.mkdir(parents=True, exist_ok=True)
|
|
2068
|
+
written = []
|
|
2069
|
+
for entry in sorted(entry_points, key=lambda n: n.id):
|
|
2070
|
+
reached_ids = graph.forward_reach(entry.id)
|
|
2071
|
+
# Build sub-graph
|
|
2072
|
+
sub = WorkflowGraph()
|
|
2073
|
+
for nid in reached_ids:
|
|
2074
|
+
node = graph.nodes.get(nid)
|
|
2075
|
+
if node:
|
|
2076
|
+
sub.add_node(node)
|
|
2077
|
+
for edge in graph.edges:
|
|
2078
|
+
if edge.source in reached_ids and edge.target in reached_ids:
|
|
2079
|
+
sub.add_edge(edge)
|
|
2080
|
+
# Write .mmd
|
|
2081
|
+
sanitized = WorkflowGraph._sanitize_id(entry.id)
|
|
2082
|
+
dest = output_dir / f'focus_{sanitized}.mmd'
|
|
2083
|
+
dest.write_text(sub.to_mermaid(), encoding='utf-8')
|
|
2084
|
+
written.append(dest)
|
|
2085
|
+
return written
|
|
2086
|
+
|
|
2087
|
+
|
|
2003
2088
|
# --- CLI ---
|
|
2004
2089
|
if __name__ == '__main__':
|
|
2005
2090
|
parser = argparse.ArgumentParser()
|
|
@@ -2008,17 +2093,18 @@ if __name__ == '__main__':
|
|
|
2008
2093
|
sub.add_parser('list_rules')
|
|
2009
2094
|
p_viz = sub.add_parser('visualize')
|
|
2010
2095
|
p_viz.add_argument('--focus')
|
|
2011
|
-
p_viz.add_argument('--mode', choices=['file', 'class', 'call', 'workflow'], default='file')
|
|
2096
|
+
p_viz.add_argument('--mode', choices=['file', 'class', 'call', 'workflow', 'unified'], default='file')
|
|
2012
2097
|
p_viz.add_argument('--entry')
|
|
2013
2098
|
p_viz.add_argument('--depth', type=int, default=0, help='Limit graph traversal to N levels (0=unlimited)')
|
|
2014
2099
|
p_viz.add_argument('--max-nodes', type=int, default=0, help='Truncate graph to N nodes (0=unlimited)')
|
|
2015
2100
|
p_viz.add_argument('--reverse', action='store_true', default=False, help='Reverse BFS: find callers of entry function (STORY-053)')
|
|
2016
2101
|
p_viz.add_argument('--lazy', action='store_true', default=False, help='Skip regeneration if graph is up-to-date')
|
|
2102
|
+
p_viz.add_argument('--split', action='store_true', default=False, help='Generate per-entry-point focus graphs (unified mode only)')
|
|
2017
2103
|
p_impact = sub.add_parser('impact', help='Find test files impacted by a changed function (STORY-053)')
|
|
2018
2104
|
p_impact.add_argument('--entry', required=True, help='Changed function name')
|
|
2019
2105
|
|
|
2020
2106
|
a = parser.parse_args()
|
|
2021
2107
|
if a.cmd == 'init_arch': print(init_architecture())
|
|
2022
|
-
elif a.cmd == 'visualize': print(visualize('.', a.focus, a.mode, a.entry, depth=a.depth, max_nodes=a.max_nodes, reverse=a.reverse, lazy=a.lazy))
|
|
2108
|
+
elif a.cmd == 'visualize': print(visualize('.', a.focus, a.mode, a.entry, depth=a.depth, max_nodes=a.max_nodes, reverse=a.reverse, lazy=a.lazy, split=a.split))
|
|
2023
2109
|
elif a.cmd == 'impact': print(impact('.', a.entry))
|
|
2024
2110
|
elif a.cmd == 'list_rules': print(list_rules())
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"""Tests for STORY-slim-049: Split unified graph — full for AI + focused sub-graphs for humans."""
|
|
2
|
+
import sys
|
|
3
|
+
import warnings
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
sys.path.insert(0, str(Path(__file__).parent.parent.parent / 'src'))
|
|
7
|
+
from pactkit.skills.visualize import (
|
|
8
|
+
MAX_WORKFLOW_NODES,
|
|
9
|
+
WorkflowEdge,
|
|
10
|
+
WorkflowGraph,
|
|
11
|
+
WorkflowNode,
|
|
12
|
+
build_unified_graph,
|
|
13
|
+
export_focus_graphs,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def _make_project(tmp_path, files: dict[str, str]) -> Path:
|
|
18
|
+
for rel, content in files.items():
|
|
19
|
+
p = tmp_path / rel
|
|
20
|
+
p.parent.mkdir(parents=True, exist_ok=True)
|
|
21
|
+
p.write_text(content, encoding='utf-8')
|
|
22
|
+
return tmp_path
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# --- R1: No truncation in build_unified_graph ---
|
|
26
|
+
|
|
27
|
+
class TestNoTruncation:
|
|
28
|
+
def test_full_graph_no_truncation_warning(self, tmp_path):
|
|
29
|
+
"""AC1: build_unified_graph returns all nodes without truncation warning."""
|
|
30
|
+
# Create a project with 600+ functions (exceeding MAX_WORKFLOW_NODES)
|
|
31
|
+
funcs = '\n'.join(f'def func_{i}(): pass' for i in range(600))
|
|
32
|
+
_make_project(tmp_path, {
|
|
33
|
+
'pyproject.toml': '[project]\nname = "bigproject"',
|
|
34
|
+
'src/big.py': funcs,
|
|
35
|
+
})
|
|
36
|
+
with warnings.catch_warnings(record=True) as w:
|
|
37
|
+
warnings.simplefilter('always')
|
|
38
|
+
graph = build_unified_graph(str(tmp_path))
|
|
39
|
+
truncation_warnings = [x for x in w if 'truncating' in str(x.message).lower()]
|
|
40
|
+
assert len(truncation_warnings) == 0, f'Unexpected truncation warning: {truncation_warnings}'
|
|
41
|
+
# All 600 function nodes should be present
|
|
42
|
+
func_nodes = [n for n in graph.nodes.values() if n.kind == 'function']
|
|
43
|
+
assert len(func_nodes) >= 600
|
|
44
|
+
|
|
45
|
+
def test_max_workflow_nodes_constant_still_defined(self):
|
|
46
|
+
"""R5: MAX_WORKFLOW_NODES constant still exists for backward compat."""
|
|
47
|
+
assert isinstance(MAX_WORKFLOW_NODES, int)
|
|
48
|
+
assert MAX_WORKFLOW_NODES == 500
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
# --- R2: export_focus_graphs ---
|
|
52
|
+
|
|
53
|
+
class TestExportFocusGraphs:
|
|
54
|
+
def _build_graph_with_entries(self) -> WorkflowGraph:
|
|
55
|
+
"""Build a graph with commands, services, and pages as entry points."""
|
|
56
|
+
g = WorkflowGraph()
|
|
57
|
+
g.layered = True
|
|
58
|
+
# Commands
|
|
59
|
+
g.add_node(WorkflowNode(id='project-act', kind='command', label='project-act'))
|
|
60
|
+
g.add_node(WorkflowNode(id='project-plan', kind='command', label='project-plan'))
|
|
61
|
+
# Services
|
|
62
|
+
g.add_node(WorkflowNode(id='order-svc', kind='service', label='order-svc'))
|
|
63
|
+
# Pages
|
|
64
|
+
g.add_node(WorkflowNode(id='/dashboard', kind='page', label='/dashboard'))
|
|
65
|
+
# Supporting nodes
|
|
66
|
+
g.add_node(WorkflowNode(id='senior-dev', kind='agent', label='Senior Developer'))
|
|
67
|
+
g.add_node(WorkflowNode(id='pactkit-board', kind='skill', label='pactkit-board'))
|
|
68
|
+
# Edges
|
|
69
|
+
g.add_edge(WorkflowEdge(source='project-act', target='senior-dev', relation='invokes'))
|
|
70
|
+
g.add_edge(WorkflowEdge(source='project-act', target='pactkit-board', relation='depends_on'))
|
|
71
|
+
g.add_edge(WorkflowEdge(source='project-plan', target='senior-dev', relation='invokes'))
|
|
72
|
+
return g
|
|
73
|
+
|
|
74
|
+
def test_creates_files_per_entry_point(self, tmp_path):
|
|
75
|
+
"""AC2: One .mmd file per entry point (command, service, page)."""
|
|
76
|
+
graph = self._build_graph_with_entries()
|
|
77
|
+
result = export_focus_graphs(graph, tmp_path)
|
|
78
|
+
assert isinstance(result, list)
|
|
79
|
+
# 4 entry points: project-act, project-plan, order-svc, /dashboard
|
|
80
|
+
assert len(result) == 4
|
|
81
|
+
for p in result:
|
|
82
|
+
assert p.exists()
|
|
83
|
+
assert p.suffix == '.mmd'
|
|
84
|
+
|
|
85
|
+
def test_focus_file_starts_with_graph_td(self, tmp_path):
|
|
86
|
+
"""AC3: Each focused sub-graph is valid Mermaid starting with 'graph TD'."""
|
|
87
|
+
graph = self._build_graph_with_entries()
|
|
88
|
+
result = export_focus_graphs(graph, tmp_path)
|
|
89
|
+
for p in result:
|
|
90
|
+
content = p.read_text(encoding='utf-8')
|
|
91
|
+
assert content.startswith('graph TD'), f'{p.name} does not start with graph TD'
|
|
92
|
+
|
|
93
|
+
def test_focus_graph_contains_only_reachable_nodes(self, tmp_path):
|
|
94
|
+
"""AC2: Each focus file contains only nodes reachable via reverse_reach."""
|
|
95
|
+
graph = self._build_graph_with_entries()
|
|
96
|
+
export_focus_graphs(graph, tmp_path)
|
|
97
|
+
# Find the project-act focus file
|
|
98
|
+
act_files = list(tmp_path.glob('focus_project_act*'))
|
|
99
|
+
assert len(act_files) == 1
|
|
100
|
+
content = act_files[0].read_text(encoding='utf-8')
|
|
101
|
+
# project-act's reverse_reach should include senior-dev and pactkit-board
|
|
102
|
+
assert 'senior_dev' in content or 'senior-dev' in content
|
|
103
|
+
assert 'pactkit_board' in content or 'pactkit-board' in content
|
|
104
|
+
# order-svc should NOT be in project-act's focus graph
|
|
105
|
+
assert 'order_svc' not in content and 'order-svc' not in content
|
|
106
|
+
|
|
107
|
+
def test_empty_graph_returns_empty_list(self, tmp_path):
|
|
108
|
+
"""Edge case: graph with no entry points produces no files."""
|
|
109
|
+
graph = WorkflowGraph()
|
|
110
|
+
graph.add_node(WorkflowNode(id='some-func', kind='function', label='some_func'))
|
|
111
|
+
result = export_focus_graphs(graph, tmp_path)
|
|
112
|
+
assert result == []
|
|
113
|
+
|
|
114
|
+
def test_output_dir_created_if_missing(self, tmp_path):
|
|
115
|
+
"""export_focus_graphs creates output_dir if it doesn't exist."""
|
|
116
|
+
graph = self._build_graph_with_entries()
|
|
117
|
+
out = tmp_path / 'nested' / 'focus'
|
|
118
|
+
result = export_focus_graphs(graph, out)
|
|
119
|
+
assert out.is_dir()
|
|
120
|
+
assert len(result) > 0
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
# --- R3: max_render_nodes in to_mermaid ---
|
|
124
|
+
|
|
125
|
+
class TestMaxRenderNodes:
|
|
126
|
+
def test_default_renders_all(self):
|
|
127
|
+
"""Default max_render_nodes=0 renders all nodes."""
|
|
128
|
+
g = WorkflowGraph()
|
|
129
|
+
for i in range(100):
|
|
130
|
+
g.add_node(WorkflowNode(id=f'n{i}', kind='function', label=f'n{i}'))
|
|
131
|
+
mermaid = g.to_mermaid()
|
|
132
|
+
# Should have all 100 nodes
|
|
133
|
+
node_lines = [l for l in mermaid.split('\n') if '[' in l and 'NOTE' not in l]
|
|
134
|
+
assert len(node_lines) == 100
|
|
135
|
+
|
|
136
|
+
def test_truncates_at_limit(self):
|
|
137
|
+
"""AC4: max_render_nodes=50 renders 50 nodes + NOTE."""
|
|
138
|
+
g = WorkflowGraph()
|
|
139
|
+
for i in range(100):
|
|
140
|
+
g.add_node(WorkflowNode(id=f'n{i}', kind='function', label=f'n{i}'))
|
|
141
|
+
mermaid = g.to_mermaid(max_render_nodes=50)
|
|
142
|
+
node_lines = [l for l in mermaid.split('\n') if '[' in l and 'NOTE' not in l]
|
|
143
|
+
assert len(node_lines) == 50
|
|
144
|
+
assert 'NOTE' in mermaid
|
|
145
|
+
assert '50 more' in mermaid
|
|
146
|
+
|
|
147
|
+
def test_no_truncation_when_under_limit(self):
|
|
148
|
+
"""When graph has fewer nodes than limit, no NOTE added."""
|
|
149
|
+
g = WorkflowGraph()
|
|
150
|
+
for i in range(10):
|
|
151
|
+
g.add_node(WorkflowNode(id=f'n{i}', kind='function', label=f'n{i}'))
|
|
152
|
+
mermaid = g.to_mermaid(max_render_nodes=50)
|
|
153
|
+
assert 'NOTE' not in mermaid
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
# --- R4: CLI unified mode ---
|
|
157
|
+
|
|
158
|
+
class TestUnifiedCLI:
|
|
159
|
+
def test_unified_mode_writes_unified_graph(self, tmp_path):
|
|
160
|
+
"""AC5: visualize --mode unified writes unified_graph.mmd."""
|
|
161
|
+
from pactkit.skills.visualize import visualize
|
|
162
|
+
_make_project(tmp_path, {
|
|
163
|
+
'pyproject.toml': '[project]\nname = "test"',
|
|
164
|
+
'src/app.py': 'def main(): pass\n',
|
|
165
|
+
})
|
|
166
|
+
result = visualize(target=str(tmp_path), mode='unified')
|
|
167
|
+
expected = tmp_path / 'docs' / 'architecture' / 'graphs' / 'unified_graph.mmd'
|
|
168
|
+
assert expected.exists()
|
|
169
|
+
content = expected.read_text(encoding='utf-8')
|
|
170
|
+
assert content.startswith('graph TD')
|
|
171
|
+
|
|
172
|
+
def test_unified_split_creates_focus_dir(self, tmp_path):
|
|
173
|
+
"""AC6: --split generates focus/ directory with per-entry-point files."""
|
|
174
|
+
from pactkit.skills.visualize import visualize
|
|
175
|
+
_make_project(tmp_path, {
|
|
176
|
+
'pyproject.toml': '[project]\nname = "test"',
|
|
177
|
+
'.claude/commands/project-act.md': '# Act\n- **Agent**: Senior Developer\n',
|
|
178
|
+
'src/app.py': 'def main(): pass\n',
|
|
179
|
+
})
|
|
180
|
+
result = visualize(target=str(tmp_path), mode='unified', split=True)
|
|
181
|
+
focus_dir = tmp_path / 'docs' / 'architecture' / 'graphs' / 'focus'
|
|
182
|
+
assert focus_dir.is_dir()
|
|
183
|
+
focus_files = list(focus_dir.glob('*.mmd'))
|
|
184
|
+
assert len(focus_files) >= 1
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
# --- R5: Backward compatibility ---
|
|
188
|
+
|
|
189
|
+
class TestBackwardCompat:
|
|
190
|
+
def test_workflow_mode_unchanged(self, tmp_path):
|
|
191
|
+
"""AC7: workflow mode still works identically."""
|
|
192
|
+
from pactkit.skills.visualize import visualize
|
|
193
|
+
_make_project(tmp_path, {
|
|
194
|
+
'pyproject.toml': '[project]\nname = "test"',
|
|
195
|
+
'.claude/commands/project-act.md': '# Act\n- **Agent**: Senior Developer\n',
|
|
196
|
+
})
|
|
197
|
+
result = visualize(target=str(tmp_path), mode='workflow')
|
|
198
|
+
expected = tmp_path / 'docs' / 'architecture' / 'graphs' / 'workflow_graph.mmd'
|
|
199
|
+
assert expected.exists()
|
|
200
|
+
assert 'unified_graph' not in result
|
pactkit-2.4.0/.opencode/bun.lock
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"lockfileVersion": 1,
|
|
3
|
-
"configVersion": 1,
|
|
4
|
-
"workspaces": {
|
|
5
|
-
"": {
|
|
6
|
-
"dependencies": {
|
|
7
|
-
"@opencode-ai/plugin": "1.2.27",
|
|
8
|
-
},
|
|
9
|
-
},
|
|
10
|
-
},
|
|
11
|
-
"packages": {
|
|
12
|
-
"@opencode-ai/plugin": ["@opencode-ai/plugin@1.2.27", "", { "dependencies": { "@opencode-ai/sdk": "1.2.27", "zod": "4.1.8" } }, "sha512-h+8Bw9v9nghMg7T+SUCTzxlIhOrsTqXW7U0HVLGQST5DjbN7uyCUM51roZWZ8LRjGxzbzFhvPnY1bj8i+ioZyw=="],
|
|
13
|
-
|
|
14
|
-
"@opencode-ai/sdk": ["@opencode-ai/sdk@1.2.27", "", {}, "sha512-Wk0o/I+Fo+wE3zgvlJDs8Fb67KlKqX0PrV8dK5adSDkANq6r4Z25zXJg2iOir+a8ntg3rAcpel1OY4FV/TwRUA=="],
|
|
15
|
-
|
|
16
|
-
"zod": ["zod@4.1.8", "", {}, "sha512-5R1P+WwQqmmMIEACyzSvo4JXHY5WiAFHRMg+zBZKgKS+Q1viRa0C1hmUKtHltoIFKtIdki3pRxkmpP74jnNYHQ=="],
|
|
17
|
-
}
|
|
18
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
*
|