@deftai/directive-content 0.55.2 → 0.56.1
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,33 @@
|
|
|
1
|
+
version: '3'
|
|
2
|
+
|
|
3
|
+
# tasks/triage-smoketest.yml -- N6 (#1146) `task triage:smoketest` end-to-end
|
|
4
|
+
# synthetic test of the cache-as-operator-working-set surface.
|
|
5
|
+
#
|
|
6
|
+
# Wired into the parent Taskfile.yml via the `includes:` block under namespace
|
|
7
|
+
# key `triage-smoketest`. The inner task `smoketest` is reachable as
|
|
8
|
+
# `task triage-smoketest:smoketest`; the parent Taskfile exposes the
|
|
9
|
+
# documented `task triage:smoketest` alias.
|
|
10
|
+
#
|
|
11
|
+
# Per `conventions/task-caching.md` (#574): NO `sources:` / `generates:`
|
|
12
|
+
# declarations because user-facing flags (`--verbose`, `--keep-tempdir`,
|
|
13
|
+
# `--cache-only`, `--fixture`) are forwarded via {{.CLI_ARGS}} and
|
|
14
|
+
# go-task's incremental-build cache layer would silently swallow them.
|
|
15
|
+
#
|
|
16
|
+
# Companion script: scripts/triage_smoketest.py (+ scripts/_triage_smoketest_stages.py)
|
|
17
|
+
# Companion fixture: tests/fixtures/triage_smoketest/
|
|
18
|
+
# Companion tests: tests/test_triage_smoketest.py + tests/test_triage_smoketest_fixture.py
|
|
19
|
+
# Pattern reference: tasks/triage-summary.yml (D2 / #1122).
|
|
20
|
+
|
|
21
|
+
vars:
|
|
22
|
+
DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
|
|
23
|
+
|
|
24
|
+
tasks:
|
|
25
|
+
smoketest:
|
|
26
|
+
desc: "Run the N6 (#1146) end-to-end smoketest against the hermetic 20-issue fixture. Exits 0 on PASS / 1 on first failure. -- task triage:smoketest [-- --verbose] [--keep-tempdir] [--cache-only]"
|
|
27
|
+
internal: true
|
|
28
|
+
deps: [":ts:build"]
|
|
29
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
30
|
+
env:
|
|
31
|
+
DEFT_ROOT: '{{.DEFT_ROOT}}'
|
|
32
|
+
cmds:
|
|
33
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-smoketest {{.CLI_ARGS}}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
version: '3'
|
|
2
|
+
|
|
3
|
+
# tasks/triage-subscribe.yml -- subscribe / unsubscribe mutation verbs (#1133 / D14).
|
|
4
|
+
#
|
|
5
|
+
# Wired into the parent Taskfile.yml via the `includes:` block under namespace
|
|
6
|
+
# key `triage-subscribe`. Inner tasks `subscribe` / `unsubscribe` are
|
|
7
|
+
# reachable as `task triage-subscribe:subscribe` / `triage-subscribe:unsubscribe`.
|
|
8
|
+
# The parent Taskfile exposes the user-facing `task triage:subscribe` /
|
|
9
|
+
# `task triage:unsubscribe` aliases.
|
|
10
|
+
#
|
|
11
|
+
# Per `conventions/task-caching.md` (#574): NO `sources:` / `generates:`
|
|
12
|
+
# declarations -- user-facing flags (`--label`, `--milestone`, `--issue`,
|
|
13
|
+
# `--issue-note`, `--actor`) are forwarded via {{.CLI_ARGS}}.
|
|
14
|
+
#
|
|
15
|
+
# Companion script: scripts/triage_subscribe.py (+ shim).
|
|
16
|
+
# Companion tests: tests/test_triage_subscribe.py.
|
|
17
|
+
|
|
18
|
+
vars:
|
|
19
|
+
DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
|
|
20
|
+
|
|
21
|
+
tasks:
|
|
22
|
+
subscribe:
|
|
23
|
+
desc: "Subscribe to a label / milestone / issue on plan.policy.triageScope[] (#1133 / D14). -- task triage:subscribe -- (--label=L | --milestone=M | --issue=N)"
|
|
24
|
+
internal: true
|
|
25
|
+
deps: [":ts:build"]
|
|
26
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
27
|
+
cmds:
|
|
28
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-subscribe subscribe --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
|
|
29
|
+
|
|
30
|
+
unsubscribe:
|
|
31
|
+
desc: "Unsubscribe a label / milestone / issue from plan.policy.triageScope[] (#1133 / D14). -- task triage:unsubscribe -- (--label=L | --milestone=M | --issue=N)"
|
|
32
|
+
internal: true
|
|
33
|
+
deps: [":ts:build"]
|
|
34
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
35
|
+
cmds:
|
|
36
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-subscribe unsubscribe --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
version: '3'
|
|
2
|
+
|
|
3
|
+
# tasks/triage-summary.yml -- D2 (#1122) `task triage:summary` one-liner surface.
|
|
4
|
+
#
|
|
5
|
+
# Wired into the parent Taskfile.yml via the `includes:` block under namespace
|
|
6
|
+
# key `triage-summary`. The inner task `summary` is reachable as
|
|
7
|
+
# `task triage-summary:summary`; the parent Taskfile exposes the documented
|
|
8
|
+
# `task triage:summary` alias.
|
|
9
|
+
#
|
|
10
|
+
# Per `conventions/task-caching.md` (#574): NO `sources:` / `generates:`
|
|
11
|
+
# declarations because user-facing flags (`--project-root`, `--cache-root`,
|
|
12
|
+
# `--no-history`, `--json`) are forwarded via {{.CLI_ARGS}} and go-task's
|
|
13
|
+
# incremental-build cache layer would silently swallow them.
|
|
14
|
+
#
|
|
15
|
+
# Companion script: scripts/triage_summary.py
|
|
16
|
+
# Companion tests: tests/test_triage_summary.py
|
|
17
|
+
# Pattern reference: tasks/triage-scope.yml (D12 / #1131 / merged via #1190).
|
|
18
|
+
|
|
19
|
+
vars:
|
|
20
|
+
DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
|
|
21
|
+
|
|
22
|
+
tasks:
|
|
23
|
+
summary:
|
|
24
|
+
desc: "Emit the D2 (#1122) one-line triage state for the session-start ritual (N9 / #1149). Always exits 0; appends a JSONL record to vbrief/.eval/summary-history.jsonl. -- task triage:summary -- [--json] [--no-history]"
|
|
25
|
+
internal: true
|
|
26
|
+
deps: [":ts:build"]
|
|
27
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
28
|
+
cmds:
|
|
29
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-summary --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
version: '3'
|
|
2
|
+
|
|
3
|
+
# tasks/triage-welcome.yml -- N3 (#1143) `task triage:welcome` 6-phase
|
|
4
|
+
# onboarding ritual surface.
|
|
5
|
+
#
|
|
6
|
+
# Wired into the parent Taskfile.yml via the `includes:` block under
|
|
7
|
+
# namespace key `triage-welcome`. The inner task `welcome` is reachable
|
|
8
|
+
# as `task triage-welcome:welcome`; the parent Taskfile exposes the
|
|
9
|
+
# documented `task triage:welcome` alias.
|
|
10
|
+
#
|
|
11
|
+
# Per `conventions/task-caching.md` (#574): NO `sources:` / `generates:`
|
|
12
|
+
# declarations because user-facing flags (`--project-root`,
|
|
13
|
+
# `--no-subprocess`) are forwarded via {{.CLI_ARGS}} and go-task's
|
|
14
|
+
# incremental-build cache layer would silently swallow them.
|
|
15
|
+
#
|
|
16
|
+
# Companion script: scripts/triage_welcome.py (+ scripts/_triage_welcome_cli.py)
|
|
17
|
+
# Companion tests: tests/test_triage_welcome.py
|
|
18
|
+
# Pattern reference: tasks/triage-summary.yml (D2 / #1122).
|
|
19
|
+
|
|
20
|
+
vars:
|
|
21
|
+
DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
|
|
22
|
+
|
|
23
|
+
tasks:
|
|
24
|
+
welcome:
|
|
25
|
+
desc: "Run the 6-phase onboarding ritual (N3 / #1143): detect prior state, prompt subscription scope, run triage:bootstrap, prompt wipCap, offer WIP relief, print triage:summary. Idempotent; re-run resumes cleanly. -- task triage:welcome -- [--no-subprocess]"
|
|
26
|
+
internal: true
|
|
27
|
+
deps: [":ts:build"]
|
|
28
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
29
|
+
env:
|
|
30
|
+
DEFT_TASK_PREFIX: '{{.DEFT_TASK_PREFIX | default ""}}'
|
|
31
|
+
cmds:
|
|
32
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" triage-welcome --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
|
package/tasks/ts.yml
ADDED
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
version: '3'
|
|
2
|
+
|
|
3
|
+
# TypeScript engine monorepo verbs (#1717). The TS engine lives at the repo
|
|
4
|
+
# root (packages/*) and coexists with the Python/Go engine during the
|
|
5
|
+
# strangler-fig migration.
|
|
6
|
+
#
|
|
7
|
+
# `check:framework-source` now runs the TS lane via the `ts:check-lane`
|
|
8
|
+
# Node-toolchain-aware guard (#1790): when `pnpm` is on PATH it runs
|
|
9
|
+
# lint+build+test, and when it is absent it skips with a notice and exits 0
|
|
10
|
+
# (so the gate still works in Node-less environments, mirroring the #1474
|
|
11
|
+
# vendored-consumer guards). This closed the PR #1780 gap where a TS biome
|
|
12
|
+
# failure passed a local `task check` but reddened CI. The dedicated `ts` CI
|
|
13
|
+
# job still runs the lane unconditionally.
|
|
14
|
+
#
|
|
15
|
+
# DEFT_ROOT resolves to the repo root (this fragment lives in tasks/, so
|
|
16
|
+
# {{.TASKFILE_DIR}}/.. is the root), matching the sibling task fragments.
|
|
17
|
+
|
|
18
|
+
vars:
|
|
19
|
+
DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
|
|
20
|
+
|
|
21
|
+
tasks:
|
|
22
|
+
build:
|
|
23
|
+
desc: "Build the TypeScript engine monorepo (tsc -b project references, #1717)"
|
|
24
|
+
dir: '{{.DEFT_ROOT}}'
|
|
25
|
+
cmds:
|
|
26
|
+
- pnpm run build
|
|
27
|
+
|
|
28
|
+
test:
|
|
29
|
+
desc: "Run the TypeScript engine test suite with coverage (vitest, #1717)"
|
|
30
|
+
dir: '{{.DEFT_ROOT}}'
|
|
31
|
+
cmds:
|
|
32
|
+
- pnpm run test
|
|
33
|
+
|
|
34
|
+
lint:
|
|
35
|
+
desc: "Lint + format-check the TypeScript engine (biome, #1717)"
|
|
36
|
+
dir: '{{.DEFT_ROOT}}'
|
|
37
|
+
cmds:
|
|
38
|
+
- pnpm run lint
|
|
39
|
+
|
|
40
|
+
check-lane:
|
|
41
|
+
desc: "Run the TS lane (lint+build+test) when a Node toolchain is present; skip with a notice otherwise (#1530 local-gate<->CI parity, #1790)."
|
|
42
|
+
dir: '{{.DEFT_ROOT}}'
|
|
43
|
+
cmds:
|
|
44
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" ts-check-lane --project-root "{{.DEFT_ROOT}}"
|
|
45
|
+
|
|
46
|
+
encoding:
|
|
47
|
+
desc: "Run the ported verify:encoding gate (TS @deftai/core port, #1718)"
|
|
48
|
+
deps: [build]
|
|
49
|
+
cmds:
|
|
50
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/verify-encoding.js" --all --project-root "{{.DEFT_ROOT}}"
|
|
51
|
+
|
|
52
|
+
parity:
|
|
53
|
+
desc: "Golden-diff the ported verify:encoding gate vs the Python oracle, cache-off (#1718)"
|
|
54
|
+
deps: [build]
|
|
55
|
+
cmds:
|
|
56
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/parity.js"
|
|
57
|
+
|
|
58
|
+
policy-parity:
|
|
59
|
+
desc: "Golden-diff the ported policy surface vs the Python oracle, cache-off (#1722)"
|
|
60
|
+
deps: [build]
|
|
61
|
+
cmds:
|
|
62
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/policy-parity.js"
|
|
63
|
+
|
|
64
|
+
preflight-parity:
|
|
65
|
+
desc: "Golden-diff the ported vBRIEF preflight gate vs the Python oracle, cache-off (#1721)"
|
|
66
|
+
deps: [build]
|
|
67
|
+
cmds:
|
|
68
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/vbrief-preflight-parity.js"
|
|
69
|
+
|
|
70
|
+
story-ready-parity:
|
|
71
|
+
desc: "Golden-diff the ported verify:story-ready gate vs the Python oracle, cache-off (#1720)"
|
|
72
|
+
deps: [build]
|
|
73
|
+
cmds:
|
|
74
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/story-ready-parity.js"
|
|
75
|
+
|
|
76
|
+
branch-parity:
|
|
77
|
+
desc: "Golden-diff the ported verify:branch gate vs the Python oracle, cache-off (#1719)"
|
|
78
|
+
deps: [build]
|
|
79
|
+
cmds:
|
|
80
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/branch-parity.js"
|
|
81
|
+
|
|
82
|
+
wip-cap-parity:
|
|
83
|
+
desc: "Golden-diff the ported verify:wip-cap gate vs the Python oracle, cache-off (#1723)"
|
|
84
|
+
deps: [build]
|
|
85
|
+
cmds:
|
|
86
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/wip-cap-parity.js"
|
|
87
|
+
|
|
88
|
+
scm-parity:
|
|
89
|
+
desc: "Golden-diff the ported scm.py SCM boundary vs the Python oracle, cache-off (#1724)"
|
|
90
|
+
deps: [build]
|
|
91
|
+
cmds:
|
|
92
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/scm-parity.js"
|
|
93
|
+
|
|
94
|
+
triage-parity:
|
|
95
|
+
desc: "Golden-diff every ported triage verb vs its Python oracle, cache-off (#1530 Wave 3, #1725)"
|
|
96
|
+
deps: [build]
|
|
97
|
+
cmds:
|
|
98
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/triage-queue-parity.js"
|
|
99
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/triage-summary-parity.js"
|
|
100
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/triage-classify-parity.js"
|
|
101
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/triage-actions-parity.js"
|
|
102
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/triage-bootstrap-parity.js"
|
|
103
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/triage-scope-parity.js"
|
|
104
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/triage-aux-a-parity.js"
|
|
105
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/triage-aux-b-parity.js"
|
|
106
|
+
|
|
107
|
+
scope-lifecycle-parity:
|
|
108
|
+
desc: "Golden-diff the ported scope:* lifecycle family vs the Python oracle, cache-off (#1726)"
|
|
109
|
+
deps: [build]
|
|
110
|
+
cmds:
|
|
111
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/scope-lifecycle-parity.js"
|
|
112
|
+
|
|
113
|
+
slice-parity:
|
|
114
|
+
desc: "Golden-diff the ported slice:* family vs the Python oracle, cache-off (#1727)"
|
|
115
|
+
deps: [build]
|
|
116
|
+
cmds:
|
|
117
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/slice-parity.js"
|
|
118
|
+
|
|
119
|
+
cache-parity:
|
|
120
|
+
desc: "Golden-diff the ported unified content cache vs the Python oracle, cache-off (#1728)"
|
|
121
|
+
deps: [build]
|
|
122
|
+
cmds:
|
|
123
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/cache-parity.js"
|
|
124
|
+
|
|
125
|
+
doctor-parity:
|
|
126
|
+
desc: "Golden-diff the ported deft doctor vs the Python oracle, cache-off (#1728)"
|
|
127
|
+
deps: [build]
|
|
128
|
+
cmds:
|
|
129
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/doctor-parity.js"
|
|
130
|
+
|
|
131
|
+
release-parity:
|
|
132
|
+
desc: "Golden-diff the ported release.py core vs the Python oracle, cache-off (#1729)"
|
|
133
|
+
deps: [build]
|
|
134
|
+
cmds:
|
|
135
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/release-parity.js"
|
|
136
|
+
|
|
137
|
+
release-publish-parity:
|
|
138
|
+
desc: "Golden-diff the ported release_publish.py vs the Python oracle, cache-off (#1729)"
|
|
139
|
+
deps: [build]
|
|
140
|
+
cmds:
|
|
141
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/release-publish-parity.js"
|
|
142
|
+
|
|
143
|
+
release-rollback-parity:
|
|
144
|
+
desc: "Golden-diff the ported release_rollback.py vs the Python oracle, cache-off (#1729)"
|
|
145
|
+
deps: [build]
|
|
146
|
+
cmds:
|
|
147
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/release-rollback-parity.js"
|
|
148
|
+
|
|
149
|
+
release-e2e-parity:
|
|
150
|
+
desc: "Golden-diff the ported release_e2e.py vs the Python oracle, cache-off (#1729)"
|
|
151
|
+
deps: [build]
|
|
152
|
+
cmds:
|
|
153
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/release-e2e-parity.js"
|
|
154
|
+
|
|
155
|
+
pr-merge-readiness-parity:
|
|
156
|
+
desc: "Golden-diff the ported pr_merge_readiness.py vs the Python oracle, cache-off (#1730)"
|
|
157
|
+
deps: [build]
|
|
158
|
+
cmds:
|
|
159
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/pr-merge-readiness-parity.js"
|
|
160
|
+
|
|
161
|
+
pr-protected-issues-parity:
|
|
162
|
+
desc: "Golden-diff the ported pr_check_protected_issues.py vs the Python oracle, cache-off (#1730)"
|
|
163
|
+
deps: [build]
|
|
164
|
+
cmds:
|
|
165
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/pr-protected-issues-parity.js"
|
|
166
|
+
|
|
167
|
+
pr-closing-keywords-parity:
|
|
168
|
+
desc: "Golden-diff the ported pr_check_closing_keywords.py vs the Python oracle, cache-off (#1730)"
|
|
169
|
+
deps: [build]
|
|
170
|
+
cmds:
|
|
171
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/pr-closing-keywords-parity.js"
|
|
172
|
+
|
|
173
|
+
pr-monitor-parity:
|
|
174
|
+
desc: "Golden-diff the ported monitor_pr.py vs the Python oracle, cache-off (#1730)"
|
|
175
|
+
deps: [build]
|
|
176
|
+
cmds:
|
|
177
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/pr-monitor-parity.js"
|
|
178
|
+
|
|
179
|
+
pr-wait-mergeable-parity:
|
|
180
|
+
desc: "Golden-diff the ported pr_wait_mergeable.py cascade composer vs the Python oracle, cache-off (#1730)"
|
|
181
|
+
deps: [build]
|
|
182
|
+
cmds:
|
|
183
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/pr-wait-mergeable-parity.js"
|
|
184
|
+
|
|
185
|
+
vbrief-build-parity:
|
|
186
|
+
desc: "Golden-diff the ported vBRIEF construction foundation vs the Python oracle, cache-off (#1782 s1)"
|
|
187
|
+
deps: [build]
|
|
188
|
+
cmds:
|
|
189
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/vbrief-build-parity.js"
|
|
190
|
+
|
|
191
|
+
vbrief-reconcile-parity:
|
|
192
|
+
desc: "Golden-diff the ported vBRIEF reconciliation engine vs the Python oracle, cache-off (#1782 s4)"
|
|
193
|
+
deps: [build]
|
|
194
|
+
cmds:
|
|
195
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/vbrief-reconcile-parity.js"
|
|
196
|
+
|
|
197
|
+
vbrief-validation-parity:
|
|
198
|
+
desc: "Golden-diff the ported vBRIEF validation primitives vs the Python oracle, cache-off (#1782 s2)"
|
|
199
|
+
deps: [build]
|
|
200
|
+
cmds:
|
|
201
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/vbrief-validation-parity.js"
|
|
202
|
+
|
|
203
|
+
vbrief-validate-parity:
|
|
204
|
+
desc: "Golden-diff the ported vbrief:validate + verify:vbrief-conformance gates vs the Python oracle, cache-off (#1782 s3)"
|
|
205
|
+
deps: [build]
|
|
206
|
+
cmds:
|
|
207
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/vbrief-validate-parity.js"
|
|
208
|
+
|
|
209
|
+
vbrief-activate-parity:
|
|
210
|
+
desc: "Golden-diff the ported vbrief_activate.py lifecycle verb vs the Python oracle, cache-off (#1782 s5)"
|
|
211
|
+
deps: [build]
|
|
212
|
+
cmds:
|
|
213
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/vbrief-activate-parity.js"
|
|
214
|
+
|
|
215
|
+
verify-env-parity:
|
|
216
|
+
desc: "Golden-diff the ported verify_tools / verify_hooks_installed / toolchain-check / verify_no_task_runtime gates vs the Python oracle, cache-off (#1783 s1)"
|
|
217
|
+
deps: [build]
|
|
218
|
+
cmds:
|
|
219
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/verify-env-parity.js"
|
|
220
|
+
|
|
221
|
+
verify-source-parity:
|
|
222
|
+
desc: "Golden-diff the ported source-tree scanner gates vs the Python oracle, cache-off (#1783 s2)"
|
|
223
|
+
deps: [build]
|
|
224
|
+
cmds:
|
|
225
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/verify-source-parity.js"
|
|
226
|
+
|
|
227
|
+
validate-content-parity:
|
|
228
|
+
desc: "Golden-diff the ported content validator gates vs the Python oracle, cache-off (#1783 s3)"
|
|
229
|
+
deps: [build]
|
|
230
|
+
cmds:
|
|
231
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/validate-content-parity.js"
|
|
232
|
+
|
|
233
|
+
render-parity:
|
|
234
|
+
desc: "Golden-diff the ported spec/PRD/render family vs the Python oracle, cache-off (#1785)"
|
|
235
|
+
deps: [build]
|
|
236
|
+
cmds:
|
|
237
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/render-parity.js"
|
|
238
|
+
|
|
239
|
+
codebase-parity:
|
|
240
|
+
desc: "Golden-diff the ported codebase mapping + capacity modules vs the Python oracle, cache-off (#1786)"
|
|
241
|
+
deps: [build]
|
|
242
|
+
cmds:
|
|
243
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/codebase-parity.js"
|
|
244
|
+
|
|
245
|
+
intake-parity:
|
|
246
|
+
desc: "Golden-diff the ported issue intake + reconcile surface vs the Python oracle, cache-off (#1784)"
|
|
247
|
+
deps: [build]
|
|
248
|
+
cmds:
|
|
249
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/intake-parity.js"
|
|
250
|
+
|
|
251
|
+
lifecycle-packs-parity:
|
|
252
|
+
desc: "Golden-diff the ported lifecycle hygiene + events + packs surface vs the Python oracle, cache-off (#1787 s2)"
|
|
253
|
+
deps: [build]
|
|
254
|
+
cmds:
|
|
255
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/lifecycle-packs-parity.js"
|
|
256
|
+
|
|
257
|
+
session-parity:
|
|
258
|
+
desc: "Golden-diff the ported session/ritual core vs the Python oracle, cache-off (#1787 s1)"
|
|
259
|
+
deps: [build]
|
|
260
|
+
cmds:
|
|
261
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/session-parity.js"
|
|
262
|
+
|
|
263
|
+
orchestration-parity:
|
|
264
|
+
desc: "Golden-diff the ported monitor/investigation gate verbs vs the Python oracle, cache-off (#1788 s2)"
|
|
265
|
+
deps: [build]
|
|
266
|
+
cmds:
|
|
267
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/orchestration-parity.js"
|
|
268
|
+
|
|
269
|
+
swarm-parity:
|
|
270
|
+
desc: "Golden-diff the ported swarm cohort verbs vs the Python oracle, cache-off (#1788 s1)"
|
|
271
|
+
deps: [build]
|
|
272
|
+
cmds:
|
|
273
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/swarm-parity.js"
|
|
274
|
+
|
|
275
|
+
platform-parity:
|
|
276
|
+
desc: "Golden-diff the ported AGENTS.md/version/platform utilities vs the Python oracle, cache-off (#1787 s3)"
|
|
277
|
+
deps: [build]
|
|
278
|
+
cmds:
|
|
279
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/platform-parity.js"
|
|
280
|
+
|
|
281
|
+
parity-all:
|
|
282
|
+
desc: "Run every TS-port golden-diff parity harness vs the Python oracle (#1530 Wave 2)"
|
|
283
|
+
deps: [build]
|
|
284
|
+
cmds:
|
|
285
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/parity.js"
|
|
286
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/policy-parity.js"
|
|
287
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/vbrief-preflight-parity.js"
|
|
288
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/story-ready-parity.js"
|
|
289
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/branch-parity.js"
|
|
290
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/wip-cap-parity.js"
|
|
291
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/scm-parity.js"
|
|
292
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/triage-queue-parity.js"
|
|
293
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/triage-summary-parity.js"
|
|
294
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/triage-classify-parity.js"
|
|
295
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/triage-actions-parity.js"
|
|
296
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/triage-bootstrap-parity.js"
|
|
297
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/triage-scope-parity.js"
|
|
298
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/triage-aux-a-parity.js"
|
|
299
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/triage-aux-b-parity.js"
|
|
300
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/scope-lifecycle-parity.js"
|
|
301
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/slice-parity.js"
|
|
302
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/cache-parity.js"
|
|
303
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/doctor-parity.js"
|
|
304
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/release-parity.js"
|
|
305
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/release-publish-parity.js"
|
|
306
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/release-rollback-parity.js"
|
|
307
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/release-e2e-parity.js"
|
|
308
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/pr-merge-readiness-parity.js"
|
|
309
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/pr-protected-issues-parity.js"
|
|
310
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/pr-closing-keywords-parity.js"
|
|
311
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/pr-monitor-parity.js"
|
|
312
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/pr-wait-mergeable-parity.js"
|
|
313
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/vbrief-build-parity.js"
|
|
314
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/vbrief-reconcile-parity.js"
|
|
315
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/vbrief-validation-parity.js"
|
|
316
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/vbrief-validate-parity.js"
|
|
317
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/vbrief-activate-parity.js"
|
|
318
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/verify-env-parity.js"
|
|
319
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/verify-source-parity.js"
|
|
320
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/validate-content-parity.js"
|
|
321
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/render-parity.js"
|
|
322
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/codebase-parity.js"
|
|
323
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/intake-parity.js"
|
|
324
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/lifecycle-packs-parity.js"
|
|
325
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/session-parity.js"
|
|
326
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/orchestration-parity.js"
|
|
327
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/swarm-parity.js"
|
|
328
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/platform-parity.js"
|
package/tasks/vbrief.yml
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
version: '3'
|
|
2
|
+
|
|
3
|
+
vars:
|
|
4
|
+
DEFT_ROOT: '{{joinPath .TASKFILE_DIR ".."}}'
|
|
5
|
+
|
|
6
|
+
tasks:
|
|
7
|
+
_ts-build:
|
|
8
|
+
internal: true
|
|
9
|
+
desc: "Build @deftai/cli dist/ before TS-backed gates run (#1828 s2)."
|
|
10
|
+
dir: '{{.DEFT_ROOT}}'
|
|
11
|
+
cmds:
|
|
12
|
+
- pnpm run build
|
|
13
|
+
|
|
14
|
+
validate:
|
|
15
|
+
desc: Validate vBRIEF lifecycle folder structure and cross-file consistency
|
|
16
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
17
|
+
deps:
|
|
18
|
+
- _ts-build
|
|
19
|
+
cmds:
|
|
20
|
+
# Oracle/fallback (parity): scripts/vbrief_validate.py (#1828 Wave 8).
|
|
21
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" vbrief:validate --vbrief-dir "{{.USER_WORKING_DIR}}/vbrief"
|
|
22
|
+
|
|
23
|
+
preflight:
|
|
24
|
+
# Implementation-intent preflight wrapper (#810 / PR #812 fixup;
|
|
25
|
+
# #1046 PR-C / #1047 fail-closed resolver). Skill files
|
|
26
|
+
# (skills/deft-directive-build/SKILL.md Step 0,
|
|
27
|
+
# skills/deft-directive-swarm/SKILL.md Phase 0 Step 1) and the
|
|
28
|
+
# AGENTS.md template (templates/agents-entry.md Implementation Intent
|
|
29
|
+
# Gate block) reference THIS task rather than the underlying Python
|
|
30
|
+
# script directly so the skills are path-prefix-agnostic across the
|
|
31
|
+
# three supported install layouts:
|
|
32
|
+
#
|
|
33
|
+
# 1. ``.deft/core/scripts/...`` (v0.27+ canonical install per #992)
|
|
34
|
+
# 2. ``deft/scripts/...`` (legacy v0.20-v0.26 install)
|
|
35
|
+
# 3. ``scripts/...`` (in-repo case: deft framework itself)
|
|
36
|
+
#
|
|
37
|
+
# The wrapped ``preflight_implementation.py`` script is located
|
|
38
|
+
# via ``scripts/_resolve_preflight_path.py`` (#1046 PR-C / #1047),
|
|
39
|
+
# which probes the three candidate locations under
|
|
40
|
+
# ``{{.USER_WORKING_DIR}}`` in priority order and exits 2 with a
|
|
41
|
+
# structured ``gate misconfigured`` error pointing at
|
|
42
|
+
# ``task framework:doctor`` (#1046 PR-B / #1057) when no candidate
|
|
43
|
+
# resolves. The two-step invocation (resolve, then run) makes the
|
|
44
|
+
# fail-closed semantic explicit: if the resolver returns non-zero
|
|
45
|
+
# the inline ``sh:`` block exits with the same code BEFORE the
|
|
46
|
+
# downstream ``uv run python <script>`` ever fires, so the gate
|
|
47
|
+
# never silently fails open on a misconfigured install (the safety
|
|
48
|
+
# regression #1047 described).
|
|
49
|
+
#
|
|
50
|
+
# The resolver script ITSELF is dispatched via ``{{.DEFT_ROOT}}``
|
|
51
|
+
# (the Taskfile-relative install root) so it lives wherever the
|
|
52
|
+
# framework lives -- the resolver then probes the consumer's
|
|
53
|
+
# project root via ``{{.USER_WORKING_DIR}}``.
|
|
54
|
+
#
|
|
55
|
+
# The task bakes ``--vbrief-path`` so callers pass only the vBRIEF
|
|
56
|
+
# path: ``task vbrief:preflight -- <path>``.
|
|
57
|
+
#
|
|
58
|
+
# CLI_ARGS forwarding (#577): bare ``{{.CLI_ARGS}}`` -- DO NOT wrap
|
|
59
|
+
# in Taskfile-level double quotes. go-task already shell-escapes
|
|
60
|
+
# CLI_ARGS with single quotes, so wrapping in double quotes yields
|
|
61
|
+
# ``"'path'"`` at dispatch time on Windows (pwsh/cmd preserve nested
|
|
62
|
+
# quotes verbatim) and Python's argv receives a literal
|
|
63
|
+
# single-quote-prefixed filename that fails to open. This matches
|
|
64
|
+
# the convention enforced by tests/content/test_taskfile_cli_args.py
|
|
65
|
+
# and used in tasks/scope.yml / migrate.yml / prd.yml / etc.
|
|
66
|
+
# (Greptile P2 suggestion to quote was a false-positive against this
|
|
67
|
+
# project's established convention.)
|
|
68
|
+
#
|
|
69
|
+
# NOTE: NO ``sources:`` / ``generates:`` per ``conventions/task-caching.md``
|
|
70
|
+
# because the vBRIEF path is a user-facing argument forwarded via
|
|
71
|
+
# {{.CLI_ARGS}} and a cached cmds skip would silently swallow it.
|
|
72
|
+
desc: "Preflight an implementation-intent gate (#810): exits 0 only when vBRIEF is in vbrief/active/ AND plan.status == 'running'. Fails closed (#1046 PR-C / #1047) if the wrapped script cannot be resolved."
|
|
73
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
74
|
+
deps:
|
|
75
|
+
- _ts-build
|
|
76
|
+
cmds:
|
|
77
|
+
# Oracle/fallback (parity): scripts/preflight_implementation.py (#1828 Wave 8).
|
|
78
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" vbrief:preflight --vbrief-path {{.CLI_ARGS}}
|
|
79
|
+
|
|
80
|
+
reconcile:graph:
|
|
81
|
+
# Cascade-unblock walker (#1287). Walks vbrief/proposed/, resolves each
|
|
82
|
+
# candidate's plan.metadata.swarm.depends_on[] against current lifecycle
|
|
83
|
+
# state, and promotes (proposed/ -> pending/ via scope_lifecycle) every
|
|
84
|
+
# candidate whose dependencies ALL resolve to a brief in completed/ or
|
|
85
|
+
# cancelled/. Pure-vBRIEF / forge-agnostic: reuses the swarm_readiness.py
|
|
86
|
+
# dep-graph + cycle machinery and the scope_lifecycle promote surface.
|
|
87
|
+
# WIP-cap aware, cycle-safe (exit 1 on a detected cycle), and idempotent
|
|
88
|
+
# (a second run is a no-op). Pass-through flags: --force (override the WIP
|
|
89
|
+
# cap, audited), --dry-run (report without moving), --json (machine
|
|
90
|
+
# summary).
|
|
91
|
+
#
|
|
92
|
+
# CLI_ARGS forwarding (#577): bare ``{{.CLI_ARGS}}`` -- DO NOT wrap in
|
|
93
|
+
# Taskfile-level double quotes. go-task already shell-escapes CLI_ARGS
|
|
94
|
+
# with single quotes; double-wrapping breaks Windows argv. See the
|
|
95
|
+
# preflight task below for the full rationale.
|
|
96
|
+
#
|
|
97
|
+
# NOTE: NO ``sources:`` / ``generates:`` per ``conventions/task-caching.md``
|
|
98
|
+
# because the walk reads/writes lifecycle folders that go-task does not
|
|
99
|
+
# track, so a cached skip would silently swallow real promotions.
|
|
100
|
+
desc: "Reconcile dep graph: promote proposed/ vBRIEFs whose swarm.depends_on[] all resolve to completed/ or cancelled/ (#1287). Flags: --force --dry-run --json."
|
|
101
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
102
|
+
deps:
|
|
103
|
+
- _ts-build
|
|
104
|
+
cmds:
|
|
105
|
+
# Oracle/fallback (parity): scripts/vbrief_reconcile_graph.py (#1828 Wave 8).
|
|
106
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" vbrief-reconcile graph --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
|
|
107
|
+
|
|
108
|
+
reconcile:labels:
|
|
109
|
+
# SCM label reconciliation (#1288). Walks vbrief/proposed/ + pending/ +
|
|
110
|
+
# active/, resolves each brief's linked GitHub issue from its
|
|
111
|
+
# x-vbrief/github-issue reference, and applies/removes a fixed set of
|
|
112
|
+
# managed labels so the forge surface mirrors canonical vBRIEF state:
|
|
113
|
+
# status=blocked or an unresolved swarm.depends_on[] -> status:blocked;
|
|
114
|
+
# kind=epic -> epic + status:tracker; kind=research -> rfc. Mirror (not
|
|
115
|
+
# accumulate): managed labels that no longer apply are removed; labels
|
|
116
|
+
# outside the managed set are never touched. Every forge call routes
|
|
117
|
+
# through scripts/scm.py (#1145) so task verify:scm-boundary stays green,
|
|
118
|
+
# and the verb is idempotent (a second run mutates nothing). Pass-through
|
|
119
|
+
# flags: --repo OWNER/NAME (fallback when a reference URI lacks owner/
|
|
120
|
+
# repo), --dry-run (report without mutating), --json (machine summary).
|
|
121
|
+
#
|
|
122
|
+
# CLI_ARGS forwarding (#577): bare ``{{.CLI_ARGS}}`` -- DO NOT wrap in
|
|
123
|
+
# Taskfile-level double quotes. go-task already shell-escapes CLI_ARGS
|
|
124
|
+
# with single quotes; double-wrapping breaks Windows argv. See the
|
|
125
|
+
# preflight task above for the full rationale.
|
|
126
|
+
#
|
|
127
|
+
# NOTE: NO ``sources:`` / ``generates:`` per ``conventions/task-caching.md``
|
|
128
|
+
# because the walk reads the lifecycle folders and mutates remote forge
|
|
129
|
+
# state that go-task does not track, so a cached skip would silently
|
|
130
|
+
# swallow real label changes.
|
|
131
|
+
desc: "Reconcile SCM labels to mirror vBRIEF state: status:blocked / epic+status:tracker / rfc (#1288). Routes through scripts/scm.py. Flags: --repo --dry-run --json."
|
|
132
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
133
|
+
deps:
|
|
134
|
+
- _ts-build
|
|
135
|
+
cmds:
|
|
136
|
+
# Oracle/fallback (parity): scripts/vbrief_reconcile_labels.py (#1828 Wave 8).
|
|
137
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" vbrief-reconcile labels --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
|
|
138
|
+
|
|
139
|
+
reconcile:umbrellas:
|
|
140
|
+
# Umbrella current-shape auto-update (#1289). Walks every kind=epic
|
|
141
|
+
# vBRIEF, resolves its children from its x-vbrief/plan references,
|
|
142
|
+
# computes the wave structure from the children's swarm.depends_on[]
|
|
143
|
+
# edges, builds the canonical AGENTS.md section-1152 current-shape body
|
|
144
|
+
# (Last updated / Last pass type / Child count / Child-count history /
|
|
145
|
+
# Open children / Closed children / Wave order / Open questions /
|
|
146
|
+
# Reading order), and edits the linked SCM umbrella's current-shape
|
|
147
|
+
# comment IN PLACE so the permalink is preserved and the amendment
|
|
148
|
+
# trail is never touched. When no current-shape comment exists yet, one
|
|
149
|
+
# is created at pass-1. Every forge call routes through scripts/scm.py
|
|
150
|
+
# (#1145) so task verify:scm-boundary stays green, and the verb is
|
|
151
|
+
# idempotent (a second run with unchanged epic state mutates nothing --
|
|
152
|
+
# the pass number is only bumped when the rendered body differs).
|
|
153
|
+
# Pass-through flags: --repo OWNER/NAME (fallback when a reference URI
|
|
154
|
+
# lacks owner/repo), --dry-run (report without mutating), --json
|
|
155
|
+
# (machine summary).
|
|
156
|
+
#
|
|
157
|
+
# CLI_ARGS forwarding (#577): bare ``{{.CLI_ARGS}}`` -- DO NOT wrap in
|
|
158
|
+
# Taskfile-level double quotes. go-task already shell-escapes CLI_ARGS
|
|
159
|
+
# with single quotes; double-wrapping breaks Windows argv. See the
|
|
160
|
+
# preflight task below for the full rationale.
|
|
161
|
+
#
|
|
162
|
+
# NOTE: NO ``sources:`` / ``generates:`` per ``conventions/task-caching.md``
|
|
163
|
+
# because the walk reads the lifecycle folders and mutates remote forge
|
|
164
|
+
# state that go-task does not track, so a cached skip would silently
|
|
165
|
+
# swallow real comment updates.
|
|
166
|
+
desc: "Reconcile epic umbrella current-shape comments to vBRIEF state per AGENTS.md #1152: edit in place (preserve permalink). Routes through scripts/scm.py. Flags: --repo --dry-run --json."
|
|
167
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
168
|
+
deps:
|
|
169
|
+
- _ts-build
|
|
170
|
+
cmds:
|
|
171
|
+
# Oracle/fallback (parity): scripts/vbrief_reconcile_umbrellas.py (#1828 Wave 8).
|
|
172
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" vbrief-reconcile umbrellas --project-root "{{.USER_WORKING_DIR}}" {{.CLI_ARGS}}
|
|
173
|
+
|
|
174
|
+
activate:
|
|
175
|
+
# Implementation-intent activation gate companion (#810). Idempotent:
|
|
176
|
+
# already-active vBRIEFs print a no-op message and exit 0; pending/
|
|
177
|
+
# vBRIEFs flip plan.status pending|approved -> running, stamp
|
|
178
|
+
# vBRIEFInfo.updated to current ISO8601 UTC, and atomically move to
|
|
179
|
+
# vbrief/active/. Any other source folder is rejected with an
|
|
180
|
+
# actionable message. Pairs with `scripts/preflight_implementation.py`
|
|
181
|
+
# (also reachable via `task vbrief:preflight`): this task is the ONLY
|
|
182
|
+
# supported way to satisfy that gate.
|
|
183
|
+
#
|
|
184
|
+
# Dispatched via `{{.DEFT_ROOT}}/scripts/vbrief_activate.py` mirroring
|
|
185
|
+
# the `tasks/scope.yml` pattern (scope_lifecycle.py) so the JSON edit
|
|
186
|
+
# + atomic move logic is testable. The companion test lives at
|
|
187
|
+
# `tests/cli/test_vbrief_activate.py` to satisfy the forward-coverage
|
|
188
|
+
# rule from main.md.
|
|
189
|
+
#
|
|
190
|
+
# CLI_ARGS forwarding (#577): bare ``{{.CLI_ARGS}}`` -- DO NOT wrap
|
|
191
|
+
# in Taskfile-level double quotes. See the preflight task above for
|
|
192
|
+
# the full rationale; the short version is that go-task already
|
|
193
|
+
# shell-escapes CLI_ARGS with single quotes, and double-wrapping it
|
|
194
|
+
# breaks Windows argv. Spaces in paths survive correctly through
|
|
195
|
+
# bare interpolation.
|
|
196
|
+
#
|
|
197
|
+
# NOTE: NO ``sources:`` / ``generates:`` per ``conventions/task-caching.md``
|
|
198
|
+
# because the vBRIEF path is a user-facing argument forwarded via
|
|
199
|
+
# {{.CLI_ARGS}} and a cached cmds skip would silently swallow it.
|
|
200
|
+
desc: "Activate a vBRIEF: pending/ -> active/ (status: running). Idempotent. (#810)"
|
|
201
|
+
dir: '{{.USER_WORKING_DIR}}'
|
|
202
|
+
deps:
|
|
203
|
+
- _ts-build
|
|
204
|
+
cmds:
|
|
205
|
+
# Oracle/fallback (parity): scripts/vbrief_activate.py (#1828 Wave 8).
|
|
206
|
+
- node "{{.DEFT_ROOT}}/packages/cli/dist/bin.js" vbrief:activate {{.CLI_ARGS}}
|