peaks-loop 4.0.0-beta.9 → 4.0.3
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/CHANGELOG.md +572 -234
- package/README-en.md +67 -30
- package/README.md +67 -30
- package/agents/karpathy-reviewer.md +33 -0
- package/bin/peaks.js +0 -0
- package/dist/cli/cli-helpers.d.ts +31 -6
- package/dist/cli/cli-helpers.js +48 -25
- package/dist/cli/commands/_register.d.ts +3 -0
- package/dist/cli/commands/_register.js +139 -0
- package/dist/cli/commands/_super.d.ts +10 -0
- package/dist/cli/commands/_super.js +97 -0
- package/dist/cli/commands/adapter-commands-s2a.js +1 -1
- package/dist/cli/commands/asset-commands.js +33 -16
- package/dist/cli/commands/audit-commands.js +2 -2
- package/dist/cli/commands/autonomous-swarm-commands.d.ts +12 -0
- package/dist/cli/commands/autonomous-swarm-commands.js +120 -0
- package/dist/cli/commands/bee-commands.js +1 -1
- package/dist/cli/commands/capability-commands.js +1 -1
- package/dist/cli/commands/capability-worker-config-sc-commands.js +0 -2
- package/dist/cli/commands/changeset-commands.d.ts +13 -0
- package/dist/cli/commands/changeset-commands.js +46 -0
- package/dist/cli/commands/code-commands.d.ts +11 -1
- package/dist/cli/commands/code-commands.js +19 -699
- package/dist/cli/commands/code-job-shape-commands.d.ts +9 -0
- package/dist/cli/commands/code-job-shape-commands.js +164 -0
- package/dist/cli/commands/code-mode-gate-commands.d.ts +9 -0
- package/dist/cli/commands/code-mode-gate-commands.js +223 -0
- package/dist/cli/commands/code-review-commands.js +2 -2
- package/dist/cli/commands/code-run-command.d.ts +12 -0
- package/dist/cli/commands/code-run-command.js +68 -0
- package/dist/cli/commands/code-runtime-commands.d.ts +11 -0
- package/dist/cli/commands/code-runtime-commands.js +391 -0
- package/dist/cli/commands/codegraph-commands.js +1 -1
- package/dist/cli/commands/compact-command.js +53 -1
- package/dist/cli/commands/complexity-commands.js +1 -1
- package/dist/cli/commands/config-commands.js +4 -75
- package/dist/cli/commands/container-commands.d.ts +28 -0
- package/dist/cli/commands/container-commands.js +221 -0
- package/dist/cli/commands/context-commands.js +3 -2
- package/dist/cli/commands/core/artifacts-command.js +1 -1
- package/dist/cli/commands/core/binding-commands.js +1 -1
- package/dist/cli/commands/core/doctor-command.js +63 -3
- package/dist/cli/commands/core/memory-command.js +1 -1
- package/dist/cli/commands/core/profile-command.js +1 -1
- package/dist/cli/commands/core/proxy-command.js +1 -1
- package/dist/cli/commands/core/session-command.js +9 -7
- package/dist/cli/commands/core/skill-command.js +7 -4
- package/dist/cli/commands/core/standards-command.js +1 -1
- package/dist/cli/commands/cron-commands.d.ts +57 -0
- package/dist/cli/commands/cron-commands.js +257 -0
- package/dist/cli/commands/cron-scheduler-commands.d.ts +47 -0
- package/dist/cli/commands/cron-scheduler-commands.js +284 -0
- package/dist/cli/commands/dashboard-commands.d.ts +4 -0
- package/dist/cli/commands/dashboard-commands.js +10 -0
- package/dist/cli/commands/dashboard-long-run.d.ts +25 -0
- package/dist/cli/commands/dashboard-long-run.js +122 -0
- package/dist/cli/commands/dashboard-summary.d.ts +12 -0
- package/dist/cli/commands/dashboard-summary.js +58 -0
- package/dist/cli/commands/dispatch-commands.d.ts +0 -7
- package/dist/cli/commands/dispatch-commands.js +372 -8
- package/dist/cli/commands/dispatch-from-dag.js +4 -1
- package/dist/cli/commands/doc-commands.js +1 -1
- package/dist/cli/commands/ecc-commands.d.ts +30 -0
- package/dist/cli/commands/ecc-commands.js +119 -0
- package/dist/cli/commands/evolution-commands.js +1 -1
- package/dist/cli/commands/feedback-commands.js +1 -1
- package/dist/cli/commands/final-review-commands.js +1 -1
- package/dist/cli/commands/fixture-commands.js +1 -1
- package/dist/cli/commands/fork-commands.js +1 -1
- package/dist/cli/commands/gate-commands.js +128 -6
- package/dist/cli/commands/governance-classify-contract-commands.d.ts +21 -0
- package/dist/cli/commands/governance-classify-contract-commands.js +273 -0
- package/dist/cli/commands/heartbeat-commands.js +76 -5
- package/dist/cli/commands/heartbeat-watch-command.d.ts +31 -0
- package/dist/cli/commands/heartbeat-watch-command.js +146 -0
- package/dist/cli/commands/hook-handle.js +1 -1
- package/dist/cli/commands/hooks-commands.js +126 -10
- package/dist/cli/commands/ide-commands.js +1 -1
- package/dist/cli/commands/impact-commands.js +1 -1
- package/dist/cli/commands/job-commands.js +34 -1
- package/dist/cli/commands/lease-metrics-commands.d.ts +67 -0
- package/dist/cli/commands/lease-metrics-commands.js +231 -0
- package/dist/cli/commands/lease-stats-commands.d.ts +65 -0
- package/dist/cli/commands/lease-stats-commands.js +107 -0
- package/dist/cli/commands/legacy-commands.js +1 -1
- package/dist/cli/commands/log-commands.js +1 -1
- package/dist/cli/commands/loop-commands.js +1 -1
- package/dist/cli/commands/loop-eval-commands.js +1 -1
- package/dist/cli/commands/memory-commands.js +1 -1
- package/dist/cli/commands/migrate-1-4-1-command.js +1 -1
- package/dist/cli/commands/migrate-v2-10-to-v2-11-command.js +1 -1
- package/dist/cli/commands/mut-commands.d.ts +1 -1
- package/dist/cli/commands/mut-commands.js +1 -5
- package/dist/cli/commands/observability-commands.js +1 -1
- package/dist/cli/commands/openspec-commands.js +65 -4
- package/dist/cli/commands/perf-audit-commands.js +3 -3
- package/dist/cli/commands/perf-commands.js +1 -1
- package/dist/cli/commands/polyrepo-commands.js +1 -1
- package/dist/cli/commands/prd-blocks-commands.js +1 -1
- package/dist/cli/commands/prd-commands.js +4 -2
- package/dist/cli/commands/preferences-commands.js +23 -3
- package/dist/cli/commands/project-commands.js +1 -1
- package/dist/cli/commands/qa-business-review-commands.js +1 -1
- package/dist/cli/commands/qa-commands.d.ts +1 -1
- package/dist/cli/commands/qa-commands.js +39 -3
- package/dist/cli/commands/release-commands.d.ts +15 -0
- package/dist/cli/commands/release-commands.js +113 -21
- package/dist/cli/commands/request-commands.js +1 -1
- package/dist/cli/commands/retrospective-commands.js +1 -1
- package/dist/cli/commands/reviewer-commands.js +1 -1
- package/dist/cli/commands/role-commands.js +1 -1
- package/dist/cli/commands/runtime-commands-helpers.d.ts +7 -0
- package/dist/cli/commands/runtime-commands-helpers.js +24 -0
- package/dist/cli/commands/runtime-commands.js +1 -2
- package/dist/cli/commands/sc-commands.js +4 -2
- package/dist/cli/commands/scan-commands.js +1 -1
- package/dist/cli/commands/security-audit-commands.js +3 -3
- package/dist/cli/commands/sediment-commands.js +10 -1
- package/dist/cli/commands/session-24h-mode.d.ts +26 -0
- package/dist/cli/commands/session-24h-mode.js +196 -0
- package/dist/cli/commands/share-commands.d.ts +19 -0
- package/dist/cli/commands/share-commands.js +121 -2
- package/dist/cli/commands/skill-conformance-commands.js +1 -1
- package/dist/cli/commands/skill-loop-engineering-readiness-commands.js +1 -1
- package/dist/cli/commands/skill-search-commands.js +4 -1
- package/dist/cli/commands/slice-commands.js +1 -1
- package/dist/cli/commands/slice-integrate-commands.js +1 -1
- package/dist/cli/commands/slice-review-commands.js +1 -1
- package/dist/cli/commands/smoke-commands.js +1 -1
- package/dist/cli/commands/sop-commands.js +1 -1
- package/dist/cli/commands/spill-demo-command.d.ts +7 -0
- package/dist/cli/commands/spill-demo-command.js +29 -0
- package/dist/cli/commands/statusline-commands.d.ts +12 -0
- package/dist/cli/commands/statusline-commands.js +79 -17
- package/dist/cli/commands/sub-agent-commands.js +2 -1
- package/dist/cli/commands/sub-agent-shared.d.ts +10 -0
- package/dist/cli/commands/sub-agent-shared.js +24 -1
- package/dist/cli/commands/swarm-commands.d.ts +13 -0
- package/dist/cli/commands/swarm-commands.js +77 -0
- package/dist/cli/commands/tech-commands.d.ts +64 -0
- package/dist/cli/commands/tech-commands.js +195 -0
- package/dist/cli/commands/understand-commands.js +1 -1
- package/dist/cli/commands/upgrade-commands.d.ts +2 -0
- package/dist/cli/commands/upgrade-commands.js +40 -5
- package/dist/cli/commands/user-touchpoint-commands.js +1 -1
- package/dist/cli/commands/verdict-aggregate-command.js +1 -1
- package/dist/cli/commands/vm-commands.d.ts +31 -0
- package/dist/cli/commands/vm-commands.js +274 -0
- package/dist/cli/commands/workflow-commands.js +24 -1
- package/dist/cli/commands/workflow-plan-commands.js +1 -1
- package/dist/cli/commands/workspace/init-command.js +1 -1
- package/dist/cli/commands/workspace/migrate-command.js +1 -1
- package/dist/cli/commands/workspace/reconcile-command.js +1 -1
- package/dist/cli/commands/worktree-auth-commands.d.ts +29 -0
- package/dist/cli/commands/worktree-auth-commands.js +652 -0
- package/dist/cli/index.js +58 -13
- package/dist/cli/program.d.ts +2 -2
- package/dist/cli/program.js +86 -281
- package/dist/services/24h-mode/decider.d.ts +103 -0
- package/dist/services/24h-mode/decider.js +144 -0
- package/dist/services/24h-mode/index.d.ts +12 -0
- package/dist/services/24h-mode/index.js +12 -0
- package/dist/services/24h-mode/state.d.ts +48 -0
- package/dist/services/24h-mode/state.js +51 -0
- package/dist/services/24h-mode/store.d.ts +27 -0
- package/dist/services/24h-mode/store.js +119 -0
- package/dist/services/artifacts/artifact-prerequisites.js +1 -1
- package/dist/services/artifacts/request-artifact-service.js +1 -1
- package/dist/services/artifacts/workspace-service.js +1 -1
- package/dist/services/audit/enforcers/lint-bee-runtime-contract.d.ts +25 -0
- package/dist/services/audit/enforcers/lint-bee-runtime-contract.js +91 -0
- package/dist/services/audit/enforcers/lint-peaks-code-runtime.d.ts +16 -0
- package/dist/services/audit/enforcers/lint-peaks-code-runtime.js +31 -0
- package/dist/services/audit/enforcers/lint-peaks-skill-runtime.d.ts +23 -0
- package/dist/services/audit/enforcers/lint-peaks-skill-runtime.js +59 -0
- package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.d.ts +28 -0
- package/dist/services/audit/enforcers/lint-peaks-ui-sc-txt-runtime.js +86 -0
- package/dist/services/audit/enforcers/lint-prd-artifact-handoff.d.ts +16 -0
- package/dist/services/audit/enforcers/lint-prd-artifact-handoff.js +41 -0
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.d.ts +27 -0
- package/dist/services/audit/enforcers/lint-prd-source-snapshot.js +47 -0
- package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.d.ts +19 -0
- package/dist/services/audit/enforcers/lint-qa-gateguard-and-runtime.js +47 -0
- package/dist/services/audit/enforcers/lint-rd-handoff-coverage.d.ts +18 -0
- package/dist/services/audit/enforcers/lint-rd-handoff-coverage.js +70 -0
- package/dist/services/audit/enforcers/lint-skill-presence-mandatory.d.ts +25 -0
- package/dist/services/audit/enforcers/lint-skill-presence-mandatory.js +53 -0
- package/dist/services/audit/red-line-catalog-p2-a.d.ts +0 -6
- package/dist/services/audit/red-line-catalog-p2-a.js +230 -1
- package/dist/services/audit/static-service.d.ts +32 -25
- package/dist/services/audit/static-service.js +30 -109
- package/dist/services/audit-independent/index.d.ts +2 -0
- package/dist/services/audit-independent/index.js +2 -0
- package/dist/services/autonomous-swarm/autonomous-swarm-service.d.ts +127 -0
- package/dist/services/autonomous-swarm/autonomous-swarm-service.js +446 -0
- package/dist/services/changeset/changeset-check-service.d.ts +22 -0
- package/dist/services/changeset/changeset-check-service.js +47 -0
- package/dist/services/code/auto-compact-modes.d.ts +30 -0
- package/dist/services/code/auto-compact-modes.js +38 -0
- package/dist/services/code/auto-compact-orchestrator.d.ts +43 -5
- package/dist/services/code/auto-compact-orchestrator.js +101 -21
- package/dist/services/code/dag-orchestrator.d.ts +30 -1
- package/dist/services/code/dag-orchestrator.js +106 -1
- package/dist/services/code/status-line-renderer.d.ts +2 -0
- package/dist/services/code/status-line-renderer.js +21 -3
- package/dist/services/code-review/ocr-service.d.ts +1 -1
- package/dist/services/code-review/ocr-service.js +6 -3
- package/dist/services/compact-history/compact-history-service.d.ts +41 -0
- package/dist/services/compact-history/compact-history-service.js +62 -0
- package/dist/services/compact-statusline/compact-statusline-service.d.ts +16 -0
- package/dist/services/compact-statusline/compact-statusline-service.js +83 -0
- package/dist/services/config/config-service.d.ts +1 -12
- package/dist/services/config/config-service.js +3 -72
- package/dist/services/config/config-types.d.ts +2 -4
- package/dist/services/config/config-types.js +1 -1
- package/dist/services/container/container-lease.d.ts +67 -0
- package/dist/services/container/container-lease.js +135 -0
- package/dist/services/context/auto-compact-dispatcher.d.ts +40 -5
- package/dist/services/context/auto-compact-dispatcher.js +32 -102
- package/dist/services/context/auto-compact-reader.js +1 -1
- package/dist/services/context/auto-compact-types.d.ts +27 -2
- package/dist/services/context/auto-compact-types.js +8 -1
- package/dist/services/context/build-dispatch-system-prompt.d.ts +75 -0
- package/dist/services/context/build-dispatch-system-prompt.js +117 -0
- package/dist/services/context/collector.d.ts +2 -2
- package/dist/services/context/context-builder.d.ts +4 -4
- package/dist/services/context/context-schema.d.ts +48 -48
- package/dist/services/context/ide-detect.d.ts +4 -0
- package/dist/services/context/ide-detect.js +24 -0
- package/dist/services/context/main-session-monitor.d.ts +1 -4
- package/dist/services/context/main-session-monitor.js +1 -24
- package/dist/services/context/memory-index-reader.d.ts +8 -0
- package/dist/services/context/memory-index-reader.js +57 -0
- package/dist/services/context/memory-lru-cache.d.ts +12 -0
- package/dist/services/context/memory-lru-cache.js +60 -0
- package/dist/services/context/memory-preflight-config.d.ts +19 -0
- package/dist/services/context/memory-preflight-config.js +25 -0
- package/dist/services/context/memory-preflight-service.d.ts +19 -0
- package/dist/services/context/memory-preflight-service.js +120 -0
- package/dist/services/context/spillover-store.d.ts +23 -0
- package/dist/services/context/spillover-store.js +155 -0
- package/dist/services/context/spillover-types.d.ts +18 -0
- package/dist/services/context/spillover-types.js +1 -0
- package/dist/services/crystallization/crystallization-service.d.ts +22 -5
- package/dist/services/crystallization/crystallization-service.js +8 -14
- package/dist/services/crystallization/crystallization-types.d.ts +6 -6
- package/dist/services/crystallization/evidence-brief-builder.d.ts +1 -1
- package/dist/services/crystallization/index.d.ts +13 -0
- package/dist/services/crystallization/index.js +13 -0
- package/dist/services/dashboard/project-dashboard-service.js +2 -2
- package/dist/services/dispatch/await-batch.d.ts +70 -0
- package/dist/services/dispatch/await-batch.js +272 -0
- package/dist/services/dispatch/batch-counter.js +1 -1
- package/dist/services/dispatch/dispatch-record-writer.d.ts +126 -4
- package/dist/services/dispatch/dispatch-record-writer.js +239 -9
- package/dist/services/dispatch/slice-dag.d.ts +46 -0
- package/dist/services/dispatch/slice-dag.js +6 -0
- package/dist/services/dispatch/stage-enum.d.ts +27 -0
- package/dist/services/dispatch/stage-enum.js +48 -0
- package/dist/services/dispatch/startup-timeout.d.ts +86 -0
- package/dist/services/dispatch/startup-timeout.js +97 -0
- package/dist/services/dispatch/sub-agent-dispatcher.js +40 -89
- package/dist/services/dispatch/test-tool-detection.d.ts +25 -1
- package/dist/services/dispatch/test-tool-detection.js +80 -0
- package/dist/services/doctor/doctor-service/checks/check-id-schema.d.ts +18 -0
- package/dist/services/doctor/doctor-service/checks/check-id-schema.js +64 -0
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.d.ts +14 -0
- package/dist/services/doctor/doctor-service/checks/codegraph-capability.js +69 -0
- package/dist/services/doctor/doctor-service/checks/dist-source-version.d.ts +32 -0
- package/dist/services/doctor/doctor-service/checks/dist-source-version.js +110 -0
- package/dist/services/doctor/doctor-service/checks/gateguard-conflict.d.ts +24 -0
- package/dist/services/doctor/doctor-service/checks/gateguard-conflict.js +164 -0
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.d.ts +16 -0
- package/dist/services/doctor/doctor-service/checks/l3-memory-health.js +57 -0
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.d.ts +19 -0
- package/dist/services/doctor/doctor-service/checks/l3-orphan-sessions.js +66 -0
- package/dist/services/doctor/doctor-service/checks/schema-validity.d.ts +10 -0
- package/dist/services/doctor/doctor-service/checks/schema-validity.js +33 -0
- package/dist/services/doctor/doctor-service/checks/skill-apply-note.d.ts +20 -0
- package/dist/services/doctor/doctor-service/checks/skill-apply-note.js +85 -0
- package/dist/services/doctor/doctor-service/checks/skill-existence.d.ts +13 -0
- package/dist/services/doctor/doctor-service/checks/skill-existence.js +30 -0
- package/dist/services/doctor/doctor-service/checks/skill-name-match.d.ts +10 -0
- package/dist/services/doctor/doctor-service/checks/skill-name-match.js +25 -0
- package/dist/services/doctor/doctor-service/checks/skill-parse.d.ts +10 -0
- package/dist/services/doctor/doctor-service/checks/skill-parse.js +19 -0
- package/dist/services/doctor/doctor-service/checks/skill-presence.d.ts +21 -0
- package/dist/services/doctor/doctor-service/checks/skill-presence.js +75 -0
- package/dist/services/doctor/doctor-service/checks/skill-runbook.d.ts +14 -0
- package/dist/services/doctor/doctor-service/checks/skill-runbook.js +47 -0
- package/dist/services/doctor/doctor-service/checks/statusline-install.d.ts +14 -0
- package/dist/services/doctor/doctor-service/checks/statusline-install.js +32 -0
- package/dist/services/doctor/doctor-service/checks/statusline-runtime.d.ts +13 -0
- package/dist/services/doctor/doctor-service/checks/statusline-runtime.js +30 -0
- package/dist/services/doctor/doctor-service/checks/user-config.d.ts +11 -0
- package/dist/services/doctor/doctor-service/checks/user-config.js +27 -0
- package/dist/services/doctor/doctor-service/checks/workspace-init.d.ts +16 -0
- package/dist/services/doctor/doctor-service/checks/workspace-init.js +34 -0
- package/dist/services/doctor/doctor-service/checks/workspace-layout.d.ts +33 -0
- package/dist/services/doctor/doctor-service/checks/workspace-layout.js +180 -0
- package/dist/services/doctor/doctor-service/index.d.ts +48 -0
- package/dist/services/doctor/doctor-service/index.js +254 -0
- package/dist/services/doctor/doctor-service/plugin-registry.d.ts +41 -0
- package/dist/services/doctor/doctor-service/plugin-registry.js +77 -0
- package/dist/services/doctor/doctor-service/report/final-summary.d.ts +20 -0
- package/dist/services/doctor/doctor-service/report/final-summary.js +29 -0
- package/dist/services/doctor/doctor-service/types.d.ts +245 -0
- package/dist/services/doctor/doctor-service/types.js +15 -0
- package/dist/services/doctor/doctor-service.d.ts +15 -146
- package/dist/services/doctor/doctor-service.js +22 -926
- package/dist/services/doctor/index.d.ts +22 -0
- package/dist/services/doctor/index.js +22 -0
- package/dist/services/env/shell-probe.d.ts +71 -0
- package/dist/services/env/shell-probe.js +161 -0
- package/dist/services/evolution/evolution-types.d.ts +39 -39
- package/dist/services/final-review/final-review-service.d.ts +11 -1
- package/dist/services/final-review/index.d.ts +2 -0
- package/dist/services/final-review/index.js +1 -0
- package/dist/services/hooks/auto-compact-hook-install.d.ts +4 -5
- package/dist/services/hooks/auto-compact-hook-install.js +4 -5
- package/dist/services/hooks/worktree-authorization-gate.d.ts +205 -0
- package/dist/services/hooks/worktree-authorization-gate.js +492 -0
- package/dist/services/ide/adapters/claude-code-adapter.js +2 -2
- package/dist/services/ide/adapters/qoder-adapter.d.ts +25 -0
- package/dist/services/ide/adapters/qoder-adapter.js +57 -0
- package/dist/services/ide/adapters/tongyi-lingma-adapter.d.ts +16 -0
- package/dist/services/ide/adapters/tongyi-lingma-adapter.js +45 -0
- package/dist/services/ide/ide-registry.js +6 -0
- package/dist/services/ide/ide-types.d.ts +1 -1
- package/dist/services/job/job-types.d.ts +56 -56
- package/dist/services/job-snapshot/index.d.ts +8 -0
- package/dist/services/job-snapshot/index.js +7 -0
- package/dist/services/{job/job-resource-snapshot.d.ts → job-snapshot/snapshot.d.ts} +1 -1
- package/dist/services/job-snapshot/types.d.ts +7 -0
- package/dist/services/job-snapshot/types.js +1 -0
- package/dist/services/karpathy-cost/karpathy-cost-check-service.d.ts +67 -0
- package/dist/services/karpathy-cost/karpathy-cost-check-service.js +108 -0
- package/dist/services/log/retention.d.ts +16 -0
- package/dist/services/log/retention.js +17 -0
- package/dist/services/loop/loop-bee-relation-types.d.ts +6 -6
- package/dist/services/loop/loop-release-types.d.ts +24 -24
- package/dist/services/loop/monotonic-runner.d.ts +17 -11
- package/dist/services/loop/monotonic-runner.js +118 -79
- package/dist/services/memory/project-memory-service/index/kind-dispatch.d.ts +8 -0
- package/dist/services/memory/project-memory-service/index/kind-dispatch.js +253 -0
- package/dist/services/memory/project-memory-service/index/ranking.d.ts +6 -0
- package/dist/services/memory/project-memory-service/index/ranking.js +171 -0
- package/dist/services/memory/project-memory-service/index/search.d.ts +34 -0
- package/dist/services/memory/project-memory-service/index/search.js +194 -0
- package/dist/services/memory/project-memory-service/index.d.ts +9 -0
- package/dist/services/memory/project-memory-service/index.js +24 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter.d.ts +9 -0
- package/dist/services/memory/project-memory-service/parsers/frontmatter.js +106 -0
- package/dist/services/memory/project-memory-service/parsers/markdown-pure.d.ts +7 -0
- package/dist/services/memory/project-memory-service/parsers/markdown-pure.js +96 -0
- package/dist/services/memory/project-memory-service/store/atomic-write.d.ts +5 -0
- package/dist/services/memory/project-memory-service/store/atomic-write.js +56 -0
- package/dist/services/memory/project-memory-service/store/paths.d.ts +8 -0
- package/dist/services/memory/project-memory-service/store/paths.js +116 -0
- package/dist/services/memory/project-memory-service/types.d.ts +128 -0
- package/dist/services/memory/project-memory-service/types.js +9 -0
- package/dist/services/memory/project-memory-service.d.ts +1 -167
- package/dist/services/memory/project-memory-service.js +19 -816
- package/dist/services/migrate-skill-name/schema.d.ts +2 -2
- package/dist/services/observability/aggregation.d.ts +27 -0
- package/dist/services/observability/aggregation.js +72 -0
- package/dist/services/observability/observability-service.d.ts +73 -7
- package/dist/services/observability/observability-service.js +87 -1
- package/dist/services/openspec/artifact-boundary.d.ts +138 -0
- package/dist/services/openspec/artifact-boundary.js +150 -0
- package/dist/services/openspec/coverage-evidence-reader.d.ts +191 -0
- package/dist/services/openspec/coverage-evidence-reader.js +386 -0
- package/dist/services/openspec/openspec-archive-service.d.ts +70 -0
- package/dist/services/openspec/openspec-archive-service.js +320 -8
- package/dist/services/openspec/openspec-bridge-service.js +1 -1
- package/dist/services/openspec/openspec-init-service.js +1 -1
- package/dist/services/openspec/openspec-propose-from-doctor-service.js +1 -1
- package/dist/services/openspec/openspec-render-service.js +7 -4
- package/dist/services/openspec/openspec-scan-service.js +1 -1
- package/dist/services/openspec/openspec-validate-service.js +5 -4
- package/dist/services/preferences/preferences-service.js +10 -0
- package/dist/services/preferences/preferences-types.d.ts +13 -0
- package/dist/services/preferences/preferences-types.js +11 -0
- package/dist/services/qa/screenshot-archive-service.d.ts +51 -0
- package/dist/services/qa/screenshot-archive-service.js +134 -0
- package/dist/services/rd/rd-service.js +10 -11
- package/dist/services/rd/types.d.ts +32 -32
- package/dist/services/rd-swarm/rd-swarm-service.d.ts +60 -0
- package/dist/services/rd-swarm/rd-swarm-service.js +93 -0
- package/dist/services/recommendations/capability-seed-items.js +0 -1
- package/dist/services/recommendations/capability-seed-mappings.js +0 -1
- package/dist/services/recommendations/capability-seed-sources.js +0 -1
- package/dist/services/release/version-precheck-service.d.ts +51 -0
- package/dist/services/release/version-precheck-service.js +257 -0
- package/dist/services/scan/acceptance-coverage-service.js +1 -1
- package/dist/services/scan/archetype-service.js +1 -1
- package/dist/services/scan/existing-system-service.js +1 -1
- package/dist/services/scan/libraries-service.js +1 -1
- package/dist/services/sediment/json-schema.d.ts +40 -40
- package/dist/services/share/bundle-types.d.ts +12 -12
- package/dist/services/share/run-state-contract.d.ts +2 -2
- package/dist/services/skill/skill-search-service.d.ts +12 -7
- package/dist/services/skill/skill-search-service.js +8 -4
- package/dist/services/skillhub/migrations/001-initial.sql +71 -0
- package/dist/services/skillhub/migrations/002-loop-release.sql +32 -0
- package/dist/services/skillhub/migrations/003-loop-bee-relation.sql +35 -0
- package/dist/services/skillhub/migrations/004-loop-bee-extension.sql +65 -0
- package/dist/services/skillhub/migrations/005-evolution-evaluation.sql +81 -0
- package/dist/services/skillhub/migrations/006-crystallization-event.sql +92 -0
- package/dist/services/skills/hooks-settings-service.d.ts +75 -0
- package/dist/services/skills/hooks-settings-service.js +230 -2
- package/dist/services/skills/skill-registry.d.ts +1 -0
- package/dist/services/skills/skill-registry.js +6 -4
- package/dist/services/skills/skill-runbook-service.js +1 -1
- package/dist/services/slice/slice-check-service.js +1 -1
- package/dist/services/standards/main-session-monitor-ban-hook.d.ts +14 -0
- package/dist/services/standards/main-session-monitor-ban-hook.js +19 -0
- package/dist/services/standards/missing-standards-detector.d.ts +25 -0
- package/dist/services/standards/missing-standards-detector.js +43 -12
- package/dist/services/tech/tech-change-id-service.d.ts +82 -0
- package/dist/services/tech/tech-change-id-service.js +117 -0
- package/dist/services/understand/understand-hybrid-service.js +1 -1
- package/dist/services/understand/understand-scan-service.js +2 -2
- package/dist/services/upgrade/upgrade-service.js +4 -3
- package/dist/services/verdict/envelopes.d.ts +2 -2
- package/dist/services/verdict/envelopes.js +2 -2
- package/dist/services/verdict/verdict-aggregator.d.ts +3 -3
- package/dist/services/vm/vm-lease.d.ts +40 -0
- package/dist/services/vm/vm-lease.js +137 -0
- package/dist/services/workflow/autonomous-resume-writer.js +1 -1
- package/dist/services/workflow/pipeline-verify-gate-support.d.ts +47 -0
- package/dist/services/workflow/pipeline-verify-gate-support.js +194 -0
- package/dist/services/workflow/pipeline-verify-service.d.ts +17 -81
- package/dist/services/workflow/pipeline-verify-service.js +42 -218
- package/dist/services/workflow/pipeline-verify-types.d.ts +90 -0
- package/dist/services/workflow/pipeline-verify-types.js +10 -0
- package/dist/services/workflow/plan-reader.d.ts +1 -1
- package/dist/services/workflow/plan-reader.js +1 -1
- package/dist/services/workflow/plan-refresher.d.ts +1 -1
- package/dist/services/workflow/plan-refresher.js +1 -1
- package/dist/services/workflow/plan-trigger-detector.d.ts +1 -1
- package/dist/services/workflow/plan-trigger-detector.js +1 -1
- package/dist/services/workflow/workflow-autonomous-resume-helpers.d.ts +1 -1
- package/dist/services/workflow/workflow-autonomous-service.d.ts +2 -98
- package/dist/services/workflow/workflow-autonomous-types.d.ts +114 -0
- package/dist/services/workflow/workflow-autonomous-types.js +21 -0
- package/dist/services/workflow/workflow-router-service.js +18 -16
- package/dist/services/workflow/workflow-spec-lint.d.ts +13 -0
- package/dist/services/workflow/workflow-spec-lint.js +75 -0
- package/dist/services/workflow/workflow-spec-types.d.ts +100 -0
- package/dist/services/workflow/workflow-spec-types.js +13 -0
- package/dist/services/workflow/workflow-spec-yaml.d.ts +17 -0
- package/dist/services/workflow/workflow-spec-yaml.js +88 -0
- package/dist/services/workflow/workflow-spec.d.ts +11 -91
- package/dist/services/workflow/workflow-spec.js +16 -145
- package/dist/services/workspace/migrate-service.js +1 -1
- package/dist/services/workspace/workspace-service.js +1 -1
- package/dist/services/worktree/worktree-lease.d.ts +170 -0
- package/dist/services/worktree/worktree-lease.js +242 -0
- package/package.json +91 -51
- package/scripts/clean-dist.mjs +31 -1
- package/scripts/copy-templates.mjs +16 -0
- package/scripts/sync-version.mjs +53 -2
- package/skills/bee/peaks-perf-audit/SKILL.md +17 -0
- package/skills/bee/peaks-prd/SKILL.md +16 -0
- package/skills/bee/peaks-prd/test-prompts.json +12 -0
- package/skills/bee/peaks-qa/SKILL.md +16 -1
- package/skills/bee/peaks-qa/references/qa-sub-agent-dispatch.md +22 -0
- package/skills/bee/peaks-qa/test-prompts.json +12 -0
- package/skills/bee/peaks-rd/SKILL.md +29 -20
- package/skills/bee/peaks-rd/references/rd-sub-agent-dispatch.md +39 -0
- package/skills/bee/peaks-rd/test-prompts.json +12 -0
- package/skills/bee/peaks-reviewer/SKILL.md +17 -0
- package/skills/bee/peaks-sc/SKILL.md +16 -0
- package/skills/bee/peaks-security-audit/SKILL.md +17 -0
- package/skills/bee/peaks-txt/SKILL.md +16 -0
- package/skills/bee/peaks-txt/test-prompts.json +12 -0
- package/skills/bee/peaks-ui/SKILL.md +49 -43
- package/skills/bee/peaks-ui/test-prompts.json +12 -0
- package/skills/peaks-code/SKILL.md +54 -109
- package/skills/peaks-code/references/boundaries.md +15 -1
- package/skills/peaks-code/references/cron-scheduler-deployment.md +313 -0
- package/skills/peaks-code/references/external-skill-invocation.md +27 -0
- package/skills/peaks-code/references/lease-dashboard.html +224 -0
- package/skills/peaks-code/references/lease-stats.sample.json +26 -0
- package/skills/peaks-code/references/peaks-worktree-l2-enforcers.md +208 -0
- package/skills/peaks-code/references/periodic-checkpoint.md +4 -4
- package/skills/peaks-code/references/runbook.md +63 -1
- package/skills/peaks-code/references/startup-sequence.md +110 -0
- package/skills/peaks-code/references/step-0-8-gate.md +1 -1
- package/skills/peaks-code/references/sub-agent-dispatch.md +92 -1
- package/skills/peaks-code/references/worktree-governance.md +123 -0
- package/skills/peaks-code/test-prompts.json +12 -0
- package/skills/peaks-doctor/SKILL.md +1 -1
- package/skills/peaks-ide/SKILL.md +1 -1
- package/skills/peaks-solo/SKILL.md +21 -0
- package/skills/peaks-solo/references/triage-decision-table.md +6 -0
- package/skills/peaks-sop/test-prompts.json +17 -0
- package/dist/cli/commands/agent-commands.d.ts +0 -20
- package/dist/cli/commands/agent-commands.js +0 -48
- package/dist/cli/commands/classify-classify-commands.d.ts +0 -19
- package/dist/cli/commands/classify-classify-commands.js +0 -151
- package/dist/cli/commands/contract-commands.d.ts +0 -26
- package/dist/cli/commands/contract-commands.js +0 -114
- package/dist/cli/commands/session-auto-compact-hook-command.d.ts +0 -37
- package/dist/cli/commands/session-auto-compact-hook-command.js +0 -127
- package/dist/cli/commands/worker-commands.d.ts +0 -3
- package/dist/cli/commands/worker-commands.js +0 -52
- package/dist/services/agent/ecc-agent-service.d.ts +0 -47
- package/dist/services/agent/ecc-agent-service.js +0 -143
- package/dist/services/config/provider-service.d.ts +0 -48
- package/dist/services/config/provider-service.js +0 -143
- package/dist/services/context/dispatch-context-guard.d.ts +0 -27
- package/dist/services/context/dispatch-context-guard.js +0 -192
- package/dist/services/context/shared-channel.d.ts +0 -93
- package/dist/services/context/shared-channel.js +0 -308
- package/dist/services/filesystem/file-lock.d.ts +0 -11
- package/dist/services/filesystem/file-lock.js +0 -152
- package/dist/services/mut/assert-scanner.d.ts +0 -6
- package/dist/services/mut/assert-scanner.js +0 -116
- package/dist/services/mut/index.d.ts +0 -8
- package/dist/services/mut/index.js +0 -7
- package/dist/services/mut/mut-runner.d.ts +0 -39
- package/dist/services/mut/mut-runner.js +0 -29
- package/dist/services/mut/production-stryker.d.ts +0 -2
- package/dist/services/mut/production-stryker.js +0 -75
- package/dist/services/mut/report-builder.d.ts +0 -11
- package/dist/services/mut/report-builder.js +0 -110
- package/dist/services/mut/report-loader.d.ts +0 -31
- package/dist/services/mut/report-loader.js +0 -78
- package/dist/services/mut/thresholds.d.ts +0 -21
- package/dist/services/mut/thresholds.js +0 -22
- package/dist/services/mut/types.d.ts +0 -336
- package/dist/services/mut/types.js +0 -59
- package/dist/services/providers/minimax-provider-service.d.ts +0 -24
- package/dist/services/providers/minimax-provider-service.js +0 -143
- package/dist/services/providers/minimax-worker-service.d.ts +0 -21
- package/dist/services/providers/minimax-worker-service.js +0 -83
- package/dist/shared/fs.d.ts +0 -4
- package/dist/shared/fs.js +0 -26
- package/dist/shared/paths.d.ts +0 -6
- package/dist/shared/paths.js +0 -50
- package/dist/shared/result.d.ts +0 -22
- package/dist/shared/result.js +0 -46
- package/dist/shared/version.d.ts +0 -1
- package/dist/shared/version.js +0 -1
- package/examples/video-demo/README.md +0 -142
- package/examples/video-demo/out/en-closing-960.png +0 -0
- package/examples/video-demo/out/zh-closing-960.png +0 -0
- package/examples/video-demo/preview/peaks-loop-demo-en.mp4 +0 -0
- package/examples/video-demo/preview/peaks-loop-demo.mp4 +0 -0
- /package/dist/services/{job/job-resource-snapshot.js → job-snapshot/snapshot.js} +0 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
function buildContract(markers, scopeName) {
|
|
2
|
+
return (skill) => {
|
|
3
|
+
if (skill.name !== scopeName)
|
|
4
|
+
return [];
|
|
5
|
+
const lines = skill.lines.length > 0 ? skill.lines : skill.body.split(/\r?\n/);
|
|
6
|
+
const missing = [];
|
|
7
|
+
for (const m of markers) {
|
|
8
|
+
if (!lines.some((l) => m.pattern.test(l)))
|
|
9
|
+
missing.push(m.name);
|
|
10
|
+
}
|
|
11
|
+
if (missing.length === 0)
|
|
12
|
+
return [];
|
|
13
|
+
return [{
|
|
14
|
+
catalogId: 'lint-peaks-skill-runtime-' + markers[0]?.name.toLowerCase().replace(/[^a-z0-9]+/g, '-'),
|
|
15
|
+
rule: `peaks-* SKILL.md must declare the runtime contract (missing markers: ${missing.join(', ')})`,
|
|
16
|
+
file: skill.path,
|
|
17
|
+
line: 1,
|
|
18
|
+
matchedText: `missing markers: ${missing.join(', ')}`
|
|
19
|
+
}];
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const PEAKS_AUDIT_MARKERS = Object.freeze([
|
|
23
|
+
{ name: 'Audit log machine-readable', pattern: /audit log is machine-readable/i },
|
|
24
|
+
{ name: 'Six-dimension audit', pattern: /six dimensions|6 dimensions/i },
|
|
25
|
+
{ name: 'Author identity', pattern: /author identity.*local gitconfig/i }
|
|
26
|
+
]);
|
|
27
|
+
const PEAKS_CONTENT_MARKERS = Object.freeze([
|
|
28
|
+
{ name: 'What this skill do', pattern: /what this skill do/i },
|
|
29
|
+
{ name: 'Failure mode', pattern: /failure mode/i },
|
|
30
|
+
{ name: 'Each red line is written', pattern: /each red line is written/i }
|
|
31
|
+
]);
|
|
32
|
+
const PEAKS_IDE_MARKERS = Object.freeze([
|
|
33
|
+
{ name: 'For any consumer', pattern: /for any consumer of the v2 envelope/i },
|
|
34
|
+
{ name: 'What this skill do', pattern: /what this skill do/i },
|
|
35
|
+
{ name: 'General workflow-gating tool', pattern: /general workflow-gating tool/i }
|
|
36
|
+
]);
|
|
37
|
+
export const lintPeaksAuditRuntime = buildContract(PEAKS_AUDIT_MARKERS, 'peaks-audit');
|
|
38
|
+
export const lintPeaksContentRuntime = buildContract(PEAKS_CONTENT_MARKERS, 'peaks-content');
|
|
39
|
+
export const lintPeaksIdeRuntime = buildContract(PEAKS_IDE_MARKERS, 'peaks-ide');
|
|
40
|
+
/** Doctor — single marker, often a one-line contract. */
|
|
41
|
+
const PEAKS_DOCTOR_MARKERS = Object.freeze([
|
|
42
|
+
{ name: 'peaks-loop doctor is a doctor orchestrator', pattern: /peaks-loop doctor is a doctor orchestrator/i }
|
|
43
|
+
]);
|
|
44
|
+
const PEAKS_ISSUE_FIX_ORCHESTRATOR_MARKERS = Object.freeze([
|
|
45
|
+
{ name: 'Deviation note', pattern: /deviation note/i },
|
|
46
|
+
{ name: 'Autonomous work proceed', pattern: /autonomous work proceed/i }
|
|
47
|
+
]);
|
|
48
|
+
const PEAKS_SOP_MARKERS = Object.freeze([
|
|
49
|
+
{ name: 'Each red line below', pattern: /each red line below is written/i },
|
|
50
|
+
{ name: 'sop lint reports findings', pattern: /sop lint reports findings/i }
|
|
51
|
+
]);
|
|
52
|
+
const PEAKS_SLICE_DECOMPOSE_MARKERS = Object.freeze([
|
|
53
|
+
{ name: 'What this skill do', pattern: /what this skill do/i },
|
|
54
|
+
{ name: 'Failure mode ( — read before declaring a', pattern: /failure mode \(/i }
|
|
55
|
+
]);
|
|
56
|
+
export const lintPeaksDoctorRuntime = buildContract(PEAKS_DOCTOR_MARKERS, 'peaks-doctor');
|
|
57
|
+
export const lintPeaksIssueFixOrchestratorRuntime = buildContract(PEAKS_ISSUE_FIX_ORCHESTRATOR_MARKERS, 'peaks-issue-fix-orchestrator');
|
|
58
|
+
export const lintPeaksSopRuntime = buildContract(PEAKS_SOP_MARKERS, 'peaks-sop');
|
|
59
|
+
export const lintPeaksSliceDecomposeRuntime = buildContract(PEAKS_SLICE_DECOMPOSE_MARKERS, 'peaks-slice-decompose');
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* P2-b sweep 007 — peaks-ui / peaks-txt / peaks-perf-audit runtime
|
|
3
|
+
* contract enforcers. Closes the remaining 6 discovered lines:
|
|
4
|
+
*
|
|
5
|
+
* - peaks-ui-skill-md-X (3 lines):
|
|
6
|
+
* identify ui involvement
|
|
7
|
+
* superpowers chain refusal (L1 worktree governance)
|
|
8
|
+
* superpowers skills remain available as reference material
|
|
9
|
+
* - peaks-txt-skill-md-X (2 lines):
|
|
10
|
+
* inspect upstream skill content before applying any method
|
|
11
|
+
* memory block embedding rule
|
|
12
|
+
* - peaks-perf-audit-skill-md-X (1 line):
|
|
13
|
+
* MUST NOT invoke perf-audit for non-perf slices
|
|
14
|
+
*
|
|
15
|
+
* Four enforcers in one file (the runtime contract cluster):
|
|
16
|
+
* - lintPeaksUiSuperpowersChain — both superpowers-refusal
|
|
17
|
+
* + reference-material markers required.
|
|
18
|
+
* - lintPeaksTxtUpstreamInspection — the inspect-upstream
|
|
19
|
+
* + memory-block markers.
|
|
20
|
+
* - lintPeaksPerfAuditScope — the non-perf MUST NOT.
|
|
21
|
+
* - lintPeaksUiInvolvement — the ui-involvement identification
|
|
22
|
+
* block (peaks-ui only).
|
|
23
|
+
*/
|
|
24
|
+
import type { LintHit, SkillFile } from './lint-style.js';
|
|
25
|
+
export declare function lintPeaksUiSuperpowersChain(skill: SkillFile): ReadonlyArray<LintHit>;
|
|
26
|
+
export declare function lintPeaksUiInvolvement(skill: SkillFile): ReadonlyArray<LintHit>;
|
|
27
|
+
export declare function lintPeaksTxtUpstream(skill: SkillFile): ReadonlyArray<LintHit>;
|
|
28
|
+
export declare function lintPeaksPerfAuditScope(skill: SkillFile): ReadonlyArray<LintHit>;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
const SUPERPOWERS_REFUSAL = /MUST NOT follow the superpowers chain/i;
|
|
2
|
+
const SUPERPOWERS_REFERENCE = /superpowers skills remain available as reference material/i;
|
|
3
|
+
const UI_INVOLVEMENT = /identify ui involvement/i;
|
|
4
|
+
const TXT_INSPECT_UPSTREAM = /inspect upstream skill content before applying any method/i;
|
|
5
|
+
const TXT_MEMORY_BLOCK = /memory block embedding rule/i;
|
|
6
|
+
const PERF_AUDIT_NON_PERF = /MUST NOT invoke this skill[\s\S]*?non-perf/i;
|
|
7
|
+
export function lintPeaksUiSuperpowersChain(skill) {
|
|
8
|
+
if (skill.name !== 'peaks-ui')
|
|
9
|
+
return [];
|
|
10
|
+
const lines = skill.lines.length > 0
|
|
11
|
+
? skill.lines
|
|
12
|
+
: skill.body.split(/\r?\n/);
|
|
13
|
+
const hasRefusal = lines.some((l) => SUPERPOWERS_REFUSAL.test(l));
|
|
14
|
+
const hasReference = lines.some((l) => SUPERPOWERS_REFERENCE.test(l));
|
|
15
|
+
if (hasRefusal && hasReference)
|
|
16
|
+
return [];
|
|
17
|
+
const missing = [];
|
|
18
|
+
if (!hasRefusal)
|
|
19
|
+
missing.push('MUST NOT follow the superpowers chain');
|
|
20
|
+
if (!hasReference)
|
|
21
|
+
missing.push('superpowers skills remain available as reference material');
|
|
22
|
+
return [{
|
|
23
|
+
catalogId: 'rl-peaks-ui-superpowers-chain-001',
|
|
24
|
+
rule: 'peaks-ui SKILL.md must declare the superpowers chain refusal + reference-material contract',
|
|
25
|
+
file: skill.path,
|
|
26
|
+
line: 1,
|
|
27
|
+
matchedText: `missing markers: ${missing.join(', ')}`
|
|
28
|
+
}];
|
|
29
|
+
}
|
|
30
|
+
export function lintPeaksUiInvolvement(skill) {
|
|
31
|
+
if (skill.name !== 'peaks-ui')
|
|
32
|
+
return [];
|
|
33
|
+
const lines = skill.lines.length > 0
|
|
34
|
+
? skill.lines
|
|
35
|
+
: skill.body.split(/\r?\n/);
|
|
36
|
+
const hasInvolvement = lines.some((l) => UI_INVOLVEMENT.test(l));
|
|
37
|
+
if (hasInvolvement)
|
|
38
|
+
return [];
|
|
39
|
+
return [{
|
|
40
|
+
catalogId: 'rl-peaks-ui-involvement-001',
|
|
41
|
+
rule: 'peaks-ui SKILL.md must declare the UI-involvement identification block',
|
|
42
|
+
file: skill.path,
|
|
43
|
+
line: 1,
|
|
44
|
+
matchedText: 'missing "identify ui involvement" marker'
|
|
45
|
+
}];
|
|
46
|
+
}
|
|
47
|
+
export function lintPeaksTxtUpstream(skill) {
|
|
48
|
+
if (skill.name !== 'peaks-txt')
|
|
49
|
+
return [];
|
|
50
|
+
const lines = skill.lines.length > 0
|
|
51
|
+
? skill.lines
|
|
52
|
+
: skill.body.split(/\r?\n/);
|
|
53
|
+
const hasInspect = lines.some((l) => TXT_INSPECT_UPSTREAM.test(l));
|
|
54
|
+
const hasMemoryBlock = lines.some((l) => TXT_MEMORY_BLOCK.test(l));
|
|
55
|
+
if (hasInspect && hasMemoryBlock)
|
|
56
|
+
return [];
|
|
57
|
+
const missing = [];
|
|
58
|
+
if (!hasInspect)
|
|
59
|
+
missing.push('inspect upstream skill content before applying any method');
|
|
60
|
+
if (!hasMemoryBlock)
|
|
61
|
+
missing.push('memory block embedding rule');
|
|
62
|
+
return [{
|
|
63
|
+
catalogId: 'rl-peaks-txt-upstream-001',
|
|
64
|
+
rule: 'peaks-txt SKILL.md must declare the upstream-inspection + memory-block contract',
|
|
65
|
+
file: skill.path,
|
|
66
|
+
line: 1,
|
|
67
|
+
matchedText: `missing markers: ${missing.join(', ')}`
|
|
68
|
+
}];
|
|
69
|
+
}
|
|
70
|
+
export function lintPeaksPerfAuditScope(skill) {
|
|
71
|
+
if (skill.name !== 'peaks-perf-audit')
|
|
72
|
+
return [];
|
|
73
|
+
const lines = skill.lines.length > 0
|
|
74
|
+
? skill.lines
|
|
75
|
+
: skill.body.split(/\r?\n/);
|
|
76
|
+
const hasNonPerf = lines.some((l) => PERF_AUDIT_NON_PERF.test(l));
|
|
77
|
+
if (hasNonPerf)
|
|
78
|
+
return [];
|
|
79
|
+
return [{
|
|
80
|
+
catalogId: 'rl-peaks-perf-audit-scope-001',
|
|
81
|
+
rule: 'peaks-perf-audit SKILL.md must declare the non-perf MUST NOT invoke clause',
|
|
82
|
+
file: skill.path,
|
|
83
|
+
line: 1,
|
|
84
|
+
matchedText: 'missing "MUST NOT invoke this skill for non-perf slices" marker'
|
|
85
|
+
}];
|
|
86
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* P2-b sweep 004 — PRD artifact handoff enforcer.
|
|
3
|
+
*
|
|
4
|
+
* Closes three peaks-prd discovered lines (md-99, md-166, md-193):
|
|
5
|
+
* - 99 : preserved behavior section in the PRD template
|
|
6
|
+
* - 166 : "5.5 — write the immutable handoff" step
|
|
7
|
+
* - 193 : "Transition verification gates" section
|
|
8
|
+
*
|
|
9
|
+
* The three are one logical contract (the PRD runbook must
|
|
10
|
+
* declare these handoff markers). A single enforcer scanning
|
|
11
|
+
* the SKILL.md for all three closes the cluster in one pass.
|
|
12
|
+
*
|
|
13
|
+
* scope: peaks-prd only.
|
|
14
|
+
*/
|
|
15
|
+
import type { LintHit, SkillFile } from './lint-style.js';
|
|
16
|
+
export declare function lintPrdArtifactHandoff(skill: SkillFile): ReadonlyArray<LintHit>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
const PRESERVED_BEHAVIOR = /\bPreserved behavior\b/;
|
|
2
|
+
const HANDOFF_STEP_5_5 = /5\.5\s*—\s*write the immutable handoff/im;
|
|
3
|
+
const TRANSITION_GATES = /Transition verification gates/im;
|
|
4
|
+
function findPrdHandoffContract(lines) {
|
|
5
|
+
let preserved = false;
|
|
6
|
+
let handoffStep = false;
|
|
7
|
+
let transitionGates = false;
|
|
8
|
+
for (const line of lines) {
|
|
9
|
+
if (PRESERVED_BEHAVIOR.test(line))
|
|
10
|
+
preserved = true;
|
|
11
|
+
if (HANDOFF_STEP_5_5.test(line))
|
|
12
|
+
handoffStep = true;
|
|
13
|
+
if (TRANSITION_GATES.test(line))
|
|
14
|
+
transitionGates = true;
|
|
15
|
+
}
|
|
16
|
+
return { preserved, handoffStep, transitionGates };
|
|
17
|
+
}
|
|
18
|
+
export function lintPrdArtifactHandoff(skill) {
|
|
19
|
+
if (skill.name !== 'peaks-prd')
|
|
20
|
+
return [];
|
|
21
|
+
const lines = skill.lines.length > 0
|
|
22
|
+
? skill.lines
|
|
23
|
+
: skill.body.split(/\r?\n/);
|
|
24
|
+
const { preserved, handoffStep, transitionGates } = findPrdHandoffContract(lines);
|
|
25
|
+
if (preserved && handoffStep && transitionGates)
|
|
26
|
+
return [];
|
|
27
|
+
const missing = [];
|
|
28
|
+
if (!preserved)
|
|
29
|
+
missing.push('Preserved behavior');
|
|
30
|
+
if (!handoffStep)
|
|
31
|
+
missing.push('step 5.5 (write the immutable handoff)');
|
|
32
|
+
if (!transitionGates)
|
|
33
|
+
missing.push('Transition verification gates');
|
|
34
|
+
return [{
|
|
35
|
+
catalogId: 'rl-prd-artifact-handoff-001',
|
|
36
|
+
rule: 'peaks-prd SKILL.md must declare the artifact handoff contract (Preserved behavior + step 5.5 + Transition verification gates)',
|
|
37
|
+
file: skill.path,
|
|
38
|
+
line: 1,
|
|
39
|
+
matchedText: `missing markers: ${missing.join(', ')}`
|
|
40
|
+
}];
|
|
41
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* P2-b sweep — PRD source-snapshot placement enforcer.
|
|
3
|
+
*
|
|
4
|
+
* Targets the BLOCKING markers around the peaks-prd
|
|
5
|
+
* "Document snapshot placement" + "Prohibited paths" guidance
|
|
6
|
+
* (rl-discovered-skills-bee-peaks-prd-skill-md-292 + 301).
|
|
7
|
+
* The contract: PRD source snapshots from external documents
|
|
8
|
+
* (Feishu / Lark / wiki / web) MUST go to
|
|
9
|
+
* `.peaks/_runtime/<sessionId>/prd/source/`, never to the
|
|
10
|
+
* project root.
|
|
11
|
+
*
|
|
12
|
+
* The enforcer pattern-scans the peaks-prd SKILL.md for the
|
|
13
|
+
* required guidance phrasing. Two hits (placement heading +
|
|
14
|
+
* prohibited-paths line) are both required for a clean
|
|
15
|
+
* enforcer pass. A single missing item emits a synthetic hit
|
|
16
|
+
* pointing at the line the user is most likely to look at
|
|
17
|
+
* (the placement heading line, or line 1 if missing).
|
|
18
|
+
*
|
|
19
|
+
* This is the second prose-only enforcer in the sweep
|
|
20
|
+
* (after lint-skill-presence-mandatory.ts). It demonstrates
|
|
21
|
+
* the path for the remaining 65 discovered lines: each
|
|
22
|
+
* enforcer is small, single-purpose, and has its own catalog
|
|
23
|
+
* entry. The catalog governance ratio will tick down with
|
|
24
|
+
* every enforcer shipped.
|
|
25
|
+
*/
|
|
26
|
+
import type { LintHit, SkillFile } from './lint-style.js';
|
|
27
|
+
export declare function lintPrdSourceSnapshot(skill: SkillFile): ReadonlyArray<LintHit>;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const PLACEMENT_HEADING = /^##\s+.*Document snapshot placement/im;
|
|
2
|
+
const PROHIBITED_PATHS = /Prohibited paths/im;
|
|
3
|
+
const SOURCE_SUBDIR = /\.peaks\/_runtime\/<session-id>\/prd\/source\//;
|
|
4
|
+
function findPrdSourceSnapshotGuidance(lines) {
|
|
5
|
+
let placementLine = null;
|
|
6
|
+
let hasProhibited = false;
|
|
7
|
+
let hasSubdir = false;
|
|
8
|
+
for (let i = 0; i < lines.length; i++) {
|
|
9
|
+
const line = lines[i] ?? '';
|
|
10
|
+
if (PLACEMENT_HEADING.test(line)) {
|
|
11
|
+
placementLine = i + 1;
|
|
12
|
+
// Look ahead up to 30 lines for the prohibited-paths
|
|
13
|
+
// line + the source subdir reference.
|
|
14
|
+
for (let j = i; j < Math.min(i + 30, lines.length); j++) {
|
|
15
|
+
const next = lines[j] ?? '';
|
|
16
|
+
if (PROHIBITED_PATHS.test(next))
|
|
17
|
+
hasProhibited = true;
|
|
18
|
+
if (SOURCE_SUBDIR.test(next))
|
|
19
|
+
hasSubdir = true;
|
|
20
|
+
}
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return { placementLine, hasProhibited, hasSubdir };
|
|
25
|
+
}
|
|
26
|
+
export function lintPrdSourceSnapshot(skill) {
|
|
27
|
+
// Scope: peaks-prd only. Other bee skills do not have the
|
|
28
|
+
// source-snapshot contract.
|
|
29
|
+
if (skill.name !== 'peaks-prd')
|
|
30
|
+
return [];
|
|
31
|
+
const lines = skill.lines.length > 0
|
|
32
|
+
? skill.lines
|
|
33
|
+
: skill.body.split(/\r?\n/);
|
|
34
|
+
const { placementLine, hasProhibited, hasSubdir } = findPrdSourceSnapshotGuidance(lines);
|
|
35
|
+
if (placementLine !== null && hasProhibited && hasSubdir)
|
|
36
|
+
return [];
|
|
37
|
+
const detail = placementLine === null
|
|
38
|
+
? 'missing `## Document snapshot placement` heading'
|
|
39
|
+
: `placement heading at line ${placementLine} but guidance incomplete (prohibited=${hasProhibited}, subdir=${hasSubdir})`;
|
|
40
|
+
return [{
|
|
41
|
+
catalogId: 'rl-prd-source-snapshot-placement-001',
|
|
42
|
+
rule: 'PRD source-snapshot placement (BLOCKING): external-document snapshots must land in .peaks/_runtime/<sessionId>/prd/source/, never project root',
|
|
43
|
+
file: skill.path,
|
|
44
|
+
line: placementLine ?? 1,
|
|
45
|
+
matchedText: detail
|
|
46
|
+
}];
|
|
47
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* P2-b sweep 006 — peaks-qa gateguard + runtime contract.
|
|
3
|
+
*
|
|
4
|
+
* Closes four peaks-qa discovered lines:
|
|
5
|
+
* - md-26 : "Pre-flight: gateguard-fact-force conflict" (BLOCKING)
|
|
6
|
+
* - md-113 : "Transition verification gates" (MANDATORY)
|
|
7
|
+
* - md-165 : "if playwright mcp is unavailable, the llm checks" (BLOCKING)
|
|
8
|
+
* - md-201 : "when the target repository has openspec/, qa must" (BLOCKING)
|
|
9
|
+
*
|
|
10
|
+
* Two enforcers:
|
|
11
|
+
* - lintQaGateguardPreflight: peaks-qa only; checks the
|
|
12
|
+
* gateguard-fact-force pre-flight heading.
|
|
13
|
+
* - lintQaRuntimeContract: peaks-qa only; checks for
|
|
14
|
+
* transition gates + playwright mcp handling + openspec
|
|
15
|
+
* integration.
|
|
16
|
+
*/
|
|
17
|
+
import type { LintHit, SkillFile } from './lint-style.js';
|
|
18
|
+
export declare function lintQaGateguardPreflight(skill: SkillFile): ReadonlyArray<LintHit>;
|
|
19
|
+
export declare function lintQaRuntimeContract(skill: SkillFile): ReadonlyArray<LintHit>;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const GATEGUARD_HEADING = /Pre-flight:\s*gateguard-fact-force conflict/im;
|
|
2
|
+
const TRANSITION_GATES = /Transition verification gates/im;
|
|
3
|
+
const PLAYWRIGHT_MCP = /if playwright mcp is unavailable/i;
|
|
4
|
+
const OPENSPEC_INTEGRATION = /when the target repository has openspec\//i;
|
|
5
|
+
export function lintQaGateguardPreflight(skill) {
|
|
6
|
+
if (skill.name !== 'peaks-qa')
|
|
7
|
+
return [];
|
|
8
|
+
const lines = skill.lines.length > 0
|
|
9
|
+
? skill.lines
|
|
10
|
+
: skill.body.split(/\r?\n/);
|
|
11
|
+
const hasGateguard = lines.some((l) => GATEGUARD_HEADING.test(l));
|
|
12
|
+
if (hasGateguard)
|
|
13
|
+
return [];
|
|
14
|
+
return [{
|
|
15
|
+
catalogId: 'rl-qa-gateguard-preflight-001',
|
|
16
|
+
rule: 'peaks-qa SKILL.md must declare the `## Pre-flight: gateguard-fact-force conflict (BLOCKING)` section',
|
|
17
|
+
file: skill.path,
|
|
18
|
+
line: 1,
|
|
19
|
+
matchedText: 'missing gateguard pre-flight heading'
|
|
20
|
+
}];
|
|
21
|
+
}
|
|
22
|
+
export function lintQaRuntimeContract(skill) {
|
|
23
|
+
if (skill.name !== 'peaks-qa')
|
|
24
|
+
return [];
|
|
25
|
+
const lines = skill.lines.length > 0
|
|
26
|
+
? skill.lines
|
|
27
|
+
: skill.body.split(/\r?\n/);
|
|
28
|
+
const hasTransition = lines.some((l) => TRANSITION_GATES.test(l));
|
|
29
|
+
const hasPlaywright = lines.some((l) => PLAYWRIGHT_MCP.test(l));
|
|
30
|
+
const hasOpenSpec = lines.some((l) => OPENSPEC_INTEGRATION.test(l));
|
|
31
|
+
if (hasTransition && hasPlaywright && hasOpenSpec)
|
|
32
|
+
return [];
|
|
33
|
+
const missing = [];
|
|
34
|
+
if (!hasTransition)
|
|
35
|
+
missing.push('Transition verification gates');
|
|
36
|
+
if (!hasPlaywright)
|
|
37
|
+
missing.push('Playwright MCP unavailability handling');
|
|
38
|
+
if (!hasOpenSpec)
|
|
39
|
+
missing.push('OpenSpec integration requirement');
|
|
40
|
+
return [{
|
|
41
|
+
catalogId: 'rl-qa-runtime-contract-001',
|
|
42
|
+
rule: 'peaks-qa SKILL.md must declare the runtime contract (transition gates + Playwright MCP + OpenSpec integration)',
|
|
43
|
+
file: skill.path,
|
|
44
|
+
line: 1,
|
|
45
|
+
matchedText: `missing markers: ${missing.join(', ')}`
|
|
46
|
+
}];
|
|
47
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* P2-b sweep 005 — peaks-rd handoff + coverage enforcers.
|
|
3
|
+
*
|
|
4
|
+
* Closes three peaks-rd discovered lines:
|
|
5
|
+
* - md-121 : "do not hand off to QA without [tech-doc.md]" (BLOCKING)
|
|
6
|
+
* - md-127 : "do not hand off to QA without a perf-baseline" (BLOCKING)
|
|
7
|
+
* - md-162 : "100% coverage target on testable files is meaningful"
|
|
8
|
+
*
|
|
9
|
+
* Two enforcers (handoff + coverage). The handoff enforcer
|
|
10
|
+
* checks for both 'tech-doc' and 'perf-baseline' handoff
|
|
11
|
+
* markers; the coverage enforcer checks for the 100%-target
|
|
12
|
+
* phrasing + the no-coverage-padding rule.
|
|
13
|
+
*
|
|
14
|
+
* scope: peaks-rd only.
|
|
15
|
+
*/
|
|
16
|
+
import type { LintHit, SkillFile } from './lint-style.js';
|
|
17
|
+
export declare function lintRdHandoffContract(skill: SkillFile): ReadonlyArray<LintHit>;
|
|
18
|
+
export declare function lintRdCoverageDiscipline(skill: SkillFile): ReadonlyArray<LintHit>;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
const TECH_DOC_HANDOFF = /do not hand off to qa without[^\n]*tech-doc/im;
|
|
2
|
+
const PERF_BASELINE_HANDOFF = /do not hand off to qa without[^\n]*perf-baseline/im;
|
|
3
|
+
const COVERAGE_TARGET = /100%\s*coverage target[^\n]*testable files/i;
|
|
4
|
+
const NO_PADDING = /must not write coverage-padding tests/i;
|
|
5
|
+
function findHandoffContract(lines) {
|
|
6
|
+
let techDoc = false;
|
|
7
|
+
let perfBaseline = false;
|
|
8
|
+
for (const line of lines) {
|
|
9
|
+
if (TECH_DOC_HANDOFF.test(line))
|
|
10
|
+
techDoc = true;
|
|
11
|
+
if (PERF_BASELINE_HANDOFF.test(line))
|
|
12
|
+
perfBaseline = true;
|
|
13
|
+
}
|
|
14
|
+
return { techDoc, perfBaseline };
|
|
15
|
+
}
|
|
16
|
+
function findCoverageContract(lines) {
|
|
17
|
+
let target = false;
|
|
18
|
+
let noPadding = false;
|
|
19
|
+
for (const line of lines) {
|
|
20
|
+
if (COVERAGE_TARGET.test(line))
|
|
21
|
+
target = true;
|
|
22
|
+
if (NO_PADDING.test(line))
|
|
23
|
+
noPadding = true;
|
|
24
|
+
}
|
|
25
|
+
return { target, noPadding };
|
|
26
|
+
}
|
|
27
|
+
export function lintRdHandoffContract(skill) {
|
|
28
|
+
if (skill.name !== 'peaks-rd')
|
|
29
|
+
return [];
|
|
30
|
+
const lines = skill.lines.length > 0
|
|
31
|
+
? skill.lines
|
|
32
|
+
: skill.body.split(/\r?\n/);
|
|
33
|
+
const { techDoc, perfBaseline } = findHandoffContract(lines);
|
|
34
|
+
if (techDoc && perfBaseline)
|
|
35
|
+
return [];
|
|
36
|
+
const missing = [];
|
|
37
|
+
if (!techDoc)
|
|
38
|
+
missing.push('tech-doc handoff BLOCKING');
|
|
39
|
+
if (!perfBaseline)
|
|
40
|
+
missing.push('perf-baseline handoff BLOCKING');
|
|
41
|
+
return [{
|
|
42
|
+
catalogId: 'rl-rd-handoff-contract-001',
|
|
43
|
+
rule: 'peaks-rd SKILL.md must declare the QA-handoff BLOCKING contract (tech-doc + perf-baseline)',
|
|
44
|
+
file: skill.path,
|
|
45
|
+
line: 1,
|
|
46
|
+
matchedText: `missing markers: ${missing.join(', ')}`
|
|
47
|
+
}];
|
|
48
|
+
}
|
|
49
|
+
export function lintRdCoverageDiscipline(skill) {
|
|
50
|
+
if (skill.name !== 'peaks-rd')
|
|
51
|
+
return [];
|
|
52
|
+
const lines = skill.lines.length > 0
|
|
53
|
+
? skill.lines
|
|
54
|
+
: skill.body.split(/\r?\n/);
|
|
55
|
+
const { target, noPadding } = findCoverageContract(lines);
|
|
56
|
+
if (target && noPadding)
|
|
57
|
+
return [];
|
|
58
|
+
const missing = [];
|
|
59
|
+
if (!target)
|
|
60
|
+
missing.push('100% coverage target (testable files) phrasing');
|
|
61
|
+
if (!noPadding)
|
|
62
|
+
missing.push('"must not write coverage-padding tests" rule');
|
|
63
|
+
return [{
|
|
64
|
+
catalogId: 'rl-rd-coverage-discipline-001',
|
|
65
|
+
rule: 'peaks-rd SKILL.md must declare the coverage discipline (100% target + no-padding rule)',
|
|
66
|
+
file: skill.path,
|
|
67
|
+
line: 1,
|
|
68
|
+
matchedText: `missing markers: ${missing.join(', ')}`
|
|
69
|
+
}];
|
|
70
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* P2-b (Slice #6+1) — Skill presence MANDATORY enforcer.
|
|
3
|
+
*
|
|
4
|
+
* Targets the `peaks-prd` / `peaks-rd` / `peaks-qa` SKILL.md
|
|
5
|
+
* "Skill presence (MANDATORY first action)" heading that the
|
|
6
|
+
* audit classified as `rl-discovered-skills-bee-peaks-prd-skill-md-56`
|
|
7
|
+
* (and the parallel peaks-rd / peaks-qa lines). The marker
|
|
8
|
+
* MANDATORY + the phrase "Skill presence" + "first action" are
|
|
9
|
+
* all required; if any of the three is missing on a `peaks-*`
|
|
10
|
+
* SKILL.md the enforcer emits a synthetic hit so the audit
|
|
11
|
+
* report can render the entry.
|
|
12
|
+
*
|
|
13
|
+
* This file is a single-purpose enforcer (one enforcerRef per
|
|
14
|
+
* catalog entry). It deliberately does NOT cover every
|
|
15
|
+
* discovered prose-only line — the next rid (catalog
|
|
16
|
+
* governance sweep) is the right place to add the rest. This
|
|
17
|
+
* commit's goal is to close the first one and prove the
|
|
18
|
+
* catalog-entry + enforcerRef + test path works end-to-end.
|
|
19
|
+
*
|
|
20
|
+
* No new deps. No shell-out. No FS writes. The enforcer
|
|
21
|
+
* function is sync + side-effect-free so the audit hot path
|
|
22
|
+
* stays fast.
|
|
23
|
+
*/
|
|
24
|
+
import type { LintHit, SkillFile } from './lint-style.js';
|
|
25
|
+
export declare function lintSkillPresenceMandatory(skill: SkillFile): ReadonlyArray<LintHit>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
const SKILL_PRESENCE_HEADING = /^##\s+Skill presence\s*\([^)]*MANDATORY[^)]*first action\)/im;
|
|
2
|
+
const SKILL_PRESENCE_BODY = /immediately run:/i;
|
|
3
|
+
const MANDATORY_MARKER = /\bMANDATORY\b/;
|
|
4
|
+
const TARGET_SKILL_PREFIX = 'peaks-';
|
|
5
|
+
function findSkillPresenceSection(lines) {
|
|
6
|
+
let heading = null;
|
|
7
|
+
let bodyOk = false;
|
|
8
|
+
let hasMarker = false;
|
|
9
|
+
for (let i = 0; i < lines.length; i++) {
|
|
10
|
+
const line = lines[i] ?? '';
|
|
11
|
+
if (SKILL_PRESENCE_HEADING.test(line)) {
|
|
12
|
+
heading = i + 1;
|
|
13
|
+
// Look ahead up to 8 lines for the body / marker.
|
|
14
|
+
for (let j = i; j < Math.min(i + 8, lines.length); j++) {
|
|
15
|
+
const next = lines[j] ?? '';
|
|
16
|
+
if (SKILL_PRESENCE_BODY.test(next))
|
|
17
|
+
bodyOk = true;
|
|
18
|
+
if (MANDATORY_MARKER.test(next))
|
|
19
|
+
hasMarker = true;
|
|
20
|
+
}
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return { heading, bodyOk, hasMarker };
|
|
25
|
+
}
|
|
26
|
+
export function lintSkillPresenceMandatory(skill) {
|
|
27
|
+
// Scope: peaks-* bee SKILL.md. The path check is the primary
|
|
28
|
+
// gate; the name check is a defense-in-depth guard for callers
|
|
29
|
+
// that pass a skill whose name does not match its path
|
|
30
|
+
// (e.g. tests with a synthetic SkillFile).
|
|
31
|
+
if (!skill.path.includes('skills/bee/'))
|
|
32
|
+
return [];
|
|
33
|
+
if (!skill.name.startsWith(TARGET_SKILL_PREFIX))
|
|
34
|
+
return [];
|
|
35
|
+
// Reconstruct lines from body (the SkillFile interface exposes body
|
|
36
|
+
// and lines; for compatibility, prefer lines if non-empty).
|
|
37
|
+
const lines = skill.lines.length > 0
|
|
38
|
+
? skill.lines
|
|
39
|
+
: skill.body.split(/\r?\n/);
|
|
40
|
+
const { heading, bodyOk, hasMarker } = findSkillPresenceSection(lines);
|
|
41
|
+
if (heading !== null && bodyOk && hasMarker)
|
|
42
|
+
return [];
|
|
43
|
+
const detail = heading === null
|
|
44
|
+
? 'missing `## Skill presence (MANDATORY first action)` heading'
|
|
45
|
+
: `heading present at line ${heading} but body/marker incomplete (body=${bodyOk}, marker=${hasMarker})`;
|
|
46
|
+
return [{
|
|
47
|
+
catalogId: 'rl-skill-presence-mandatory-001',
|
|
48
|
+
rule: 'Skill presence (MANDATORY first action) — peaks-* bee SKILL.md must declare the section',
|
|
49
|
+
file: skill.path,
|
|
50
|
+
line: heading ?? 1,
|
|
51
|
+
matchedText: detail
|
|
52
|
+
}];
|
|
53
|
+
}
|
|
@@ -12,10 +12,4 @@
|
|
|
12
12
|
* discovery path as the P0 / P1 entries.
|
|
13
13
|
*/
|
|
14
14
|
import type { RedLineCatalogEntry } from './red-line-catalog.js';
|
|
15
|
-
/**
|
|
16
|
-
* The 25 P2-a entries, in stable display order. Appending to a single
|
|
17
|
-
* readonly array keeps the catalog growable: future slices (L2.4, L3.x)
|
|
18
|
-
* can spread this list into RED_LINE_CATALOG and add their own without
|
|
19
|
-
* touching this file.
|
|
20
|
-
*/
|
|
21
15
|
export declare const RED_LINE_CATALOG_P2_A: readonly RedLineCatalogEntry[];
|