@amsterdamdatalabs/adl-agent-control-linux-x64 0.1.12 → 0.1.28
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/bin/adl +2 -2
- package/bin/git +16 -17
- package/bin/git-ado +25 -24
- package/bin/git-defaults +173 -0
- package/bin/health-check +8 -1
- package/bin/kimi-hooks +1 -1
- package/bin/lib/adl-package.sh +257 -0
- package/bin/lib/fleet-host.sh +8 -5
- package/bin/reconcile +482 -232
- package/bin/reconcile-host +30 -20
- package/bin/setup +20 -17
- package/bin/shell-path-policy +15 -5
- package/bin/sync-and-reconcile +62 -64
- package/bin/validate-manifest +33 -9
- package/package.json +2 -10
- package/packages/agent-hooks/README.md +14 -9
- package/packages/agent-hooks/assets/hooks.json +0 -20
- package/packages/agent-hooks/src/cli/args.ts +1 -1
- package/packages/agent-hooks/src/cli/doctor.ts +6 -58
- package/packages/agent-hooks/src/deploy/deploy.ts +12 -41
- package/packages/agent-hooks/src/deploy/doctor.ts +8 -11
- package/packages/agent-hooks/src/deploy/index.ts +14 -14
- package/packages/agent-hooks/src/deploy/json-merge.ts +7 -8
- package/packages/agent-hooks/src/deploy/legacy-lock.ts +2 -2
- package/packages/agent-hooks/src/deploy/list.ts +1 -1
- package/packages/agent-hooks/src/deploy/lock.ts +31 -12
- package/packages/agent-hooks/src/deploy/profile.ts +3 -4
- package/packages/agent-hooks/src/deploy/source.ts +1 -1
- package/packages/agent-hooks/src/gating/config.ts +12 -24
- package/packages/agent-hooks/src/gating/root.ts +3 -3
- package/packages/agent-hooks/src/hooks/briefing/handler.ts +2 -2
- package/packages/agent-hooks/src/hooks/briefing/index.ts +27 -287
- package/packages/agent-hooks/src/hooks/contract.ts +17 -17
- package/packages/agent-hooks/src/hooks/crg/background.ts +27 -0
- package/packages/agent-hooks/src/hooks/crg/index.ts +7 -6
- package/packages/agent-hooks/src/hooks/log.ts +8 -10
- package/packages/agent-hooks/src/hooks/user-prompt-submit/match.ts +1 -1
- package/packages/agent-hooks/src/hooks/user-prompt-submit/tokenizer.ts +1 -1
- package/packages/agent-hooks/src/hooks/user-prompt-submit/vector.ts +6 -5
- package/packages/agent-hooks/src/hosts/registry.ts +1 -1
- package/packages/agent-hooks/src/log/adl-dir.ts +44 -0
- package/packages/agent-hooks/src/log/writer.ts +16 -2
- package/packages/agent-hooks/src/main.ts +7 -41
- package/packages/agent-hooks/src/pre-tool-use/handler.ts +71 -82
- package/packages/agent-hooks/src/rules/engine.ts +13 -17
- package/packages/agent-hooks/src/rules/impl/adl-build-run-denied.ts +3 -3
- package/packages/agent-hooks/src/rules/impl/adl-git-credential-bypass.ts +12 -14
- package/packages/agent-hooks/src/rules/impl/adl-git-identity.ts +28 -28
- package/packages/agent-hooks/src/rules/impl/adl-git-push-policy.ts +8 -9
- package/packages/agent-hooks/src/rules/impl/adl-human-azdo-bypass.ts +56 -59
- package/packages/agent-hooks/src/rules/impl/adl-identity.ts +16 -23
- package/packages/agent-hooks/src/rules/impl/adl-mcp-cli.ts +19 -16
- package/packages/agent-hooks/src/rules/impl/adl-pr-complete-pending.ts +2 -2
- package/packages/agent-hooks/src/rules/impl/adl-pr-review-role.ts +9 -12
- package/packages/agent-hooks/src/rules/impl/adl-pr-role.ts +5 -7
- package/packages/agent-hooks/src/rules/impl/adl-run-required.ts +411 -0
- package/packages/agent-hooks/src/rules/impl/adl-token-minting-role.ts +4 -5
- package/packages/agent-hooks/src/rules/impl/adl-workitem-role.ts +6 -7
- package/packages/agent-hooks/src/rules/impl/agent-tamper-protection.ts +77 -70
- package/packages/agent-hooks/src/rules/impl/deny-allowlist.ts +131 -0
- package/packages/agent-hooks/src/rules/impl/git-helpers.ts +21 -23
- package/packages/agent-hooks/src/rules/impl/git-worktree.ts +14 -28
- package/packages/agent-hooks/src/rules/impl/mcp-tool.ts +3 -3
- package/packages/agent-hooks/src/rules/impl/messages.ts +1 -1
- package/packages/agent-hooks/src/rules/impl/pr-completion.ts +1 -1
- package/packages/agent-hooks/src/rules/impl/tool-azure-devops.ts +35 -46
- package/packages/agent-hooks/src/rules/impl/tool-find.ts +34 -7
- package/packages/agent-hooks/src/rules/impl/tool-grep.ts +33 -12
- package/packages/agent-hooks/src/rules/impl/tool-native-search.ts +52 -9
- package/packages/agent-hooks/src/rules/ports.ts +5 -7
- package/packages/agent-hooks/src/rules/registry.ts +4 -6
- package/packages/agent-hooks/src/rules/shell/git-identity.ts +86 -101
- package/packages/agent-hooks/src/rules/shell/git-internals.ts +1 -1
- package/packages/agent-hooks/src/rules/shell/invocation.ts +24 -118
- package/packages/agent-hooks/src/rules/shell/piped-script.ts +1 -1
- package/packages/agent-hooks/src/rules/shell/prefixes.ts +1 -1
- package/packages/agent-hooks/src/rules/shell/protected-carrier-writes.ts +11 -10
- package/packages/agent-hooks/src/rules/shell/protected-carriers.ts +26 -26
- package/packages/agent-hooks/src/rules/shell/substitution.ts +1 -1
- package/packages/agent-hooks/src/rules/shell/xargs.ts +2 -2
- package/packages/agent-hooks/src/rules/spec.ts +2 -2
- package/packages/agent-settings/README.md +287 -0
- package/packages/agent-settings/assets/GLOBAL-AGENTS.md +14 -16
- package/packages/agent-settings/assets/agents/architect.toml +2 -0
- package/packages/agent-settings/assets/agents/code-reviewer.toml +2 -0
- package/packages/agent-settings/assets/agents/executor.toml +2 -0
- package/packages/agent-settings/assets/agents/explore.toml +2 -0
- package/packages/agent-settings/assets/agents/planner.toml +2 -0
- package/packages/agent-settings/assets/mcp.json +0 -4
- package/packages/agent-settings/deploy-profile.json +139 -0
- package/packages/agent-settings/deploy-profile.schema.json +147 -0
- package/packages/agent-settings/managed/README.md +29 -30
- package/packages/agent-settings/managed/codex-requirements.toml +9 -9
- package/packages/agent-settings/package.json +20 -0
- package/packages/agent-settings/src/deploy/agent-render.ts +2 -2
- package/packages/agent-settings/src/deploy/agent-toml.ts +1 -1
- package/packages/agent-settings/src/deploy/agents-deploy.ts +17 -3
- package/packages/agent-settings/src/deploy/doctor.ts +3 -83
- package/packages/agent-settings/src/deploy/index.ts +6 -33
- package/packages/agent-settings/src/deploy/legacy-lock.ts +6 -6
- package/packages/agent-settings/src/deploy/list.ts +5 -19
- package/packages/agent-settings/src/deploy/lock.ts +8 -18
- package/packages/agent-settings/src/deploy/mcp-deploy.ts +10 -5
- package/packages/agent-settings/src/deploy/mcp-merge.ts +22 -3
- package/packages/agent-settings/src/deploy/mcp-source.ts +1 -1
- package/packages/agent-settings/src/deploy/profile.ts +11 -35
- package/packages/agent-settings/src/deploy/retire-lean-ctx.ts +184 -0
- package/packages/agent-settings/src/deploy/settings.ts +17 -22
- package/packages/agent-settings/src/global-surface-sweep.ts +0 -2
- package/packages/agent-settings/src/kimi-hooks.ts +339 -192
- package/packages/agent-settings/src/opencode-hooks.ts +1 -1
- package/packages/agent-settings/tsconfig.json +23 -0
- package/packages/agent-skills/assets/agent-search-tool-audit/SKILL.md +120 -0
- package/packages/agent-skills/assets/agent-search-tool-audit/scripts/audit.sh +276 -0
- package/packages/agent-skills/assets/debug-issue/SKILL.md +8 -7
- package/packages/agent-skills/assets/explore-codebase/SKILL.md +13 -13
- package/packages/agent-skills/assets/refactor-safely/SKILL.md +12 -11
- package/packages/agent-skills/assets/review-changes/SKILL.md +7 -7
- package/packages/agent-skills/assets/testing/references/e2e.md +37 -0
- package/packages/agent-skills/assets/testing/references/integration.md +37 -0
- package/packages/agent-skills/assets/testing/references/unit.md +32 -0
- package/packages/agent-skills/dist/deploy.d.ts +2 -0
- package/packages/agent-skills/dist/deploy.d.ts.map +1 -1
- package/packages/agent-skills/dist/deploy.js +27 -1
- package/packages/agent-skills/dist/deploy.js.map +1 -1
- package/packages/agent-skills/dist/doctor.d.ts +0 -2
- package/packages/agent-skills/dist/doctor.d.ts.map +1 -1
- package/packages/agent-skills/dist/doctor.js +1 -1
- package/packages/agent-skills/dist/doctor.js.map +1 -1
- package/packages/agent-skills/dist/fs-utils.d.ts +0 -1
- package/packages/agent-skills/dist/fs-utils.d.ts.map +1 -1
- package/packages/agent-skills/dist/fs-utils.js +1 -1
- package/packages/agent-skills/dist/fs-utils.js.map +1 -1
- package/packages/agent-skills/src/deploy.ts +29 -1
- package/packages/agent-skills/src/doctor.ts +1 -1
- package/packages/agent-skills/src/fs-utils.ts +1 -1
- package/packages/azdo/README.md +10 -9
- package/packages/azdo/package.json +1 -3
- package/packages/azdo/scripts/probe-ado-rules.ts +311 -0
- package/packages/azdo/src/azdo-pl.ts +2 -54
- package/packages/azdo/src/azdo-pr-review.ts +4 -4
- package/packages/azdo/src/azdo-repo-doctor.ts +101 -52
- package/packages/azdo/src/azdo-wit.ts +44 -2
- package/packages/azdo/src/lib/agent-identity.ts +12 -14
- package/packages/azdo/src/lib/agent-token.ts +2 -2
- package/packages/azdo/src/lib/client.ts +0 -5
- package/packages/azdo/src/lib/graph-identity.ts +4 -4
- package/packages/azdo/src/workflow-ladder.csv +241 -0
- package/packages/azdo/src/workflow-rules-matrix.csv +85 -0
- package/packages/azdo/src/workflow-rules.ts +194 -0
- package/packages/fleet/manifest.json +35 -11
- package/packages/fleet/manifest.schema.json +62 -10
- package/packages/fleet/src/default-agent-file.ts +3 -3
- package/packages/fleet/src/install-adl-package.ts +73 -15
- package/packages/fleet/src/install-embedding-model.ts +13 -13
- package/packages/fleet/src/managed-settings.ts +7 -7
- package/packages/fleet/src/repo-maintain.ts +91 -55
- package/packages/fleet/src/scratch-reap.ts +5 -5
- package/packages/fleet/src/vscode-settings.ts +5 -5
- package/packages/repo-controls/README.md +141 -43
- package/packages/repo-controls/assets/promote.ts +4 -4
- package/packages/repo-controls/assets/reconcile-guard.sh +10 -46
- package/packages/repo-controls/assets/version-bump.sh +31 -84
- package/packages/repo-controls/bunfig.toml +6 -7
- package/packages/repo-controls/package/adl-compliance/AGENTS.md +5 -6
- package/packages/repo-controls/package/adl-compliance/conftest.py +3 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/__init__.py +4 -16
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/adr_lifecycle/test_check.py +9 -2
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/fixtures/docs/notes.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/test_check.py +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/__init__.py +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/check.py +266 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/.drafts/c.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/.drafts/d.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/.hidden.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/a.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/b.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/data.csv +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/diagram.png +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/mock.png +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs/guide/sub/nested.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/docs.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/grants.yaml +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/plans/deep/p1.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/plans/deep/p2.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/plans/deep/p3.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/plans/deep/p4.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-assets/plans/deep/p5.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-clean/docs/architecture/build.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-clean/docs/architecture/overview.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-clean/docs/guide/install.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-clean/docs/guide/start.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-clean/grants.yaml +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/decisions/adr-001-tenancy.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/decisions/adr-002-carrier.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/decisions/adr-003-cli.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/decisions/archive/adr-000-old.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/decisions/archive/adr-000-older.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/guide/a.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/guide/b.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/docs/guide/c.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-decisions/grants.yaml +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-01.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-02.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-03.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-04.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-05.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-06.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-07.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-08.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-09.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-10.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-11.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-12.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-13.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-14.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-15.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/docs/guide/page-16.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-default-cap/grants.yaml +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-exempt/docs/guide/a.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-exempt/docs/guide/b.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-exempt/docs/guide/c.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-exempt/grants.yaml +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-grew/docs/guide/a.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-grew/docs/guide/b.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-grew/docs/guide/c.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-grew/grants.yaml +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-no-section/docs/guide/a.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-no-section/docs/guide/b.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-no-section/docs/guide/c.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-no-section/docs/guide/d.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-no-section/docs/guide/e.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-no-section/grants.yaml +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-over-cap/docs/guide/a.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-over-cap/docs/guide/b.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-over-cap/docs/guide/c.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-over-cap/docs/short/only.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-over-cap/grants.yaml +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/held/a.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/held/b.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/held/c.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/held/d.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/shrunk/a.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/docs/shrunk/b.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-stale/grants.yaml +6 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-unusable/docs/guide/a.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-unusable/docs/guide/b.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-unusable/docs/guide/c.md +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/fixtures/docs-size-unusable/grants.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/directory_size/test_check.py +345 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/english_only/check.py +18 -5
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/english_only/test_check.py +35 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/__init__.py +7 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/check.py +91 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/AGENTS.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/CLAUDE.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/-leading-hyphen.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/AGENTS.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/double--hyphen.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/getting started.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/nested/page-here.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/trailing-hyphen-.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/ui-contract.md +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/architecture/user_profile.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/assets/UI-CONTRACT.png +2 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/assets/diagram.png +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/index.md +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/notes.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/reference.html +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/research/2026-10-experiment.md +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs/research/UI-CONTRACT.md +6 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/fixtures/docs.md +5 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/filename/test_check.py +194 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/check.py +14 -2
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/docs-knowledge-indexes.yaml +5 -5
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/fixtures/knowledge-indexes-shipped-register-legacy/docs/compliance/index.md +10 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/fixtures/knowledge-indexes-shipped-register-type/docs/compliance/index.md +10 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/indexes/test_check.py +58 -6
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/ledger/test_check.py +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/check.py +64 -17
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/docs-okf-profiles.yaml +60 -9
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-ledger-clean/docs/notes.md +17 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-ledger-no-lines/docs/notes.md +13 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-clean/docs/architecture/demo.md +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-clean/docs-okf-profiles.yaml +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-untyped/docs/research/no-type.md +9 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-untyped/docs/research/typed-experiment.md +10 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-untyped/docs/research/typed-research.md +10 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-untyped/docs-okf-profiles.yaml +5 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-violation/docs/architecture/bad-status.md +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-profile-violation/docs-okf-profiles.yaml +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/experiment-ok.md +15 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/extra-key.md +15 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/extra-keys.md +16 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-created.md +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-description.md +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-last-update.md +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-sources.md +10 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-status.md +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/missing-title.md +11 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/optional-keys.md +16 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research/docs/research/research-ok.md +14 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research-neighbours/docs/architecture/created-date.md +21 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research-neighbours/docs/architecture/research-shaped.md +19 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-research-neighbours/docs/operations/runbook.md +26 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/test_check.py +228 -2
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/register.py +5 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/test_check.py +11 -2
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/__init__.py +5 -3
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/check.py +160 -44
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-clean/grants.yaml +0 -2
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-empty-register/frontend/packages/desktop/src/a.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-empty-register/frontend/packages/desktop/src/b.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-empty-register/grants.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/grants.yaml +0 -2
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-missing-tree/frontend/packages/desktop/src/renderer/solo/item.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-missing-tree/grants.yaml +5 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-no-ceilings/frontend/packages/desktop/src/a.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-no-ceilings/frontend/packages/desktop/src/b.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-no-ceilings/frontend/packages/desktop/src/c.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-no-ceilings/grants.yaml +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-stale-entry/frontend/packages/desktop/src/renderer/solo/item.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-stale-entry/grants.yaml +5 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/grants.yaml +0 -2
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unusable-register/frontend/packages/desktop/src/renderer/solo/item.ts +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unusable-register/grants.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/register.py +127 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/test_check.py +265 -29
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/markdown_trees/check.py +75 -2
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/markdown_trees/test_check.py +194 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/open_work_cap/check.py +56 -10
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/open_work_cap/test_check.py +258 -2
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/check.py +40 -12
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/test_check.py +108 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plan_metadata.py +9 -4
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plans_layout/check.py +1 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plans_layout/fixtures/plans-layout-clean/plans/features/az347-test-coverage/items/az351-restore-entrypoint.md +1 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plans_layout/test_check.py +3 -3
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/references/check.py +2 -3
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/check.py +23 -6
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/test_check.py +76 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/check.py +58 -17
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/test_check.py +161 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/check.py +35 -3
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/scripts_size_depth/test_check.py +108 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/check.py +281 -61
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/absolute-path.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/backslash-path.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/baseline-is-a-list.yaml +2 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/boolean-size.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/dot-segment.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/duplicate-path.yaml +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/empty-file.yaml +0 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/empty-segment.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/float-size.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/negative-size.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/no-over-limit-baseline.yaml +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/no-schema-version.yaml +1 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/non-string-path.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/not-yaml.yaml +2 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/null-size.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/parent-segment.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/string-size.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/top-level-is-a-list.yaml +2 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/trailing-slash.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/unknown-key.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/wrong-schema-version.yaml +2 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/malformed/zero-size.yaml +3 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/valid.yaml +4 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/test_check.py +758 -45
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/ignored_paths/check.py +4 -3
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/ignored_paths/test_check.py +2 -2
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/cargo_lock.py +490 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/check.py +368 -55
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/test_check.py +4 -2
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/test_declared_paths.py +523 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/test_stale_lock.py +1179 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/cli.py +122 -3
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/check.py +33 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/constants.py +0 -11
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/core/context.py +16 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/config.py +1 -2
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/docs_shape.py +12 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/gate-registry.alt.yaml +133 -147
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/gate-registry.yaml +133 -147
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/registry.py +1 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/root_shape.py +52 -10
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/runner.py +23 -4
- package/packages/repo-controls/package.json +2 -9
- package/packages/repo-controls/scripts/hooks/post-merge +13 -0
- package/packages/repo-controls/scripts/hooks/pre-push +3 -3
- package/packages/repo-controls/src/azdo-push.ts +64 -36
- package/packages/repo-controls/src/azure-devops-governance.ts +7 -9
- package/packages/repo-controls/src/azure-devops-remote.ts +1 -1
- package/packages/repo-controls/src/cli.ts +29 -8
- package/packages/repo-controls/src/compliance-config.ts +410 -2
- package/packages/repo-controls/src/config.ts +133 -60
- package/packages/repo-controls/src/constants.ts +13 -27
- package/packages/repo-controls/src/coverage-ratchet.ts +4 -4
- package/packages/repo-controls/src/doctor.ts +46 -19
- package/packages/repo-controls/src/gitignore-block.ts +5 -29
- package/packages/repo-controls/src/hook-log.ts +1 -2
- package/packages/repo-controls/src/hook.ts +201 -45
- package/packages/repo-controls/src/install.ts +14 -8
- package/packages/repo-controls/src/integrity.ts +3 -3
- package/packages/repo-controls/src/lfs.ts +111 -0
- package/packages/repo-controls/src/promote.ts +8 -8
- package/packages/repo-controls/src/runtime.ts +9 -1
- package/packages/repo-controls/src/workflows-drift.ts +4 -5
- package/packages/repo-controls/src/worktree-guard.ts +3 -3
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
work_item_type,from_state,to_state,rule,skipped_states,owner,note
|
|
2
|
+
Product Backlog Item,New,In Planning,allowed,,,
|
|
3
|
+
Product Backlog Item,New,Awaiting Approval,skipped,In Planning,,
|
|
4
|
+
Product Backlog Item,New,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
5
|
+
Product Backlog Item,New,Spec Validation,skipped,In Planning;Awaiting Approval;Approved,,
|
|
6
|
+
Product Backlog Item,New,In Implementation,skipped,In Planning;Awaiting Approval;Approved;Spec Validation,,
|
|
7
|
+
Product Backlog Item,New,In Testing,skipped,In Planning;Awaiting Approval;Approved;Spec Validation;In Implementation,,
|
|
8
|
+
Product Backlog Item,New,In Review,skipped,In Planning;Awaiting Approval;Approved;Spec Validation;In Implementation;In Testing,,
|
|
9
|
+
Product Backlog Item,New,Updating Docs,skipped,In Planning;Awaiting Approval;Approved;Spec Validation;In Implementation;In Testing;In Review,,
|
|
10
|
+
Product Backlog Item,New,Done,human-only,,entered only by PR merge automation into integration,
|
|
11
|
+
Product Backlog Item,New,Parked for Removal,allowed,,,
|
|
12
|
+
Product Backlog Item,New,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
13
|
+
Product Backlog Item,New,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
14
|
+
Product Backlog Item,In Planning,New,allowed,,,
|
|
15
|
+
Product Backlog Item,In Planning,Awaiting Approval,allowed,,,
|
|
16
|
+
Product Backlog Item,In Planning,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
17
|
+
Product Backlog Item,In Planning,Spec Validation,skipped,Awaiting Approval;Approved,,
|
|
18
|
+
Product Backlog Item,In Planning,In Implementation,skipped,Awaiting Approval;Approved;Spec Validation,,
|
|
19
|
+
Product Backlog Item,In Planning,In Testing,skipped,Awaiting Approval;Approved;Spec Validation;In Implementation,,
|
|
20
|
+
Product Backlog Item,In Planning,In Review,skipped,Awaiting Approval;Approved;Spec Validation;In Implementation;In Testing,,
|
|
21
|
+
Product Backlog Item,In Planning,Updating Docs,skipped,Awaiting Approval;Approved;Spec Validation;In Implementation;In Testing;In Review,,
|
|
22
|
+
Product Backlog Item,In Planning,Done,human-only,,entered only by PR merge automation into integration,
|
|
23
|
+
Product Backlog Item,In Planning,Parked for Removal,allowed,,,
|
|
24
|
+
Product Backlog Item,In Planning,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
25
|
+
Product Backlog Item,In Planning,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
26
|
+
Product Backlog Item,Awaiting Approval,New,allowed,,,
|
|
27
|
+
Product Backlog Item,Awaiting Approval,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
28
|
+
Product Backlog Item,Awaiting Approval,Spec Validation,skipped,Approved,,
|
|
29
|
+
Product Backlog Item,Awaiting Approval,In Implementation,skipped,Approved;Spec Validation,,
|
|
30
|
+
Product Backlog Item,Awaiting Approval,In Testing,skipped,Approved;Spec Validation;In Implementation,,
|
|
31
|
+
Product Backlog Item,Awaiting Approval,In Review,skipped,Approved;Spec Validation;In Implementation;In Testing,,
|
|
32
|
+
Product Backlog Item,Awaiting Approval,Updating Docs,skipped,Approved;Spec Validation;In Implementation;In Testing;In Review,,
|
|
33
|
+
Product Backlog Item,Awaiting Approval,Done,human-only,,entered only by PR merge automation into integration,
|
|
34
|
+
Product Backlog Item,Awaiting Approval,Parked for Removal,allowed,,,
|
|
35
|
+
Product Backlog Item,Awaiting Approval,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
36
|
+
Product Backlog Item,Awaiting Approval,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
37
|
+
Product Backlog Item,Approved,New,allowed,,,
|
|
38
|
+
Product Backlog Item,Approved,Spec Validation,allowed,,,
|
|
39
|
+
Product Backlog Item,Approved,In Implementation,skipped,Spec Validation,,
|
|
40
|
+
Product Backlog Item,Approved,In Testing,skipped,Spec Validation;In Implementation,,
|
|
41
|
+
Product Backlog Item,Approved,In Review,skipped,Spec Validation;In Implementation;In Testing,,
|
|
42
|
+
Product Backlog Item,Approved,Updating Docs,skipped,Spec Validation;In Implementation;In Testing;In Review,,
|
|
43
|
+
Product Backlog Item,Approved,Done,human-only,,entered only by PR merge automation into integration,
|
|
44
|
+
Product Backlog Item,Approved,Parked for Removal,allowed,,,
|
|
45
|
+
Product Backlog Item,Approved,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
46
|
+
Product Backlog Item,Approved,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
47
|
+
Product Backlog Item,Spec Validation,New,allowed,,,
|
|
48
|
+
Product Backlog Item,Spec Validation,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
49
|
+
Product Backlog Item,Spec Validation,In Implementation,allowed,,,
|
|
50
|
+
Product Backlog Item,Spec Validation,In Testing,skipped,In Implementation,,
|
|
51
|
+
Product Backlog Item,Spec Validation,In Review,skipped,In Implementation;In Testing,,
|
|
52
|
+
Product Backlog Item,Spec Validation,Updating Docs,skipped,In Implementation;In Testing;In Review,,
|
|
53
|
+
Product Backlog Item,Spec Validation,Done,human-only,,entered only by PR merge automation into integration,
|
|
54
|
+
Product Backlog Item,Spec Validation,Parked for Removal,allowed,,,
|
|
55
|
+
Product Backlog Item,Spec Validation,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
56
|
+
Product Backlog Item,Spec Validation,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
57
|
+
Product Backlog Item,In Implementation,New,allowed,,,
|
|
58
|
+
Product Backlog Item,In Implementation,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
59
|
+
Product Backlog Item,In Implementation,In Testing,allowed,,,
|
|
60
|
+
Product Backlog Item,In Implementation,In Review,skipped,In Testing,,
|
|
61
|
+
Product Backlog Item,In Implementation,Updating Docs,skipped,In Testing;In Review,,
|
|
62
|
+
Product Backlog Item,In Implementation,Done,human-only,,entered only by PR merge automation into integration,
|
|
63
|
+
Product Backlog Item,In Implementation,Parked for Removal,allowed,,,
|
|
64
|
+
Product Backlog Item,In Implementation,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
65
|
+
Product Backlog Item,In Implementation,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
66
|
+
Product Backlog Item,In Testing,New,allowed,,,
|
|
67
|
+
Product Backlog Item,In Testing,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
68
|
+
Product Backlog Item,In Testing,In Review,allowed,,,
|
|
69
|
+
Product Backlog Item,In Testing,Updating Docs,skipped,In Review,,
|
|
70
|
+
Product Backlog Item,In Testing,Done,human-only,,entered only by PR merge automation into integration,
|
|
71
|
+
Product Backlog Item,In Testing,Parked for Removal,allowed,,,
|
|
72
|
+
Product Backlog Item,In Testing,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
73
|
+
Product Backlog Item,In Testing,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
74
|
+
Product Backlog Item,In Review,New,allowed,,,
|
|
75
|
+
Product Backlog Item,In Review,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
76
|
+
Product Backlog Item,In Review,In Implementation,allowed,,,
|
|
77
|
+
Product Backlog Item,In Review,Updating Docs,allowed,,,
|
|
78
|
+
Product Backlog Item,In Review,Done,human-only,,entered only by PR merge automation into integration,
|
|
79
|
+
Product Backlog Item,In Review,Parked for Removal,allowed,,,
|
|
80
|
+
Product Backlog Item,In Review,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
81
|
+
Product Backlog Item,In Review,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
82
|
+
Product Backlog Item,Updating Docs,New,allowed,,,
|
|
83
|
+
Product Backlog Item,Updating Docs,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
84
|
+
Product Backlog Item,Updating Docs,Done,human-only,,entered only by PR merge automation into integration,
|
|
85
|
+
Product Backlog Item,Updating Docs,Parked for Removal,allowed,,,
|
|
86
|
+
Product Backlog Item,Updating Docs,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
87
|
+
Product Backlog Item,Updating Docs,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
88
|
+
Product Backlog Item,Done,In Planning,allowed,,,
|
|
89
|
+
Product Backlog Item,Done,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
90
|
+
Product Backlog Item,Done,Parked for Removal,allowed,,,
|
|
91
|
+
Product Backlog Item,Done,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
92
|
+
Product Backlog Item,Done,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
93
|
+
Product Backlog Item,Parked for Removal,New,allowed,,,
|
|
94
|
+
Product Backlog Item,Parked for Removal,In Planning,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
|
|
95
|
+
Product Backlog Item,Parked for Removal,Awaiting Approval,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
|
|
96
|
+
Product Backlog Item,Parked for Removal,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
97
|
+
Product Backlog Item,Parked for Removal,Spec Validation,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
|
|
98
|
+
Product Backlog Item,Parked for Removal,In Implementation,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
|
|
99
|
+
Product Backlog Item,Parked for Removal,In Testing,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
|
|
100
|
+
Product Backlog Item,Parked for Removal,In Review,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
|
|
101
|
+
Product Backlog Item,Parked for Removal,Updating Docs,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
|
|
102
|
+
Product Backlog Item,Parked for Removal,Done,human-only,,entered only by PR merge automation into integration,
|
|
103
|
+
Product Backlog Item,Parked for Removal,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
104
|
+
Product Backlog Item,Parked for Removal,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
105
|
+
Product Backlog Item,Removed,New,allowed,,,
|
|
106
|
+
Product Backlog Item,Removed,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
107
|
+
Product Backlog Item,Removed,Done,human-only,,entered only by PR merge automation into integration,
|
|
108
|
+
Product Backlog Item,Removed,Parked for Removal,allowed,,,
|
|
109
|
+
Product Backlog Item,Removed,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
110
|
+
Product Backlog Item,Committed,New,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
111
|
+
Product Backlog Item,Committed,In Planning,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
112
|
+
Product Backlog Item,Committed,Awaiting Approval,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
113
|
+
Product Backlog Item,Committed,Approved,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
114
|
+
Product Backlog Item,Committed,Spec Validation,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
115
|
+
Product Backlog Item,Committed,In Implementation,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
116
|
+
Product Backlog Item,Committed,In Testing,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
117
|
+
Product Backlog Item,Committed,In Review,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
118
|
+
Product Backlog Item,Committed,Updating Docs,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
119
|
+
Product Backlog Item,Committed,Done,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
120
|
+
Product Backlog Item,Committed,Parked for Removal,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
121
|
+
Product Backlog Item,Committed,Removed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
122
|
+
Bug,New,In Planning,allowed,,,
|
|
123
|
+
Bug,New,Awaiting Approval,skipped,In Planning,,
|
|
124
|
+
Bug,New,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
125
|
+
Bug,New,Spec Validation,skipped,In Planning;Awaiting Approval;Approved,,
|
|
126
|
+
Bug,New,In Implementation,skipped,In Planning;Awaiting Approval;Approved;Spec Validation,,
|
|
127
|
+
Bug,New,In Testing,skipped,In Planning;Awaiting Approval;Approved;Spec Validation;In Implementation,,
|
|
128
|
+
Bug,New,In Review,skipped,In Planning;Awaiting Approval;Approved;Spec Validation;In Implementation;In Testing,,
|
|
129
|
+
Bug,New,Updating Docs,skipped,In Planning;Awaiting Approval;Approved;Spec Validation;In Implementation;In Testing;In Review,,
|
|
130
|
+
Bug,New,Done,human-only,,entered only by PR merge automation into integration,
|
|
131
|
+
Bug,New,Parked for Removal,allowed,,,
|
|
132
|
+
Bug,New,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
133
|
+
Bug,New,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
134
|
+
Bug,In Planning,New,allowed,,,
|
|
135
|
+
Bug,In Planning,Awaiting Approval,allowed,,,
|
|
136
|
+
Bug,In Planning,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
137
|
+
Bug,In Planning,Spec Validation,skipped,Awaiting Approval;Approved,,
|
|
138
|
+
Bug,In Planning,In Implementation,skipped,Awaiting Approval;Approved;Spec Validation,,
|
|
139
|
+
Bug,In Planning,In Testing,skipped,Awaiting Approval;Approved;Spec Validation;In Implementation,,
|
|
140
|
+
Bug,In Planning,In Review,skipped,Awaiting Approval;Approved;Spec Validation;In Implementation;In Testing,,
|
|
141
|
+
Bug,In Planning,Updating Docs,skipped,Awaiting Approval;Approved;Spec Validation;In Implementation;In Testing;In Review,,
|
|
142
|
+
Bug,In Planning,Done,human-only,,entered only by PR merge automation into integration,
|
|
143
|
+
Bug,In Planning,Parked for Removal,allowed,,,
|
|
144
|
+
Bug,In Planning,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
145
|
+
Bug,In Planning,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
146
|
+
Bug,Awaiting Approval,New,allowed,,,
|
|
147
|
+
Bug,Awaiting Approval,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
148
|
+
Bug,Awaiting Approval,Spec Validation,skipped,Approved,,
|
|
149
|
+
Bug,Awaiting Approval,In Implementation,skipped,Approved;Spec Validation,,
|
|
150
|
+
Bug,Awaiting Approval,In Testing,skipped,Approved;Spec Validation;In Implementation,,
|
|
151
|
+
Bug,Awaiting Approval,In Review,skipped,Approved;Spec Validation;In Implementation;In Testing,,
|
|
152
|
+
Bug,Awaiting Approval,Updating Docs,skipped,Approved;Spec Validation;In Implementation;In Testing;In Review,,
|
|
153
|
+
Bug,Awaiting Approval,Done,human-only,,entered only by PR merge automation into integration,
|
|
154
|
+
Bug,Awaiting Approval,Parked for Removal,allowed,,,
|
|
155
|
+
Bug,Awaiting Approval,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
156
|
+
Bug,Awaiting Approval,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
157
|
+
Bug,Approved,New,allowed,,,
|
|
158
|
+
Bug,Approved,Spec Validation,allowed,,,
|
|
159
|
+
Bug,Approved,In Implementation,skipped,Spec Validation,,
|
|
160
|
+
Bug,Approved,In Testing,skipped,Spec Validation;In Implementation,,
|
|
161
|
+
Bug,Approved,In Review,skipped,Spec Validation;In Implementation;In Testing,,
|
|
162
|
+
Bug,Approved,Updating Docs,skipped,Spec Validation;In Implementation;In Testing;In Review,,
|
|
163
|
+
Bug,Approved,Done,human-only,,entered only by PR merge automation into integration,
|
|
164
|
+
Bug,Approved,Parked for Removal,allowed,,,
|
|
165
|
+
Bug,Approved,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
166
|
+
Bug,Approved,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
167
|
+
Bug,Spec Validation,New,allowed,,,
|
|
168
|
+
Bug,Spec Validation,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
169
|
+
Bug,Spec Validation,In Implementation,allowed,,,
|
|
170
|
+
Bug,Spec Validation,In Testing,skipped,In Implementation,,
|
|
171
|
+
Bug,Spec Validation,In Review,skipped,In Implementation;In Testing,,
|
|
172
|
+
Bug,Spec Validation,Updating Docs,skipped,In Implementation;In Testing;In Review,,
|
|
173
|
+
Bug,Spec Validation,Done,human-only,,entered only by PR merge automation into integration,
|
|
174
|
+
Bug,Spec Validation,Parked for Removal,allowed,,,
|
|
175
|
+
Bug,Spec Validation,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
176
|
+
Bug,Spec Validation,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
177
|
+
Bug,In Implementation,New,allowed,,,
|
|
178
|
+
Bug,In Implementation,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
179
|
+
Bug,In Implementation,In Testing,allowed,,,
|
|
180
|
+
Bug,In Implementation,In Review,skipped,In Testing,,
|
|
181
|
+
Bug,In Implementation,Updating Docs,skipped,In Testing;In Review,,
|
|
182
|
+
Bug,In Implementation,Done,human-only,,entered only by PR merge automation into integration,
|
|
183
|
+
Bug,In Implementation,Parked for Removal,allowed,,,
|
|
184
|
+
Bug,In Implementation,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
185
|
+
Bug,In Implementation,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
186
|
+
Bug,In Testing,New,allowed,,,
|
|
187
|
+
Bug,In Testing,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
188
|
+
Bug,In Testing,In Review,allowed,,,
|
|
189
|
+
Bug,In Testing,Updating Docs,skipped,In Review,,
|
|
190
|
+
Bug,In Testing,Done,human-only,,entered only by PR merge automation into integration,
|
|
191
|
+
Bug,In Testing,Parked for Removal,allowed,,,
|
|
192
|
+
Bug,In Testing,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
193
|
+
Bug,In Testing,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
194
|
+
Bug,In Review,New,allowed,,,
|
|
195
|
+
Bug,In Review,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
196
|
+
Bug,In Review,In Implementation,allowed,,,
|
|
197
|
+
Bug,In Review,Updating Docs,allowed,,,
|
|
198
|
+
Bug,In Review,Done,human-only,,entered only by PR merge automation into integration,
|
|
199
|
+
Bug,In Review,Parked for Removal,allowed,,,
|
|
200
|
+
Bug,In Review,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
201
|
+
Bug,In Review,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
202
|
+
Bug,Updating Docs,New,allowed,,,
|
|
203
|
+
Bug,Updating Docs,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
204
|
+
Bug,Updating Docs,Done,human-only,,entered only by PR merge automation into integration,
|
|
205
|
+
Bug,Updating Docs,Parked for Removal,allowed,,,
|
|
206
|
+
Bug,Updating Docs,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
207
|
+
Bug,Updating Docs,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
208
|
+
Bug,Done,In Planning,allowed,,,
|
|
209
|
+
Bug,Done,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
210
|
+
Bug,Done,Parked for Removal,allowed,,,
|
|
211
|
+
Bug,Done,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
212
|
+
Bug,Done,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
213
|
+
Bug,Parked for Removal,New,allowed,,,
|
|
214
|
+
Bug,Parked for Removal,In Planning,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
|
|
215
|
+
Bug,Parked for Removal,Awaiting Approval,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
|
|
216
|
+
Bug,Parked for Removal,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
217
|
+
Bug,Parked for Removal,Spec Validation,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
|
|
218
|
+
Bug,Parked for Removal,In Implementation,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
|
|
219
|
+
Bug,Parked for Removal,In Testing,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
|
|
220
|
+
Bug,Parked for Removal,In Review,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
|
|
221
|
+
Bug,Parked for Removal,Updating Docs,no-transition,,,Parked for Removal exits only to New (re-plan) or Removed (G3 human)
|
|
222
|
+
Bug,Parked for Removal,Done,human-only,,entered only by PR merge automation into integration,
|
|
223
|
+
Bug,Parked for Removal,Removed,human-only,,G3 — human removal only; agents cannot move items to Removed,
|
|
224
|
+
Bug,Parked for Removal,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
225
|
+
Bug,Removed,New,allowed,,,
|
|
226
|
+
Bug,Removed,Approved,human-only,,G1 — human approval only; agents cannot move items to Approved,
|
|
227
|
+
Bug,Removed,Done,human-only,,entered only by PR merge automation into integration,
|
|
228
|
+
Bug,Removed,Parked for Removal,allowed,,,
|
|
229
|
+
Bug,Removed,Committed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
230
|
+
Bug,Committed,New,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
231
|
+
Bug,Committed,In Planning,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
232
|
+
Bug,Committed,Awaiting Approval,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
233
|
+
Bug,Committed,Approved,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
234
|
+
Bug,Committed,Spec Validation,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
235
|
+
Bug,Committed,In Implementation,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
236
|
+
Bug,Committed,In Testing,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
237
|
+
Bug,Committed,In Review,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
238
|
+
Bug,Committed,Updating Docs,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
239
|
+
Bug,Committed,Done,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
240
|
+
Bug,Committed,Parked for Removal,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
241
|
+
Bug,Committed,Removed,no-transition,,,Committed is a retired state (UI-hidden; no route references it)
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
work_item_type,state,state_category,flag_ref,flag_label,rule,meaning,failure_reason
|
|
2
|
+
Product Backlog Item,New,Proposed,Custom.Planwritten,Plan written,no,must be false,Plan rejected
|
|
3
|
+
Product Backlog Item,New,Proposed,Custom.Implementationcomplete,Implementation complete,no,must be false,
|
|
4
|
+
Product Backlog Item,New,Proposed,Custom.Reviewpassed,Review passed,no,must be false,Reviewer rejected
|
|
5
|
+
Product Backlog Item,New,Proposed,Custom.Testspassing,Tests passing,no,must be false,Tests failed
|
|
6
|
+
Product Backlog Item,New,Proposed,Custom.Docsupdated,Docs updated,no,must be false,
|
|
7
|
+
Product Backlog Item,New,Proposed,Custom.Mergedtointegration,Merged to integration,no,must be false,Build failed
|
|
8
|
+
Product Backlog Item,Approved,Proposed,Custom.Planwritten,Plan written,yes,must be true,Plan rejected
|
|
9
|
+
Product Backlog Item,Approved,Proposed,Custom.Implementationcomplete,Implementation complete,no,must be false,
|
|
10
|
+
Product Backlog Item,Approved,Proposed,Custom.Reviewpassed,Review passed,no,must be false,Reviewer rejected
|
|
11
|
+
Product Backlog Item,Approved,Proposed,Custom.Testspassing,Tests passing,no,must be false,Tests failed
|
|
12
|
+
Product Backlog Item,Approved,Proposed,Custom.Docsupdated,Docs updated,no,must be false,
|
|
13
|
+
Product Backlog Item,Approved,Proposed,Custom.Mergedtointegration,Merged to integration,no,must be false,Build failed
|
|
14
|
+
Product Backlog Item,Committed,InProgress,Custom.Planwritten,Plan written,yes,must be true,Plan rejected
|
|
15
|
+
Product Backlog Item,Committed,InProgress,Custom.Implementationcomplete,Implementation complete,no,must be false,
|
|
16
|
+
Product Backlog Item,Committed,InProgress,Custom.Reviewpassed,Review passed,no,must be false,Reviewer rejected
|
|
17
|
+
Product Backlog Item,Committed,InProgress,Custom.Testspassing,Tests passing,no,must be false,Tests failed
|
|
18
|
+
Product Backlog Item,Committed,InProgress,Custom.Docsupdated,Docs updated,no,must be false,
|
|
19
|
+
Product Backlog Item,Committed,InProgress,Custom.Mergedtointegration,Merged to integration,no,must be false,Build failed
|
|
20
|
+
Product Backlog Item,In Progress,InProgress,Custom.Planwritten,Plan written,yes,must be true,Plan rejected
|
|
21
|
+
Product Backlog Item,In Progress,InProgress,Custom.Implementationcomplete,Implementation complete,free,either — this is where the gate is worked,
|
|
22
|
+
Product Backlog Item,In Progress,InProgress,Custom.Reviewpassed,Review passed,no,must be false,Reviewer rejected
|
|
23
|
+
Product Backlog Item,In Progress,InProgress,Custom.Testspassing,Tests passing,free,either — this is where the gate is worked,Tests failed
|
|
24
|
+
Product Backlog Item,In Progress,InProgress,Custom.Docsupdated,Docs updated,free,either — this is where the gate is worked,
|
|
25
|
+
Product Backlog Item,In Progress,InProgress,Custom.Mergedtointegration,Merged to integration,no,must be false,Build failed
|
|
26
|
+
Product Backlog Item,In Testing,InProgress,Custom.Planwritten,Plan written,yes,must be true,Plan rejected
|
|
27
|
+
Product Backlog Item,In Testing,InProgress,Custom.Implementationcomplete,Implementation complete,yes,must be true,
|
|
28
|
+
Product Backlog Item,In Testing,InProgress,Custom.Reviewpassed,Review passed,free,either — this is where the gate is worked,Reviewer rejected
|
|
29
|
+
Product Backlog Item,In Testing,InProgress,Custom.Testspassing,Tests passing,free,either — this is where the gate is worked,Tests failed
|
|
30
|
+
Product Backlog Item,In Testing,InProgress,Custom.Docsupdated,Docs updated,free,either — this is where the gate is worked,
|
|
31
|
+
Product Backlog Item,In Testing,InProgress,Custom.Mergedtointegration,Merged to integration,no,must be false,Build failed
|
|
32
|
+
Product Backlog Item,Done,Completed,Custom.Planwritten,Plan written,yes,must be true,Plan rejected
|
|
33
|
+
Product Backlog Item,Done,Completed,Custom.Implementationcomplete,Implementation complete,yes,must be true,
|
|
34
|
+
Product Backlog Item,Done,Completed,Custom.Reviewpassed,Review passed,yes,must be true,Reviewer rejected
|
|
35
|
+
Product Backlog Item,Done,Completed,Custom.Testspassing,Tests passing,yes,must be true,Tests failed
|
|
36
|
+
Product Backlog Item,Done,Completed,Custom.Docsupdated,Docs updated,yes,must be true,
|
|
37
|
+
Product Backlog Item,Done,Completed,Custom.Mergedtointegration,Merged to integration,yes,must be true,Build failed
|
|
38
|
+
Product Backlog Item,Removed,Removed,Custom.Planwritten,Plan written,free,either — this is where the gate is worked,Plan rejected
|
|
39
|
+
Product Backlog Item,Removed,Removed,Custom.Implementationcomplete,Implementation complete,free,either — this is where the gate is worked,
|
|
40
|
+
Product Backlog Item,Removed,Removed,Custom.Reviewpassed,Review passed,free,either — this is where the gate is worked,Reviewer rejected
|
|
41
|
+
Product Backlog Item,Removed,Removed,Custom.Testspassing,Tests passing,free,either — this is where the gate is worked,Tests failed
|
|
42
|
+
Product Backlog Item,Removed,Removed,Custom.Docsupdated,Docs updated,free,either — this is where the gate is worked,
|
|
43
|
+
Product Backlog Item,Removed,Removed,Custom.Mergedtointegration,Merged to integration,free,either — this is where the gate is worked,Build failed
|
|
44
|
+
Bug,New,Proposed,Custom.Planwritten,Plan written,no,must be false,Plan rejected
|
|
45
|
+
Bug,New,Proposed,Custom.Implementationcomplete,Implementation complete,no,must be false,
|
|
46
|
+
Bug,New,Proposed,Custom.Reviewpassed,Review passed,no,must be false,Reviewer rejected
|
|
47
|
+
Bug,New,Proposed,Custom.Testspassing,Tests passing,no,must be false,Tests failed
|
|
48
|
+
Bug,New,Proposed,Custom.Docsupdated,Docs updated,no,must be false,
|
|
49
|
+
Bug,New,Proposed,Custom.Mergedtointegration,Merged to integration,no,must be false,Build failed
|
|
50
|
+
Bug,Approved,Proposed,Custom.Planwritten,Plan written,yes,must be true,Plan rejected
|
|
51
|
+
Bug,Approved,Proposed,Custom.Implementationcomplete,Implementation complete,no,must be false,
|
|
52
|
+
Bug,Approved,Proposed,Custom.Reviewpassed,Review passed,no,must be false,Reviewer rejected
|
|
53
|
+
Bug,Approved,Proposed,Custom.Testspassing,Tests passing,no,must be false,Tests failed
|
|
54
|
+
Bug,Approved,Proposed,Custom.Docsupdated,Docs updated,no,must be false,
|
|
55
|
+
Bug,Approved,Proposed,Custom.Mergedtointegration,Merged to integration,no,must be false,Build failed
|
|
56
|
+
Bug,Committed,InProgress,Custom.Planwritten,Plan written,yes,must be true,Plan rejected
|
|
57
|
+
Bug,Committed,InProgress,Custom.Implementationcomplete,Implementation complete,no,must be false,
|
|
58
|
+
Bug,Committed,InProgress,Custom.Reviewpassed,Review passed,no,must be false,Reviewer rejected
|
|
59
|
+
Bug,Committed,InProgress,Custom.Testspassing,Tests passing,no,must be false,Tests failed
|
|
60
|
+
Bug,Committed,InProgress,Custom.Docsupdated,Docs updated,no,must be false,
|
|
61
|
+
Bug,Committed,InProgress,Custom.Mergedtointegration,Merged to integration,no,must be false,Build failed
|
|
62
|
+
Bug,In Progress,InProgress,Custom.Planwritten,Plan written,yes,must be true,Plan rejected
|
|
63
|
+
Bug,In Progress,InProgress,Custom.Implementationcomplete,Implementation complete,free,either — this is where the gate is worked,
|
|
64
|
+
Bug,In Progress,InProgress,Custom.Reviewpassed,Review passed,no,must be false,Reviewer rejected
|
|
65
|
+
Bug,In Progress,InProgress,Custom.Testspassing,Tests passing,free,either — this is where the gate is worked,Tests failed
|
|
66
|
+
Bug,In Progress,InProgress,Custom.Docsupdated,Docs updated,free,either — this is where the gate is worked,
|
|
67
|
+
Bug,In Progress,InProgress,Custom.Mergedtointegration,Merged to integration,no,must be false,Build failed
|
|
68
|
+
Bug,In Testing,InProgress,Custom.Planwritten,Plan written,yes,must be true,Plan rejected
|
|
69
|
+
Bug,In Testing,InProgress,Custom.Implementationcomplete,Implementation complete,yes,must be true,
|
|
70
|
+
Bug,In Testing,InProgress,Custom.Reviewpassed,Review passed,free,either — this is where the gate is worked,Reviewer rejected
|
|
71
|
+
Bug,In Testing,InProgress,Custom.Testspassing,Tests passing,free,either — this is where the gate is worked,Tests failed
|
|
72
|
+
Bug,In Testing,InProgress,Custom.Docsupdated,Docs updated,free,either — this is where the gate is worked,
|
|
73
|
+
Bug,In Testing,InProgress,Custom.Mergedtointegration,Merged to integration,no,must be false,Build failed
|
|
74
|
+
Bug,Done,Completed,Custom.Planwritten,Plan written,yes,must be true,Plan rejected
|
|
75
|
+
Bug,Done,Completed,Custom.Implementationcomplete,Implementation complete,yes,must be true,
|
|
76
|
+
Bug,Done,Completed,Custom.Reviewpassed,Review passed,yes,must be true,Reviewer rejected
|
|
77
|
+
Bug,Done,Completed,Custom.Testspassing,Tests passing,yes,must be true,Tests failed
|
|
78
|
+
Bug,Done,Completed,Custom.Docsupdated,Docs updated,yes,must be true,
|
|
79
|
+
Bug,Done,Completed,Custom.Mergedtointegration,Merged to integration,yes,must be true,Build failed
|
|
80
|
+
Bug,Removed,Removed,Custom.Planwritten,Plan written,free,either — this is where the gate is worked,Plan rejected
|
|
81
|
+
Bug,Removed,Removed,Custom.Implementationcomplete,Implementation complete,free,either — this is where the gate is worked,
|
|
82
|
+
Bug,Removed,Removed,Custom.Reviewpassed,Review passed,free,either — this is where the gate is worked,Reviewer rejected
|
|
83
|
+
Bug,Removed,Removed,Custom.Testspassing,Tests passing,free,either — this is where the gate is worked,Tests failed
|
|
84
|
+
Bug,Removed,Removed,Custom.Docsupdated,Docs updated,free,either — this is where the gate is worked,
|
|
85
|
+
Bug,Removed,Removed,Custom.Mergedtointegration,Merged to integration,free,either — this is where the gate is worked,Build failed
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
// Workflow state ladder for the board's Product Backlog Item/Bug items. The
|
|
2
|
+
// 2026-10-04 ADL-Product process cutover replaced the six boolean Build
|
|
3
|
+
// flags (Custom.Planwritten, Custom.Implementationcomplete,
|
|
4
|
+
// Custom.Reviewpassed, Custom.Testspassing, Custom.Docsupdated,
|
|
5
|
+
// Custom.Mergedtointegration) with ordered item states; the flags were
|
|
6
|
+
// removed from the process at the cutover and nothing here reads or writes
|
|
7
|
+
// them. The routes below implement the owner's final state model (PBI and
|
|
8
|
+
// Bug identical), carried as src/workflow-ladder.csv next to this file; the
|
|
9
|
+
// unit test tests/workflow-rules.test.ts asserts the embedded table agrees
|
|
10
|
+
// with that CSV on every type × from × to triple, so the compiled binary
|
|
11
|
+
// needs no file access at runtime. Features and Epics walk no item ladder
|
|
12
|
+
// and are exempt: evaluateWorkflowTransition returns no violations for
|
|
13
|
+
// them.
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The thirteen recognized states: the twelve active states of the final
|
|
17
|
+
* model, plus Committed — retired (UI-hidden, no route references it) but
|
|
18
|
+
* still recognized so a transition touching it is refused with the retired
|
|
19
|
+
* note instead of passing through silently.
|
|
20
|
+
*/
|
|
21
|
+
export const WORKFLOW_STATES = [
|
|
22
|
+
'New',
|
|
23
|
+
'In Planning',
|
|
24
|
+
'Awaiting Approval',
|
|
25
|
+
'Approved',
|
|
26
|
+
'Spec Validation',
|
|
27
|
+
'In Implementation',
|
|
28
|
+
'In Testing',
|
|
29
|
+
'In Review',
|
|
30
|
+
'Updating Docs',
|
|
31
|
+
'Done',
|
|
32
|
+
'Parked for Removal',
|
|
33
|
+
'Removed',
|
|
34
|
+
'Committed',
|
|
35
|
+
] as const;
|
|
36
|
+
export type WorkflowState = (typeof WORKFLOW_STATES)[number];
|
|
37
|
+
|
|
38
|
+
const GATED_TYPES = ['Product Backlog Item', 'Bug'] as const;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The main line, in route order — forward only. PBI and Bug share it (no
|
|
42
|
+
* type deltas in the final model).
|
|
43
|
+
*/
|
|
44
|
+
const MAIN_LINE: readonly WorkflowState[] = [
|
|
45
|
+
'New',
|
|
46
|
+
'In Planning',
|
|
47
|
+
'Awaiting Approval',
|
|
48
|
+
'Approved',
|
|
49
|
+
'Spec Validation',
|
|
50
|
+
'In Implementation',
|
|
51
|
+
'In Testing',
|
|
52
|
+
'In Review',
|
|
53
|
+
'Updating Docs',
|
|
54
|
+
];
|
|
55
|
+
const MAIN_LINE_INDEX = new Map<string, number>(MAIN_LINE.map((state, index) => [state, index]));
|
|
56
|
+
|
|
57
|
+
/** The adjacent forward moves on the main line. */
|
|
58
|
+
const LADDER_EDGES: readonly (readonly [WorkflowState, WorkflowState])[] = MAIN_LINE.slice(1).map(
|
|
59
|
+
(state, index) => [MAIN_LINE[index]!, state] as const,
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* The states that may move back to New — any active state (re-plan /
|
|
64
|
+
* unpark), plus Removed (recovery). Done is not active: its one recovery is
|
|
65
|
+
* In Planning (see RECOVERY_EDGES).
|
|
66
|
+
*/
|
|
67
|
+
const REPLAN_SOURCES: ReadonlySet<WorkflowState> = new Set([
|
|
68
|
+
'In Planning',
|
|
69
|
+
'Awaiting Approval',
|
|
70
|
+
'Approved',
|
|
71
|
+
'Spec Validation',
|
|
72
|
+
'In Implementation',
|
|
73
|
+
'In Testing',
|
|
74
|
+
'In Review',
|
|
75
|
+
'Updating Docs',
|
|
76
|
+
'Parked for Removal',
|
|
77
|
+
'Removed',
|
|
78
|
+
]);
|
|
79
|
+
|
|
80
|
+
/** The ONE sanctioned backward work-edge: review agent rejection. */
|
|
81
|
+
const REJECTION_EDGE: readonly [WorkflowState, WorkflowState] = ['In Review', 'In Implementation'];
|
|
82
|
+
/** The documented recovery out of the completed terminal. */
|
|
83
|
+
const RECOVERY_EDGE: readonly [WorkflowState, WorkflowState] = ['Done', 'In Planning'];
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Targets no agent may set, with the owner named in the refusal: Approved is
|
|
87
|
+
* G1 (human approval, taken from Awaiting Approval), Removed is G3 (human
|
|
88
|
+
* removal, taken from Parked for Removal), Done is entered only by PR merge
|
|
89
|
+
* automation into integration (from Updating Docs).
|
|
90
|
+
*/
|
|
91
|
+
export const WORKFLOW_HUMAN_ONLY_TARGETS: Readonly<Record<'Approved' | 'Done' | 'Removed', string>> = {
|
|
92
|
+
Approved: 'G1 — human approval only; agents cannot move items to Approved',
|
|
93
|
+
Done: 'entered only by PR merge automation into integration',
|
|
94
|
+
Removed: 'G3 — human removal only; agents cannot move items to Removed',
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const RETIRED_COMMITTED_NOTE = 'Committed is a retired state (UI-hidden; no route references it)';
|
|
98
|
+
const PARKED_EXIT_NOTE = 'Parked for Removal exits only to New (re-plan) or Removed (G3 human)';
|
|
99
|
+
|
|
100
|
+
export type WorkflowViolation =
|
|
101
|
+
| { kind: 'skipped-gate'; fromState: WorkflowState; toState: WorkflowState; skippedState: WorkflowState }
|
|
102
|
+
| { kind: 'human-only'; fromState: WorkflowState; toState: WorkflowState; owner: string }
|
|
103
|
+
| { kind: 'no-transition'; fromState: WorkflowState; toState: WorkflowState; note?: string };
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Evaluate a state TRANSITION (from-state → to-state) against the final
|
|
107
|
+
* state model. One violation per refusal class:
|
|
108
|
+
*
|
|
109
|
+
* - `human-only` — the target is owned by G1 approval, PR merge automation
|
|
110
|
+
* or G3 human removal; agents never set it.
|
|
111
|
+
* - `skipped-gate` — a forward jump over main-line states; one violation per
|
|
112
|
+
* skipped state, in route order, so the refusal names every gate
|
|
113
|
+
* bypassed. Approved is annotated "(G1: human approval)".
|
|
114
|
+
* - `no-transition` — anything off the model. Committed is retired: any
|
|
115
|
+
* transition touching it names the retired state. Parked for Removal is
|
|
116
|
+
* enterable from anywhere but exits only to New or Removed. Everything
|
|
117
|
+
* else backward is refused flat — including In Implementation → Spec
|
|
118
|
+
* Validation and In Testing → In Implementation (no special-casing; the
|
|
119
|
+
* owner decision is "no backward rule, enforce forward").
|
|
120
|
+
*
|
|
121
|
+
* Allowed to writers: identity writes (from === to, never gated); the
|
|
122
|
+
* adjacent main-line forward moves; parking to Parked for Removal from any
|
|
123
|
+
* state; re-plan moves to New from any active state plus Removed; the
|
|
124
|
+
* review-rejection edge In Review → In Implementation; and the Done →
|
|
125
|
+
* In Planning recovery. Exits from Done other than In Planning and from
|
|
126
|
+
* Removed other than New/Parked keep the terminal notes ("completed items
|
|
127
|
+
* stay Done; a G2 rejection gets its own linked item" / "Removed is
|
|
128
|
+
* terminal"). A state outside the thirteen recognized states yields none —
|
|
129
|
+
* the ADO process template enforces server-side. Exempt types
|
|
130
|
+
* (Feature/Epic) yield none.
|
|
131
|
+
*/
|
|
132
|
+
export function evaluateWorkflowTransition(
|
|
133
|
+
workItemType: string,
|
|
134
|
+
fromState: string,
|
|
135
|
+
toState: string,
|
|
136
|
+
): WorkflowViolation[] {
|
|
137
|
+
if (!(GATED_TYPES as readonly string[]).includes(workItemType)) return [];
|
|
138
|
+
if (!(WORKFLOW_STATES as readonly string[]).includes(fromState)) return [];
|
|
139
|
+
if (!(WORKFLOW_STATES as readonly string[]).includes(toState)) return [];
|
|
140
|
+
const from = fromState as WorkflowState;
|
|
141
|
+
const to = toState as WorkflowState;
|
|
142
|
+
if (from === to) return [];
|
|
143
|
+
if (from === 'Committed' || to === 'Committed') {
|
|
144
|
+
return [{ kind: 'no-transition', fromState: from, toState: to, note: RETIRED_COMMITTED_NOTE }];
|
|
145
|
+
}
|
|
146
|
+
const owner = (WORKFLOW_HUMAN_ONLY_TARGETS as Partial<Record<WorkflowState, string>>)[to];
|
|
147
|
+
if (owner !== undefined) return [{ kind: 'human-only', fromState: from, toState: to, owner }];
|
|
148
|
+
if (to === 'Parked for Removal') return [];
|
|
149
|
+
if (to === 'New' && REPLAN_SOURCES.has(from)) return [];
|
|
150
|
+
if (from === REJECTION_EDGE[0] && to === REJECTION_EDGE[1]) return [];
|
|
151
|
+
if (from === RECOVERY_EDGE[0] && to === RECOVERY_EDGE[1]) return [];
|
|
152
|
+
if (from === 'Done' || from === 'Removed') {
|
|
153
|
+
return [{ kind: 'no-transition', fromState: from, toState: to, note: terminalSourceNote(from) }];
|
|
154
|
+
}
|
|
155
|
+
if (from === 'Parked for Removal') {
|
|
156
|
+
return [{ kind: 'no-transition', fromState: from, toState: to, note: PARKED_EXIT_NOTE }];
|
|
157
|
+
}
|
|
158
|
+
if (LADDER_EDGES.some(([edgeFrom, edgeTo]) => edgeFrom === from && edgeTo === to)) return [];
|
|
159
|
+
const fromIndex = MAIN_LINE_INDEX.get(from)!;
|
|
160
|
+
const toIndex = MAIN_LINE_INDEX.get(to)!;
|
|
161
|
+
if (toIndex > fromIndex) {
|
|
162
|
+
return MAIN_LINE.slice(fromIndex + 1, toIndex).map((skippedState) => ({
|
|
163
|
+
kind: 'skipped-gate',
|
|
164
|
+
fromState: from,
|
|
165
|
+
toState: to,
|
|
166
|
+
skippedState,
|
|
167
|
+
}));
|
|
168
|
+
}
|
|
169
|
+
return [{ kind: 'no-transition', fromState: from, toState: to }];
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/** from is Done or Removed here; identity, parking and recoveries were handled by the caller. */
|
|
173
|
+
function terminalSourceNote(from: WorkflowState): string {
|
|
174
|
+
return from === 'Done'
|
|
175
|
+
? 'completed items stay Done; a G2 rejection gets its own linked item'
|
|
176
|
+
: 'Removed is terminal';
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export function formatWorkflowViolation(violation: WorkflowViolation): string {
|
|
180
|
+
if (violation.kind === 'skipped-gate') {
|
|
181
|
+
const g1 = violation.skippedState === 'Approved' ? ' (G1: human approval)' : '';
|
|
182
|
+
return `fenced by state ladder: '${violation.fromState}' → '${violation.toState}' skips '${violation.skippedState}'${g1}`;
|
|
183
|
+
}
|
|
184
|
+
if (violation.kind === 'human-only') {
|
|
185
|
+
return `fenced by state ladder: '${violation.fromState}' → '${violation.toState}' is ${violation.owner}`;
|
|
186
|
+
}
|
|
187
|
+
const note = violation.note === undefined ? '' : ` (${violation.note})`;
|
|
188
|
+
return `fenced by state ladder: no ladder transition '${violation.fromState}' → '${violation.toState}'${note}`;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/** One refusal line per violation, joined for a loud multi-line error. */
|
|
192
|
+
export function formatWorkflowRefusal(violations: WorkflowViolation[]): string {
|
|
193
|
+
return violations.map(formatWorkflowViolation).join('\n');
|
|
194
|
+
}
|