@deftai/directive-content 0.55.2 → 0.56.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.githooks/pre-commit +143 -0
- package/.githooks/pre-push +121 -0
- package/QUICK-START.md +2 -2
- package/Taskfile.yml +934 -0
- package/UPGRADING.md +47 -1
- package/events/README.md +3 -3
- package/package.json +5 -4
- package/scripts/_agents_md.py +494 -0
- package/scripts/_cache_fetch.py +635 -0
- package/scripts/_cache_quota.py +529 -0
- package/scripts/_cache_refresh.py +163 -0
- package/scripts/_cache_validate.py +209 -0
- package/scripts/_content_root.py +42 -0
- package/scripts/_doctor_state.py +277 -0
- package/scripts/_event_detect.py +305 -0
- package/scripts/_events.py +514 -0
- package/scripts/_lifecycle_hygiene.py +568 -0
- package/scripts/_pathspec.py +91 -0
- package/scripts/_policy_show_cli.py +266 -0
- package/scripts/_precutover.py +92 -0
- package/scripts/_project_context.py +224 -0
- package/scripts/_project_definition_io.py +164 -0
- package/scripts/_relocate_snapshot.py +209 -0
- package/scripts/_relocate_states.py +343 -0
- package/scripts/_resolve_preflight_path.py +152 -0
- package/scripts/_safe_subprocess.py +167 -0
- package/scripts/_session_start_hook.py +205 -0
- package/scripts/_sor_gate_diff.py +365 -0
- package/scripts/_stdio_utf8.py +59 -0
- package/scripts/_triage_bootstrap_gitignore.py +904 -0
- package/scripts/_triage_classify_cli.py +122 -0
- package/scripts/_triage_queue_cli.py +625 -0
- package/scripts/_triage_scope_cli.py +343 -0
- package/scripts/_triage_scope_drift_cli.py +121 -0
- package/scripts/_triage_scope_ignores.py +286 -0
- package/scripts/_triage_scope_milestone.py +432 -0
- package/scripts/_triage_scope_mutations.py +337 -0
- package/scripts/_triage_scope_renderers.py +207 -0
- package/scripts/_triage_smoketest_stages.py +674 -0
- package/scripts/_triage_subscribe_cli.py +140 -0
- package/scripts/_triage_welcome_cli.py +421 -0
- package/scripts/_vbrief_build.py +239 -0
- package/scripts/_vbrief_fidelity.py +479 -0
- package/scripts/_vbrief_legacy.py +589 -0
- package/scripts/_vbrief_reconciliation.py +883 -0
- package/scripts/_vbrief_routing.py +277 -0
- package/scripts/_vbrief_safety.py +778 -0
- package/scripts/_vbrief_sources.py +312 -0
- package/scripts/_vbrief_speckit.py +262 -0
- package/scripts/_vbrief_story_quality.py +353 -0
- package/scripts/_vbrief_validation.py +299 -0
- package/scripts/build_dist.py +412 -0
- package/scripts/cache.py +1078 -0
- package/scripts/cache_scanner.py +745 -0
- package/scripts/candidates_log.py +432 -0
- package/scripts/capacity_backfill.py +680 -0
- package/scripts/capacity_show.py +653 -0
- package/scripts/ci_local.py +689 -0
- package/scripts/code_structure_validate.py +765 -0
- package/scripts/codebase_default_extractor.py +495 -0
- package/scripts/codebase_map.py +304 -0
- package/scripts/codebase_map_fresh.py +104 -0
- package/scripts/codebase_projection_registry.py +94 -0
- package/scripts/codebase_provider.py +582 -0
- package/scripts/doctor.py +2257 -0
- package/scripts/framework_commands.py +505 -0
- package/scripts/gh_rest.py +882 -0
- package/scripts/github_auth_modes.py +437 -0
- package/scripts/github_body.py +292 -0
- package/scripts/ip_risk.py +531 -0
- package/scripts/issue_emit.py +670 -0
- package/scripts/issue_ingest.py +1064 -0
- package/scripts/migrate_preflight.py +418 -0
- package/scripts/migrate_vbrief.py +2677 -0
- package/scripts/monitor_pr.py +401 -0
- package/scripts/pack_migrate_lessons.py +336 -0
- package/scripts/pack_migrate_patterns.py +254 -0
- package/scripts/pack_migrate_rules.py +350 -0
- package/scripts/pack_migrate_skills.py +423 -0
- package/scripts/pack_migrate_strategies.py +311 -0
- package/scripts/pack_migrate_swarm_spec.py +250 -0
- package/scripts/pack_render.py +434 -0
- package/scripts/packs_slice.py +712 -0
- package/scripts/platform_capabilities.py +336 -0
- package/scripts/policy.py +2826 -0
- package/scripts/policy_set.py +324 -0
- package/scripts/pr_check_closing_keywords.py +524 -0
- package/scripts/pr_check_protected_issues.py +267 -0
- package/scripts/pr_merge_readiness.py +1004 -0
- package/scripts/pr_wait_mergeable.py +669 -0
- package/scripts/prd_render.py +159 -0
- package/scripts/preflight_architecture_sor.py +974 -0
- package/scripts/preflight_branch.py +289 -0
- package/scripts/preflight_cache.py +974 -0
- package/scripts/preflight_gh.py +721 -0
- package/scripts/preflight_implementation.py +272 -0
- package/scripts/preflight_story_start.py +838 -0
- package/scripts/preflight_wip_cap.py +149 -0
- package/scripts/probe_session.py +545 -0
- package/scripts/project_render.py +293 -0
- package/scripts/quarantine_ext.py +237 -0
- package/scripts/reconcile_issues.py +1442 -0
- package/scripts/refresh-path.ps1 +107 -0
- package/scripts/release.py +2030 -0
- package/scripts/release_e2e.py +1011 -0
- package/scripts/release_publish.py +486 -0
- package/scripts/release_rollback.py +980 -0
- package/scripts/relocate.py +1034 -0
- package/scripts/resolve_changelog_unreleased.py +667 -0
- package/scripts/resolve_version.py +490 -0
- package/scripts/resume_conditions.py +706 -0
- package/scripts/ritual_sentinel.py +609 -0
- package/scripts/roadmap_render.py +635 -0
- package/scripts/rule_ownership_lint.py +325 -0
- package/scripts/scm.py +591 -0
- package/scripts/scope_audit_log.py +387 -0
- package/scripts/scope_decompose.py +654 -0
- package/scripts/scope_demote.py +509 -0
- package/scripts/scope_lifecycle.py +1126 -0
- package/scripts/scope_undo.py +772 -0
- package/scripts/session_start.py +406 -0
- package/scripts/setup_ghx.py +339 -0
- package/scripts/setup_windows.ps1 +220 -0
- package/scripts/slice_audit.py +585 -0
- package/scripts/slice_record.py +530 -0
- package/scripts/slice_record_existing.py +692 -0
- package/scripts/slug_normalize.py +178 -0
- package/scripts/spec_render.py +477 -0
- package/scripts/spec_validate.py +238 -0
- package/scripts/subagent_monitor.py +658 -0
- package/scripts/swarm_complete_cohort.py +644 -0
- package/scripts/swarm_launch.py +1206 -0
- package/scripts/swarm_readiness.py +554 -0
- package/scripts/swarm_verify_review_clean.py +438 -0
- package/scripts/swarm_worktrees.py +497 -0
- package/scripts/toolchain-check.py +52 -0
- package/scripts/triage_actions.py +871 -0
- package/scripts/triage_bootstrap.py +1153 -0
- package/scripts/triage_bulk.py +630 -0
- package/scripts/triage_classify.py +932 -0
- package/scripts/triage_help.py +1685 -0
- package/scripts/triage_queue.py +1944 -0
- package/scripts/triage_reconcile.py +581 -0
- package/scripts/triage_refresh.py +643 -0
- package/scripts/triage_scope.py +999 -0
- package/scripts/triage_scope_drift.py +575 -0
- package/scripts/triage_smoketest.py +396 -0
- package/scripts/triage_subscribe.py +399 -0
- package/scripts/triage_summary.py +1011 -0
- package/scripts/triage_welcome.py +1178 -0
- package/scripts/ts_check_lane.py +86 -0
- package/scripts/validate-links.py +64 -0
- package/scripts/validate_strategy_output.py +212 -0
- package/scripts/vbrief_activate.py +228 -0
- package/scripts/vbrief_migrate_conformance.py +368 -0
- package/scripts/vbrief_reconcile_graph.py +306 -0
- package/scripts/vbrief_reconcile_labels.py +460 -0
- package/scripts/vbrief_reconcile_umbrellas.py +741 -0
- package/scripts/vbrief_validate.py +1195 -0
- package/scripts/verify-stubs.py +61 -0
- package/scripts/verify_capacity.py +160 -0
- package/scripts/verify_encoding.py +699 -0
- package/scripts/verify_hooks_installed.py +206 -0
- package/scripts/verify_investigation.py +360 -0
- package/scripts/verify_judgment_gates.py +827 -0
- package/scripts/verify_no_task_runtime.py +171 -0
- package/scripts/verify_scm_boundary.py +509 -0
- package/scripts/verify_session_ritual.py +389 -0
- package/scripts/verify_tools.py +426 -0
- package/scripts/verify_vbrief_conformance.py +478 -0
- package/tasks/architecture.yml +13 -0
- package/tasks/cache.yml +69 -0
- package/tasks/capacity.yml +38 -0
- package/tasks/change.yml +46 -0
- package/tasks/changelog.yml +24 -0
- package/tasks/ci.yml +49 -0
- package/tasks/codebase.yml +47 -0
- package/tasks/commit.yml +30 -0
- package/tasks/core.yml +126 -0
- package/tasks/deployments.yml +54 -0
- package/tasks/framework.yml +74 -0
- package/tasks/install.yml +60 -0
- package/tasks/issue.yml +50 -0
- package/tasks/migrate.yml +73 -0
- package/tasks/packs.yml +92 -0
- package/tasks/policy.yml +75 -0
- package/tasks/pr.yml +89 -0
- package/tasks/prd.yml +39 -0
- package/tasks/project.yml +27 -0
- package/tasks/reconcile.yml +32 -0
- package/tasks/relocate.yml +56 -0
- package/tasks/roadmap.yml +28 -0
- package/tasks/scm.yml +126 -0
- package/tasks/scope-undo.yml +36 -0
- package/tasks/scope.yml +141 -0
- package/tasks/session.yml +19 -0
- package/tasks/setup.yml +37 -0
- package/tasks/slice.yml +69 -0
- package/tasks/spec.yml +41 -0
- package/tasks/swarm.yml +85 -0
- package/tasks/toolchain.yml +13 -0
- package/tasks/triage-actions.yml +94 -0
- package/tasks/triage-bootstrap.yml +43 -0
- package/tasks/triage-bulk.yml +75 -0
- package/tasks/triage-classify.yml +30 -0
- package/tasks/triage-queue.yml +50 -0
- package/tasks/triage-reconcile.yml +29 -0
- package/tasks/triage-scope-drift.yml +29 -0
- package/tasks/triage-scope.yml +31 -0
- package/tasks/triage-smoketest.yml +33 -0
- package/tasks/triage-subscribe.yml +36 -0
- package/tasks/triage-summary.yml +29 -0
- package/tasks/triage-welcome.yml +32 -0
- package/tasks/ts.yml +328 -0
- package/tasks/vbrief.yml +206 -0
- package/tasks/verify.yml +292 -0
- package/templates/agents-entry.md +1 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
version: '3'
|
|
2
|
+
|
|
3
|
+
# tasks/session.yml -- fail-closed session ritual state surface (#1348).
|
|
4
|
+
#
|
|
5
|
+
# Per conventions/task-caching.md: no sources/generates because the task
|
|
6
|
+
# forwards user-facing flags (--defer, --json, --no-history) via CLI_ARGS.
|
|
7
|
+
|
|
8
|
+
vars:
|
|
9
|
+
DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
|
|
10
|
+
|
|
11
|
+
tasks:
|
|
12
|
+
start:
|
|
13
|
+
desc: "Run quick-tier session-start ritual and write .deft/ritual-state.json (#1348). Flags: --defer step=reason / --json"
|
|
14
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
15
|
+
deps: [":ts:build"]
|
|
16
|
+
env:
|
|
17
|
+
PYTHONUTF8: "1"
|
|
18
|
+
cmds:
|
|
19
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" session:start --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
|
package/tasks/setup.yml
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
version: '3'
|
|
2
|
+
|
|
3
|
+
# Windows toolchain bootstrap fragment (#902).
|
|
4
|
+
#
|
|
5
|
+
# Wired into the parent Taskfile.yml `includes:` block under namespace key
|
|
6
|
+
# `setup`, so the inner task `toolchain` is reachable as `task setup:toolchain`.
|
|
7
|
+
# This fragment is independent of the root-level `setup` task in
|
|
8
|
+
# Taskfile.yml (which configures git hooks via core.hooksPath); the two
|
|
9
|
+
# coexist because go-task treats `setup` and `setup:toolchain` as distinct
|
|
10
|
+
# task names.
|
|
11
|
+
#
|
|
12
|
+
# Companion script: scripts/setup_windows.ps1
|
|
13
|
+
# Companion test: tests/scripts/test_setup_windows.ps1
|
|
14
|
+
# Issue: #902
|
|
15
|
+
#
|
|
16
|
+
# Per `conventions/task-caching.md` (#574): NO `sources:` / `generates:`
|
|
17
|
+
# declarations on these tasks because user-facing behaviour is determined at
|
|
18
|
+
# runtime by host platform detection and the script's idempotent probe-
|
|
19
|
+
# before-install logic, not by file mtimes.
|
|
20
|
+
|
|
21
|
+
vars:
|
|
22
|
+
# Resolve the deft framework root from this fragment's directory. The
|
|
23
|
+
# joinPath idiom mirrors the convention documented in the root Taskfile.yml
|
|
24
|
+
# header (#566): {{.TASKFILE_DIR}}/.. evaluated by go-task's eager
|
|
25
|
+
# templating yields a native-separator absolute path that pwsh / Bash can
|
|
26
|
+
# open on Windows / macOS / Linux.
|
|
27
|
+
DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
|
|
28
|
+
|
|
29
|
+
tasks:
|
|
30
|
+
toolchain:
|
|
31
|
+
desc: "Bootstrap the Windows maintainer toolchain (Go, Python, uv, Task, gh) via winget. Windows-only -- no-op on macOS / Linux. -- task setup:toolchain"
|
|
32
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
33
|
+
cmds:
|
|
34
|
+
- cmd: pwsh -NoProfile -ExecutionPolicy Bypass -File "{{.DEFT_ROOT}}/scripts/setup_windows.ps1"
|
|
35
|
+
platforms: [windows]
|
|
36
|
+
- cmd: echo "setup:toolchain currently supports Windows only. See CONTRIBUTING.md for macOS / Linux setup."
|
|
37
|
+
platforms: [linux, darwin]
|
package/tasks/slice.yml
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
version: '3'
|
|
2
|
+
|
|
3
|
+
vars:
|
|
4
|
+
DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
|
|
5
|
+
|
|
6
|
+
# slice:* fragment (N7 / #1147).
|
|
7
|
+
#
|
|
8
|
+
# Exposes the canonical `task slice:record-existing` backfill verb plus
|
|
9
|
+
# the companion `task slice:list` read surface. Both delegate to
|
|
10
|
+
# `scripts/slice_record_existing.py`. Inner tasks below are
|
|
11
|
+
# `internal: true` so the fragment-namespace forms (`slice:record-existing`
|
|
12
|
+
# under the include key `slice`) are surfaced as user-facing aliases in
|
|
13
|
+
# the root `Taskfile.yml` (mirrors the established triage:* / scope:*
|
|
14
|
+
# pattern -- see Taskfile.yml header comment for why aliases live at the
|
|
15
|
+
# root rather than here).
|
|
16
|
+
#
|
|
17
|
+
# CLI_ARGS is forwarded bare -- go-task's shell-escape pipeline misbehaves
|
|
18
|
+
# on Windows when CLI_ARGS is wrapped in double quotes (#577). The driver
|
|
19
|
+
# script owns argv parsing (including the dynamic `--wave-N=<csv>` flag
|
|
20
|
+
# shape that argparse cannot natively model).
|
|
21
|
+
#
|
|
22
|
+
# Windows quoting limitation (#1231 / SLizard P2): because CLI_ARGS is
|
|
23
|
+
# substituted bare, arguments containing spaces (e.g. `--notes "A note
|
|
24
|
+
# with spaces"`) may be re-split by the shell before `argparse` sees
|
|
25
|
+
# them. The operator-facing workaround is to either avoid spaces in flag
|
|
26
|
+
# values (use a single token like `--notes=backfill-after-N7`) or to
|
|
27
|
+
# write the rationale to a file and embed a pointer. The fully-quoted
|
|
28
|
+
# `{{.CLI_ARGS | shellQuote}}` form misbehaves on Windows go-task per
|
|
29
|
+
# #577; switching to a temp-file dispatch is the long-term fix and is
|
|
30
|
+
# tracked under #1231. The same caveat applies to every other verb that
|
|
31
|
+
# forwards `{{.CLI_ARGS}}` bare under `tasks/` (audit list: every fragment
|
|
32
|
+
# in this directory does -- the pattern is repo-wide).
|
|
33
|
+
#
|
|
34
|
+
# `dir: '{{.USER_WORKING_DIR}}'` keeps Python CWD at the consumer project
|
|
35
|
+
# root so `--project-root` / `--repo` resolution lands in the consumer
|
|
36
|
+
# tree, not in deft's own checkout (#535 path-resolution invariant).
|
|
37
|
+
#
|
|
38
|
+
# `env: PYTHONUTF8: "1"` is a belt-and-suspenders guard for Windows
|
|
39
|
+
# cp1252 default (#540); root Taskfile.yml also sets this.
|
|
40
|
+
#
|
|
41
|
+
# Per `conventions/task-caching.md` (#574) no `sources:` / `generates:`
|
|
42
|
+
# because the verbs forward user-facing flags (`--dry-run`, `--force`,
|
|
43
|
+
# `--wave-N=<csv>`, `--actor`, etc.) via {{.CLI_ARGS}}.
|
|
44
|
+
|
|
45
|
+
tasks:
|
|
46
|
+
_ensure-ts:
|
|
47
|
+
internal: true
|
|
48
|
+
desc: "Build the TS engine before slice gates (#1828 s4)"
|
|
49
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
50
|
+
cmds:
|
|
51
|
+
- pnpm --dir "{{.DEFT_ROOT}}" run build
|
|
52
|
+
|
|
53
|
+
record-existing:
|
|
54
|
+
desc: "Retrofit a slices.jsonl entry for a hand-filed cohort (#1147 / N7). Windows note (#1231): CLI_ARGS is forwarded bare to argparse so values containing spaces (e.g. --notes \"A note with spaces\") may be re-split by the shell -- prefer hyphenated single-token values like --notes=backfill-after-N7. -- task slice:record-existing -- --umbrella=N --children=A,B,C [--wave-1=A,B] [--wave-2=C] [--actor=manual:operator] [--expected-close-signal=all-children-merged] [--sliced-at=ISO] [--notes=TEXT] [--dry-run] [--force] [--skip-validation] [--repo OWNER/NAME]"
|
|
55
|
+
internal: true
|
|
56
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
57
|
+
deps:
|
|
58
|
+
- _ensure-ts
|
|
59
|
+
cmds:
|
|
60
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" slice record-existing {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
|
|
61
|
+
|
|
62
|
+
list:
|
|
63
|
+
desc: "List recorded slices in vbrief/.eval/slices.jsonl (umbrella + child count + actor + sliced_at). -- task slice:list [-- --json]"
|
|
64
|
+
internal: true
|
|
65
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
66
|
+
deps:
|
|
67
|
+
- _ensure-ts
|
|
68
|
+
cmds:
|
|
69
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" slice list {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
|
package/tasks/spec.yml
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
version: '3'
|
|
2
|
+
|
|
3
|
+
vars:
|
|
4
|
+
DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
|
|
5
|
+
|
|
6
|
+
# spec tasks -- consumer-safe CWD + script resolution (#539, #540, #566).
|
|
7
|
+
# Scripts are dispatched via {{.DEFT_ROOT}} (defined locally in this file's
|
|
8
|
+
# `vars:` block via ``{{joinPath .TASKFILE_DIR ".."}}`` -- see
|
|
9
|
+
# ../Taskfile.yml for why root-level definition is avoided) to keep the
|
|
10
|
+
# path traversal-free and avoid the {{.TASKFILE_DIR}}/.. form that breaks
|
|
11
|
+
# on Windows under `uv --project "{{.DEFT_ROOT}}" run python` (#566).
|
|
12
|
+
|
|
13
|
+
tasks:
|
|
14
|
+
_ts-build:
|
|
15
|
+
internal: true
|
|
16
|
+
desc: "Build @deftai/cli dist/ before TS-backed render gates run (#1854 s2)."
|
|
17
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
18
|
+
cmds:
|
|
19
|
+
- pnpm --dir "{{.DEFT_ROOT}}" run build
|
|
20
|
+
|
|
21
|
+
validate:
|
|
22
|
+
desc: Validate that vbrief/specification.vbrief.json exists and is well-formed JSON
|
|
23
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
24
|
+
deps:
|
|
25
|
+
- _ts-build
|
|
26
|
+
cmds:
|
|
27
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" spec-validate "{{.USER_WORKING_DIR}}/vbrief/specification.vbrief.json"
|
|
28
|
+
|
|
29
|
+
render:
|
|
30
|
+
desc: Render vbrief/specification.vbrief.json to SPECIFICATION.md
|
|
31
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
32
|
+
deps:
|
|
33
|
+
- _ts-build
|
|
34
|
+
cmds:
|
|
35
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" spec-render "{{.USER_WORKING_DIR}}/vbrief/specification.vbrief.json" "{{.USER_WORKING_DIR}}/SPECIFICATION.md"
|
|
36
|
+
|
|
37
|
+
pipeline:
|
|
38
|
+
desc: Run full spec pipeline (validate then render)
|
|
39
|
+
cmds:
|
|
40
|
+
- task: validate
|
|
41
|
+
- task: render
|
package/tasks/swarm.yml
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
version: '3'
|
|
2
|
+
|
|
3
|
+
vars:
|
|
4
|
+
DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
|
|
5
|
+
|
|
6
|
+
tasks:
|
|
7
|
+
readiness:
|
|
8
|
+
desc: "Report whether story vBRIEFs are ready for concurrent swarm allocation"
|
|
9
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
10
|
+
deps: [":ts:build"]
|
|
11
|
+
env:
|
|
12
|
+
PYTHONUTF8: "1"
|
|
13
|
+
cmds:
|
|
14
|
+
# Keep CLI_ARGS bare; go-task shell-escapes pass-through args and quoting breaks globs/multi-arg calls.
|
|
15
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" swarm-readiness {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
|
|
16
|
+
|
|
17
|
+
# swarm:launch -- deterministic headless launch engine (#1387). Turns an
|
|
18
|
+
# operator-supplied, pre-approved cohort into a ready-to-spawn launch
|
|
19
|
+
# manifest: resolves --stories (issue numbers / story ids / paths) against
|
|
20
|
+
# vbrief/active, enforces the #810 preflight and swarm:readiness gates per
|
|
21
|
+
# story (exiting non-zero and naming the FIRST failing story), and emits
|
|
22
|
+
# the C2 launch-manifest JSON carrying the #1378 allocation-context token
|
|
23
|
+
# for each agent. Bare {{.CLI_ARGS}} per the readiness/verify-review-clean
|
|
24
|
+
# convention -- go-task already shell-escapes pass-through args, so wrapping
|
|
25
|
+
# in double quotes breaks multi-arg / path forwarding (see tasks/vbrief.yml
|
|
26
|
+
# preflight for the full rationale and tests/content/test_taskfile_cli_args.py).
|
|
27
|
+
#
|
|
28
|
+
# Companion script: scripts/swarm_launch.py
|
|
29
|
+
# Companion test: tests/cli/test_swarm_launch.py
|
|
30
|
+
launch:
|
|
31
|
+
desc: "Resolve a pre-approved cohort, enforce the #810 + swarm:readiness gates and sub-agent backend policy per story, and emit the launch-manifest JSON (#1387, #1531e)"
|
|
32
|
+
deps: [":ts:build"]
|
|
33
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
34
|
+
cmds:
|
|
35
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" swarm-launch {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
|
|
36
|
+
|
|
37
|
+
# swarm:routing-set -- record an operator coding sub-agent model decision
|
|
38
|
+
# (#1739) into the gitignored, per-machine .deft/routing.local.json keyed by
|
|
39
|
+
# (dispatch_provider, worker_role). Supersedes the swarmSubagentBackend enum
|
|
40
|
+
# (#1531 / #1735): the resolved model is threaded into the launch manifest
|
|
41
|
+
# (resolved_model / model_source) so dispatch can actually honor it.
|
|
42
|
+
routing-set:
|
|
43
|
+
desc: "Record an operator coding sub-agent model decision (#1739): --role <role> (--model <slug> | --harness-default) [--provider <p>]. Writes the gitignored, per-machine .deft/routing.local.json."
|
|
44
|
+
deps: [":ts:build"]
|
|
45
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
46
|
+
cmds:
|
|
47
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" swarm-routing-set {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
|
|
48
|
+
|
|
49
|
+
# swarm:verify-review-clean -- cohort-level CLEAN verification gate (#1364).
|
|
50
|
+
# Mandate the monitor invokes this after Phase 6 pollers report and BEFORE
|
|
51
|
+
# the Phase 5 -> 6 merge discussion. Re-uses the Greptile rolling-summary
|
|
52
|
+
# parser from scripts/pr_merge_readiness.py so the per-PR merge gate and
|
|
53
|
+
# the cohort gate stay in lockstep -- a parser fix lands in both surfaces
|
|
54
|
+
# at once. The companion script writes its own diagnostics; this Taskfile
|
|
55
|
+
# target just forwards CLI_ARGS bare per the established convention.
|
|
56
|
+
#
|
|
57
|
+
# Companion script: scripts/swarm_verify_review_clean.py
|
|
58
|
+
# Companion test: tests/cli/test_swarm_verify_review_clean.py
|
|
59
|
+
# Skill citation: skills/deft-directive-swarm/SKILL.md Phase 5 Exit Condition + Phase 5 -> 6 gate
|
|
60
|
+
verify-review-clean:
|
|
61
|
+
desc: "Verify EVERY PR in a swarm cohort is CLEAN on current HEAD (confidence > 3, no P0/P1, not errored) before raising the Phase 5 -> 6 merge gate (#1364)"
|
|
62
|
+
deps: [":ts:build"]
|
|
63
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
64
|
+
cmds:
|
|
65
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" swarm-verify-review-clean {{.CLI_ARGS}}
|
|
66
|
+
|
|
67
|
+
# swarm:complete-cohort -- deterministic cohort completion sweep (#1487).
|
|
68
|
+
# The REQUIRED Phase 6 step that moves a finished cohort's story vBRIEFs
|
|
69
|
+
# active/ -> completed/ and completes the decompose-created epic parents
|
|
70
|
+
# once all their children are settled. Routes every move through
|
|
71
|
+
# scripts/scope_lifecycle.py so the #1485 (child-move) and #1487 (parent-
|
|
72
|
+
# move) reference maintenance keeps `task vbrief:validate` green with no
|
|
73
|
+
# manual repair. Bare {{.CLI_ARGS}} per the readiness / verify-review-clean
|
|
74
|
+
# convention -- go-task already shell-escapes pass-through args, so wrapping
|
|
75
|
+
# in double quotes breaks multi-arg / glob forwarding.
|
|
76
|
+
#
|
|
77
|
+
# Companion script: scripts/swarm_complete_cohort.py
|
|
78
|
+
# Companion test: tests/cli/test_swarm_complete_cohort.py
|
|
79
|
+
# Skill citation: skills/deft-directive-swarm/SKILL.md Phase 6 cohort completion sweep
|
|
80
|
+
complete-cohort:
|
|
81
|
+
desc: "Sweep a finished swarm cohort's stories active/ -> completed/ and complete their epic parents, keeping vbrief:validate green (#1487)"
|
|
82
|
+
deps: [":ts:build"]
|
|
83
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
84
|
+
cmds:
|
|
85
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" swarm-complete-cohort {{.CLI_ARGS}} --project-root "{{.USER_WORKING_DIR}}"
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
version: '3'
|
|
2
|
+
|
|
3
|
+
vars:
|
|
4
|
+
DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
|
|
5
|
+
|
|
6
|
+
tasks:
|
|
7
|
+
check:
|
|
8
|
+
desc: Verify required toolchain is installed (go, uv, git, gh, node, pnpm)
|
|
9
|
+
deps: [":ts:build"]
|
|
10
|
+
env:
|
|
11
|
+
PYTHONUTF8: "1"
|
|
12
|
+
cmds:
|
|
13
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" toolchain:check
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
version: '3'
|
|
2
|
+
|
|
3
|
+
# tasks/triage-actions.yml -- per-issue triage commands (#845 Story 3).
|
|
4
|
+
#
|
|
5
|
+
# Wired into the parent Taskfile.yml `includes:` block under namespace key
|
|
6
|
+
# `triage-actions` (#845 Story 6). Inner task names below dropped the
|
|
7
|
+
# `triage:` prefix in #913 -- the prior names produced a doubled prefix
|
|
8
|
+
# (`triage-actions:triage:accept`) under go-task's include-namespace
|
|
9
|
+
# concatenation. Combined with `internal: true` the fragment-namespace
|
|
10
|
+
# forms (`triage-actions:accept` / `triage-actions:reject` / ...) are
|
|
11
|
+
# hidden from `task -l`; the documented `task triage:accept` / `triage:reject`
|
|
12
|
+
# / `triage:defer` / `triage:needs-ac` / `triage:mark-duplicate` /
|
|
13
|
+
# `triage:status` / `triage:reset` / `triage:history` surface lives as
|
|
14
|
+
# root-level alias tasks in Taskfile.yml that delegate here.
|
|
15
|
+
#
|
|
16
|
+
# Per `conventions/task-caching.md`: NO `sources:` / `generates:` because every
|
|
17
|
+
# target accepts user-facing flags via `{{.CLI_ARGS}}` (--issue, --repo,
|
|
18
|
+
# --reason, --of, --comment, --actor) -- the cached `cmds:` skip would
|
|
19
|
+
# silently swallow recovery flags. Same rationale that gated `task release`
|
|
20
|
+
# (#74), `task pr:check-protected-issues` (#702), and `task verify:encoding`
|
|
21
|
+
# (#798).
|
|
22
|
+
#
|
|
23
|
+
# Companion script: scripts/triage_actions.py
|
|
24
|
+
# Companion tests: tests/test_triage_actions.py
|
|
25
|
+
# Upstream contracts (frozen): scripts/candidates_log.py (#845 Story 2 audit log),
|
|
26
|
+
# scripts/cache.py (#883 Story 2 unified cache).
|
|
27
|
+
|
|
28
|
+
vars:
|
|
29
|
+
DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
|
|
30
|
+
|
|
31
|
+
tasks:
|
|
32
|
+
accept:
|
|
33
|
+
desc: "Accept an issue for triage. Records an audit entry. (#845 Story 3)"
|
|
34
|
+
internal: true
|
|
35
|
+
deps: [":ts:build"]
|
|
36
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
37
|
+
cmds:
|
|
38
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-actions accept {{.CLI_ARGS}}
|
|
39
|
+
|
|
40
|
+
reject:
|
|
41
|
+
desc: "Reject an issue. Closes upstream via gh + applies triage-rejected label; rolls audit back on gh failure. (#845 Story 3)"
|
|
42
|
+
internal: true
|
|
43
|
+
deps: [":ts:build"]
|
|
44
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
45
|
+
cmds:
|
|
46
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-actions reject {{.CLI_ARGS}}
|
|
47
|
+
|
|
48
|
+
defer:
|
|
49
|
+
desc: "Defer an issue. Records an audit entry. (#845 Story 3)"
|
|
50
|
+
internal: true
|
|
51
|
+
deps: [":ts:build"]
|
|
52
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
53
|
+
cmds:
|
|
54
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-actions defer {{.CLI_ARGS}}
|
|
55
|
+
|
|
56
|
+
needs-ac:
|
|
57
|
+
desc: "Mark an issue as needing acceptance criteria + post AC-request comment upstream. (#845 Story 3)"
|
|
58
|
+
internal: true
|
|
59
|
+
deps: [":ts:build"]
|
|
60
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
61
|
+
cmds:
|
|
62
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-actions needs-ac {{.CLI_ARGS}}
|
|
63
|
+
|
|
64
|
+
mark-duplicate:
|
|
65
|
+
desc: "Link an issue as a duplicate of another (validated against Story 1 cache). (#845 Story 3)"
|
|
66
|
+
internal: true
|
|
67
|
+
deps: [":ts:build"]
|
|
68
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
69
|
+
cmds:
|
|
70
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-actions mark-duplicate {{.CLI_ARGS}}
|
|
71
|
+
|
|
72
|
+
status:
|
|
73
|
+
desc: "Print the latest triage decision for an issue. Read-only. (#845 Story 3)"
|
|
74
|
+
internal: true
|
|
75
|
+
deps: [":ts:build"]
|
|
76
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
77
|
+
cmds:
|
|
78
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-actions status {{.CLI_ARGS}}
|
|
79
|
+
|
|
80
|
+
reset:
|
|
81
|
+
desc: "Reset an issue's triage state. Appends a reset audit entry referencing prior; does NOT delete history. (#845 Story 3)"
|
|
82
|
+
internal: true
|
|
83
|
+
deps: [":ts:build"]
|
|
84
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
85
|
+
cmds:
|
|
86
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-actions reset {{.CLI_ARGS}}
|
|
87
|
+
|
|
88
|
+
history:
|
|
89
|
+
desc: "Print the full triage timeline for an issue, ordered by timestamp. Read-only. (#845 Story 3)"
|
|
90
|
+
internal: true
|
|
91
|
+
deps: [":ts:build"]
|
|
92
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
93
|
+
cmds:
|
|
94
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-actions history {{.CLI_ARGS}}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
version: '3'
|
|
2
|
+
|
|
3
|
+
# Triage v1 bootstrap fragment (#845 Story 6).
|
|
4
|
+
#
|
|
5
|
+
# Standalone fragment: this file is wired into the parent Taskfile.yml via the
|
|
6
|
+
# `includes:` block (see Taskfile.yml `## triage v1 fragment includes` comment).
|
|
7
|
+
# When included under namespace key `triage-bootstrap`, the inner task
|
|
8
|
+
# `bootstrap` is reachable as `task triage-bootstrap:bootstrap`. The parent
|
|
9
|
+
# Taskfile.yml additionally exposes the user-facing alias `task triage:bootstrap`
|
|
10
|
+
# which delegates here.
|
|
11
|
+
#
|
|
12
|
+
# Companion files in the four-fragment cluster (#845):
|
|
13
|
+
# tasks/triage-cache.yml (Story 1 -- cache populate + show)
|
|
14
|
+
# tasks/triage-actions.yml (Story 3 -- accept/reject/defer/...)
|
|
15
|
+
# tasks/triage-bulk.yml (Story 4 -- bulk ops + freshness)
|
|
16
|
+
# tasks/triage-bootstrap.yml (Story 6 -- this file)
|
|
17
|
+
#
|
|
18
|
+
# Companion script: scripts/triage_bootstrap.py
|
|
19
|
+
# Companion test: tests/test_triage_bootstrap.py
|
|
20
|
+
#
|
|
21
|
+
# Per `conventions/task-caching.md` (#574): NO `sources:` / `generates:`
|
|
22
|
+
# declarations on this task because user-facing recovery flags
|
|
23
|
+
# (`--repo`, `--fetch-timeout-s`, `--json`, `--quiet`) are forwarded via
|
|
24
|
+
# {{.CLI_ARGS}} and go-task's incremental-build cache layer would silently
|
|
25
|
+
# swallow them. The Story 3 rebind dropped the v0.25.x `--skip-gitcrawl`
|
|
26
|
+
# install path entirely (#951): the script's argparse never accepted it.
|
|
27
|
+
|
|
28
|
+
vars:
|
|
29
|
+
# Resolve the deft framework root from this fragment's directory. The
|
|
30
|
+
# joinPath idiom mirrors the existing convention documented in the root
|
|
31
|
+
# Taskfile.yml header (#566): `{{.TASKFILE_DIR}}/..` evaluated by go-task's
|
|
32
|
+
# eager templating yields a native-separator absolute path that
|
|
33
|
+
# `node .../bin.js` can open on Windows / macOS / Linux.
|
|
34
|
+
DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
|
|
35
|
+
|
|
36
|
+
tasks:
|
|
37
|
+
bootstrap:
|
|
38
|
+
desc: "Idempotent triage v1 installer (#845): populate cache, backfill audit log, ensure gitignore for .deft-cache/ and vbrief/.eval/. Re-runnable; per-step progress on stderr; cache:fetch-all wall-clock cap (#952). -- task triage:bootstrap [-- --repo OWNER/NAME] [--limit N] [--state open|closed|all] [--fetch-timeout-s N] [--quiet] [--json]"
|
|
39
|
+
internal: true
|
|
40
|
+
deps: [":ts:build"]
|
|
41
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
42
|
+
cmds:
|
|
43
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-bootstrap --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
version: '3'
|
|
2
|
+
|
|
3
|
+
# tasks/triage-bulk.yml -- Story 4 of #845 + #915 cache-walk re-enable.
|
|
4
|
+
#
|
|
5
|
+
# Wired into the parent ../Taskfile.yml `includes:` block under namespace
|
|
6
|
+
# key `triage-bulk` (#845 Story 6). The user-facing `task triage:bulk-accept`
|
|
7
|
+
# / `triage:bulk-reject` / `triage:bulk-defer` / `triage:bulk-needs-ac` /
|
|
8
|
+
# `triage:refresh-active` surface lives as root-level alias tasks in
|
|
9
|
+
# Taskfile.yml that delegate here (#913); inner tasks below are
|
|
10
|
+
# `internal: true` so the fragment-namespace forms (`triage-bulk:bulk-*`)
|
|
11
|
+
# are hidden from `task -l`.
|
|
12
|
+
#
|
|
13
|
+
# The disable-gate `cmds:` blocks introduced by PR #916 (#915 hot-fix) were
|
|
14
|
+
# REVERSED once scripts/triage_bulk.py was rewritten to walk the local
|
|
15
|
+
# cache instead of live `gh issue list`. As of #883 Story 3 the cache walk
|
|
16
|
+
# consumes the unified `cache:get` surface
|
|
17
|
+
# (`.deft-cache/github-issue/<owner>/<repo>/<N>/`); the four `bulk-*`
|
|
18
|
+
# targets continue to invoke triage_bulk.py directly. The cache-empty
|
|
19
|
+
# hard-fail (exit 2) and Tier-2 audit-log short-circuit are enforced
|
|
20
|
+
# inside triage_bulk.py itself (#915 fix).
|
|
21
|
+
#
|
|
22
|
+
# Per `conventions/task-caching.md` (#574): every target here accepts user
|
|
23
|
+
# flags via `{{.CLI_ARGS}}` (--label, --author, --age-days, --cluster,
|
|
24
|
+
# --reason, --repo, --re-action) so MUST NOT declare `sources:` /
|
|
25
|
+
# `generates:` -- the cached cmds: skip would silently swallow the
|
|
26
|
+
# recovery flag.
|
|
27
|
+
#
|
|
28
|
+
# Path resolution mirrors the convention from tasks/issue.yml + tasks/policy.yml:
|
|
29
|
+
# `DEFT_ROOT` is defined locally via `joinPath .TASKFILE_DIR ".."` so
|
|
30
|
+
# `node .../bin.js` resolves cleanly on Windows under go-task's mvdan/sh
|
|
31
|
+
# interpreter (#566).
|
|
32
|
+
|
|
33
|
+
vars:
|
|
34
|
+
DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
|
|
35
|
+
|
|
36
|
+
tasks:
|
|
37
|
+
bulk-accept:
|
|
38
|
+
desc: "Bulk accept candidates (#845 Story 4) -- task triage:bulk-accept -- --repo OWNER/NAME [--label L] [--author A] [--age-days N] [--cluster C] [--re-action]"
|
|
39
|
+
internal: true
|
|
40
|
+
deps: [":ts:build"]
|
|
41
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
42
|
+
cmds:
|
|
43
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-bulk accept {{.CLI_ARGS}}
|
|
44
|
+
|
|
45
|
+
bulk-reject:
|
|
46
|
+
desc: "Bulk reject candidates (#845 Story 4) -- task triage:bulk-reject -- --repo OWNER/NAME --reason 'why' [--label L] [--author A] [--age-days N] [--cluster C] [--re-action]"
|
|
47
|
+
internal: true
|
|
48
|
+
deps: [":ts:build"]
|
|
49
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
50
|
+
cmds:
|
|
51
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-bulk reject {{.CLI_ARGS}}
|
|
52
|
+
|
|
53
|
+
bulk-defer:
|
|
54
|
+
desc: "Bulk defer candidates (#845 Story 4) -- task triage:bulk-defer -- --repo OWNER/NAME [--label L] [--author A] [--age-days N] [--cluster C] [--re-action]"
|
|
55
|
+
internal: true
|
|
56
|
+
deps: [":ts:build"]
|
|
57
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
58
|
+
cmds:
|
|
59
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-bulk defer {{.CLI_ARGS}}
|
|
60
|
+
|
|
61
|
+
bulk-needs-ac:
|
|
62
|
+
desc: "Bulk needs-ac candidates (#845 Story 4) -- task triage:bulk-needs-ac -- --repo OWNER/NAME [--label L] [--author A] [--age-days N] [--cluster C] [--re-action]"
|
|
63
|
+
internal: true
|
|
64
|
+
deps: [":ts:build"]
|
|
65
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
66
|
+
cmds:
|
|
67
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-bulk needs-ac {{.CLI_ARGS}}
|
|
68
|
+
|
|
69
|
+
refresh-active:
|
|
70
|
+
desc: "Pre-swarm freshness gate (#845 Story 4) -- detects drift between cached and live `gh issue view` for every issue referenced in vbrief/active/*.vbrief.json"
|
|
71
|
+
internal: true
|
|
72
|
+
deps: [":ts:build"]
|
|
73
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
74
|
+
cmds:
|
|
75
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-refresh --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
version: '3'
|
|
2
|
+
|
|
3
|
+
# tasks/triage-classify.yml -- auto-classification surface (#1129 / D10).
|
|
4
|
+
#
|
|
5
|
+
# Wired into the parent Taskfile.yml via the `includes:` block under
|
|
6
|
+
# namespace key `triage-classify` (mirroring the four-fragment cluster
|
|
7
|
+
# pattern from #845 / #1131). When included, the inner task `classify`
|
|
8
|
+
# is reachable as `task triage-classify:classify`. The parent Taskfile
|
|
9
|
+
# exposes the documented `task triage:classify` alias.
|
|
10
|
+
#
|
|
11
|
+
# Per `conventions/task-caching.md` (#574): NO `sources:` / `generates:`
|
|
12
|
+
# declarations on this task because user-facing flags (`--list`,
|
|
13
|
+
# `--validate`, `--project-root`) are forwarded via {{.CLI_ARGS}} and
|
|
14
|
+
# go-task's incremental-build cache layer would silently swallow them.
|
|
15
|
+
#
|
|
16
|
+
# Companion script: scripts/triage_classify.py (+ scripts/_triage_classify_cli.py)
|
|
17
|
+
# Companion tests: tests/test_triage_classify.py
|
|
18
|
+
# Current Shape: https://github.com/deftai/directive/issues/1129#issuecomment-4471901622
|
|
19
|
+
|
|
20
|
+
vars:
|
|
21
|
+
DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
|
|
22
|
+
|
|
23
|
+
tasks:
|
|
24
|
+
classify:
|
|
25
|
+
desc: "Inspect / validate plan.policy.triageAutoClassify[] + triageHoldMarkers[] (#1129 / D10). -- task triage:classify -- [--list | --validate]"
|
|
26
|
+
internal: true
|
|
27
|
+
deps: [":ts:build"]
|
|
28
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
29
|
+
cmds:
|
|
30
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-classify --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
version: '3'
|
|
2
|
+
|
|
3
|
+
# tasks/triage-queue.yml -- ranked triage queue + per-item show + audit
|
|
4
|
+
# surface (#1128 / D11 of #1119).
|
|
5
|
+
#
|
|
6
|
+
# Wired into the parent Taskfile.yml via the `includes:` block under
|
|
7
|
+
# namespace key `triage-queue` (matching the four-fragment cluster pattern
|
|
8
|
+
# from #845 and the D12 #1131 pattern landed in tasks/triage-scope.yml).
|
|
9
|
+
# When included that way, the inner tasks `queue` / `show` / `audit` are
|
|
10
|
+
# reachable as `task triage-queue:queue` / `task triage-queue:show` /
|
|
11
|
+
# `task triage-queue:audit`. The parent Taskfile exposes the documented
|
|
12
|
+
# `task triage:queue` / `task triage:show` / `task triage:audit` aliases.
|
|
13
|
+
#
|
|
14
|
+
# Per `conventions/task-caching.md` (#574): NO `sources:` / `generates:`
|
|
15
|
+
# declarations because each inner task accepts user-facing flags
|
|
16
|
+
# (`--repo`, `--limit`, `--format=json`, `--vbrief-staleness`,
|
|
17
|
+
# `--project-root`, `--cache-root`, `--audit-log`) via {{.CLI_ARGS}} and
|
|
18
|
+
# go-task's incremental-build cache layer would silently swallow them.
|
|
19
|
+
#
|
|
20
|
+
# Companion script: scripts/triage_queue.py (+ scripts/_triage_queue_cli.py)
|
|
21
|
+
# Companion tests: tests/test_triage_queue.py
|
|
22
|
+
# Current Shape: https://github.com/deftai/directive/issues/1128#issuecomment-4471272093
|
|
23
|
+
|
|
24
|
+
vars:
|
|
25
|
+
DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
|
|
26
|
+
|
|
27
|
+
tasks:
|
|
28
|
+
queue:
|
|
29
|
+
desc: "Print the ranked triage queue (#1128 / D11). -- task triage:queue [-- --repo OWNER/NAME] [--limit N]"
|
|
30
|
+
internal: true
|
|
31
|
+
deps: [":ts:build"]
|
|
32
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
33
|
+
cmds:
|
|
34
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-queue queue --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
|
|
35
|
+
|
|
36
|
+
show:
|
|
37
|
+
desc: "Per-issue triage detail (#1128 / D11). -- task triage:show -- <N> [--repo OWNER/NAME]"
|
|
38
|
+
internal: true
|
|
39
|
+
deps: [":ts:build"]
|
|
40
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
41
|
+
cmds:
|
|
42
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-queue show --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
|
|
43
|
+
|
|
44
|
+
audit:
|
|
45
|
+
desc: "Audit-log surface (#1128 / D11, #1180). -- task triage:audit [-- --format=text|json] [--vbrief-staleness] [--since=<window>] [--action=<verb>] [--repo OWNER/NAME]"
|
|
46
|
+
internal: true
|
|
47
|
+
deps: [":ts:build"]
|
|
48
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
49
|
+
cmds:
|
|
50
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-queue audit --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
version: '3'
|
|
2
|
+
|
|
3
|
+
# tasks/triage-reconcile.yml -- `task triage:reconcile` audit-log self-heal (#1468).
|
|
4
|
+
#
|
|
5
|
+
# Wired into the parent Taskfile.yml via the `includes:` block under namespace
|
|
6
|
+
# key `triage-reconcile`. The inner task `reconcile` is reachable as
|
|
7
|
+
# `task triage-reconcile:reconcile`; the parent Taskfile exposes the documented
|
|
8
|
+
# `task triage:reconcile` alias.
|
|
9
|
+
#
|
|
10
|
+
# Per `conventions/task-caching.md` (#574): NO `sources:` / `generates:`
|
|
11
|
+
# declarations because user-facing flags (`--repo`, `--dry-run`, `--json`,
|
|
12
|
+
# `--project-root`) are forwarded via {{.CLI_ARGS}} and go-task's
|
|
13
|
+
# incremental-build cache layer would silently swallow them.
|
|
14
|
+
#
|
|
15
|
+
# Companion script: scripts/triage_reconcile.py
|
|
16
|
+
# Companion tests: tests/test_triage_reconcile.py
|
|
17
|
+
# Pattern reference: tasks/triage-bootstrap.yml (#845 Story 6).
|
|
18
|
+
|
|
19
|
+
vars:
|
|
20
|
+
DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
|
|
21
|
+
|
|
22
|
+
tasks:
|
|
23
|
+
reconcile:
|
|
24
|
+
desc: "Self-heal the triage audit log (#1468): backfill missing `accept` decisions for proposed/pending/active vBRIEFs carrying an x-vbrief/github-issue reference, without a cache re-fetch. Idempotent. -- task triage:reconcile [-- --repo OWNER/NAME] [--dry-run] [--json]"
|
|
25
|
+
internal: true
|
|
26
|
+
deps: [":ts:build"]
|
|
27
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
28
|
+
cmds:
|
|
29
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-reconcile --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
version: '3'
|
|
2
|
+
|
|
3
|
+
# tasks/triage-scope-drift.yml -- subscription drift detection (#1133 / D14).
|
|
4
|
+
#
|
|
5
|
+
# Wired into the parent Taskfile.yml via the `includes:` block under namespace
|
|
6
|
+
# key `triage-scope-drift`. When included that way, the inner task
|
|
7
|
+
# `scope-drift` is reachable as `task triage-scope-drift:scope-drift`. The
|
|
8
|
+
# parent Taskfile exposes the documented `task triage:scope-drift` alias.
|
|
9
|
+
#
|
|
10
|
+
# Per `conventions/task-caching.md` (#574): NO `sources:` / `generates:`
|
|
11
|
+
# declarations on this task because user-facing flags (`--ignore-label`,
|
|
12
|
+
# `--ignore-milestone`, `--threshold`, `--cache-root`) are forwarded via
|
|
13
|
+
# {{.CLI_ARGS}} and go-task's incremental-build cache layer would silently
|
|
14
|
+
# swallow them.
|
|
15
|
+
#
|
|
16
|
+
# Companion script: scripts/triage_scope_drift.py (+ shims).
|
|
17
|
+
# Companion tests: tests/test_triage_scope_drift.py.
|
|
18
|
+
|
|
19
|
+
vars:
|
|
20
|
+
DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
|
|
21
|
+
|
|
22
|
+
tasks:
|
|
23
|
+
scope-drift:
|
|
24
|
+
desc: "Detect subscription drift -- unsubscribed labels/milestones on cached open issues (#1133 / D14). -- task triage:scope-drift [-- --ignore-label=L | --ignore-milestone=M]"
|
|
25
|
+
internal: true
|
|
26
|
+
deps: [":ts:build"]
|
|
27
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
28
|
+
cmds:
|
|
29
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-scope-drift --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
version: '3'
|
|
2
|
+
|
|
3
|
+
# tasks/triage-scope.yml -- typed plan.policy.triageScope[] surface (#1131 / D12).
|
|
4
|
+
#
|
|
5
|
+
# Wired into the parent Taskfile.yml via the `includes:` block under namespace
|
|
6
|
+
# key `triage-scope` (matching the four-fragment cluster pattern from #845).
|
|
7
|
+
# When included that way, the inner task `scope` is reachable as
|
|
8
|
+
# `task triage-scope:scope`. The parent Taskfile exposes the documented
|
|
9
|
+
# `task triage:scope` alias.
|
|
10
|
+
#
|
|
11
|
+
# Per `conventions/task-caching.md` (#574): NO `sources:` / `generates:`
|
|
12
|
+
# declarations on this task because user-facing flags (`--list`,
|
|
13
|
+
# `--refresh-denominator`, `--repo`, `--count`, `--cache-root`) are forwarded
|
|
14
|
+
# via {{.CLI_ARGS}} and go-task's incremental-build cache layer would
|
|
15
|
+
# silently swallow them.
|
|
16
|
+
#
|
|
17
|
+
# Companion script: scripts/triage_scope.py (+ scripts/_triage_scope_cli.py)
|
|
18
|
+
# Companion tests: tests/test_triage_scope.py
|
|
19
|
+
# Current Shape: https://github.com/deftai/directive/issues/1131#issuecomment-4471901494
|
|
20
|
+
|
|
21
|
+
vars:
|
|
22
|
+
DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
|
|
23
|
+
|
|
24
|
+
tasks:
|
|
25
|
+
scope:
|
|
26
|
+
desc: "Inspect / mutate / diff the typed plan.policy.triageScope[] subscription + triageScopeIgnores[] (#1131 / D12, #1133 / D14, #1182 / D14c). -- task triage:scope -- [--list] [--add-label=L | --add-milestone=M | --ignore-label=L] [--diff-from-upstream --repo OWNER/NAME] [--refresh-denominator --repo OWNER/NAME --count N]"
|
|
27
|
+
internal: true
|
|
28
|
+
deps: [":ts:build"]
|
|
29
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
30
|
+
cmds:
|
|
31
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-scope --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
|