@amsterdamdatalabs/adl-agent-control-linux-x64 0.1.46 → 0.1.48
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 +1 -1
- package/bin/reconcile +7 -2
- package/package.json +1 -1
- package/packages/agent-hooks/src/rules/impl/git-branch.ts +1 -1
- package/packages/agent-skills/assets/write-feature/SKILL.md +13 -15
- package/bin/lean-ctx-observe-strip +0 -434
- package/bin/lib/lean-ctx-observe-hooks.sh +0 -634
- package/bin/update-azure-agent-pool +0 -29
- package/packages/agent-hooks/src/hooks/lean-ctx/handler.ts +0 -22
- package/packages/agent-hooks/src/hooks/lean-ctx/index.ts +0 -173
- package/packages/agent-hooks/src/hooks/lean-ctx/mapping.ts +0 -121
- package/packages/agent-hooks/src/hooks/lean-ctx/scope-rewrite.ts +0 -207
- package/packages/agent-hooks/src/lean-ctx/env.ts +0 -123
- package/packages/agent-hooks/src/lean-ctx/mcp.ts +0 -142
- package/packages/agent-hooks/src/rules/impl/adl-build-run-denied.ts +0 -51
- package/packages/agent-hooks/src/rules/impl/adl-session-required.ts +0 -403
- package/packages/agent-hooks/src/rules/impl/tool-lean-ctx-global.ts +0 -594
- package/packages/agent-settings/assets/GLOBAL-AGENTS.md +0 -112
- package/packages/agent-settings/assets/lean-ctx/config.toml +0 -42
- package/packages/agent-settings/assets/lean-ctx/gitignore +0 -10
- package/packages/agent-settings/assets/lean-ctx/layout.toml +0 -7
- package/packages/agent-settings/src/deploy/lean-ctx-deploy.ts +0 -230
- package/packages/agent-settings/src/deploy/lean-ctx-merge.ts +0 -580
- package/packages/agent-skills/assets/adl-mechanics/SKILL.md +0 -38
- package/packages/agent-skills/assets/codebase-design/SKILL.md +0 -98
- package/packages/agent-skills/assets/codebase-design/references/DEEPENING.md +0 -37
- package/packages/agent-skills/assets/codebase-design/references/DESIGN-IT-TWICE.md +0 -44
- package/packages/agent-skills/assets/codebase-design/references/TESTABILITY.md +0 -29
- package/packages/agent-skills/assets/debug-issue/SKILL.md +0 -41
- package/packages/agent-skills/assets/domain-modeling/SKILL.md +0 -86
- package/packages/agent-skills/assets/domain-modeling/references/ADR-FORMAT.md +0 -47
- package/packages/agent-skills/assets/domain-modeling/references/CONTEXT-FORMAT.md +0 -60
- package/packages/agent-skills/assets/implement/SKILL.md +0 -28
- package/packages/agent-skills/assets/review-changes/SKILL.md +0 -45
- package/packages/agent-skills/assets/tdd/SKILL.md +0 -49
- package/packages/agent-skills/assets/tdd/references/mocking.md +0 -59
- package/packages/agent-skills/assets/tdd/references/tests.md +0 -77
- package/packages/agent-skills/assets/testing/SKILL.md +0 -54
- package/packages/agent-skills/assets/testing/references/e2e.md +0 -37
- package/packages/agent-skills/assets/testing/references/integration.md +0 -37
- package/packages/agent-skills/assets/testing/references/unit.md +0 -32
- package/packages/agent-skills/assets/to-feature/SKILL.md +0 -91
- package/packages/agent-skills/assets/to-feature/references/FEATURE-SPEC-TEMPLATE.md +0 -88
- package/packages/agent-skills/assets/to-workitems/SKILL.md +0 -90
- package/packages/agent-skills/assets/to-workitems/references/AZURE-DEVOPS-HIERARCHY.md +0 -121
- package/packages/agent-skills/assets/to-workitems/references/TICKET-TEMPLATES.md +0 -70
- package/packages/azdo/src/workflow-rules-matrix.csv +0 -85
- package/packages/fleet/src/launch-agents.ts +0 -649
- package/packages/repo-controls/assets/GLOBAL-INVARIANTS.md +0 -21
- package/packages/repo-controls/assets/enable-integration-auto-complete.mjs +0 -79
- package/packages/repo-controls/assets/scaffold/docs/notes.md +0 -20
- package/packages/repo-controls/assets/scaffold/plans/GAPS-AND-FINDINGS.md +0 -12
- package/packages/repo-controls/azure-pipelines.yml +0 -274
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/closed_set/fixtures/docs/notes.md +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/english_only/fixtures/excluded/frontend/mobile/src/i18n/locales/zh-CN/strings.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-ledger-clean/docs/notes.md +0 -17
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/okf_profile/fixtures/okf-ledger-no-lines/docs/notes.md +0 -13
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/fixtures/semantics-violations/docs/architecture/product/stable-delivery.md +0 -10
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/fixtures/semantics-violations/docs/architecture/product/stable-recommendation.md +0 -12
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/docs/semantics/fixtures/semantics-violations/docs/architecture/product/target-narration.md +0 -10
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-clean/frontend/packages/desktop/src/renderer/solo/item.ts +0 -1
- 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 +0 -1
- 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 +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/fresh/fresh.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub1/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub10/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub11/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub2/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub3/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub4/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub5/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub6/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub7/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub8/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/many/sub9/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/services/i18n/locales/de/common.json +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/renderer/solo/item.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-excluded/frontend/packages/desktop/src/vendored-crate/Cargo.toml +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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/fresh/fresh.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub1/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub10/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub11/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub2/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub3/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub4/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub5/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub6/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub7/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub8/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/many/sub9/only.ts +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/directory_ratchet/fixtures/directory-ratchet-unbaselined/frontend/packages/desktop/src/renderer/solo/item.ts +0 -1
- 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 +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/open_work_cap/fixtures/open-work-cap-clean/plans/GAPS-AND-FINDINGS.md +0 -5
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/open_work_cap/fixtures/open-work-cap-clean/plans/features/az601-clean/spec.md +0 -10
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-allowed/agent/crates/enact-providers/src/snapshots/README.md +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-allowed/backend/crates/enact-app/assets/builtin-assistants/avatars/assistant.jpg +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-allowed/backend/crates/enact-assets/assets/logos/tools/coding/tool.png +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-allowed/backend/crates/enact-session/src/backend/codex_init_prompt.md +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-allowed/frontend/mobile/assets/images/icon.png +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-allowed/frontend/packages/desktop/src/renderer/assets/logos/brand/app.png +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-allowed/frontend/packages/desktop/src/renderer/assets/themes/default-theme.png +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-allowed/frontend/public/pwa/icon-192.png +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-allowed/frontend/resources/product.png +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/placement/fixtures/placement-stray/backend/crates/enact-session/src/backend/README.md +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plans_layout/fixtures/plans-layout-clean/plans/features/az347-test-coverage/spec.md +0 -12
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/plans_layout/fixtures/plans-layout-violation/plans/features/az347-test-coverage/spec.md +0 -12
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/__init__.py +0 -11
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/check.py +0 -62
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/fixtures/migration-filenames/backend/crates/demo/NotAMigration.sql +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/fixtures/migration-filenames/backend/crates/demo/migrations/0001_long_prefix.sql +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/fixtures/migration-filenames/backend/crates/demo/migrations/001_init.sql +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/fixtures/migration-filenames/backend/crates/demo/migrations/002_add_index.sql +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/fixtures/migration-filenames/backend/crates/demo/migrations/003-dashed-slug.sql +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/fixtures/migration-filenames/backend/crates/demo/migrations/004_MixedCase.sql +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/fixtures/migration-filenames/backend/crates/demo/migrations/005_trailing space.sql +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/fixtures/migration-filenames/backend/crates/demo/migrations/01_short_prefix.sql +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/fixtures/migration-filenames/backend/crates/demo/migrations/not-a-migration.sql +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/profile_data/test_check.py +0 -116
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/references/fixtures/link-targets-broken/docs/architecture/product/links.md +0 -20
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/references/fixtures/link-targets-broken/docs/architecture/product/route-target.md +0 -8
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/references/fixtures/link-targets-clean/docs/architecture/product/links.md +0 -20
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/references/fixtures/link-targets-clean/docs/architecture/product/route-target.md +0 -8
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_closed_set/fixtures/.changeset/declared.txt +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/layout/root_markdown_allowlist/fixtures/root-markdown-clean/INDEPENDENT-VERIFICATION.md +0 -3
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/attribute-without-conversion/.gitattributes +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/attribute-without-conversion/large file.bin +0 -3
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/clean/.gitattributes +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/clean/large file.bin +0 -3
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/clean/small.txt +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/missing-filter/large file.bin +0 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/unmatched-extension/.gitattributes +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/lfs/integrity/fixtures/unmatched-extension/payload.dat +0 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/pipeline/__init__.py +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/pipeline/phase_disjoint/__init__.py +0 -12
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/pipeline/phase_disjoint/check.py +0 -129
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/pipeline/phase_disjoint/fixtures/disjoint/gate-registry.yaml +0 -13
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/pipeline/phase_disjoint/fixtures/empty/gate-registry.yaml +0 -7
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/pipeline/phase_disjoint/fixtures/overlapping/gate-registry.yaml +0 -13
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/pipeline/phase_disjoint/test_check.py +0 -109
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/__init__.py +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/changeset_plan/__init__.py +0 -11
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/changeset_plan/check.py +0 -149
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/changeset_plan/fixtures/clean/docs/readme.md +0 -4
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/changeset_plan/fixtures/relevant/VERSION +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/changeset_plan/test_check.py +0 -151
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/__init__.py +0 -11
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/check.py +0 -202
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/fixtures/aligned/.workflows/changesets/package.json +0 -5
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/fixtures/aligned/.workflows/package.json +0 -5
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/fixtures/aligned/CHANGELOG.md +0 -5
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/fixtures/aligned/VERSION +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/fixtures/mismatched/.workflows/changesets/package.json +0 -5
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/fixtures/mismatched/.workflows/package.json +0 -5
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/fixtures/mismatched/CHANGELOG.md +0 -5
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/fixtures/mismatched/VERSION +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/release/version_release/test_check.py +0 -162
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/banned_commands/check.py +0 -103
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/fixtures/clean/backend/Cargo.lock +0 -7
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/fixtures/clean/backend/Cargo.toml +0 -4
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/fixtures/clean/backend/rust-toolchain.toml +0 -3
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/fixtures/clean/backend/src/main.rs +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/fixtures/clean/frontend/bun.lock +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/fixtures/empty-bun-lock/backend/Cargo.lock +0 -7
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/fixtures/empty-bun-lock/backend/Cargo.toml +0 -4
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/fixtures/empty-bun-lock/backend/rust-toolchain.toml +0 -3
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/fixtures/empty-bun-lock/backend/src/main.rs +0 -1
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/checks/repository/lockfile_integrity/fixtures/empty-bun-lock/frontend/bun.lock +0 -0
- package/packages/repo-controls/package/adl-compliance/src/adl_compliance/policy/grants-registry.yaml +0 -112
- package/packages/repo-controls/workflows/scripts/release/verify-npm-artifact.ts +0 -119
package/bin/adl
CHANGED
package/bin/reconcile
CHANGED
|
@@ -2119,8 +2119,13 @@ run_surface_update() {
|
|
|
2119
2119
|
surface_update_error_reason() {
|
|
2120
2120
|
local output="$1" plain line
|
|
2121
2121
|
# LC_ALL=C: the strip is bytewise. Under en_US.UTF-8 glibc resolves [@-~]
|
|
2122
|
-
# by collation, so the escape's final letter would never match.
|
|
2123
|
-
|
|
2122
|
+
# by collation, so the escape's final letter would never match. The
|
|
2123
|
+
# ANSI strip uses `tr` to delete ESC bytes first -- BSD sed on macOS has a
|
|
2124
|
+
# long-standing segfault (exit 139) when fed input that contains the ESC
|
|
2125
|
+
# byte directly in a $'\x1b...' pattern, so we remove the byte in a
|
|
2126
|
+
# bytewise pass and let sed handle the bracketed parameter sequences that
|
|
2127
|
+
# remain (which do not contain ESC).
|
|
2128
|
+
plain="$(LC_ALL=C tr -d '\033' <<<"$output" | LC_ALL=C sed -E 's/\[[0-9;]*[@-~]//g')"
|
|
2124
2129
|
local error_re='^[[:space:]]*(✖[[:space:]]*)?[eE][rR][rR][oO][rR]:' candidate
|
|
2125
2130
|
line=""
|
|
2126
2131
|
while IFS= read -r candidate; do
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amsterdamdatalabs/adl-agent-control-linux-x64",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.48",
|
|
4
4
|
"description": "adl CLI binary for linux/x64 (agent identity + Azure DevOps front door — see docs/architecture/cli-design.md)",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"os": [
|
|
@@ -7,7 +7,7 @@ import { branchMutates, isHelpOnlyInvocation, isSequencerRecoveryOnly, switchChe
|
|
|
7
7
|
import { LANDING_SUBCOMMANDS, resolveGitTarget } from './git-target.ts'
|
|
8
8
|
import { gitAgentTail } from './messages.ts'
|
|
9
9
|
|
|
10
|
-
const ASK_USER = '
|
|
10
|
+
const ASK_USER = 'you are enforced to commit and push to the same branch, branches are not agent\'s choice. treat them as given and continue on the same branch without stopping'
|
|
11
11
|
|
|
12
12
|
const UNRESOLVED =
|
|
13
13
|
'The commit target (which repository and branch this would land on) could not be determined statically from this command line. ' +
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: write-feature
|
|
3
|
-
description: Live, human-attended session that creates a Feature on the ADO board
|
|
3
|
+
description: Live, human-attended session that creates a Feature on the ADO board under a parent Epic read from `[azdo.scope.epics]` in `adl-config.toml`, captures the human's intent verbatim into intent.md, and lands it through a docs branch and PR. Use when Tarun asks to start, create or write up a new Feature or its intent. Never dispatched.
|
|
4
4
|
metadata:
|
|
5
5
|
step: "live"
|
|
6
6
|
role: "session agent with the human"
|
|
@@ -22,8 +22,7 @@ Load `workitems-process` first. This card adds only what the live Feature sessio
|
|
|
22
22
|
| Input | Rule |
|
|
23
23
|
|---|---|
|
|
24
24
|
| The Feature in their words | Why, Outcome, Constraints, Non-goals; Open questions optional |
|
|
25
|
-
| Parent Epic |
|
|
26
|
-
| Predecessor Features | At least 1, unless the human says this is the very first Feature |
|
|
25
|
+
| Parent Epic | Check `[azdo.scope.epics]` in `adl-config.toml` first and use the listed Epic that fits the Feature. If none fits, ask the human before allocating. Never guess, never create. |
|
|
27
26
|
| Title and slug | Human confirms both |
|
|
28
27
|
|
|
29
28
|
## Preconditions
|
|
@@ -33,19 +32,18 @@ Load `workitems-process` first. This card adds only what the live Feature sessio
|
|
|
33
32
|
|
|
34
33
|
## Procedure
|
|
35
34
|
|
|
36
|
-
|
|
35
|
+
The human gives one shot of intent in their own words; you capture it verbatim, allocate the Feature, write `intent.md`, and land the docs PR in the same session. **Do not loop the human for re-stating what they already gave.** You may ask at most ONE batching question to resolve hard blockers (parent Epic id, title, slug). Everything else — the four `intent.md` sections — is taken from the human's already-given words or read back to them as a final check before any board call.
|
|
37
36
|
|
|
38
|
-
1. **
|
|
39
|
-
2. **
|
|
40
|
-
3. **
|
|
41
|
-
|
|
42
|
-
- **Description = copy of `intent.md`.** Pass the human's own `## Why`, `## Outcome`, `## Constraints`, `## Non-goals` text, verbatim and identical to what step 5 writes, as `--description` at create. Written once, here. Agents never edit it afterwards, the same as `intent.md`. The approved plan lives in the `plan-r<N>-<sha7>.md` attachment, not in the Description.
|
|
37
|
+
1. **Capture, do not paraphrase.** Pull the four headings (`## Why`, `## Outcome`, `## Constraints`, `## Non-goals`) directly from the human's message. Use the human's own sentences, in the human's own order, with the human's own bullets. If they gave one paragraph, break it into bullets without renaming or rewording. If they gave bullets, keep the bullets. **No "improving".** If a heading is genuinely absent, copy the heading with a single placeholder bullet `- <missing: the human owes this line>` and STOP — do not write a guess.
|
|
38
|
+
2. **One batching question, no more.** Ask exactly the questions the human has not answered and that you cannot invent: parent Epic id, title, slug. Everything else (`Why`/`Outcome`/`Constraints`/`Non-goals` text) comes from what the human already said. Asking again to confirm what is already on the page is a stop-rule violation.
|
|
39
|
+
3. **Allocate the Feature on the board first.** `workitem_create_or_update_feature --title "<title>" --parent-id <epic> --description "<Why, Outcome, Constraints, Non-goals>" --priority <1|2|3|4>`. State stays New (the tool refuses any other create state: pending F3). Mandatory at create: `title`, `parentId` (Epic), `description` (must carry the four intent.md headings `## Why` / `## Outcome` / `## Constraints` / `## Non-goals`), and `priority` ∈ `{1, 2, 3, 4}` (1=Very High, 2=High, 3=Medium, 4=Low). State-conditional gate — when moving off `New` (e.g. to `In Progress`), the call also requires `acceptanceCriteria` plus the three plan fields (`--plan-revision`, `--plan-hash`, `--baseline-sha`); create at `New` does not. Read it back: type Feature, state New, parent = the Epic. A refusal is the answer: report the exact text, stop, create nothing.
|
|
40
|
+
- **Description = copy of `intent.md`.** Pass the human's own `## Why`, `## Outcome`, `## Constraints`, `## Non-goals` text, verbatim and identical to what step 4 writes, as `--description` at create. Written once, here. Agents never edit it afterwards, the same as `intent.md`. The approved plan lives in the `plan-r<N>-<sha7>.md` attachment, not in the Description.
|
|
43
41
|
- Do not touch Features 548-554 ("Fixes to closed Features"); their description is already set.
|
|
44
42
|
- Never create an Epic. Never set `epic:` from tool output; it is the human's value.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
4. **Write `plans/features/az<id>-<slug>/intent.md`.** The id is allocated before the file exists. Layout below. No other file in the folder.
|
|
44
|
+
5. **Read it back to the human.** Commit only after an explicit yes. After that, agents never edit `intent.md`; only the human does.
|
|
45
|
+
6. **Land it.** An ordinary docs change. You create the intent branch from the integration base: the one exception to "agents never create a branch." Add the `plans/LEDGER.md` row `az<id>-intent`. Commit `docs(plans): add intent for az<id> <slug>`. Push. Open the PR with `pr_create_or_update`, with the five PR body sections (Summary, Why, Changes, Test plan, Security impact considered); `## Test plan` and `## Security impact considered` say "none (docs-only)". The branch is not the planning branch and the Feature has no item at Approved or later (PBIs the human already made sit at New), so this is an ordinary PR: the tool links nothing, moves nothing, attaches nothing, and it needs no implementation report. Never rebase or force-push. No reviewer, no vote ([Human gates](../workitems-process/SKILL.md#human-gates)).
|
|
46
|
+
7. **Stop.** Report: Feature URL, branch, PR URL. Say the Feature is at New and the planning trigger ([Targets and triggers](../workitems-process/SKILL.md#targets-and-triggers)) fires on it once the PR has merged. Do not start planning.
|
|
49
47
|
|
|
50
48
|
## `intent.md` layout
|
|
51
49
|
|
|
@@ -81,14 +79,14 @@ last_update: <YYYY-MM-DDTHH:MM:SSZ>
|
|
|
81
79
|
|
|
82
80
|
## Stop rules
|
|
83
81
|
|
|
84
|
-
- Epic not given
|
|
82
|
+
- Epic not given → stop and ask; never default.
|
|
85
83
|
- A refused create or a failed read-back → stop with the exact error; no file before the id.
|
|
86
84
|
- Same command fails twice for the same reason → stop and report.
|
|
87
85
|
|
|
88
86
|
## Never
|
|
89
87
|
|
|
90
88
|
- Never write, extend or paraphrase the human's intent for them.
|
|
91
|
-
- Never choose the Epic
|
|
89
|
+
- Never choose the Epic.
|
|
92
90
|
- Never create PBIs here; planning creates them. PBIs the human already made stay at New and planning reads them.
|
|
93
91
|
- Never move a state, never plan, never post a run report.
|
|
94
92
|
- Never edit `intent.md` after the human approved it.
|
|
@@ -1,434 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
export PATH="/usr/local/bin:/opt/homebrew/bin:/home/linuxbrew/.linuxbrew/bin:/usr/bin:/bin:/usr/sbin:/sbin"
|
|
5
|
-
|
|
6
|
-
# lean-ctx-observe-strip -- the per-device half of STATUS.md 12p item 13.
|
|
7
|
-
# Final scope (2026-09-29, Tarun, relayed through the orchestrator; see
|
|
8
|
-
# bin/lib/lean-ctx-observe-hooks.sh's header for the full decision trail):
|
|
9
|
-
# lean-ctx hooks are "moved to repo level" and must be REMOVED FROM GLOBAL --
|
|
10
|
-
# the per-repo carrier (`adl hook lean-ctx pre-tool-use|post-tool-use`,
|
|
11
|
-
# written by `adl hooks deploy`) already provides rewrite/redirect/
|
|
12
|
-
# read-dedup with the repo's own config, and `observe` has no per-repo
|
|
13
|
-
# carrier at all and is dropped outright. Six carriers, all written by
|
|
14
|
-
# `lean-ctx setup`, are covered ("fix all the lean-ctx issues" -- Tarun,
|
|
15
|
-
# 2026-09-29 -- widened this from an initial two-of-five scope):
|
|
16
|
-
# 1. Raw, unwrapped `lean-ctx hook <subcommand>` entries -- observe,
|
|
17
|
-
# rewrite, redirect, read-dedup, any other -- in the two JSON
|
|
18
|
-
# hook-map files that can carry one: $HOME/.claude/settings.json and
|
|
19
|
-
# $HOME/.codex/hooks.json.
|
|
20
|
-
# 2. The universal shell hook marker block (`# >>> lean-ctx shell hook
|
|
21
|
-
# >>>` ... `# <<< lean-ctx shell hook <<<`).
|
|
22
|
-
# 3. `~/.zshrc`'s own differently-shaped shell hook block (an em dash,
|
|
23
|
-
# not `>>>`/`<<<`): `# lean-ctx shell hook — begin` ... `... — end`,
|
|
24
|
-
# sourcing a separate `~/.config/lean-ctx/shell-hook.zsh`.
|
|
25
|
-
# 4. The agent-launcher aliases block: `# >>> lean-ctx agent aliases
|
|
26
|
-
# >>>` ... `# <<< lean-ctx agent aliases <<<`.
|
|
27
|
-
# Shapes 2-4 are all matched in the per-user shell rc/env files they can
|
|
28
|
-
# appear in: $HOME/.bashenv, .zshenv, .bashrc, .zshrc, .bash_profile,
|
|
29
|
-
# .zprofile, .profile -- see bin/lib/lean-ctx-observe-hooks.sh's header
|
|
30
|
-
# for exactly which marker text each shape matches, its trailing-
|
|
31
|
-
# whitespace tolerance, and its malformed-nesting/near-miss detection.
|
|
32
|
-
# 5. Global lean-ctx SKILL.md directories (frontmatter `name: lean-ctx`)
|
|
33
|
-
# at $HOME/.claude/skills/lean-ctx, .codex/skills/lean-ctx,
|
|
34
|
-
# .cursor/skills/lean-ctx, .config/opencode/skills/lean-ctx,
|
|
35
|
-
# .agents/skills/lean-ctx.
|
|
36
|
-
# 6. Global lean-ctx hook SCRIPTS: every entry named `lean-ctx-*` directly
|
|
37
|
-
# under $HOME/.claude/hooks (lean-ctx-rewrite.sh, lean-ctx-redirect.sh,
|
|
38
|
-
# their -native counterparts, and any .bak copies). Added 2026-09-30
|
|
39
|
-
# because of lean-ctx's own startup refresh gate (proven from v3.10.5
|
|
40
|
-
# source, rust/src/hooks/mod.rs): refresh_installed_hooks() re-writes
|
|
41
|
-
# the global Claude hooks whenever hooks_installed_for("claude", home)
|
|
42
|
-
# is true, i.e. <claude_dir>/hooks/lean-ctx-rewrite.sh EXISTS or
|
|
43
|
-
# <claude_dir>/settings.json contains the substring `lean-ctx`.
|
|
44
|
-
# Stripping settings.json (shape 1) alone leaves the scripts behind and
|
|
45
|
-
# the gate armed, so the carrier rewrites the global hooks on its next
|
|
46
|
-
# start. Only names starting with `lean-ctx-` are touched; every other
|
|
47
|
-
# file there (enact-*, code-simplifier.mjs, lib/, symlinks to other
|
|
48
|
-
# repos) is left alone. Scope is $HOME/.claude only -- CLAUDE_CONFIG_DIR
|
|
49
|
-
# is deliberately not consulted (the tool takes --home explicitly).
|
|
50
|
-
# `adl hook lean-ctx ...` (the per-repo carrier) and Orca's own hooks are
|
|
51
|
-
# never touched -- see bin/lib/lean-ctx-observe-hooks.sh's own header for
|
|
52
|
-
# exactly why the match can never catch either, and for the full "which
|
|
53
|
-
# files can carry this, and why the others can't" accounting. `~/.config/
|
|
54
|
-
# lean-ctx/` itself (which shape 3 sources) is deliberately left alone --
|
|
55
|
-
# Tarun uses the global CLI directly from his own terminal -- flagged in
|
|
56
|
-
# that same header, not stripped. Run by bin/reconcile on every
|
|
57
|
-
# reconciliation (plan AND apply, exactly like bin/kimi-hooks /
|
|
58
|
-
# bin/opencode-hooks) so a hand-edited or Orca-reinstalled per-user config
|
|
59
|
-
# never lets any of the six carriers creep back in unnoticed.
|
|
60
|
-
#
|
|
61
|
-
# Usage: lean-ctx-observe-strip --home ABSOLUTE_PATH --mode plan|apply
|
|
62
|
-
#
|
|
63
|
-
# plan: READ-ONLY. Prints what apply would do; never writes, never backs
|
|
64
|
-
# up. A second run (plan or apply) against an already-clean home is
|
|
65
|
-
# a no-op.
|
|
66
|
-
# apply: For each target that still carries its carrier, backs it up
|
|
67
|
-
# first (same "<path>.pre-<label>-<UTC compact timestamp>" shape
|
|
68
|
-
# every other backup in this codebase uses -- bin/reconcile's own
|
|
69
|
-
# strip_backup_suffix recovers the original path from it, except
|
|
70
|
-
# for a skill directory's backup, which sits OUTSIDE the scanned
|
|
71
|
-
# skills/ tree and is reported via its own explicit two-path
|
|
72
|
-
# note; see strip_skill_dir_one below and final review finding
|
|
73
|
-
# 1), then rewrites/moves it via the shared
|
|
74
|
-
# bin/lib/lean-ctx-observe-hooks.sh helpers. A JSON file that
|
|
75
|
-
# fails to parse, a shell file with a malformed marker (unclosed,
|
|
76
|
-
# nested, orphaned, or a near-miss mention of the marker phrase
|
|
77
|
-
# that doesn't exactly match a known marker line), is a loud
|
|
78
|
-
# failure (non-zero exit, nothing written) -- never a silent skip
|
|
79
|
-
# or a partial edit. A target with nothing to strip, or that does
|
|
80
|
-
# not exist, is reported and left alone. A skill directory is
|
|
81
|
-
# moved (never deleted) only when its SKILL.md frontmatter says
|
|
82
|
-
# `name: lean-ctx`; any other content there is left alone and
|
|
83
|
-
# reported. The `lean-ctx-*` hook scripts under ~/.claude/hooks are
|
|
84
|
-
# moved (never deleted) into a sibling
|
|
85
|
-
# `hooks.pre-lean-ctx-observe-strip-<UTC ts>/` directory OUTSIDE
|
|
86
|
-
# the scanned hooks/ directory, exactly like a skill directory's
|
|
87
|
-
# backup, and reported one line per file. Refuses outright (before touching anything) when run
|
|
88
|
-
# as literal root (EUID 0) against a --home it does not own --
|
|
89
|
-
# bin/reconcile's apply path never does this itself; see
|
|
90
|
-
# lean_ctx_observe_strip_guard_euid in the shared lib.
|
|
91
|
-
|
|
92
|
-
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
93
|
-
|
|
94
|
-
command -v jq >/dev/null 2>&1 || {
|
|
95
|
-
echo "lean-ctx-observe-strip requires jq" >&2
|
|
96
|
-
exit 1
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
# shellcheck source=lib/lean-ctx-observe-hooks.sh
|
|
100
|
-
source "$script_dir/lib/lean-ctx-observe-hooks.sh"
|
|
101
|
-
|
|
102
|
-
usage() {
|
|
103
|
-
echo "usage: lean-ctx-observe-strip --home ABSOLUTE_PATH --mode plan|apply" >&2
|
|
104
|
-
exit 2
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
home=""
|
|
108
|
-
mode=""
|
|
109
|
-
while [[ "$#" -gt 0 ]]; do
|
|
110
|
-
case "$1" in
|
|
111
|
-
--home) home="${2:-}"; shift 2 ;;
|
|
112
|
-
--mode) mode="${2:-}"; shift 2 ;;
|
|
113
|
-
*) usage ;;
|
|
114
|
-
esac
|
|
115
|
-
done
|
|
116
|
-
[[ -n "$home" ]] || usage
|
|
117
|
-
[[ "$mode" == plan || "$mode" == apply ]] || usage
|
|
118
|
-
|
|
119
|
-
# Final review finding 5: refuse before touching anything if this is a
|
|
120
|
-
# literal-root (EUID 0) invocation against a --home it does not own -- see
|
|
121
|
-
# lean_ctx_observe_strip_guard_euid's own header for exactly why this can
|
|
122
|
-
# never fire on bin/reconcile's real apply path (macOS: already dropped to
|
|
123
|
-
# the administrator; Linux: administrator IS root, home IS /root).
|
|
124
|
-
lean_ctx_observe_strip_guard_euid "$EUID" "$home" || exit 1
|
|
125
|
-
|
|
126
|
-
# backup_file_safely <path> <backup> -- creates <backup> (a brand-new path)
|
|
127
|
-
# holding a copy of <path>'s content and mode, WITHOUT ever following a
|
|
128
|
-
# pre-existing file or symlink that happens to already sit at <backup>
|
|
129
|
-
# (final review finding 5: a predictable, timestamp-based backup path
|
|
130
|
-
# could be pre-planted by an attacker with write access to the same
|
|
131
|
-
# directory; a plain `cp -p "$path" "$backup"` FOLLOWS an existing
|
|
132
|
-
# symlink there and overwrites whatever it points at). `set -C`
|
|
133
|
-
# (noclobber) reserves the name atomically first -- verified live, not
|
|
134
|
-
# assumed: refuses to open `>` through both a valid and a dangling
|
|
135
|
-
# pre-existing symlink at that exact path, on this machine's real bash,
|
|
136
|
-
# leaving the symlink's target completely untouched either way -- and only
|
|
137
|
-
# once that empty placeholder is confirmed OURS does `cp -p` fill it in.
|
|
138
|
-
backup_file_safely() {
|
|
139
|
-
local path="$1" backup="$2"
|
|
140
|
-
if ! ( set -C; : > "$backup" ) 2>/dev/null; then
|
|
141
|
-
return 1
|
|
142
|
-
fi
|
|
143
|
-
cp -p "$path" "$backup"
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
# The two per-user JSON hook-map files that can carry a raw
|
|
147
|
-
# `lean-ctx hook <subcommand>` entry -- see bin/lib/lean-ctx-observe-hooks.sh's
|
|
148
|
-
# header for the read-only accounting of every other per-user agent config
|
|
149
|
-
# file this machine has, and why each of those is NOT a target.
|
|
150
|
-
targets=(
|
|
151
|
-
"$home/.claude/settings.json"
|
|
152
|
-
"$home/.codex/hooks.json"
|
|
153
|
-
)
|
|
154
|
-
|
|
155
|
-
# The per-user shell rc/env files `lean-ctx setup` can write any of the
|
|
156
|
-
# three shell-hook marker shapes into (confirmed live: .zshenv and
|
|
157
|
-
# .bashenv both carry shape 2 after a real `lean-ctx setup` run, .zshrc
|
|
158
|
-
# carries shapes 3 and 4; the others are included because the same
|
|
159
|
-
# installer step targets the whole rc/env family).
|
|
160
|
-
shell_hook_targets=(
|
|
161
|
-
"$home/.bashenv"
|
|
162
|
-
"$home/.zshenv"
|
|
163
|
-
"$home/.bashrc"
|
|
164
|
-
"$home/.zshrc"
|
|
165
|
-
"$home/.bash_profile"
|
|
166
|
-
"$home/.zprofile"
|
|
167
|
-
"$home/.profile"
|
|
168
|
-
)
|
|
169
|
-
|
|
170
|
-
# The global lean-ctx SKILL.md directories `lean-ctx setup` can write, one
|
|
171
|
-
# per agent surface it detects (confirmed live for Claude/Codex/OpenCode;
|
|
172
|
-
# Cursor and .agents included for the same reason as above -- the
|
|
173
|
-
# installer targets the whole surface family, not just the ones detected
|
|
174
|
-
# on any one machine).
|
|
175
|
-
skill_dir_targets=(
|
|
176
|
-
"$home/.claude/skills/lean-ctx"
|
|
177
|
-
"$home/.codex/skills/lean-ctx"
|
|
178
|
-
"$home/.cursor/skills/lean-ctx"
|
|
179
|
-
"$home/.config/opencode/skills/lean-ctx"
|
|
180
|
-
"$home/.agents/skills/lean-ctx"
|
|
181
|
-
)
|
|
182
|
-
|
|
183
|
-
strip_one() {
|
|
184
|
-
local path="$1"
|
|
185
|
-
if [[ ! -f "$path" ]]; then
|
|
186
|
-
echo "lean-ctx-observe-strip: $path: not present -- nothing to strip"
|
|
187
|
-
return 0
|
|
188
|
-
fi
|
|
189
|
-
local events
|
|
190
|
-
if ! events="$(lean_ctx_observe_hook_events "$path")"; then
|
|
191
|
-
echo "lean-ctx-observe-strip: $path: FAILED to parse as JSON -- not modified" >&2
|
|
192
|
-
return 1
|
|
193
|
-
fi
|
|
194
|
-
if [[ -z "$events" ]]; then
|
|
195
|
-
echo "lean-ctx-observe-strip: $path: no raw lean-ctx hook entries found"
|
|
196
|
-
return 0
|
|
197
|
-
fi
|
|
198
|
-
echo "lean-ctx-observe-strip: $path: found raw lean-ctx hook entries under: $events"
|
|
199
|
-
if [[ "$mode" != apply ]]; then
|
|
200
|
-
echo "lean-ctx-observe-strip: would strip raw lean-ctx hook entries from $path (events: $events)"
|
|
201
|
-
return 0
|
|
202
|
-
fi
|
|
203
|
-
local backup
|
|
204
|
-
backup="${path}.pre-lean-ctx-observe-strip-$(date -u +%Y%m%dT%H%M%SZ)"
|
|
205
|
-
if ! backup_file_safely "$path" "$backup"; then
|
|
206
|
-
echo "lean-ctx-observe-strip: backup of $path to $backup did not complete -- $path was NOT modified" >&2
|
|
207
|
-
return 1
|
|
208
|
-
fi
|
|
209
|
-
echo "lean-ctx-observe-strip: backed up previous config to $backup"
|
|
210
|
-
local staged
|
|
211
|
-
staged="$(mktemp "$(dirname "$path")/.$(basename "$path").filtered.XXXXXX" 2>/dev/null)" || {
|
|
212
|
-
echo "lean-ctx-observe-strip: $path: FAILED to allocate staging file -- not modified (backup: $backup)" >&2
|
|
213
|
-
return 1
|
|
214
|
-
}
|
|
215
|
-
if ! lean_ctx_observe_hook_filtered "$path" "$staged"; then
|
|
216
|
-
echo "lean-ctx-observe-strip: $path: FAILED to compute filtered content -- not modified (backup: $backup)" >&2
|
|
217
|
-
rm -f "$staged"
|
|
218
|
-
return 1
|
|
219
|
-
fi
|
|
220
|
-
if ! lean_ctx_observe_hook_write "$path" "$staged"; then
|
|
221
|
-
echo "lean-ctx-observe-strip: $path: FAILED to write -- not modified (backup: $backup)" >&2
|
|
222
|
-
rm -f "$staged"
|
|
223
|
-
return 1
|
|
224
|
-
fi
|
|
225
|
-
rm -f "$staged"
|
|
226
|
-
echo "lean-ctx-observe-strip: stripped raw lean-ctx hook entries from $path (backup: $backup)"
|
|
227
|
-
return 0
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
# strip_shell_hook_one <path> -- covers all THREE shell-hook marker shapes
|
|
231
|
-
# bin/lib/lean-ctx-observe-hooks.sh's header documents, via ONE single-pass
|
|
232
|
-
# call to lean_ctx_shell_rc_scan_and_filter: one backup, one write, never
|
|
233
|
-
# one per shape, even for a file (a real `~/.zshrc`) carrying more than
|
|
234
|
-
# one. Malformed input in ANY shape (unclosed, nested, orphaned, or a
|
|
235
|
-
# near-miss marker-phrase mention) aborts before any write, with the
|
|
236
|
-
# backup only ever created once something is confirmed found.
|
|
237
|
-
strip_shell_hook_one() {
|
|
238
|
-
local path="$1"
|
|
239
|
-
if [[ ! -f "$path" ]]; then
|
|
240
|
-
echo "lean-ctx-observe-strip: $path: not present -- nothing to strip"
|
|
241
|
-
return 0
|
|
242
|
-
fi
|
|
243
|
-
|
|
244
|
-
local staged report
|
|
245
|
-
staged="$(mktemp "$(dirname "$path")/.$(basename "$path").filtered.XXXXXX" 2>/dev/null)" || {
|
|
246
|
-
echo "lean-ctx-observe-strip: $path: FAILED to allocate staging file -- not modified" >&2
|
|
247
|
-
return 1
|
|
248
|
-
}
|
|
249
|
-
report="$(mktemp "$(dirname "$path")/.$(basename "$path").report.XXXXXX" 2>/dev/null)" || {
|
|
250
|
-
echo "lean-ctx-observe-strip: $path: FAILED to allocate report file -- not modified" >&2
|
|
251
|
-
rm -f "$staged"
|
|
252
|
-
return 1
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
if ! lean_ctx_shell_rc_scan_and_filter "$path" "$staged" "$report"; then
|
|
256
|
-
echo "lean-ctx-observe-strip: $path: FAILED -- see the malformed-marker message above -- not modified" >&2
|
|
257
|
-
rm -f "$staged" "$report"
|
|
258
|
-
return 1
|
|
259
|
-
fi
|
|
260
|
-
|
|
261
|
-
local found1=absent found2=absent found3=absent line
|
|
262
|
-
while IFS= read -r line; do
|
|
263
|
-
case "$line" in
|
|
264
|
-
1:*) found1="${line#1:}" ;;
|
|
265
|
-
2:*) found2="${line#2:}" ;;
|
|
266
|
-
3:*) found3="${line#3:}" ;;
|
|
267
|
-
esac
|
|
268
|
-
done < "$report"
|
|
269
|
-
rm -f "$report"
|
|
270
|
-
|
|
271
|
-
[[ "$found1" == present ]] && echo "lean-ctx-observe-strip: $path: found lean-ctx shell hook marker block" \
|
|
272
|
-
|| echo "lean-ctx-observe-strip: $path: no lean-ctx shell hook marker found"
|
|
273
|
-
[[ "$found2" == present ]] && echo "lean-ctx-observe-strip: $path: found lean-ctx shell hook marker block (zshrc begin/end form)" \
|
|
274
|
-
|| echo "lean-ctx-observe-strip: $path: no lean-ctx shell hook marker (zshrc begin/end form) found"
|
|
275
|
-
[[ "$found3" == present ]] && echo "lean-ctx-observe-strip: $path: found lean-ctx agent aliases marker block" \
|
|
276
|
-
|| echo "lean-ctx-observe-strip: $path: no lean-ctx agent aliases marker found"
|
|
277
|
-
|
|
278
|
-
if [[ "$found1" != present && "$found2" != present && "$found3" != present ]]; then
|
|
279
|
-
rm -f "$staged"
|
|
280
|
-
return 0
|
|
281
|
-
fi
|
|
282
|
-
|
|
283
|
-
if [[ "$mode" != apply ]]; then
|
|
284
|
-
[[ "$found1" == present ]] && echo "lean-ctx-observe-strip: would strip lean-ctx shell hook marker block from $path"
|
|
285
|
-
[[ "$found2" == present ]] && echo "lean-ctx-observe-strip: would strip lean-ctx shell hook marker block (zshrc begin/end form) from $path"
|
|
286
|
-
[[ "$found3" == present ]] && echo "lean-ctx-observe-strip: would strip lean-ctx agent aliases marker block from $path"
|
|
287
|
-
rm -f "$staged"
|
|
288
|
-
return 0
|
|
289
|
-
fi
|
|
290
|
-
|
|
291
|
-
local backup
|
|
292
|
-
backup="${path}.pre-lean-ctx-observe-strip-$(date -u +%Y%m%dT%H%M%SZ)"
|
|
293
|
-
if ! backup_file_safely "$path" "$backup"; then
|
|
294
|
-
echo "lean-ctx-observe-strip: backup of $path to $backup did not complete -- $path was NOT modified" >&2
|
|
295
|
-
rm -f "$staged"
|
|
296
|
-
return 1
|
|
297
|
-
fi
|
|
298
|
-
echo "lean-ctx-observe-strip: backed up previous config to $backup"
|
|
299
|
-
|
|
300
|
-
if ! lean_ctx_observe_hook_write "$path" "$staged"; then
|
|
301
|
-
echo "lean-ctx-observe-strip: $path: FAILED to write -- not modified (backup: $backup)" >&2
|
|
302
|
-
rm -f "$staged"
|
|
303
|
-
return 1
|
|
304
|
-
fi
|
|
305
|
-
rm -f "$staged"
|
|
306
|
-
|
|
307
|
-
[[ "$found1" == present ]] && echo "lean-ctx-observe-strip: stripped lean-ctx shell hook marker block from $path (backup: $backup)"
|
|
308
|
-
[[ "$found2" == present ]] && echo "lean-ctx-observe-strip: stripped lean-ctx shell hook marker block (zshrc begin/end form) from $path (backup: $backup)"
|
|
309
|
-
[[ "$found3" == present ]] && echo "lean-ctx-observe-strip: stripped lean-ctx agent aliases marker block from $path (backup: $backup)"
|
|
310
|
-
return 0
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
# strip_skill_dir_one <dir> -- final review finding 1 (HIGH): the backup
|
|
314
|
-
# location is a SIBLING of the scanned `skills/` directory
|
|
315
|
-
# (`<surface>/skills.pre-lean-ctx-observe-strip-<ts>/<leaf>`), never a path
|
|
316
|
-
# INSIDE it. The previous shape (`skills/<leaf>.pre-...-<ts>`) left the
|
|
317
|
-
# moved directory's own SKILL.md -- frontmatter `name: lean-ctx` and all --
|
|
318
|
-
# still sitting directly under `skills/`, where any surface that globs
|
|
319
|
-
# `skills/*/SKILL.md` by frontmatter name would load it right back up as a
|
|
320
|
-
# live skill; the whole point of "moved, never deleted" was to make it
|
|
321
|
-
# INERT, not just renamed. Reported via its own explicit two-path "backed
|
|
322
|
-
# up previous skill directory <original> to <backup>" note (distinct from
|
|
323
|
-
# the single-path "backed up previous config to <path>" the JSON/shell-hook
|
|
324
|
-
# carriers use) because the new backup path no longer ends in
|
|
325
|
-
# `.pre-<label>-<timestamp>` -- bin/reconcile's suffix-stripping
|
|
326
|
-
# strip_backup_suffix can't recover the original from it, so the original
|
|
327
|
-
# is stated directly instead; see bin/reconcile's
|
|
328
|
-
# collect_lean_ctx_observe_strip_backups.
|
|
329
|
-
strip_skill_dir_one() {
|
|
330
|
-
local dir="$1"
|
|
331
|
-
if [[ ! -e "$dir" ]]; then
|
|
332
|
-
echo "lean-ctx-observe-strip: $dir: not present -- nothing to strip"
|
|
333
|
-
return 0
|
|
334
|
-
fi
|
|
335
|
-
local skill_md="$dir/SKILL.md"
|
|
336
|
-
if [[ ! -f "$skill_md" ]]; then
|
|
337
|
-
echo "lean-ctx-observe-strip: $dir: present but has no SKILL.md -- left alone"
|
|
338
|
-
return 0
|
|
339
|
-
fi
|
|
340
|
-
local name
|
|
341
|
-
name="$(lean_ctx_skill_frontmatter_name "$skill_md")"
|
|
342
|
-
if [[ "$name" != "$LEAN_CTX_SKILL_FRONTMATTER_NAME" ]]; then
|
|
343
|
-
echo "lean-ctx-observe-strip: $dir: SKILL.md frontmatter name is '${name:-<none>}', not lean-ctx -- left alone"
|
|
344
|
-
return 0
|
|
345
|
-
fi
|
|
346
|
-
echo "lean-ctx-observe-strip: $dir: found lean-ctx skill directory (SKILL.md name: lean-ctx)"
|
|
347
|
-
if [[ "$mode" != apply ]]; then
|
|
348
|
-
echo "lean-ctx-observe-strip: would move $dir to a timestamped backup location outside the scanned skills/ directory"
|
|
349
|
-
return 0
|
|
350
|
-
fi
|
|
351
|
-
local skills_dir leaf backup_root backup
|
|
352
|
-
skills_dir="$(dirname "$dir")"
|
|
353
|
-
leaf="$(basename "$dir")"
|
|
354
|
-
backup_root="${skills_dir}.pre-lean-ctx-observe-strip-$(date -u +%Y%m%dT%H%M%SZ)"
|
|
355
|
-
backup="$backup_root/$leaf"
|
|
356
|
-
if ! mkdir "$backup_root" 2>/dev/null; then
|
|
357
|
-
echo "lean-ctx-observe-strip: $dir: FAILED to create backup location $backup_root -- not modified" >&2
|
|
358
|
-
return 1
|
|
359
|
-
fi
|
|
360
|
-
if ! mv "$dir" "$backup"; then
|
|
361
|
-
echo "lean-ctx-observe-strip: $dir: FAILED to move to $backup -- not modified" >&2
|
|
362
|
-
return 1
|
|
363
|
-
fi
|
|
364
|
-
echo "lean-ctx-observe-strip: backed up previous skill directory $dir to $backup"
|
|
365
|
-
echo "lean-ctx-observe-strip: moved lean-ctx skill directory $dir to $backup"
|
|
366
|
-
return 0
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
# strip_hook_scripts_one <hooks-dir> -- shape 6 (see the header): moves every
|
|
370
|
-
# entry named `lean-ctx-*` directly under <hooks-dir> into a sibling
|
|
371
|
-
# `<hooks-dir>.pre-lean-ctx-observe-strip-<UTC ts>/` directory (OUTSIDE the
|
|
372
|
-
# scanned hooks/ directory, same reasoning as strip_skill_dir_one), so
|
|
373
|
-
# lean-ctx's refresh gate (`hooks/lean-ctx-rewrite.sh` exists) is disarmed.
|
|
374
|
-
# Matches by name prefix only, never by content; a symlink named
|
|
375
|
-
# `lean-ctx-*` is moved as the link itself (mv never follows it). Nothing
|
|
376
|
-
# else in <hooks-dir> is read or touched. Each file is reported as
|
|
377
|
-
# "backed up previous hook script <original> to <backup>" (two explicit
|
|
378
|
-
# paths, like the skill-directory note -- the backup path does not end in
|
|
379
|
-
# `.pre-<label>-<timestamp>`, so bin/reconcile cannot recover the original
|
|
380
|
-
# by suffix-stripping).
|
|
381
|
-
strip_hook_scripts_one() {
|
|
382
|
-
local hooks_dir="$1" entry
|
|
383
|
-
local found=()
|
|
384
|
-
if [[ -d "$hooks_dir" ]]; then
|
|
385
|
-
for entry in "$hooks_dir"/lean-ctx-*; do
|
|
386
|
-
if [[ -e "$entry" || -L "$entry" ]]; then
|
|
387
|
-
found+=("$entry")
|
|
388
|
-
fi
|
|
389
|
-
done
|
|
390
|
-
fi
|
|
391
|
-
if [[ "${#found[@]}" -eq 0 ]]; then
|
|
392
|
-
echo "lean-ctx-observe-strip: $hooks_dir/lean-ctx-*: not present -- nothing to strip"
|
|
393
|
-
return 0
|
|
394
|
-
fi
|
|
395
|
-
for entry in "${found[@]}"; do
|
|
396
|
-
echo "lean-ctx-observe-strip: $entry: found lean-ctx hook script"
|
|
397
|
-
if [[ "$mode" != apply ]]; then
|
|
398
|
-
echo "lean-ctx-observe-strip: would move $entry to a timestamped backup location outside $hooks_dir"
|
|
399
|
-
fi
|
|
400
|
-
done
|
|
401
|
-
[[ "$mode" == apply ]] || return 0
|
|
402
|
-
|
|
403
|
-
local backup_root
|
|
404
|
-
backup_root="${hooks_dir}.pre-lean-ctx-observe-strip-$(date -u +%Y%m%dT%H%M%SZ)"
|
|
405
|
-
if ! mkdir "$backup_root" 2>/dev/null; then
|
|
406
|
-
echo "lean-ctx-observe-strip: $hooks_dir: FAILED to create backup location $backup_root -- not modified" >&2
|
|
407
|
-
return 1
|
|
408
|
-
fi
|
|
409
|
-
local backup rc=0
|
|
410
|
-
for entry in "${found[@]}"; do
|
|
411
|
-
backup="$backup_root/$(basename "$entry")"
|
|
412
|
-
if ! mv "$entry" "$backup"; then
|
|
413
|
-
echo "lean-ctx-observe-strip: $entry: FAILED to move to $backup -- not modified" >&2
|
|
414
|
-
rc=1
|
|
415
|
-
continue
|
|
416
|
-
fi
|
|
417
|
-
echo "lean-ctx-observe-strip: backed up previous hook script $entry to $backup"
|
|
418
|
-
echo "lean-ctx-observe-strip: moved lean-ctx hook script $entry to $backup"
|
|
419
|
-
done
|
|
420
|
-
return "$rc"
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
status=0
|
|
424
|
-
for target in "${targets[@]}"; do
|
|
425
|
-
strip_one "$target" || status=1
|
|
426
|
-
done
|
|
427
|
-
for target in "${shell_hook_targets[@]}"; do
|
|
428
|
-
strip_shell_hook_one "$target" || status=1
|
|
429
|
-
done
|
|
430
|
-
for target in "${skill_dir_targets[@]}"; do
|
|
431
|
-
strip_skill_dir_one "$target" || status=1
|
|
432
|
-
done
|
|
433
|
-
strip_hook_scripts_one "$home/.claude/hooks" || status=1
|
|
434
|
-
exit "$status"
|