tcw-cli 3.0.0__tar.gz → 3.0.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.
- {tcw_cli-3.0.0/tcw_cli.egg-info → tcw_cli-3.0.1}/PKG-INFO +3 -2
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/README.md +2 -1
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/pyproject.toml +1 -1
- tcw_cli-3.0.1/tcw/__init__.py +1 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/procedures/unattended-work.md +1 -1
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/prompts/qa.md +10 -6
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/prompts/request.md +11 -2
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/resolve.py +8 -2
- {tcw_cli-3.0.0 → tcw_cli-3.0.1/tcw_cli.egg-info}/PKG-INFO +3 -2
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_shipped_prompts.py +20 -0
- tcw_cli-3.0.0/tcw/__init__.py +0 -1
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/LICENSE +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/setup.cfg +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/capabilities/__init__.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/capabilities/cli.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/cli.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/cli_help.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/cli_suggest.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/config.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/config_cli.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/errors.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/exit.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/findings.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/output.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/projects_cli.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/refs.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/serve/__init__.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/serve/dist/client/assets/index-BGwvKkRc.js +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/serve/dist/client/assets/index-DkarCRfj.css +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/serve/dist/client/index.html +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/serve/dist/client/theme-init.js +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/serve/files.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/serve/records.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/serve/server.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/serve/services.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/serve/work.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/stdin.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/store/__init__.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/store/base.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/store/checkouts.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/store/config_edit.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/store/fs.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/store/project.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/store/yaml_source.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/taxonomy/__init__.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/taxonomy/cli.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/validate.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/__init__.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/advance.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/backend.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/cli.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/config.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/fs_backend.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/gates.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/generate.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/hooks.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/jira/__init__.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/jira/backend.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/jira/client.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/jira/config.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/jira/jql.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/jira/mapping.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/jira/remote.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/jira/tickets.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/layout.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/model.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/open.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/passages.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/procedures/audit-backlog.md +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/procedures/create-work.md +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/procedures/documentation-sync.md +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/procedures/pause-work.md +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/procedures/search.md +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/procedures/triage-issues.md +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/prompts/implement.md +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/prompts/inbox.md +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/prompts/plan.md +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/prompts/postmortem.md +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/prompts/review.md +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/prompts/spec.md +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/record.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw/work/references.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw_cli.egg-info/SOURCES.txt +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw_cli.egg-info/dependency_links.txt +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw_cli.egg-info/entry_points.txt +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw_cli.egg-info/requires.txt +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tcw_cli.egg-info/top_level.txt +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_capabilities.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_capabilities_cli_contract.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_capabilities_federation.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_capabilities_reset.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_capabilities_rm.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_capability_ref_wording.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_check_versions.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_cli_contract.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_cli_guide.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_cli_handler.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_cli_help_standard.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_command_suggestions.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_committed_paths.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_config_edit.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_config_edit_writers.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_configuration_text_home.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_cut_version.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_doc_vocabulary.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_docs_describe_3_0.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_documentation_config.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_documentation_prompt.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_documentation_sync_wiring.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_documented_cli_surface.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_dynamic_skill_marker.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_environment_hardness.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_eval_coverage.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_eval_files_changed.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_eval_fixture.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_eval_grading.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_eval_runner.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_falsification_rule.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_findings_type.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_generate_hook.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_git_example.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_init_configured_tree_path.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_init_provision_contract.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_item_tags_read.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_ledger_3_0.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_legacy_store_config.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_lifecycle_config_tags.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_literal_store_names.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_migration_guide.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_multiproject.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_no_node.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_override_in_linked_worktree.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_override_letter_case.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_override_references.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_partial_removal.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_plugin_manifests.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_procedure_config.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_procedure_verb.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_project_graph_paths.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_project_overrides.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_project_registry.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_projects_list.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_prompt_fallback.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_refs.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_remote_session_setup.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_repo_lifecycle.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_require_artifact.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_routing_nodes.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_session_bootstrap.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_shipped_procedures.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_shipped_text.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_skill_flow.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_skill_path_pointers.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_smoke.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_stage_verb.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_static_guards.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_stdin.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_stdin_cli.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_store_bounds.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_store_editor.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_store_nodes.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_store_provisioning.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_subprocess_stdin.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_suite_runs_its_own_tcw.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_taxonomy.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_taxonomy_cli_contract.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_taxonomy_rm_gaps.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_tree_store_files_only.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_tree_store_raises.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_unattended_work_skill.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_unpushed_version_script.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_upcoming_entries.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_upstream_projects.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_validate.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_validate_command.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_validate_moved_stores.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_validate_target.py +0 -0
- {tcw_cli-3.0.0 → tcw_cli-3.0.1}/tests/test_worktree_sibling_nodes.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tcw-cli
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.0.1
|
|
4
4
|
Summary: Taxonomy · Capabilities · Work — a storage-abstracted framework for describing and evolving a software project.
|
|
5
5
|
License: Apache License
|
|
6
6
|
Version 2.0, January 2004
|
|
@@ -724,7 +724,8 @@ A change to the product is followed from the first request to the records:
|
|
|
724
724
|
In filesystem mode, the agent working `qa` may record the verdict itself, unless
|
|
725
725
|
the project's own instructions for `qa` ask for a person to decide. When they
|
|
726
726
|
do, the agent still writes the round, recording the person's decision. In Jira
|
|
727
|
-
mode, a person accepts or rejects on the ticket
|
|
727
|
+
mode, a person accepts or rejects: on the ticket, or by telling the agent,
|
|
728
|
+
which then moves the ticket and records who decided.
|
|
728
729
|
|
|
729
730
|
Work reaches taxonomy through those capabilities: a new capability names the
|
|
730
731
|
vocabulary and feature it involves, and those entries must exist first.
|
|
@@ -508,7 +508,8 @@ A change to the product is followed from the first request to the records:
|
|
|
508
508
|
In filesystem mode, the agent working `qa` may record the verdict itself, unless
|
|
509
509
|
the project's own instructions for `qa` ask for a person to decide. When they
|
|
510
510
|
do, the agent still writes the round, recording the person's decision. In Jira
|
|
511
|
-
mode, a person accepts or rejects on the ticket
|
|
511
|
+
mode, a person accepts or rejects: on the ticket, or by telling the agent,
|
|
512
|
+
which then moves the ticket and records who decided.
|
|
512
513
|
|
|
513
514
|
Work reaches taxonomy through those capabilities: a new capability names the
|
|
514
515
|
vocabulary and feature it involves, and those entries must exist first.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "tcw-cli"
|
|
7
|
-
version = "3.0.
|
|
7
|
+
version = "3.0.1"
|
|
8
8
|
description = "Taxonomy · Capabilities · Work — a storage-abstracted framework for describing and evolving a software project."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "3.0.1"
|
|
@@ -29,7 +29,7 @@ advisor alone.
|
|
|
29
29
|
|
|
30
30
|
| The stage asks for | Do this instead |
|
|
31
31
|
| --------------------------- | --------------- |
|
|
32
|
-
| What the requester wants, at request | Do not ask the advisors: what the requester wants is not theirs to know. Write the request from the evidence available, marking each assumption, as the request prompt says when there is no user to ask. Where the backend keeps the request, as Jira does, post your questions with `tcw work comment <slug>` instead and leave its text alone. Then
|
|
32
|
+
| What the requester wants, at request | Do not ask the advisors: what the requester wants is not theirs to know. Write the request from the evidence available, marking each assumption, as the request prompt says when there is no user to ask. Where the backend keeps the request, as Jira does, post your questions with `tcw work comment <slug>` instead and leave its text alone, and leave the item at request unless the user's own instruction for this run explicitly said to move it out of request. Then move on to other work. |
|
|
33
33
|
| One agent or several | Decide yourself. One, unless the parts are truly independent. |
|
|
34
34
|
| An open question in a spec or plan | Ask the advisors, then write the answer into the document with the assumption stated in the text. |
|
|
35
35
|
| Review | Run the review stage as its prompt says: a read-only reviewer, never the agent that implemented. Apply what you agree with; write down what you reject and why. |
|
|
@@ -52,7 +52,7 @@ QA plan scenario as passed, failed or not run, with the evidence for each.
|
|
|
52
52
|
<!-- /backend -->
|
|
53
53
|
<!-- backend: jira -->
|
|
54
54
|
**Produce** findings, not a verdict. In Jira, qa happens on the ticket, and the
|
|
55
|
-
ticket's status, which
|
|
55
|
+
ticket's status, which a person decides, is the verdict. You may run the scenarios
|
|
56
56
|
and post what you found with `tcw work comment <slug>`.
|
|
57
57
|
|
|
58
58
|
## Steps
|
|
@@ -60,11 +60,15 @@ and post what you found with `tcw work comment <slug>`.
|
|
|
60
60
|
1. Run each scenario in the QA plan, in the environment it names.
|
|
61
61
|
2. Post one comment listing each scenario as passed, failed or not run, with
|
|
62
62
|
evidence. **No claim without output or an observation from just now.**
|
|
63
|
-
3.
|
|
64
|
-
|
|
65
|
-
`tcw work advance <slug> --to completed --reason "
|
|
66
|
-
`tcw work advance <slug> --to implement --reason
|
|
67
|
-
reason becomes the comment
|
|
63
|
+
3. A person decides the verdict, never you. Ask them for it. When the person
|
|
64
|
+
who decides gives you the verdict in this conversation, record it: accepted
|
|
65
|
+
with `tcw work advance <slug> --to completed --reason "accepted by <name>:
|
|
66
|
+
<why>"`, rejected with `tcw work advance <slug> --to implement --reason
|
|
67
|
+
"rejected by <name>: <what to fix>"`, whose reason becomes the comment
|
|
68
|
+
implement reads. A verdict comes after they have seen your findings: an
|
|
69
|
+
instruction given before that, such as "accept it if it passes", is not
|
|
70
|
+
one. They may instead move the ticket in Jira themselves. If they give no
|
|
71
|
+
verdict, stop at qa and say the item waits for them.
|
|
68
72
|
<!-- /backend -->
|
|
69
73
|
|
|
70
74
|
## Exit badly
|
|
@@ -32,10 +32,19 @@ Write it to `tcw work path <slug> request`. Keep any dated `## Added`
|
|
|
32
32
|
sections already there: they are amendments made after it was written.
|
|
33
33
|
<!-- /backend -->
|
|
34
34
|
<!-- backend: jira -->
|
|
35
|
-
The request is the ticket's description, and Jira owns it: never rewrite it
|
|
36
|
-
When a section is missing or unclear, post a comment with
|
|
35
|
+
The request is the ticket's description, and Jira owns it: never rewrite it on
|
|
36
|
+
your own judgment. When a section is missing or unclear, post a comment with
|
|
37
37
|
`tcw work comment <slug>` listing what is missing and proposing wording, for
|
|
38
38
|
the requester to adopt.
|
|
39
|
+
|
|
40
|
+
The requester decides when the request is ready. When they tell you to move
|
|
41
|
+
the item on, in this conversation, do it. If they adopted changed wording,
|
|
42
|
+
first put it into the ticket's description: write it yourself if your harness
|
|
43
|
+
can edit Jira tickets, or ask them to paste it in. Then read it back and
|
|
44
|
+
confirm the description now says what they adopted. Then run
|
|
45
|
+
`tcw work advance <slug> --reason "<who told you to move it>"`. A question,
|
|
46
|
+
such as whether accepting the wording moves the item, is not an instruction to
|
|
47
|
+
move it.
|
|
39
48
|
<!-- /backend -->
|
|
40
49
|
|
|
41
50
|
## Steps
|
|
@@ -450,8 +450,14 @@ def stage_footer(row, external, target: str) -> str | None:
|
|
|
450
450
|
if row.artifact == NO_ARTIFACT:
|
|
451
451
|
return None # how an arrival becomes work differs by backend
|
|
452
452
|
if row.name in external:
|
|
453
|
-
|
|
454
|
-
|
|
453
|
+
# A person decides; the agent carries out the move once told (TCW-100).
|
|
454
|
+
move = (f"`tcw work advance {target} --to <stage> --reason \"<who decided, "
|
|
455
|
+
f"and why>\"`" if row.verdict else
|
|
456
|
+
f"`tcw work advance {target} --reason \"<who told you>\"`")
|
|
457
|
+
text = ("> **When this stage's work is done, a person decides whether the "
|
|
458
|
+
"item moves on.** Move it only when that person tells you to, in "
|
|
459
|
+
"this conversation; a question or an implied yes is not that. "
|
|
460
|
+
f"Then run {move}.")
|
|
455
461
|
if row.verdict:
|
|
456
462
|
text += " The verdict is that move."
|
|
457
463
|
return text
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tcw-cli
|
|
3
|
-
Version: 3.0.
|
|
3
|
+
Version: 3.0.1
|
|
4
4
|
Summary: Taxonomy · Capabilities · Work — a storage-abstracted framework for describing and evolving a software project.
|
|
5
5
|
License: Apache License
|
|
6
6
|
Version 2.0, January 2004
|
|
@@ -724,7 +724,8 @@ A change to the product is followed from the first request to the records:
|
|
|
724
724
|
In filesystem mode, the agent working `qa` may record the verdict itself, unless
|
|
725
725
|
the project's own instructions for `qa` ask for a person to decide. When they
|
|
726
726
|
do, the agent still writes the round, recording the person's decision. In Jira
|
|
727
|
-
mode, a person accepts or rejects on the ticket
|
|
727
|
+
mode, a person accepts or rejects: on the ticket, or by telling the agent,
|
|
728
|
+
which then moves the ticket and records who decided.
|
|
728
729
|
|
|
729
730
|
Work reaches taxonomy through those capabilities: a new capability names the
|
|
730
731
|
vocabulary and feature it involves, and those entries must exist first.
|
|
@@ -267,6 +267,26 @@ def test_jira_qa_records_no_verdict():
|
|
|
267
267
|
assert "tcw work path <slug> qa" not in text and "verdict:" not in text
|
|
268
268
|
|
|
269
269
|
|
|
270
|
+
def test_jira_qa_moves_the_ticket_when_the_person_gives_the_verdict():
|
|
271
|
+
"""TCW-100: the person decides; once they give the verdict in the
|
|
272
|
+
conversation, the agent records it with `advance`, and otherwise stops."""
|
|
273
|
+
paragraph = _paragraph_with(prompt("qa", "jira"), "gives you the verdict")
|
|
274
|
+
assert "--to completed --reason" in paragraph
|
|
275
|
+
assert "--to implement --reason" in paragraph
|
|
276
|
+
assert "after they have seen your findings" in paragraph
|
|
277
|
+
assert "stop at qa" in paragraph
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
def test_jira_request_writes_adopted_wording_before_moving():
|
|
281
|
+
"""TCW-100: adopted wording goes into the description, is read back, and
|
|
282
|
+
only then is the item moved, with a reason naming who said to move it."""
|
|
283
|
+
paragraph = _paragraph_with(prompt("request", "jira"), "tell you to move")
|
|
284
|
+
for words in ("description", "paste", "read it back",
|
|
285
|
+
"tcw work advance <slug> --reason"):
|
|
286
|
+
assert words in paragraph, words
|
|
287
|
+
assert paragraph.index("read it back") < paragraph.index("tcw work advance")
|
|
288
|
+
|
|
289
|
+
|
|
270
290
|
@pytest.mark.parametrize("sid", sorted(SHIPPED))
|
|
271
291
|
def test_no_prompt_tells_the_agent_to_ask_what_it_is_reading(sid):
|
|
272
292
|
"""`tcw work lifecycle --stage <id>` inside the text that command reports
|
tcw_cli-3.0.0/tcw/__init__.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "3.0.0"
|
|
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
|
|
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
|
|
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
|