@codyswann/lisa 4.72.1 → 4.72.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/all/copy-overwrite/scripts/lisa-hooks/worktree-binding-guard.mjs +225 -33
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +6 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +9 -5
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/package.json +4 -4
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-acceptance-criteria/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-agent-design-best-practices/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-agent-ready/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-analyze-claude-remote/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-atlassian-access/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-attribute-failure/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-automation-status/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-bug-triage/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-capability-drift/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-codebase-research/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-codify-verification/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-confluence-prd-intake/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-confluence-to-tracker/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-confluence-write-prd/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-cross-pollinate/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-debrief/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-debrief-apply/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-delivery-effectiveness/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-design-intake/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-detect-tooling/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-doctor/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-drive-pr-to-merge/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-epic-triage/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-evaluation-suite/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-exploratory-qa/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-fix-linter-error/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-generate-claude-remote-build-script/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-git-commit/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-git-prune/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-git-submit-pr/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-add-journey/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-build-intake/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-claim/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-create/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-evidence/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-journey/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-prd-intake/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-project-v2/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-read-issue/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-sync/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-to-tracker/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-verify/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-write-issue/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-write-prd/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-health/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-health-drift-cron/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-implement/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-code-complexity/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-harness/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-max-lines/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-max-lines-per-function/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-test-coverage/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-improve-tests/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-intake/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-intake-explain/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jam-access/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-add-journey/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-build-intake/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-claim/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-create/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-evidence/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-read-ticket/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-sync/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-verify/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-write-ticket/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jsdoc-best-practices/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-kane-browser/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-learnings-audit/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-access/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-add-journey/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-build-intake/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-claim/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-create/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-evidence/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-journey/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-prd-intake/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-read-issue/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-sync/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-to-tracker/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-verify/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-issue/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-prd/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-monitor/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-nightly-add-test-coverage/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-nightly-improve-tests/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-nightly-lower-code-complexity/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-access/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-prd-intake/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-to-tracker/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-write-prd/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-code-review/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-code-simplifier/SKILL.md +3 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-code-simplifier/agents/openai.yaml +2 -2
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-coderabbit/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-sentry-sdk-setup/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-sentry-seer/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-skill-creator/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-performance-review/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-persist-learning/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-plan/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-plugin-sync-explain/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-posthog-access/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-prd-backlink/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-prd-source-write/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-prd-ticket-coverage/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-product-walkthrough/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-pull-request-review/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-quality-review/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-queue-status/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-remote-dispatch/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-reproduce-bug/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-research/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-review-implementation/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-review-local/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-rework-triage/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-root-cause-analysis/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-secrets-access/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-security-review/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-security-zap-scan/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-sentry-access/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-atlassian/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-automations/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-confluence/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-github/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-github-repo/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-jira/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-kane/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-linear/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-local-env/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-notion/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-aws/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-sonar/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-workstation/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-sonarcloud-access/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-spec-conformance/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-starter-sync/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-sync-down/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-task-decomposition/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-task-triage/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tdd-implementation/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tear-down-automations/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-test-strategy/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-ticket-triage/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-track/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-add-journey/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-build-intake/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-claim/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-create/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-evidence/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-journey/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-read/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-source-artifacts/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-sync/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-validate/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-verify/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-write/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-usage-accounting/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-use-the-product/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-validate-tracker-mapping/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-verification-lifecycle/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-verify/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-verify-prd/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-verify-workflow-change/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-wiki-install/SKILL.md +2 -0
- package/plugins/lisa/hooks/worktree-binding-guard.mjs +225 -33
- package/plugins/lisa/rules/reference/design-source-of-truth.md +1 -1
- package/plugins/lisa/rules/reference/rejection-detection.md +1 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/skills/lisa-setup-aws/SKILL.md +3 -1
- package/plugins/lisa-cdk/.codex-plugin/skills/lisa-setup-aws/agents/openai.yaml +2 -2
- package/plugins/lisa-cdk/.codex-plugin/skills/setup-aws-accounts/SKILL.md +2 -0
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/hooks/worktree-binding-guard.mjs +225 -33
- package/plugins/lisa-copilot/rules/reference/design-source-of-truth.md +1 -1
- package/plugins/lisa-copilot/rules/reference/rejection-detection.md +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/hooks/worktree-binding-guard.mjs +225 -33
- package/plugins/lisa-cursor/rules/design-source-of-truth-reference.mdc +1 -1
- package/plugins/lisa-cursor/rules/rejection-detection-reference.mdc +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/skills/add-app-clip/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/apollo-client/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/atomic-design-gluestack/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/building-native-ui/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/cross-platform-compatibility/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/directory-structure/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/e2e-coverage-gaps/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/eas-update-insights/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-api-routes/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-brownfield/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-cicd-workflows/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-deployment/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-dev-client/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-env-config/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-module/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-router-best-practices/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-tailwind-setup/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-ui-jetpack-compose/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/expo-ui-swift-ui/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/gluestack-nativewind/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-add-journey/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-create/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-evidence/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-journey/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/jira-verify/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/lisa-e2e-coverage-gaps/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/lisa-maestro-mcp-setup/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/local-state/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/maestro-mcp-setup/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/native-data-fetching/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-browser-uat/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-check-logs/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-db-ops/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-deploy/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-monitor-errors/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-performance/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-run-local/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/ops-verify-health/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/owasp-zap/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/play-store-access/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/playwright-ci-debugging/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/playwright-selectors/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/reduce-complexity/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/testing-library/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/upgrading-expo/SKILL.md +2 -0
- package/plugins/lisa-expo/.codex-plugin/skills/use-dom/SKILL.md +2 -0
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/e2e-coverage-gaps/SKILL.md +2 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-auth/SKILL.md +2 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-build-and-deploy/SKILL.md +2 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-caching/SKILL.md +2 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-component-model/SKILL.md +2 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-config-yaml/SKILL.md +2 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-operations/SKILL.md +2 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-realtime/SKILL.md +2 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-resources/SKILL.md +2 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-rest-queries/SKILL.md +2 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-schema-graphql/SKILL.md +3 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-schema-graphql/agents/openai.yaml +2 -2
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/harper-testing/SKILL.md +2 -0
- package/plugins/lisa-harper-fabric/.codex-plugin/skills/lisa-e2e-coverage-gaps/SKILL.md +2 -0
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-graphql/SKILL.md +2 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/nestjs-rules/SKILL.md +2 -0
- package/plugins/lisa-nestjs/.codex-plugin/skills/typeorm-patterns/SKILL.md +2 -0
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-repo-topic/SKILL.md +2 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-staff-slack/SKILL.md +2 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-connect-staff-telegram/SKILL.md +2 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-repo-topic/SKILL.md +2 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-connect-staff/SKILL.md +2 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-openclaw-setup/SKILL.md +2 -0
- package/plugins/lisa-openclaw/.codex-plugin/skills/lisa-setup-openclaw/SKILL.md +2 -0
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-accessibility/SKILL.md +2 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-asset-pipeline/SKILL.md +2 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-asset-sourcing/SKILL.md +2 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-build-deploy/SKILL.md +2 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-i18n/SKILL.md +2 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-project-structure/SKILL.md +2 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-services/SKILL.md +2 -0
- package/plugins/lisa-phaser/.codex-plugin/skills/phaser-testing/SKILL.md +2 -0
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/skills/action-controller-best-practices/SKILL.md +2 -0
- package/plugins/lisa-rails/.codex-plugin/skills/action-view-best-practices/SKILL.md +2 -0
- package/plugins/lisa-rails/.codex-plugin/skills/active-record-model-best-practices/SKILL.md +2 -0
- package/plugins/lisa-rails/.codex-plugin/skills/e2e-coverage-gaps/SKILL.md +2 -0
- package/plugins/lisa-rails/.codex-plugin/skills/fix-linter-error/SKILL.md +2 -0
- package/plugins/lisa-rails/.codex-plugin/skills/improve-code-complexity/SKILL.md +2 -0
- package/plugins/lisa-rails/.codex-plugin/skills/improve-max-lines/SKILL.md +2 -0
- package/plugins/lisa-rails/.codex-plugin/skills/improve-max-lines-per-function/SKILL.md +2 -0
- package/plugins/lisa-rails/.codex-plugin/skills/improve-test-coverage/SKILL.md +2 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-add-journey/SKILL.md +2 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-create/SKILL.md +2 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-evidence/SKILL.md +2 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-journey/SKILL.md +2 -0
- package/plugins/lisa-rails/.codex-plugin/skills/jira-verify/SKILL.md +2 -0
- package/plugins/lisa-rails/.codex-plugin/skills/lisa-e2e-coverage-gaps/SKILL.md +2 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-check-logs/SKILL.md +2 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-deploy/SKILL.md +2 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-run-local/SKILL.md +2 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-verify-jobs/SKILL.md +2 -0
- package/plugins/lisa-rails/.codex-plugin/skills/ops-verify-telemetry/SKILL.md +2 -0
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-add-ingest/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-add-role/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-ingest/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-lint/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-migrate/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-onboard-me/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-query/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-setup/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-setup-wiki/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-status/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-add-ingest/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-add-role/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-confluence/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-docs/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-git/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-jira/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-memory/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-notion/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-roles/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-slack/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-connector-web/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-doctor/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-ingest/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-lint/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-migrate/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-onboard-me/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-query/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-setup/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-setup-automations/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-status/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-tear-down-automations/SKILL.md +2 -0
- package/plugins/lisa-wiki/.codex-plugin/skills/lisa-wiki-usage/SKILL.md +2 -0
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/hooks/worktree-binding-guard.mjs +225 -33
- package/plugins/src/base/rules/reference/design-source-of-truth.md +1 -1
- package/plugins/src/base/rules/reference/rejection-detection.md +1 -1
- package/scripts/generate-codex-plugin-artifacts.mjs +11 -6
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: lisa-wiki-connector-confluence
|
|
3
3
|
description: "Produce sanitized Confluence…"
|
|
4
4
|
---
|
|
5
|
+
Produce sanitized Confluence source notes for lisa-wiki ingest via the Atlassian MCP. Use only when lisa-wiki-ingest routes to the confluence connector. Read-only; tenant-guarded.
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
# lisa-wiki-connector-confluence
|
|
7
9
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: lisa-wiki-connector-docs
|
|
3
3
|
description: "Ingest a local document (PDF…"
|
|
4
4
|
---
|
|
5
|
+
Ingest a local document (PDF, DOCX, Markdown, text) into a sanitized source note for lisa-wiki ingest. Use only when lisa-wiki-ingest routes to the docs connector (a file-path input). Uses available local converters; no heavy bundled dependency.
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
# lisa-wiki-connector-docs
|
|
7
9
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: lisa-wiki-connector-git
|
|
3
3
|
description: "Produce sanitized…"
|
|
4
4
|
---
|
|
5
|
+
Produce sanitized git/PR-history source notes for lisa-wiki ingest. Use only when lisa-wiki-ingest routes to the git connector (self repo or a registered project). Read-only — never checks out, fetches, or mutates the target repo.
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
# lisa-wiki-connector-git
|
|
7
9
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: lisa-wiki-connector-jira
|
|
3
3
|
description: "Produce sanitized JIRA source…"
|
|
4
4
|
---
|
|
5
|
+
Produce sanitized JIRA source notes for lisa-wiki ingest via the Atlassian MCP. Use only when lisa-wiki-ingest routes to the jira connector. Read-only; tenant-guarded.
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
# lisa-wiki-connector-jira
|
|
7
9
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: lisa-wiki-connector-memory
|
|
3
3
|
description: "Ingest the agent's…"
|
|
4
4
|
---
|
|
5
|
+
Ingest the agent's PROJECT-SCOPED memory into a sanitized source note. Use only when lisa-wiki-ingest routes to the memory connector. NEVER ingests global or unrelated memory — global Codex memory and the Chronicle store are refused.
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
# lisa-wiki-connector-memory
|
|
7
9
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: lisa-wiki-connector-notion
|
|
3
3
|
description: "Produce sanitized Notion source…"
|
|
4
4
|
---
|
|
5
|
+
Produce sanitized Notion source notes for lisa-wiki ingest via the Notion MCP. Use only when lisa-wiki-ingest routes to the notion connector. Read-only; teamspace-guarded.
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
# lisa-wiki-connector-notion
|
|
7
9
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: lisa-wiki-connector-roles
|
|
3
3
|
description: "Ingest the wiki's own…"
|
|
4
4
|
---
|
|
5
|
+
Ingest the wiki's own digital-staff roster (config.staff[] + wiki/staff/*) into a sanitized source note. Use only when lisa-wiki-ingest routes to the roles connector. Does not run any subagent.
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
# lisa-wiki-connector-roles
|
|
7
9
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: lisa-wiki-connector-slack
|
|
3
3
|
description: "Ingest a Slack channel into…"
|
|
4
4
|
---
|
|
5
|
+
Ingest a Slack channel into sanitized source notes via a user token. Use only when lisa-wiki-ingest routes to the slack connector AND the run carries explicit external-write intent (Slack OAuth opens a browser and stores a token file). Centralized stdlib-Python scripts; secrets are redacted.
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
# lisa-wiki-connector-slack
|
|
7
9
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: lisa-wiki-connector-web
|
|
3
3
|
description: "Ingest a public URL into a…"
|
|
4
4
|
---
|
|
5
|
+
Ingest a public URL into a sanitized source note for lisa-wiki ingest (via WebFetch). Use only when lisa-wiki-ingest routes to the web connector (a URL input). Read-only.
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
# lisa-wiki-connector-web
|
|
7
9
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: lisa-wiki-doctor
|
|
3
3
|
description: "Verify that a wiki is correctly…"
|
|
4
4
|
---
|
|
5
|
+
Verify that a wiki is correctly set up and (after migration) fully functional. Runs the deterministic checks plus functional smoke tests, writes a doctor report, and returns an overall verdict. Use as the final gate of /migrate, after /setup, or anytime to confirm wiki health. A repo is not "migrated" until its doctor verdict is READY.
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
# lisa-wiki-doctor
|
|
7
9
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: lisa-wiki-ingest
|
|
3
3
|
description: "Ingest source material into the…"
|
|
4
4
|
---
|
|
5
|
+
Ingest source material into the LLM Wiki. With an argument (URL, file path, or prompt) it ingests that one source; with no argument it runs a full ingest across every enabled non-external-write source. Routes to the right connector, then runs the ordered pipeline (source note → synthesis → index → log → verify → state → commit/PR). Use whenever new knowledge should enter the wiki.
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
# lisa-wiki-ingest
|
|
7
9
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: lisa-wiki-lint
|
|
3
3
|
description: "Health-check the LLM Wiki"
|
|
4
4
|
---
|
|
5
|
+
Health-check the LLM Wiki. Reports orphan pages, contradictions, stale claims, broken internal links, missing index/log coverage, structure-manifest violations, and secret/tenant leaks. Use periodically or before hardening a wiki. Read-only — it reports findings, it does not fix them.
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
# lisa-wiki-lint
|
|
7
9
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: lisa-wiki-migrate
|
|
3
3
|
description: "Migrate an existing…"
|
|
4
4
|
---
|
|
5
|
+
Migrate an existing, hand-rolled wiki implementation onto the lisa-wiki kernel — phased and compatibility-first, with a strict no-loss guarantee. Use when adopting lisa-wiki in a repo that already has its own wiki/, ingest skills, docs, or roles. Renaming things into the canonical shape is fine; losing functionality or data is not. Ends by running /doctor.
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
# lisa-wiki-migrate
|
|
7
9
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: lisa-wiki-onboard-me
|
|
3
3
|
description: "Onboard a user to the project…"
|
|
4
4
|
---
|
|
5
|
+
Onboard a user to the project via its LLM Wiki. Interviews the user about themselves in relation to the project, captures that to project-scoped memory only, then gives a guided tour of what the project is and sample questions they can ask. Use when someone is new to the project or asks to be onboarded. Read-mostly — it does not open PRs or write PII into the wiki.
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
# lisa-wiki-onboard-me
|
|
7
9
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: lisa-wiki-query
|
|
3
3
|
description: "Answer a question from the LLM…"
|
|
4
4
|
---
|
|
5
|
+
Answer a question from the LLM Wiki with citations. Reads the index, drills into relevant pages, and synthesizes a cited answer. Read-only by default; only files new synthesis back into the wiki when the user explicitly asks. Use when someone asks a question the wiki should be able to answer, or wants to explore what the wiki knows.
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
# lisa-wiki-query
|
|
7
9
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: lisa-wiki-setup
|
|
3
3
|
description: "Scaffold, repair, verify, or…"
|
|
4
4
|
---
|
|
5
|
+
Scaffold, repair, verify, or upgrade a project's LLM Wiki from its config. Use when setting up the wiki in a new repo, fixing a broken/incomplete structure, or upgrading to a newer kernel version. Asks the wiki's purpose and README mode, renders the contract snapshot, scaffolds the canonical folders, and seeds the staff roster. Idempotent and non-destructive.
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
# lisa-wiki-setup
|
|
7
9
|
|
|
@@ -3,6 +3,8 @@ name: lisa-wiki-setup-automations
|
|
|
3
3
|
description: "Set up the recurring LLM Wiki…"
|
|
4
4
|
allowed-tools: ["Skill", "Bash", "Read"]
|
|
5
5
|
---
|
|
6
|
+
Set up the recurring LLM Wiki ingest automation on the local workstation using the CURRENT runtime's native scheduler — Codex automations (the native automations / automation_update mechanism) or, on Claude, /schedule. This skill is a declarative specification: it states WHICH automation to create, how often, and with which command; it does not template schedule files or run scheduling code itself — the runtime's native automation mechanism does the creating. Creates one automation: wiki-ingest, a full /lisa-wiki:ingest cycle, once a day by default (override with cadence). Named and scoped lisa-wiki-auto-<project>-* so it never collides with or clobbers the base /setup-automations set. The wiki counterpart of /lisa:setup-automations — it lives here because the wiki plugin is standalone and installable without the base plugin. Tear down with /lisa-wiki:tear-down-automations.
|
|
7
|
+
|
|
6
8
|
|
|
7
9
|
# Set up LLM Wiki automations: $ARGUMENTS
|
|
8
10
|
|
|
@@ -3,6 +3,8 @@ name: lisa-wiki-status
|
|
|
3
3
|
description: "Report Lisa wiki source…"
|
|
4
4
|
allowed-tools: ["Bash", "Read"]
|
|
5
5
|
---
|
|
6
|
+
Report Lisa wiki source freshness across enabled ingestion connectors. Reads wiki config, log, source notes, and state cursors, then renders a concise read-only freshness table with skipped/blocker reasons and exact next actions. Use when maintainers ask whether the wiki sources are fresh, stale, skipped, blocked, or need targeted ingest.
|
|
7
|
+
|
|
6
8
|
|
|
7
9
|
# lisa-wiki-status
|
|
8
10
|
|
|
@@ -3,6 +3,8 @@ name: lisa-wiki-tear-down-automations
|
|
|
3
3
|
description: "Remove the recurring LLM Wiki…"
|
|
4
4
|
allowed-tools: ["Skill", "Bash", "Read"]
|
|
5
5
|
---
|
|
6
|
+
Remove the recurring LLM Wiki ingest automation that /lisa-wiki:setup-automations created for this project (the lisa-wiki-auto-<project>-* set) using the CURRENT runtime's native scheduler — Codex automations or, on Claude, /schedule. This skill is a declarative specification: it identifies WHICH automation to remove; it does not run teardown scripts. Removes only this project's wiki automations — never the base /setup-automations set, other projects' automations, or non-Lisa ones. The inverse of /lisa-wiki:setup-automations.
|
|
7
|
+
|
|
6
8
|
|
|
7
9
|
# Tear down LLM Wiki automations: $ARGUMENTS
|
|
8
10
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
name: lisa-wiki-usage
|
|
3
3
|
description: "Explain how to browse, query…"
|
|
4
4
|
---
|
|
5
|
+
Explain how to browse, query, and contribute to this project's LLM Wiki. Use when a user asks how the wiki works, where knowledge lives, how to find something, or how to add to it — the read/navigation path, not an ingestion or write workflow.
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
# lisa-wiki-usage
|
|
7
9
|
|
|
@@ -35,9 +35,9 @@
|
|
|
35
35
|
* first attempt and lets the retry through is defeated by a blind retry, which
|
|
36
36
|
* is the single most likely next action. So the block stands until the session
|
|
37
37
|
* states, in the acknowledgement, the absolute path it now intends to work in.
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
38
|
+
* An acknowledgement can choose the observed root, return to the initial root,
|
|
39
|
+
* or accept a linked target this session was explicitly offered. A selected
|
|
40
|
+
* target does not prove a move: the next guarded call must actually be there.
|
|
41
41
|
*
|
|
42
42
|
* FAILING OPEN, LOUDLY. Anything this cannot determine — no session id, no
|
|
43
43
|
* cwd, not a git repository, an unreadable state file — exits 0 with a line on
|
|
@@ -68,6 +68,7 @@ const GUARDED_TOOLS = new Set(["Bash", "Write", "Edit", "MultiEdit"]);
|
|
|
68
68
|
* on its own PreToolUse pass — which is exactly where a command string arrives.
|
|
69
69
|
*/
|
|
70
70
|
const ACCEPT_PREFIX = "lisa-worktree-binding: accept";
|
|
71
|
+
const ACK_AND_SEPARATOR = Symbol("acknowledgement AND separator");
|
|
71
72
|
|
|
72
73
|
/**
|
|
73
74
|
* Resolve a path the way git reports one.
|
|
@@ -154,6 +155,46 @@ function mainCheckout(cwd) {
|
|
|
154
155
|
return null;
|
|
155
156
|
}
|
|
156
157
|
|
|
158
|
+
/** Registered roots of the bound repository, with Git path quoting disabled. */
|
|
159
|
+
function linkedWorktreeRoots(bound) {
|
|
160
|
+
const listing = git(["worktree", "list", "--porcelain", "-z"], bound);
|
|
161
|
+
if (listing === null) {
|
|
162
|
+
say(
|
|
163
|
+
"git could not identify linked worktrees; repository identity is NOT enforced"
|
|
164
|
+
);
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
return new Set(
|
|
168
|
+
listing
|
|
169
|
+
.split("\0")
|
|
170
|
+
.filter(record => record.startsWith("worktree "))
|
|
171
|
+
.map(record => realpath(record.slice("worktree ".length)))
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/** Canonical common Git directory: stable identity across linked checkouts. */
|
|
176
|
+
function repositoryIdentity(root) {
|
|
177
|
+
if (typeof root !== "string") return null;
|
|
178
|
+
const common = git(["rev-parse", "--git-common-dir"], root);
|
|
179
|
+
if (common === null) {
|
|
180
|
+
say("git could not compare repository identity; identity is NOT enforced");
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
return realpath(resolve(root, common));
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/** A registration is only authoritative while its live repository agrees. */
|
|
187
|
+
function isLinkedWorktree(
|
|
188
|
+
bound,
|
|
189
|
+
candidate,
|
|
190
|
+
roots = linkedWorktreeRoots(bound)
|
|
191
|
+
) {
|
|
192
|
+
if (!roots?.has(candidate) || worktreeRoot(candidate) !== candidate)
|
|
193
|
+
return false;
|
|
194
|
+
const common = repositoryIdentity(bound);
|
|
195
|
+
return common !== null && common === repositoryIdentity(candidate);
|
|
196
|
+
}
|
|
197
|
+
|
|
157
198
|
/**
|
|
158
199
|
* How much of an executed script this guard will read, in bytes.
|
|
159
200
|
*
|
|
@@ -297,6 +338,7 @@ function executedPath(segment) {
|
|
|
297
338
|
* fooled by exactly that and was caught only by a known-answer control.
|
|
298
339
|
*/
|
|
299
340
|
function foreignTreeIn(text, bound, cwd) {
|
|
341
|
+
let linkedRoots;
|
|
300
342
|
const code = text
|
|
301
343
|
.split("\n")
|
|
302
344
|
.map(line => line.replace(/^\s*#.*$/u, ""))
|
|
@@ -317,7 +359,10 @@ function foreignTreeIn(text, bound, cwd) {
|
|
|
317
359
|
} catch {
|
|
318
360
|
continue;
|
|
319
361
|
}
|
|
320
|
-
if (root && root !== bound)
|
|
362
|
+
if (root && root !== bound) {
|
|
363
|
+
if (linkedRoots === undefined) linkedRoots = linkedWorktreeRoots(bound);
|
|
364
|
+
if (isLinkedWorktree(bound, root, linkedRoots)) return root;
|
|
365
|
+
}
|
|
321
366
|
}
|
|
322
367
|
return null;
|
|
323
368
|
}
|
|
@@ -496,10 +541,10 @@ function reachesOut(script, foreign, bound) {
|
|
|
496
541
|
` script: ${script}`,
|
|
497
542
|
` reaches: ${foreign}`,
|
|
498
543
|
` bound to: ${bound}`,
|
|
499
|
-
"The
|
|
500
|
-
"
|
|
501
|
-
"belongs to, or acknowledge the move:",
|
|
544
|
+
"The access lives inside the file, after this guard measures the session.",
|
|
545
|
+
"Run the work from the tree it belongs to, or acknowledge that target:",
|
|
502
546
|
acceptanceLine(foreign),
|
|
547
|
+
"Then move to the acknowledged tree before further guarded calls.",
|
|
503
548
|
]);
|
|
504
549
|
}
|
|
505
550
|
|
|
@@ -599,9 +644,8 @@ function readState(bindingKeyValue, payload) {
|
|
|
599
644
|
/**
|
|
600
645
|
* Write the session's binding state, MERGING over whatever is already there.
|
|
601
646
|
*
|
|
602
|
-
*
|
|
603
|
-
*
|
|
604
|
-
* What it buys is that a field one writer owns is not silently dropped by
|
|
647
|
+
* Explicit `claimedRoot: null` still clears a claim. Merging means that a
|
|
648
|
+
* field one writer owns is not silently dropped by
|
|
605
649
|
* another writer that had no opinion about it: `runtimeNoticed` is written by
|
|
606
650
|
* {@link noticeRuntimeDrift} and read by nobody else, and a clobbering write
|
|
607
651
|
* would turn its "reported once" into "reported again after the next
|
|
@@ -614,12 +658,24 @@ function readState(bindingKeyValue, payload) {
|
|
|
614
658
|
*/
|
|
615
659
|
function writeState(bindingKeyValue, state, payload) {
|
|
616
660
|
const file = stateFile(bindingKeyValue);
|
|
661
|
+
const previous = readState(bindingKeyValue, payload);
|
|
662
|
+
const originalRoot =
|
|
663
|
+
previous?.originalRoot ?? previous?.boundRoot ?? state.boundRoot;
|
|
664
|
+
const originalCommonDir =
|
|
665
|
+
previous?.originalCommonDir ?? repositoryIdentity(originalRoot);
|
|
617
666
|
try {
|
|
618
667
|
mkdirSync(dirname(file), { recursive: true });
|
|
619
668
|
writeFileSync(
|
|
620
669
|
file,
|
|
621
670
|
`${JSON.stringify(
|
|
622
|
-
{
|
|
671
|
+
{
|
|
672
|
+
...previous,
|
|
673
|
+
...state,
|
|
674
|
+
// Preserve the initial root after intentional rebinds. A legacy
|
|
675
|
+
// state's established root is its only proven recovery anchor.
|
|
676
|
+
originalRoot,
|
|
677
|
+
originalCommonDir,
|
|
678
|
+
},
|
|
623
679
|
null,
|
|
624
680
|
2
|
|
625
681
|
)}\n`
|
|
@@ -746,43 +802,161 @@ function refuse(lines) {
|
|
|
746
802
|
}
|
|
747
803
|
|
|
748
804
|
function acceptanceLine(observed) {
|
|
749
|
-
|
|
805
|
+
const literal = `${ACCEPT_PREFIX} ${observed}`.replaceAll("'", "'\\''");
|
|
806
|
+
return ` echo '${literal}'`;
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
/** Read literal shell words and AND separators without evaluating expansions. */
|
|
810
|
+
function acknowledgementWords(text) {
|
|
811
|
+
const words = [];
|
|
812
|
+
let word = "",
|
|
813
|
+
active = false,
|
|
814
|
+
quote = null;
|
|
815
|
+
const emit = () => {
|
|
816
|
+
if (active) words.push(word);
|
|
817
|
+
word = "";
|
|
818
|
+
active = false;
|
|
819
|
+
};
|
|
820
|
+
for (let index = 0; index < text.length; index += 1) {
|
|
821
|
+
const char = text[index];
|
|
822
|
+
if (quote === "'") {
|
|
823
|
+
if (char === "'") quote = null;
|
|
824
|
+
else word += char;
|
|
825
|
+
continue;
|
|
826
|
+
}
|
|
827
|
+
if (char === "\\") {
|
|
828
|
+
const next = text[index + 1];
|
|
829
|
+
if (next === undefined) return null;
|
|
830
|
+
if (quote === '"' && !['"', "\\", "$", "`", "\n"].includes(next)) {
|
|
831
|
+
word += char;
|
|
832
|
+
continue;
|
|
833
|
+
}
|
|
834
|
+
index += 1;
|
|
835
|
+
if (next !== "\n") {
|
|
836
|
+
word += next;
|
|
837
|
+
active = true;
|
|
838
|
+
}
|
|
839
|
+
continue;
|
|
840
|
+
}
|
|
841
|
+
if (quote === '"') {
|
|
842
|
+
if (char === '"') quote = null;
|
|
843
|
+
else if (char === "$" || char === "`") return null;
|
|
844
|
+
else word += char;
|
|
845
|
+
continue;
|
|
846
|
+
}
|
|
847
|
+
if (char === "'" || char === '"') {
|
|
848
|
+
quote = char;
|
|
849
|
+
active = true;
|
|
850
|
+
} else if (char === " " || char === "\t") emit();
|
|
851
|
+
else if (char === "\n") return null;
|
|
852
|
+
else if (char === "&" && text[index + 1] === "&") {
|
|
853
|
+
emit();
|
|
854
|
+
words.push(ACK_AND_SEPARATOR);
|
|
855
|
+
index += 1;
|
|
856
|
+
} else if (/[&;|<>$`*?[\]{}()]/u.test(char)) return null;
|
|
857
|
+
else {
|
|
858
|
+
word += char;
|
|
859
|
+
active = true;
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
if (quote !== null) return null;
|
|
863
|
+
emit();
|
|
864
|
+
return words;
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
/** Strip only actual shell edge whitespace in linear time. */
|
|
868
|
+
function acknowledgementText(command) {
|
|
869
|
+
let start = 0,
|
|
870
|
+
end = command.length;
|
|
871
|
+
while (start < end && " \t\n".includes(command[start])) start += 1;
|
|
872
|
+
while (end > start && " \t\n".includes(command[end - 1])) end -= 1;
|
|
873
|
+
return command.slice(start, end);
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
/** A literal echo, optionally preceded by a literal cd to the stated root. */
|
|
877
|
+
function acceptanceRequest(command) {
|
|
878
|
+
const text = acknowledgementText(command);
|
|
879
|
+
const words = acknowledgementWords(text.replace(/;$/u, ""));
|
|
880
|
+
if (!words) return null;
|
|
881
|
+
const direct = words.length === 2 && words[0] === "echo";
|
|
882
|
+
const moving =
|
|
883
|
+
words.length === 5 &&
|
|
884
|
+
words[0] === "cd" &&
|
|
885
|
+
typeof words[1] === "string" &&
|
|
886
|
+
words[2] === ACK_AND_SEPARATOR &&
|
|
887
|
+
words[3] === "echo";
|
|
888
|
+
if (!direct && !moving) return null;
|
|
889
|
+
const message = words.at(-1);
|
|
890
|
+
if (typeof message !== "string" || !message.startsWith(`${ACCEPT_PREFIX} `))
|
|
891
|
+
return null;
|
|
892
|
+
const stated = message.slice(ACCEPT_PREFIX.length + 1);
|
|
893
|
+
// The printed protocol names absolute roots. Empty/relative operands and
|
|
894
|
+
// cd's special ~, -, or -- forms cannot authorize a move.
|
|
895
|
+
if (!isAbsolute(stated)) return null;
|
|
896
|
+
const path = realpath(stated);
|
|
897
|
+
const destination =
|
|
898
|
+
moving && isAbsolute(words[1]) ? realpath(words[1]) : null;
|
|
899
|
+
return {
|
|
900
|
+
path,
|
|
901
|
+
validMove: !moving || (destination !== null && destination === path),
|
|
902
|
+
};
|
|
750
903
|
}
|
|
751
904
|
|
|
752
905
|
/**
|
|
753
|
-
*
|
|
754
|
-
*
|
|
755
|
-
* The path is compared against what the session is measurably in, not against
|
|
756
|
-
* what it says it wants. An acknowledgement naming somewhere else is the case
|
|
757
|
-
* this is for: it means the operator is reasoning about a tree they are not in.
|
|
906
|
+
* Validate the initial recovery root against the identity captured at baseline.
|
|
907
|
+
* The current checkout may have been removed or deliberately rebound elsewhere.
|
|
758
908
|
*/
|
|
909
|
+
function isOriginalRoot(state, path) {
|
|
910
|
+
const original = state?.originalRoot ?? state?.boundRoot;
|
|
911
|
+
if (path !== original || worktreeRoot(path) !== path) return false;
|
|
912
|
+
// Older state can only prove the repository of its established binding.
|
|
913
|
+
const common = state.originalCommonDir ?? repositoryIdentity(state.boundRoot);
|
|
914
|
+
return common !== null && common === repositoryIdentity(path);
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
/** Acknowledgements select intent; the next call must prove actual movement. */
|
|
759
918
|
function handleAcceptance(payload, observed) {
|
|
760
919
|
const command = payload.tool_input?.command;
|
|
761
920
|
if (typeof command !== "string" || !command.includes(ACCEPT_PREFIX))
|
|
762
921
|
return null;
|
|
763
|
-
const
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
const
|
|
767
|
-
const
|
|
768
|
-
|
|
922
|
+
const request = acceptanceRequest(command);
|
|
923
|
+
if (!request) return null;
|
|
924
|
+
const { path, validMove } = request;
|
|
925
|
+
const previous = readState(bindingKey(payload), payload);
|
|
926
|
+
const original = previous?.originalRoot ?? previous?.boundRoot;
|
|
927
|
+
const recovering = isOriginalRoot(previous, path);
|
|
928
|
+
const offered =
|
|
929
|
+
path === previous?.offeredRoot &&
|
|
930
|
+
isLinkedWorktree(previous.boundRoot, path);
|
|
931
|
+
if (!validMove || (path !== observed && !recovering && !offered)) {
|
|
932
|
+
const suggestion = observed ?? original;
|
|
769
933
|
return refuse([
|
|
770
934
|
`worktree-binding-guard: this acknowledgement names ${path ?? "no path"},`,
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
935
|
+
"but it is not a valid move to the observed, original, or offered worktree. Not rebinding.",
|
|
936
|
+
...(suggestion
|
|
937
|
+
? [
|
|
938
|
+
"Acknowledge the measured or original worktree:",
|
|
939
|
+
acceptanceLine(suggestion),
|
|
940
|
+
]
|
|
941
|
+
: []),
|
|
774
942
|
]);
|
|
775
943
|
}
|
|
776
|
-
writeState(
|
|
944
|
+
const written = writeState(
|
|
777
945
|
bindingKey(payload),
|
|
778
946
|
{
|
|
779
|
-
boundRoot:
|
|
947
|
+
boundRoot: path,
|
|
780
948
|
claimedRoot: null,
|
|
949
|
+
offeredRoot: null,
|
|
781
950
|
updatedAt: new Date().toISOString(),
|
|
782
951
|
},
|
|
783
952
|
payload
|
|
784
953
|
);
|
|
785
|
-
|
|
954
|
+
if (written)
|
|
955
|
+
say(
|
|
956
|
+
path === observed
|
|
957
|
+
? `bound to ${path}`
|
|
958
|
+
: `binding set to ${path}; move there before further guarded calls`
|
|
959
|
+
);
|
|
786
960
|
return 0;
|
|
787
961
|
}
|
|
788
962
|
|
|
@@ -982,6 +1156,11 @@ function evaluate(payload) {
|
|
|
982
1156
|
}
|
|
983
1157
|
const binding = bindingKey(payload);
|
|
984
1158
|
const observed = worktreeRoot(cwd);
|
|
1159
|
+
// The initial-root recovery acknowledgement also works outside any repo.
|
|
1160
|
+
if (GUARDED_TOOLS.has(payload.tool_name)) {
|
|
1161
|
+
const accepted = handleAcceptance(payload, observed);
|
|
1162
|
+
if (accepted !== null) return accepted;
|
|
1163
|
+
}
|
|
985
1164
|
if (!observed) return 0;
|
|
986
1165
|
|
|
987
1166
|
if (payload.hook_event_name === "SessionStart") {
|
|
@@ -993,14 +1172,18 @@ function evaluate(payload) {
|
|
|
993
1172
|
return 0;
|
|
994
1173
|
}
|
|
995
1174
|
if (payload.tool_name === "EnterWorktree") {
|
|
1175
|
+
const previous = readState(binding, payload);
|
|
1176
|
+
if (
|
|
1177
|
+
previous?.boundRoot &&
|
|
1178
|
+
previous.boundRoot !== observed &&
|
|
1179
|
+
!isLinkedWorktree(previous.boundRoot, observed)
|
|
1180
|
+
)
|
|
1181
|
+
return 0;
|
|
996
1182
|
recordClaim(payload, observed);
|
|
997
1183
|
return 0;
|
|
998
1184
|
}
|
|
999
1185
|
if (!GUARDED_TOOLS.has(payload.tool_name)) return 0;
|
|
1000
1186
|
|
|
1001
|
-
const accepted = handleAcceptance(payload, observed);
|
|
1002
|
-
if (accepted !== null) return accepted;
|
|
1003
|
-
|
|
1004
1187
|
const state = readState(binding, payload);
|
|
1005
1188
|
if (!state?.boundRoot) {
|
|
1006
1189
|
// No baseline means SessionStart did not run for this session — an older
|
|
@@ -1021,6 +1204,11 @@ function evaluate(payload) {
|
|
|
1021
1204
|
);
|
|
1022
1205
|
return 0;
|
|
1023
1206
|
}
|
|
1207
|
+
if (
|
|
1208
|
+
state.boundRoot !== observed &&
|
|
1209
|
+
!isLinkedWorktree(state.boundRoot, observed)
|
|
1210
|
+
)
|
|
1211
|
+
return 0;
|
|
1024
1212
|
if (state.claimedRoot && state.claimedRoot !== observed) {
|
|
1025
1213
|
return unconfirmedSwitch(state.claimedRoot, observed);
|
|
1026
1214
|
}
|
|
@@ -1030,6 +1218,7 @@ function evaluate(payload) {
|
|
|
1030
1218
|
{
|
|
1031
1219
|
boundRoot: observed,
|
|
1032
1220
|
claimedRoot: null,
|
|
1221
|
+
offeredRoot: null,
|
|
1033
1222
|
updatedAt: new Date().toISOString(),
|
|
1034
1223
|
},
|
|
1035
1224
|
payload
|
|
@@ -1040,7 +1229,10 @@ function evaluate(payload) {
|
|
|
1040
1229
|
// Last, and only once the session is provably where it should be: a script
|
|
1041
1230
|
// that moves somewhere else after this check has already run.
|
|
1042
1231
|
const reach = scriptReachingForeignTree(payload, observed);
|
|
1043
|
-
if (reach)
|
|
1232
|
+
if (reach) {
|
|
1233
|
+
writeState(binding, { offeredRoot: reach.foreign }, payload);
|
|
1234
|
+
return reachesOut(reach.script, reach.foreign, observed);
|
|
1235
|
+
}
|
|
1044
1236
|
return 0;
|
|
1045
1237
|
}
|
|
1046
1238
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Design Source of Truth
|
|
2
2
|
|
|
3
3
|
> Demoted from the always-on eager tier by CodySwannGT/lisa#3992. The
|
|
4
|
-
> section below is the former eager head,
|
|
4
|
+
> section below is the former eager head, preserved verbatim; the full
|
|
5
5
|
> contract follows it. Reachable on demand via [the rule index](../eager/00-rule-index.md).
|
|
6
6
|
|
|
7
7
|
## Design Source of Truth (load-bearing)
|
|
@@ -272,7 +272,7 @@ The state-only reading is what fails today, so a backward move is **not** suffic
|
|
|
272
272
|
- **JIRA** — `lisa-atlassian-access operation: changelog key:<K>`; each changelog entry carries an `author` alongside its `from`/`to` status items.
|
|
273
273
|
- **Linear** — `lisa-linear-access operation: history id:<ID>`; each history node carries an `actor` alongside `fromState` / `toState`.
|
|
274
274
|
|
|
275
|
-
An actor is **this flow** when it is the configured automation identity, or when the flow's own marker note (`[lisa-repair-intake]`) sits at that transition's timestamp.
|
|
275
|
+
An actor is **this flow** when it is the configured automation identity, or when the flow's own marker note (`[lisa-repair-intake]`) sits at that transition's timestamp. A different actor counts as human only when the provider positively identifies a person, rather than a bot, integration, or another automation identity. Missing or ambiguous actor information yields `unknown` — never an assumed human.
|
|
276
276
|
|
|
277
277
|
**A marker and a transition on the same item say nothing until you know their order.** A hold label, a comment and a lane move routinely coexist on a reversed item, and co-occurrence reads equally well in both directions — a label applied *before* a transition guards it, the same label applied *after* records that the transition was undone. Sourcing the facts, attributing them correctly and reading the artifact all pass cleanly on an invented sequence; only ordering disconfirms it. Compare timestamps explicitly and treat an unorderable pair as `unknown`.
|
|
278
278
|
|