tuner-testkit 5.3.0__tar.gz → 5.3.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.
- {tuner_testkit-5.3.0/tuner_testkit.egg-info → tuner_testkit-5.3.1}/PKG-INFO +2 -2
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/README.md +1 -1
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/pyproject.toml +1 -1
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/__init__.py +1 -1
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/rules/work-task.mdc +2 -2
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/AGENTS.md +2 -2
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/docs/spec/agent-task-log.md +1 -1
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/docs/spec/artifacts-layout.md +3 -2
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/docs/spec/metadata-conventions.md +1 -1
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/docs/spec/work-task.md +3 -1
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/task/store.py +46 -18
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/task/tests/test_store.py +23 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1/tuner_testkit.egg-info}/PKG-INFO +2 -2
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/LICENSE +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/setup.cfg +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/action_words/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/action_words/__main__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/action_words/_internal/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/action_words/_internal/api.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/action_words/_internal/db.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/action_words/_internal/generators.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/action_words/_internal/ids.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/action_words/_internal/wait.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/action_words/base.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/action_words/context.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/action_words/registry.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_mock/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_mock/app.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_mock/errors.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_mock/router.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_mock/spec.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_mock/store.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_objects/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_objects/auth.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_objects/recording/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_objects/recording/capture.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_objects/recording/codegen.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_objects/recording/freeze.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_objects/recording/mocks.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_objects/recording/normalize.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_objects/recording/pipeline.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_objects/recording/sanitize.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_test/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_test/client.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_test/errors.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_test/jsonpath.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_test/model.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/_shared/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/_shared/changelog.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/api_recorder/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/api_recorder/__main__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/api_recorder/addon.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/api_recorder/cli.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/api_recorder/playwright_tap.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/api_recorder/tests/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/api_recorder/tests/test_addon.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/__main__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/build.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/cli.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/agents/bdd-asset-pipeline.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/agents/sut-self-learning.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/agents/sut-source-to-design.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/hooks/sync_registry.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/hooks.json +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/rules/agent-task-log.mdc +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/rules/apps-authoring.mdc +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/rules/apps-handover.mdc +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/rules/assets-knowledge.mdc +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/rules/bdd-asset-layering.mdc +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/rules/bdd-pipeline-gates.mdc +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/rules/bdd-stage-layout.mdc +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/rules/commit-convention.mdc +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/rules/explore-safety.mdc +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/rules/index-hygiene.mdc +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/rules/packages-db.mdc +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/rules/packages-fake.mdc +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/rules/packages-logging.mdc +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/rules/packages-page-test.mdc +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/rules/testcases.mdc +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/skills/analyze-mcp-network/SKILL.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/skills/create-action-word/SKILL.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/skills/create-app/SKILL.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/skills/derive-design-knowledge/SKILL.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/skills/derive-feature-sets/SKILL.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/skills/derive-test-design/SKILL.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/skills/dump-ddl/SKILL.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/skills/explore-sut/SKILL.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/skills/feature-authoring/SKILL.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/skills/feature-review-lint/SKILL.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/skills/freeze-api-objects/SKILL.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/skills/generate-test-report/SKILL.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/skills/maintain-behave-steps/SKILL.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/skills/maintain-index/SKILL.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/skills/maintain-page-objects/SKILL.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/skills/maintain-testcases/SKILL.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/skills/release-template/SKILL.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/skills/reuse-analysis/SKILL.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/skills/run-feature-playwright-mcp/SKILL.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/skills/run-test-execution/SKILL.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/MANIFEST.txt +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/docs/spec/action-words-syntax.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/docs/spec/api-objects-syntax.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/docs/spec/apps-authoring-syntax.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/docs/spec/assets-knowledge-syntax.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/docs/spec/bdd-run-gherkin-in-playwrightMCP.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/docs/spec/behave-gerkin-syntax.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/docs/spec/behave-step-definitions.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/docs/spec/commit-convention.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/docs/spec/design-knowledge-syntax.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/docs/spec/page-objects-syntax.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/docs/spec/sut-self-learning.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/docs/spec/test-design-syntax.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/docs/spec/testcase-syntax.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/tools/git-hooks/README.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/tools/git-hooks/commit-msg +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/tools/git-hooks/pre-commit +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/tools/git-hooks/pre-push +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/tools/git-hooks/secret_scan.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/tools/git-hooks/validate_commit_msg.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/paths.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/source.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/targets.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/tests/test_cli.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/tests/test_targets.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dump_ddl.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/evidence/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/evidence/__main__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/evidence/cli.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/evidence/persist.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/evidence/tests/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/evidence/tests/test_cli.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/evidence/tests/test_persist.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/index_ai/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/index_ai/__main__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/index_ai/registry.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/__main__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/manifest.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/scaffold.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/INDEX.project.md +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/apps/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/behave.ini +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/config/env.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/data/sut-accounts.example.yaml +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/gitignore +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/packages/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/packages/action_words/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/packages/action_words/_internal/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/packages/action_words/_internal/params.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/packages/action_words/models.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/packages/api_objects/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/packages/api_objects/auth.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/packages/api_objects/recording/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/packages/api_objects/registry.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/packages/page_objects/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/packages/page_objects/session.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/tests/features/api_environment.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/tests/features/api_steps/given.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/tests/features/api_steps/then.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/tests/features/api_steps/when.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/tests/features/ui_environment.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/tests/features/ui_steps/given.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/tests/features/ui_steps/then.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/tests/features/ui_steps/when.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/tests/pytest/conftest.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/workbench.cmd +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/stubs/workbench.sh +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/tests/test_git_hooks.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/init_repo/tests/test_scaffold.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/mock_server/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/mock_server/__main__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/mock_server/cli.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/mock_server/seed.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/mock_server/tool.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/page_recorder/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/page_recorder/__main__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/page_recorder/capture.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/page_recorder/cli.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/page_recorder/codegen.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/page_recorder/freeze.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/page_recorder/inject.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/page_recorder/session.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/page_recorder/tests/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/page_recorder/tests/test_capture.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/page_recorder/tests/test_cli.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/page_recorder/tests/test_freeze.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/recorder/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/recorder/__main__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/recorder/cli.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/recorder/tests/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/recorder/tests/test_cli.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/task/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/task/__main__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/task/cli.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/task/validate.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/artifacts.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/catalog/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/catalog/build.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/catalog/directory.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/catalog/front_matter.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/catalog/scan.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/catalog/tests/test_build.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/catalog/tests/test_directory.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/catalog/tests/test_front_matter.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/config.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/db/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/db/client.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/db/connection.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/excel/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/excel/workbook.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/fake/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/fake/__main__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/fake/catalog.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/fake/china.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/fake/cli.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/fake/core.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/fake/medical.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/fake/wrappers.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/logging/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/logging/context.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/logging/core.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/logging/helpers.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/logging/hooks.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/logging/scenario_file.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/page_test/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/page_test/__main__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/page_test/base.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/page_test/driver.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/page_test/errors.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/page_test/harvest.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/page_test/health.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/page_test/locator.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/page_test/model.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/page_test/registry.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/page_test/session.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/page_test/steps.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/page_test/testing.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/project.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/testcases/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/testcases/__main__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/testcases/tests/test_validate.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/testcases/validate.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/tools/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/tools/manifest.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/tools/runner.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/tools/tests/test_manifest.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/tools/tests/test_runner.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/__main__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/app.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/cli.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/kinds/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/kinds/app_generic.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/kinds/word_db_seed.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/kinds/word_generic.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/static/app.css +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/templates/_params_form.html +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/templates/ai.html +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/templates/ai_detail.html +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/templates/base.html +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/templates/env.html +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/templates/history.html +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/templates/home.html +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/templates/knowledge.html +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/templates/run.html +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/templates/tool.html +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/templates/tools.html +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/templates/word.html +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/templates/word_db_seed.html +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/templates/words.html +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workbench/tests/test_app.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workspace/__init__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workspace/__main__.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workspace/cli.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workspace/index_render.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workspace/meta.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workspace/tests/test_index_render.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/workspace/tests/test_meta.py +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit.egg-info/SOURCES.txt +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit.egg-info/dependency_links.txt +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit.egg-info/entry_points.txt +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit.egg-info/requires.txt +0 -0
- {tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tuner-testkit
|
|
3
|
-
Version: 5.3.
|
|
3
|
+
Version: 5.3.1
|
|
4
4
|
Summary: Shared test runtime, recorders, and DNA overlay for SUT test repos
|
|
5
5
|
Author: tuner-testkit contributors
|
|
6
6
|
License-Expression: MIT
|
|
@@ -221,4 +221,4 @@ uv sync --extra all
|
|
|
221
221
|
(被测系统 = 平台本身,uv workspace 成员,共用 `.venv`):路线图在 `dogfood/assets/domain-notes/platform/roadmap.md`,
|
|
222
222
|
验收活文档在 `dogfood/tests/features/`。见 [`dogfood/README.md`](dogfood/README.md)。
|
|
223
223
|
|
|
224
|
-
5.3.0 发行说明(功能用例集 `assets/testcases/`)见 [`docs/changelog/TEMPLATE-5.3.0.md`](docs/changelog/TEMPLATE-5.3.0.md);5.2.0 发行说明(work task / 测试设计 / 证据附件)见 [`docs/changelog/TEMPLATE-5.2.0.md`](docs/changelog/TEMPLATE-5.2.0.md);5.1.0 发行说明(工作台 / meta stamp / `--json`)见 [`docs/changelog/TEMPLATE-5.1.0.md`](docs/changelog/TEMPLATE-5.1.0.md);5.0.0(Plane Job 协议退场、`tuner-workspace`)见 [`TEMPLATE-5.0.0.md`](docs/changelog/TEMPLATE-5.0.0.md);4.3.0 见 [`TEMPLATE-4.3.0.md`](docs/changelog/TEMPLATE-4.3.0.md);3.x → 4.x 迁移见 [`TEMPLATE-4.0.0.md`](docs/changelog/TEMPLATE-4.0.0.md)。平台能力地图见 [`INDEX.md`](INDEX.md)。
|
|
224
|
+
5.3.1 发行说明(已回答提问归档)见 [`docs/changelog/TEMPLATE-5.3.1.md`](docs/changelog/TEMPLATE-5.3.1.md);5.3.0 发行说明(功能用例集 `assets/testcases/`)见 [`docs/changelog/TEMPLATE-5.3.0.md`](docs/changelog/TEMPLATE-5.3.0.md);5.2.0 发行说明(work task / 测试设计 / 证据附件)见 [`docs/changelog/TEMPLATE-5.2.0.md`](docs/changelog/TEMPLATE-5.2.0.md);5.1.0 发行说明(工作台 / meta stamp / `--json`)见 [`docs/changelog/TEMPLATE-5.1.0.md`](docs/changelog/TEMPLATE-5.1.0.md);5.0.0(Plane Job 协议退场、`tuner-workspace`)见 [`TEMPLATE-5.0.0.md`](docs/changelog/TEMPLATE-5.0.0.md);4.3.0 见 [`TEMPLATE-4.3.0.md`](docs/changelog/TEMPLATE-4.3.0.md);3.x → 4.x 迁移见 [`TEMPLATE-4.0.0.md`](docs/changelog/TEMPLATE-4.0.0.md)。平台能力地图见 [`INDEX.md`](INDEX.md)。
|
|
@@ -173,4 +173,4 @@ uv sync --extra all
|
|
|
173
173
|
(被测系统 = 平台本身,uv workspace 成员,共用 `.venv`):路线图在 `dogfood/assets/domain-notes/platform/roadmap.md`,
|
|
174
174
|
验收活文档在 `dogfood/tests/features/`。见 [`dogfood/README.md`](dogfood/README.md)。
|
|
175
175
|
|
|
176
|
-
5.3.0 发行说明(功能用例集 `assets/testcases/`)见 [`docs/changelog/TEMPLATE-5.3.0.md`](docs/changelog/TEMPLATE-5.3.0.md);5.2.0 发行说明(work task / 测试设计 / 证据附件)见 [`docs/changelog/TEMPLATE-5.2.0.md`](docs/changelog/TEMPLATE-5.2.0.md);5.1.0 发行说明(工作台 / meta stamp / `--json`)见 [`docs/changelog/TEMPLATE-5.1.0.md`](docs/changelog/TEMPLATE-5.1.0.md);5.0.0(Plane Job 协议退场、`tuner-workspace`)见 [`TEMPLATE-5.0.0.md`](docs/changelog/TEMPLATE-5.0.0.md);4.3.0 见 [`TEMPLATE-4.3.0.md`](docs/changelog/TEMPLATE-4.3.0.md);3.x → 4.x 迁移见 [`TEMPLATE-4.0.0.md`](docs/changelog/TEMPLATE-4.0.0.md)。平台能力地图见 [`INDEX.md`](INDEX.md)。
|
|
176
|
+
5.3.1 发行说明(已回答提问归档)见 [`docs/changelog/TEMPLATE-5.3.1.md`](docs/changelog/TEMPLATE-5.3.1.md);5.3.0 发行说明(功能用例集 `assets/testcases/`)见 [`docs/changelog/TEMPLATE-5.3.0.md`](docs/changelog/TEMPLATE-5.3.0.md);5.2.0 发行说明(work task / 测试设计 / 证据附件)见 [`docs/changelog/TEMPLATE-5.2.0.md`](docs/changelog/TEMPLATE-5.2.0.md);5.1.0 发行说明(工作台 / meta stamp / `--json`)见 [`docs/changelog/TEMPLATE-5.1.0.md`](docs/changelog/TEMPLATE-5.1.0.md);5.0.0(Plane Job 协议退场、`tuner-workspace`)见 [`TEMPLATE-5.0.0.md`](docs/changelog/TEMPLATE-5.0.0.md);4.3.0 见 [`TEMPLATE-4.3.0.md`](docs/changelog/TEMPLATE-4.3.0.md);3.x → 4.x 迁移见 [`TEMPLATE-4.0.0.md`](docs/changelog/TEMPLATE-4.0.0.md)。平台能力地图见 [`INDEX.md`](INDEX.md)。
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Work tasks live in work/tasks. When a human must choose a missing evidence channel, write an inbox question and block the task instead of inventing the channel.
|
|
3
3
|
alwaysApply: true
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# 工作任务与人类提问
|
|
@@ -15,7 +15,7 @@ version: 1.0.0
|
|
|
15
15
|
- 端到端点击用 `type: test-execution`,`design` 指向已有测试设计;报告写入 `assets/testreport/`,证据用 `tuner-evidence persist` 或 `attach` 挂上 `task_id`、截图、脱敏日志、接口 JSON。
|
|
16
16
|
- 执行结束后把结果写入该测试设计的「执行反馈」,只引用证据路径。
|
|
17
17
|
- 仓库没有写明的证据通道(典型是后端日志:SSH 目录、日志接口、Rancher API)立刻 `tuner-task ask`。日志主题用 `sut-log-source`。
|
|
18
|
-
- 提问写入 `artifacts/inbox/questions/` 后停止这一支,把任务保持在 `blocked`,直到 `tuner-task answer
|
|
18
|
+
- 提问写入 `artifacts/inbox/questions/` 后停止这一支,把任务保持在 `blocked`,直到 `tuner-task answer`。回答后的问题文件在 `artifacts/inbox/archived-question/`。
|
|
19
19
|
|
|
20
20
|
## Must not
|
|
21
21
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- version: 1.7.
|
|
1
|
+
<!-- version: 1.7.1 -->
|
|
2
2
|
# AGENTS — 平台总入口(轻量 DM)
|
|
3
3
|
|
|
4
4
|
> 本文件是"repo as a platform"的**稳定世界观**:只写不常变的分层结构与角色。
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
| 测试层 | `tests/` | 自动化测试代码(behave `features/` + `pytest/`)。 | behave / pytest |
|
|
22
22
|
| 文档层 | `docs/` | 仓库使用说明与规范(`docs/spec/**`)。 | 只读 |
|
|
23
23
|
|
|
24
|
-
配套:`config/`(环境/数据源)、`.cursor/`(AI 组件,见下)、`work/tasks/`(入库的任务上下文,规范 `docs/spec/work-task.md`)、`artifacts/`·`logs/`(运行产出,规范 `docs/spec/artifacts-layout.md`:MCP evidence 落 `artifacts/evidence/<run_id>/`;agent 任务记录落 `artifacts/inbox
|
|
24
|
+
配套:`config/`(环境/数据源)、`.cursor/`(AI 组件,见下)、`work/tasks/`(入库的任务上下文,规范 `docs/spec/work-task.md`)、`artifacts/`·`logs/`(运行产出,规范 `docs/spec/artifacts-layout.md`:MCP evidence 落 `artifacts/evidence/<run_id>/`;agent 任务记录落 `artifacts/inbox/`;阻塞式人类提问未回答时落 `artifacts/inbox/questions/`,回答后移到 `artifacts/inbox/archived-question/`;工具运行落 `artifacts/runs/<run_id>/`;回归报告落 `artifacts/reports/<run_id>/`,每个 run 目录带 `manifest.json`)。SUT 登录本机文件:`data/sut-accounts.local.yaml`(gitignore)。
|
|
25
25
|
|
|
26
26
|
## 2. 三角色
|
|
27
27
|
|
|
@@ -72,7 +72,7 @@ evidence:
|
|
|
72
72
|
artifacts/inbox/questions/Q-<YYYYMMDD>-<nnn>.md
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
回答后同一文件移到 `artifacts/inbox/archived-question/`。字段与命令见 `docs/spec/work-task.md`。提问后把对应 `work/tasks` 标为 `blocked`。回答写入任务的 `## Decisions`;可复用的通道说明策展到 `assets/domain-notes/`。
|
|
76
76
|
|
|
77
77
|
## 5. 密钥
|
|
78
78
|
|
|
@@ -16,7 +16,8 @@ description: 交付物目录 artifacts/ 的子目录职责、run 级 manifest.js
|
|
|
16
16
|
artifacts/
|
|
17
17
|
├── evidence/<run_id>/ # Playwright MCP / 网络 dump(tuner-evidence persist);脱敏;gitignore
|
|
18
18
|
├── inbox/<utc>-<agent>-<slice>.md # agent 任务记录(agent-task-log.md);gitignore
|
|
19
|
-
├── inbox/questions/Q-<YYYYMMDD>-<nnn>.md #
|
|
19
|
+
├── inbox/questions/Q-<YYYYMMDD>-<nnn>.md # 未回答的人类提问(work-task.md);gitignore
|
|
20
|
+
├── inbox/archived-question/Q-<YYYYMMDD>-<nnn>.md # 已回答的提问;gitignore
|
|
20
21
|
├── runs/<run_id>/ # 工具 / 动作词的一次运行(tuner-workspace run、工作台);gitignore
|
|
21
22
|
├── reports/<run_id>/ # 一次回归(behave / pytest)的报告与摘要;gitignore
|
|
22
23
|
├── catalogs/workspace.json # tuner-workspace catalog 产物;gitignore
|
|
@@ -68,7 +69,7 @@ artifacts/
|
|
|
68
69
|
| behave(`*_environment.py` 钩子) | `reports/<run_id>/` | `summary.json`(feature/scenario 状态)、`manifest.json`;`-f html-pretty -o $TUNER_REPORT_DIR/report.html` 时 html 同目录 |
|
|
69
70
|
| pytest | `reports/<run_id>/` | `pytest --junitxml artifacts/reports/<run_id>/junit.xml`,再 `tuner_testkit.artifacts.finish_run` 写 manifest |
|
|
70
71
|
| `tuner-evidence persist` / `attach` | `evidence/<run_id>/` | `network.jsonl` / `actions.jsonl` / `run_summary.md` / `screenshots/` / `logs/` / `api/`;`manifest.params.task_id` 指向 `work/tasks` |
|
|
71
|
-
| agent(编排) | `inbox/` | 会话流水见 `agent-task-log.md
|
|
72
|
+
| agent(编排) | `inbox/` | 会话流水见 `agent-task-log.md`;未回答提问见 `inbox/questions/`,已回答见 `inbox/archived-question/` |
|
|
72
73
|
| `tuner-workspace catalog` | `catalogs/workspace.json` | 见 `tuner_testkit/workspace/README.md` |
|
|
73
74
|
|
|
74
75
|
环境变量 `TUNER_REPORT_DIR` 指定本次回归的 run 目录(不设则钩子自动生成 `reports/<run_id>/`);
|
|
@@ -54,7 +54,7 @@ catalog 同时用 `git log --diff-filter=A --format=%ae -- <path>` 算首次提
|
|
|
54
54
|
### 任务与测试设计
|
|
55
55
|
|
|
56
56
|
- `kind: task` 落在 `work/tasks/TASK-*.md`,字段见 `docs/spec/work-task.md`。
|
|
57
|
-
- `kind: question`
|
|
57
|
+
- `kind: question` 未回答落在 `artifacts/inbox/questions/Q-*.md`,回答后移到 `artifacts/inbox/archived-question/`(不入库)。
|
|
58
58
|
- `kind: testdesign` 落在 `assets/testdesign/<sut>/<slug>.md`,字段见 `docs/spec/test-design-syntax.md`。
|
|
59
59
|
- `kind: testcase` 落在 `assets/testcases/<模块>/<功能>.md`;模块说明是 `testcase-module`,总索引是 `testcase-index`。字段见 `docs/spec/testcase-syntax.md`。
|
|
60
60
|
|
|
@@ -14,7 +14,8 @@ description: 入库任务 work/tasks、阻塞式人类提问,以及和测试
|
|
|
14
14
|
|
|
15
15
|
```text
|
|
16
16
|
work/tasks/TASK-<YYYYMMDD>-<nnn>.md # 入库
|
|
17
|
-
artifacts/inbox/questions/Q-<YYYYMMDD>-<nnn>.md
|
|
17
|
+
artifacts/inbox/questions/Q-<YYYYMMDD>-<nnn>.md # 未回答;gitignore
|
|
18
|
+
artifacts/inbox/archived-question/Q-<YYYYMMDD>-<nnn>.md # 已回答;gitignore
|
|
18
19
|
```
|
|
19
20
|
|
|
20
21
|
`work/**` 的提交 scope 是 `work`。问题文件不入库;人答完后的结论写回任务的 `## Decisions`,需要留下的通道说明再策展到 `assets/domain-notes/`。
|
|
@@ -73,6 +74,7 @@ tuner-task answer Q-20260924-001 --option rancher-api \
|
|
|
73
74
|
```
|
|
74
75
|
|
|
75
76
|
- 提问立刻落盘,并把任务标为 `blocked`。只挡住依赖该答案的回写;不依赖日志的点击可以先做完,但在回答前不要编写取日志实现,也不要选定通道。
|
|
77
|
+
- `tuner-task answer` 把问题文件从 `questions/` 移到 `archived-question/`,未回答的问题仍只留在 `questions/`。同一天的新问题编号会计入归档,避免复用已回答的 ID。
|
|
76
78
|
- `--note` 只留可入库的指向。CLI 拒绝 `password=` / `token:` / `Bearer …` 这类赋值。
|
|
77
79
|
- `skip` 表示报告里日志证据写「无」,设计上的日志断言保持未验证。
|
|
78
80
|
- `tuner-task finish` 在仍有 `status: open` 且 `blocking: true` 的问题时失败。
|
|
@@ -49,6 +49,10 @@ def questions_dir(root: Path) -> Path:
|
|
|
49
49
|
return root / "artifacts" / "inbox" / "questions"
|
|
50
50
|
|
|
51
51
|
|
|
52
|
+
def archived_questions_dir(root: Path) -> Path:
|
|
53
|
+
return root / "artifacts" / "inbox" / "archived-question"
|
|
54
|
+
|
|
55
|
+
|
|
52
56
|
def _utc_day() -> str:
|
|
53
57
|
return datetime.now(timezone.utc).strftime("%Y%m%d")
|
|
54
58
|
|
|
@@ -57,6 +61,19 @@ def _today() -> str:
|
|
|
57
61
|
return datetime.now(timezone.utc).strftime("%Y-%m-%d")
|
|
58
62
|
|
|
59
63
|
|
|
64
|
+
def _next_question_id(repo: Path) -> str:
|
|
65
|
+
"""Next Q-id for today, counting both the open inbox and the archive."""
|
|
66
|
+
day = _utc_day()
|
|
67
|
+
pat = re.compile(rf"^Q-{day}-(\d+)$")
|
|
68
|
+
nums: list[int] = []
|
|
69
|
+
for directory in (questions_dir(repo), archived_questions_dir(repo)):
|
|
70
|
+
if not directory.is_dir():
|
|
71
|
+
continue
|
|
72
|
+
nums.extend(int(m.group(1)) for path in directory.glob(f"Q-{day}-*.md") if (m := pat.match(path.stem)))
|
|
73
|
+
questions_dir(repo).mkdir(parents=True, exist_ok=True)
|
|
74
|
+
return f"Q-{day}-{max(nums, default=0) + 1:03d}"
|
|
75
|
+
|
|
76
|
+
|
|
60
77
|
def _next_seq(directory: Path, prefix: str, day: str) -> str:
|
|
61
78
|
directory.mkdir(parents=True, exist_ok=True)
|
|
62
79
|
pat = re.compile(rf"^{re.escape(prefix)}-{day}-(\d+)$")
|
|
@@ -300,7 +317,7 @@ def ask_question(
|
|
|
300
317
|
ids = [item["id"] for item in chosen]
|
|
301
318
|
if len(ids) != len(set(ids)):
|
|
302
319
|
raise ValueError("option ids must be unique")
|
|
303
|
-
question_id =
|
|
320
|
+
question_id = _next_question_id(repo)
|
|
304
321
|
prompt_one = " ".join(prompt.split())
|
|
305
322
|
meta: dict[str, Any] = {
|
|
306
323
|
"kind": "question",
|
|
@@ -347,25 +364,31 @@ def ask_question(
|
|
|
347
364
|
|
|
348
365
|
def list_questions(*, root: Path | None = None, status: str | None = "open") -> list[dict[str, Any]]:
|
|
349
366
|
repo = Path(root) if root is not None else project_root()
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
367
|
+
if status == "answered":
|
|
368
|
+
directories = [archived_questions_dir(repo)]
|
|
369
|
+
elif status == "open":
|
|
370
|
+
directories = [questions_dir(repo)]
|
|
371
|
+
else:
|
|
372
|
+
directories = [questions_dir(repo), archived_questions_dir(repo)]
|
|
353
373
|
rows = []
|
|
354
|
-
for
|
|
355
|
-
|
|
356
|
-
if status and meta.get("status") != status:
|
|
374
|
+
for directory in directories:
|
|
375
|
+
if not directory.is_dir():
|
|
357
376
|
continue
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
377
|
+
for path in sorted(directory.glob("Q-*.md")):
|
|
378
|
+
meta, _ = _read(path)
|
|
379
|
+
if status and meta.get("status") != status:
|
|
380
|
+
continue
|
|
381
|
+
rows.append(
|
|
382
|
+
{
|
|
383
|
+
"id": meta.get("id"),
|
|
384
|
+
"task_id": meta.get("task_id"),
|
|
385
|
+
"topic": meta.get("topic"),
|
|
386
|
+
"status": meta.get("status"),
|
|
387
|
+
"blocking": meta.get("blocking"),
|
|
388
|
+
"prompt": meta.get("prompt"),
|
|
389
|
+
"path": path.relative_to(repo).as_posix(),
|
|
390
|
+
}
|
|
391
|
+
)
|
|
369
392
|
return rows
|
|
370
393
|
|
|
371
394
|
|
|
@@ -432,6 +455,10 @@ def answer_question(
|
|
|
432
455
|
"answered": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
|
|
433
456
|
}
|
|
434
457
|
_write(path, meta, text)
|
|
458
|
+
dest = archived_questions_dir(repo) / path.name
|
|
459
|
+
dest.parent.mkdir(parents=True, exist_ok=True)
|
|
460
|
+
path.replace(dest)
|
|
461
|
+
path = dest
|
|
435
462
|
task_id = str(meta.get("task_id") or "")
|
|
436
463
|
task_path = _task_path(repo, task_id)
|
|
437
464
|
task_meta, task_text = _read(task_path)
|
|
@@ -454,6 +481,7 @@ def answer_question(
|
|
|
454
481
|
"id": question_id,
|
|
455
482
|
"status": "answered",
|
|
456
483
|
"option": option,
|
|
484
|
+
"path": path.relative_to(repo).as_posix(),
|
|
457
485
|
"task_id": task_id,
|
|
458
486
|
"task_status": task_meta.get("status"),
|
|
459
487
|
"curated": curated or None,
|
|
@@ -51,6 +51,10 @@ def test_ask_blocks_until_answer_then_curates(tmp_path: Path):
|
|
|
51
51
|
root=tmp_path,
|
|
52
52
|
)
|
|
53
53
|
assert answered["task_status"] == "in_progress"
|
|
54
|
+
assert answered["path"].startswith("artifacts/inbox/archived-question/")
|
|
55
|
+
assert not (tmp_path / "artifacts" / "inbox" / "questions" / f"{asked['id']}.md").is_file()
|
|
56
|
+
archived = tmp_path / answered["path"]
|
|
57
|
+
assert "status: answered" in archived.read_text(encoding="utf-8")
|
|
54
58
|
note = (tmp_path / answered["curated"]).read_text(encoding="utf-8")
|
|
55
59
|
assert "rancher-api" in note
|
|
56
60
|
assert parse_front_matter(note)["kind"] == "domain-note"
|
|
@@ -97,6 +101,25 @@ def test_bind_appends_output(tmp_path: Path):
|
|
|
97
101
|
assert shown["evidence"] == ["artifacts/evidence/20260924T000000Z-home"]
|
|
98
102
|
|
|
99
103
|
|
|
104
|
+
def test_answer_archives_question_and_keeps_id(tmp_path: Path):
|
|
105
|
+
created = create_task(task_type="explore", title="看日志", root=tmp_path, author="qa@example.com")
|
|
106
|
+
first = ask_question(
|
|
107
|
+
task_id=created["id"],
|
|
108
|
+
topic="sut-log-source",
|
|
109
|
+
prompt="日志从哪取",
|
|
110
|
+
root=tmp_path,
|
|
111
|
+
)
|
|
112
|
+
answer_question(first["id"], option="skip", root=tmp_path)
|
|
113
|
+
second = ask_question(
|
|
114
|
+
task_id=created["id"],
|
|
115
|
+
topic="sut-log-source",
|
|
116
|
+
prompt="再确认一次通道",
|
|
117
|
+
root=tmp_path,
|
|
118
|
+
)
|
|
119
|
+
assert second["id"] != first["id"]
|
|
120
|
+
assert int(second["id"].rsplit("-", 1)[-1]) == int(first["id"].rsplit("-", 1)[-1]) + 1
|
|
121
|
+
|
|
122
|
+
|
|
100
123
|
def test_finish_refuses_open_question(tmp_path: Path):
|
|
101
124
|
created = create_task(task_type="explore", title="摸页面", root=tmp_path, author="qa@example.com")
|
|
102
125
|
ask_question(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tuner-testkit
|
|
3
|
-
Version: 5.3.
|
|
3
|
+
Version: 5.3.1
|
|
4
4
|
Summary: Shared test runtime, recorders, and DNA overlay for SUT test repos
|
|
5
5
|
Author: tuner-testkit contributors
|
|
6
6
|
License-Expression: MIT
|
|
@@ -221,4 +221,4 @@ uv sync --extra all
|
|
|
221
221
|
(被测系统 = 平台本身,uv workspace 成员,共用 `.venv`):路线图在 `dogfood/assets/domain-notes/platform/roadmap.md`,
|
|
222
222
|
验收活文档在 `dogfood/tests/features/`。见 [`dogfood/README.md`](dogfood/README.md)。
|
|
223
223
|
|
|
224
|
-
5.3.0 发行说明(功能用例集 `assets/testcases/`)见 [`docs/changelog/TEMPLATE-5.3.0.md`](docs/changelog/TEMPLATE-5.3.0.md);5.2.0 发行说明(work task / 测试设计 / 证据附件)见 [`docs/changelog/TEMPLATE-5.2.0.md`](docs/changelog/TEMPLATE-5.2.0.md);5.1.0 发行说明(工作台 / meta stamp / `--json`)见 [`docs/changelog/TEMPLATE-5.1.0.md`](docs/changelog/TEMPLATE-5.1.0.md);5.0.0(Plane Job 协议退场、`tuner-workspace`)见 [`TEMPLATE-5.0.0.md`](docs/changelog/TEMPLATE-5.0.0.md);4.3.0 见 [`TEMPLATE-4.3.0.md`](docs/changelog/TEMPLATE-4.3.0.md);3.x → 4.x 迁移见 [`TEMPLATE-4.0.0.md`](docs/changelog/TEMPLATE-4.0.0.md)。平台能力地图见 [`INDEX.md`](INDEX.md)。
|
|
224
|
+
5.3.1 发行说明(已回答提问归档)见 [`docs/changelog/TEMPLATE-5.3.1.md`](docs/changelog/TEMPLATE-5.3.1.md);5.3.0 发行说明(功能用例集 `assets/testcases/`)见 [`docs/changelog/TEMPLATE-5.3.0.md`](docs/changelog/TEMPLATE-5.3.0.md);5.2.0 发行说明(work task / 测试设计 / 证据附件)见 [`docs/changelog/TEMPLATE-5.2.0.md`](docs/changelog/TEMPLATE-5.2.0.md);5.1.0 发行说明(工作台 / meta stamp / `--json`)见 [`docs/changelog/TEMPLATE-5.1.0.md`](docs/changelog/TEMPLATE-5.1.0.md);5.0.0(Plane Job 协议退场、`tuner-workspace`)见 [`TEMPLATE-5.0.0.md`](docs/changelog/TEMPLATE-5.0.0.md);4.3.0 见 [`TEMPLATE-4.3.0.md`](docs/changelog/TEMPLATE-4.3.0.md);3.x → 4.x 迁移见 [`TEMPLATE-4.0.0.md`](docs/changelog/TEMPLATE-4.0.0.md)。平台能力地图见 [`INDEX.md`](INDEX.md)。
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/action_words/_internal/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/action_words/_internal/generators.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/api_objects/recording/normalize.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/api_recorder/playwright_tap.py
RENAMED
|
File without changes
|
{tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/api_recorder/tests/__init__.py
RENAMED
|
File without changes
|
{tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/api_recorder/tests/test_addon.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tuner_testkit-5.3.0 → tuner_testkit-5.3.1}/tuner_testkit/apps/dna/dna_payload/.cursor/hooks.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|