visionlog-md 0.2.0__tar.gz
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.
- visionlog_md-0.2.0/.forge/manifest.yaml +42 -0
- visionlog_md-0.2.0/.github/workflows/ci.yml +62 -0
- visionlog_md-0.2.0/.github/workflows/publish.yml +29 -0
- visionlog_md-0.2.0/.gitignore +38 -0
- visionlog_md-0.2.0/.pre-commit-config.yaml +25 -0
- visionlog_md-0.2.0/.visionlog/adr/ADR-001-the-trilogy-must-remain-composable-and-non-prescri.md +29 -0
- visionlog_md-0.2.0/.visionlog/config.yaml +3 -0
- visionlog_md-0.2.0/.visionlog/guardrails/GUARD-001-no-new-cross-cutting-abstractions-without-clearing.md +28 -0
- visionlog_md-0.2.0/.visionlog/sops/SOP-001-goal-decomposition.md +36 -0
- visionlog_md-0.2.0/.visionlog/sops/SOP-002-completion-feedback.md +32 -0
- visionlog_md-0.2.0/.visionlog/sops/SOP-003-blocked-task-escalation.md +37 -0
- visionlog_md-0.2.0/.visionlog/vision.md +41 -0
- visionlog_md-0.2.0/CHANGELOG.md +13 -0
- visionlog_md-0.2.0/CONTRIBUTING.md +50 -0
- visionlog_md-0.2.0/LICENSE +21 -0
- visionlog_md-0.2.0/PKG-INFO +146 -0
- visionlog_md-0.2.0/README.md +123 -0
- visionlog_md-0.2.0/SECURITY.md +24 -0
- visionlog_md-0.2.0/backlog/config.yml +6 -0
- visionlog_md-0.2.0/backlog/tasks/task-1 - visionlog-scan-surface-backlog-from-docs.md +50 -0
- visionlog_md-0.2.0/backlog/tasks/task-2 - documents-layer-register-project-knowledge.md +60 -0
- visionlog_md-0.2.0/backlog/tasks/task-3 - backlog-gap-tool-goals-without-tasks.md +54 -0
- visionlog_md-0.2.0/biome.json +19 -0
- visionlog_md-0.2.0/bun.lock +255 -0
- visionlog_md-0.2.0/defaults.json +20 -0
- visionlog_md-0.2.0/package.json +29 -0
- visionlog_md-0.2.0/pyproject.toml +48 -0
- visionlog_md-0.2.0/refactor/capture-edge-cases.ts +212 -0
- visionlog_md-0.2.0/refactor/capture-fixtures.ts +344 -0
- visionlog_md-0.2.0/refactor/fixtures/decision_create/001-accepted.json +20 -0
- visionlog_md-0.2.0/refactor/fixtures/decision_create/002-with-relations.json +22 -0
- visionlog_md-0.2.0/refactor/fixtures/decision_create/003-supersedes.json +20 -0
- visionlog_md-0.2.0/refactor/fixtures/decision_create/004-full.json +26 -0
- visionlog_md-0.2.0/refactor/fixtures/decision_create/005-rejected.json +19 -0
- visionlog_md-0.2.0/refactor/fixtures/decision_list/001-with-decisions.json +17 -0
- visionlog_md-0.2.0/refactor/fixtures/decision_list/002-empty.json +17 -0
- visionlog_md-0.2.0/refactor/fixtures/decision_update/001-accept.json +20 -0
- visionlog_md-0.2.0/refactor/fixtures/decision_update/002-not-found.json +20 -0
- visionlog_md-0.2.0/refactor/fixtures/decision_update/003-supersede.json +19 -0
- visionlog_md-0.2.0/refactor/fixtures/decision_view/001-exists.json +18 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_create/001-available.json +20 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_create/002-with-deps.json +22 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_create/003-with-backlog-tag.json +23 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_create/004-minimal.json +18 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_create/005-unicode.json +19 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_create/006-long-title.json +19 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_create/007-with-unlocks.json +22 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_create/008-unicode.json +19 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_create/009-long-title.json +19 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_create/010-default-body.json +18 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_create/011-in-progress.json +19 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_create/012-complete.json +19 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_create/013-with-unlocks.json +21 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_list/001-with-goals.json +17 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_list/002-empty.json +17 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_unlockable/001-with-unlockable.json +17 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_unlockable/002-empty.json +17 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_unlockable/003-none-ready.json +17 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_update/001-complete.json +19 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_update/002-not-found.json +20 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_update/003-update-title-body.json +20 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_view/001-exists.json +18 -0
- visionlog_md-0.2.0/refactor/fixtures/goal_view/002-not-found.json +18 -0
- visionlog_md-0.2.0/refactor/fixtures/guardrail_create/001-with-body.json +19 -0
- visionlog_md-0.2.0/refactor/fixtures/guardrail_create/002-minimal.json +18 -0
- visionlog_md-0.2.0/refactor/fixtures/guardrail_create/003-with-adr.json +20 -0
- visionlog_md-0.2.0/refactor/fixtures/guardrail_create/004-unicode.json +19 -0
- visionlog_md-0.2.0/refactor/fixtures/guardrail_create/005-retired.json +19 -0
- visionlog_md-0.2.0/refactor/fixtures/guardrail_inject/001-inject.json +17 -0
- visionlog_md-0.2.0/refactor/fixtures/guardrail_list/001-with-guardrails.json +17 -0
- visionlog_md-0.2.0/refactor/fixtures/guardrail_list/002-empty.json +17 -0
- visionlog_md-0.2.0/refactor/fixtures/guardrail_update/001-retire.json +19 -0
- visionlog_md-0.2.0/refactor/fixtures/guardrail_update/002-not-found.json +20 -0
- visionlog_md-0.2.0/refactor/fixtures/guardrail_update/003-update-body.json +19 -0
- visionlog_md-0.2.0/refactor/fixtures/guardrail_view/001-exists.json +18 -0
- visionlog_md-0.2.0/refactor/fixtures/project_init/001-happy-path.json +18 -0
- visionlog_md-0.2.0/refactor/fixtures/project_init/002-re-init-preserves-id.json +18 -0
- visionlog_md-0.2.0/refactor/fixtures/project_set/001-happy-path.json +17 -0
- visionlog_md-0.2.0/refactor/fixtures/project_set/002-not-found.json +18 -0
- visionlog_md-0.2.0/refactor/fixtures/sop_create/001-active.json +20 -0
- visionlog_md-0.2.0/refactor/fixtures/sop_create/002-deprecated.json +20 -0
- visionlog_md-0.2.0/refactor/fixtures/sop_create/003-with-adr.json +20 -0
- visionlog_md-0.2.0/refactor/fixtures/sop_list/001-with-sops.json +17 -0
- visionlog_md-0.2.0/refactor/fixtures/sop_list/002-default-sops-only.json +17 -0
- visionlog_md-0.2.0/refactor/fixtures/sop_update/001-deprecate.json +19 -0
- visionlog_md-0.2.0/refactor/fixtures/sop_update/002-not-found.json +20 -0
- visionlog_md-0.2.0/refactor/fixtures/sop_update/003-activate.json +19 -0
- visionlog_md-0.2.0/refactor/fixtures/sop_view/001-exists.json +18 -0
- visionlog_md-0.2.0/refactor/fixtures/vision_set/001-set.json +19 -0
- visionlog_md-0.2.0/refactor/fixtures/vision_set/002-overwrite.json +19 -0
- visionlog_md-0.2.0/refactor/fixtures/vision_view/001-no-vision.json +17 -0
- visionlog_md-0.2.0/refactor/fixtures/vision_view/002-with-vision.json +17 -0
- visionlog_md-0.2.0/refactor/fixtures/vision_view/003-after-overwrite.json +17 -0
- visionlog_md-0.2.0/refactor/fixtures/visionlog_status/001-full.json +17 -0
- visionlog_md-0.2.0/refactor/fixtures/visionlog_status/002-empty.json +17 -0
- visionlog_md-0.2.0/refactor/fixtures/visionlog_status/003-mixed.json +17 -0
- visionlog_md-0.2.0/refactor/verify-fixtures.py +208 -0
- visionlog_md-0.2.0/research/token-cost-vs-governance-value/.research/DECISION.md +13 -0
- visionlog_md-0.2.0/research/token-cost-vs-governance-value/.research/candidates/blocked-reason-field.md +25 -0
- visionlog_md-0.2.0/research/token-cost-vs-governance-value/.research/candidates/defaults-check-on-init.md +25 -0
- visionlog_md-0.2.0/research/token-cost-vs-governance-value/.research/candidates/guardrail-inject-boot.md +25 -0
- visionlog_md-0.2.0/research/token-cost-vs-governance-value/.research/candidates/initiative-layer.md +25 -0
- visionlog_md-0.2.0/research/token-cost-vs-governance-value/.research/candidates/open-questions.md +25 -0
- visionlog_md-0.2.0/research/token-cost-vs-governance-value/.research/candidates/sop-list-per-task.md +25 -0
- visionlog_md-0.2.0/research/token-cost-vs-governance-value/.research/candidates/source-research-id.md +25 -0
- visionlog_md-0.2.0/research/token-cost-vs-governance-value/.research/candidates/visionlog-boot-full.md +25 -0
- visionlog_md-0.2.0/research/token-cost-vs-governance-value/.research/candidates/visionlog-goal-id.md +25 -0
- visionlog_md-0.2.0/research/token-cost-vs-governance-value/.research/evaluations/decision-criteria.md +13 -0
- visionlog_md-0.2.0/research/token-cost-vs-governance-value/.research/evaluations/peer-review.md +16 -0
- visionlog_md-0.2.0/research/token-cost-vs-governance-value/.research/evaluations/scoring-matrix.md +26 -0
- visionlog_md-0.2.0/research/token-cost-vs-governance-value/.research/findings/0001-token-cost-of-full-visionlog_boot-on-a-mature-project.md +20 -0
- visionlog_md-0.2.0/research/token-cost-vs-governance-value/.research/findings/0002-sop_list-per-task-full-bodies-is-the-most-expensive-pattern.md +20 -0
- visionlog_md-0.2.0/research/token-cost-vs-governance-value/.research/findings/0003-metadata-fields-source_research_id-visionlog_goal_id-have-near-zero-ongoing-cost.md +22 -0
- visionlog_md-0.2.0/research/token-cost-vs-governance-value/.research/findings/0004-blocked_reason-field-adds-10-tokens-only-when-a-task-is-actually-blocked.md +20 -0
- visionlog_md-0.2.0/research/token-cost-vs-governance-value/.research/findings/0005-defaults_check-is-a-one-time-or-on-demand-cost-not-per-session.md +20 -0
- visionlog_md-0.2.0/research/token-cost-vs-governance-value/.research/findings/0006-initiative-layer-imposes-cross-session-query-overhead-with-no-bounded-cost.md +20 -0
- visionlog_md-0.2.0/research/token-cost-vs-governance-value/.research/research.json +35 -0
- visionlog_md-0.2.0/src/cli.ts +262 -0
- visionlog_md-0.2.0/src/constants/index.ts +29 -0
- visionlog_md-0.2.0/src/core/visionlog.ts +315 -0
- visionlog_md-0.2.0/src/defaults/bundled.ts +132 -0
- visionlog_md-0.2.0/src/file-system/operations.ts +314 -0
- visionlog_md-0.2.0/src/markdown/parser.ts +114 -0
- visionlog_md-0.2.0/src/markdown/serializer.ts +102 -0
- visionlog_md-0.2.0/src/mcp/registry.ts +111 -0
- visionlog_md-0.2.0/src/mcp/server.ts +56 -0
- visionlog_md-0.2.0/src/mcp/tools/decisions.ts +99 -0
- visionlog_md-0.2.0/src/mcp/tools/defaults.ts +313 -0
- visionlog_md-0.2.0/src/mcp/tools/goals.ts +124 -0
- visionlog_md-0.2.0/src/mcp/tools/guardrails.ts +109 -0
- visionlog_md-0.2.0/src/mcp/tools/sops.ts +92 -0
- visionlog_md-0.2.0/src/mcp/tools/vision.ts +264 -0
- visionlog_md-0.2.0/src/test/concurrency.test.ts +71 -0
- visionlog_md-0.2.0/src/test/config.test.ts +100 -0
- visionlog_md-0.2.0/src/test/dag.test.ts +81 -0
- visionlog_md-0.2.0/src/test/find-root.test.ts +51 -0
- visionlog_md-0.2.0/src/test/helpers.ts +24 -0
- visionlog_md-0.2.0/src/test/next-id.test.ts +63 -0
- visionlog_md-0.2.0/src/test/registry.test.ts +238 -0
- visionlog_md-0.2.0/src/test/roundtrip.test.ts +186 -0
- visionlog_md-0.2.0/src/test/update.test.ts +112 -0
- visionlog_md-0.2.0/src/types/index.ts +146 -0
- visionlog_md-0.2.0/tsconfig.json +14 -0
- visionlog_md-0.2.0/visionlog/adr/ADR-001-guardrails-are-the-kernel-immutable-conscience-not.md +29 -0
- visionlog_md-0.2.0/visionlog/adr/ADR-002-the-separation-governance-is-structure-code-is-sub.md +28 -0
- visionlog_md-0.2.0/visionlog/adr/ADR-003-perceive-before-act-visionlog-boot-and-visionlog-g.md +28 -0
- visionlog_md-0.2.0/visionlog/adr/ADR-004-vision-is-sticky-goals-are-dealt-the-destination-d.md +28 -0
- visionlog_md-0.2.0/visionlog/adr/ADR-005-goals-need-a-vision-challenge-step-before-execution.md +49 -0
- visionlog_md-0.2.0/visionlog/adr/ADR-006-guid-handshake-multi-project-targeting.md +52 -0
- visionlog_md-0.2.0/visionlog/config.yaml +4 -0
- visionlog_md-0.2.0/visionlog/goals/GOAL-001-core-schema-parser-serializer-cli-mcp-server.md +19 -0
- visionlog_md-0.2.0/visionlog/goals/GOAL-002-dogfooding-visionlog-governs-itself.md +19 -0
- visionlog_md-0.2.0/visionlog/goals/GOAL-003-integration-claude-md-injection-session-start-sequ.md +19 -0
- visionlog_md-0.2.0/visionlog/goals/GOAL-004-ecosystem-governs-manyhats-reeves-and-other-eidos-.md +19 -0
- visionlog_md-0.2.0/visionlog/guardrails/GUARD-001-visionlog-md-must-be-governed-by-visionlog-md-neve.md +20 -0
- visionlog_md-0.2.0/visionlog/guardrails/GUARD-002-every-gap-exposed-by-a-consumer-project-is-a-real-.md +20 -0
- visionlog_md-0.2.0/visionlog/guardrails/GUARD-003-always-work-inside-a-backlog-task-no-freeform-codi.md +22 -0
- visionlog_md-0.2.0/visionlog/sops/SOP-001-session-start-orient-before-acting.md +25 -0
- visionlog_md-0.2.0/visionlog/sops/SOP-002-the-vision-challenge-validate-goals-before-executing.md +40 -0
- visionlog_md-0.2.0/visionlog/vision.md +39 -0
- visionlog_md-0.2.0/visionlog_md/__init__.py +3 -0
- visionlog_md-0.2.0/visionlog_md/constants.py +31 -0
- visionlog_md-0.2.0/visionlog_md/core.py +247 -0
- visionlog_md-0.2.0/visionlog_md/defaults.py +97 -0
- visionlog_md-0.2.0/visionlog_md/filesystem.py +263 -0
- visionlog_md-0.2.0/visionlog_md/parser.py +157 -0
- visionlog_md-0.2.0/visionlog_md/serializer.py +119 -0
- visionlog_md-0.2.0/visionlog_md/server.py +481 -0
- visionlog_md-0.2.0/visionlog_md/types.py +85 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
manifest_version: 1
|
|
2
|
+
|
|
3
|
+
repo:
|
|
4
|
+
visibility: public
|
|
5
|
+
org: eidos-agi
|
|
6
|
+
topics: [mcp, vision, governance, guardrails, agent-tools]
|
|
7
|
+
|
|
8
|
+
packaging:
|
|
9
|
+
build_system: hatchling
|
|
10
|
+
pypi:
|
|
11
|
+
name: visionlog-md
|
|
12
|
+
publish: true
|
|
13
|
+
trusted_publisher:
|
|
14
|
+
owner: eidos-agi
|
|
15
|
+
repo: visionlog.md
|
|
16
|
+
workflow: publish.yml
|
|
17
|
+
environment: pypi
|
|
18
|
+
readme:
|
|
19
|
+
absolute_images: true
|
|
20
|
+
|
|
21
|
+
quality:
|
|
22
|
+
required_files:
|
|
23
|
+
- LICENSE
|
|
24
|
+
- README.md
|
|
25
|
+
- CHANGELOG.md
|
|
26
|
+
- CONTRIBUTING.md
|
|
27
|
+
- SECURITY.md
|
|
28
|
+
min_grade:
|
|
29
|
+
foss_check: B
|
|
30
|
+
ship_check: pass
|
|
31
|
+
sec_audit: clean
|
|
32
|
+
|
|
33
|
+
dependencies:
|
|
34
|
+
max_count: 3
|
|
35
|
+
|
|
36
|
+
ci:
|
|
37
|
+
workflows:
|
|
38
|
+
ci: true
|
|
39
|
+
publish: true
|
|
40
|
+
permissions:
|
|
41
|
+
contents_read: true
|
|
42
|
+
pre_commit: true
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
concurrency:
|
|
10
|
+
group: ci-${{ github.ref }}
|
|
11
|
+
cancel-in-progress: true
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
lint:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
- uses: actions/setup-python@v5
|
|
19
|
+
with:
|
|
20
|
+
python-version: "3.12"
|
|
21
|
+
- name: Lint
|
|
22
|
+
run: |
|
|
23
|
+
pip install ruff
|
|
24
|
+
ruff check visionlog_md/
|
|
25
|
+
ruff format --check visionlog_md/
|
|
26
|
+
|
|
27
|
+
test:
|
|
28
|
+
runs-on: ubuntu-latest
|
|
29
|
+
strategy:
|
|
30
|
+
matrix:
|
|
31
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
32
|
+
steps:
|
|
33
|
+
- uses: actions/checkout@v4
|
|
34
|
+
- uses: actions/setup-python@v5
|
|
35
|
+
with:
|
|
36
|
+
python-version: ${{ matrix.python-version }}
|
|
37
|
+
- name: Install dependencies
|
|
38
|
+
run: pip install -e ".[dev]"
|
|
39
|
+
- name: Run fixture verification
|
|
40
|
+
run: python refactor/verify-fixtures.py || true
|
|
41
|
+
- name: Run tests
|
|
42
|
+
run: pytest tests/ -v || echo "No pytest tests yet"
|
|
43
|
+
|
|
44
|
+
build-verify:
|
|
45
|
+
runs-on: ubuntu-latest
|
|
46
|
+
needs: [lint, test]
|
|
47
|
+
steps:
|
|
48
|
+
- uses: actions/checkout@v4
|
|
49
|
+
- uses: actions/setup-python@v5
|
|
50
|
+
with:
|
|
51
|
+
python-version: "3.12"
|
|
52
|
+
- name: Build
|
|
53
|
+
run: |
|
|
54
|
+
pip install build twine
|
|
55
|
+
python -m build
|
|
56
|
+
- name: Verify metadata
|
|
57
|
+
run: twine check dist/*
|
|
58
|
+
- name: Verify wheel installs
|
|
59
|
+
run: |
|
|
60
|
+
python -m venv /tmp/test-venv
|
|
61
|
+
/tmp/test-venv/bin/pip install dist/*.whl
|
|
62
|
+
/tmp/test-venv/bin/python -c "import visionlog_md; print(visionlog_md.__version__)"
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
publish:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
environment: pypi
|
|
11
|
+
permissions:
|
|
12
|
+
id-token: write
|
|
13
|
+
contents: read
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
|
|
17
|
+
- name: Set up Python
|
|
18
|
+
uses: actions/setup-python@v5
|
|
19
|
+
with:
|
|
20
|
+
python-version: "3.12"
|
|
21
|
+
|
|
22
|
+
- name: Install build tools
|
|
23
|
+
run: pip install build
|
|
24
|
+
|
|
25
|
+
- name: Build package
|
|
26
|
+
run: python -m build
|
|
27
|
+
|
|
28
|
+
- name: Publish to PyPI
|
|
29
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Node (TypeScript original)
|
|
2
|
+
node_modules/
|
|
3
|
+
dist/
|
|
4
|
+
*.js.map
|
|
5
|
+
*.tsbuildinfo
|
|
6
|
+
*.db
|
|
7
|
+
|
|
8
|
+
# Python (new primary)
|
|
9
|
+
__pycache__/
|
|
10
|
+
*.py[cod]
|
|
11
|
+
*$py.class
|
|
12
|
+
*.egg-info/
|
|
13
|
+
build/
|
|
14
|
+
*.egg
|
|
15
|
+
*.whl
|
|
16
|
+
|
|
17
|
+
.venv/
|
|
18
|
+
venv/
|
|
19
|
+
env/
|
|
20
|
+
.env
|
|
21
|
+
.env.local
|
|
22
|
+
|
|
23
|
+
.idea/
|
|
24
|
+
.vscode/
|
|
25
|
+
*.swp
|
|
26
|
+
*.swo
|
|
27
|
+
*~
|
|
28
|
+
|
|
29
|
+
.DS_Store
|
|
30
|
+
Thumbs.db
|
|
31
|
+
|
|
32
|
+
.pytest_cache/
|
|
33
|
+
.coverage
|
|
34
|
+
htmlcov/
|
|
35
|
+
.mypy_cache/
|
|
36
|
+
.ruff_cache/
|
|
37
|
+
|
|
38
|
+
.mcp.json
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
3
|
+
rev: v0.8.0
|
|
4
|
+
hooks:
|
|
5
|
+
- id: ruff
|
|
6
|
+
args: [--fix, --exit-non-zero-on-fix]
|
|
7
|
+
- id: ruff-format
|
|
8
|
+
|
|
9
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
10
|
+
rev: v5.0.0
|
|
11
|
+
hooks:
|
|
12
|
+
- id: check-yaml
|
|
13
|
+
- id: check-toml
|
|
14
|
+
- id: end-of-file-fixer
|
|
15
|
+
- id: trailing-whitespace
|
|
16
|
+
- id: check-merge-conflict
|
|
17
|
+
- id: check-added-large-files
|
|
18
|
+
args: ['--maxkb=500']
|
|
19
|
+
- id: detect-private-key
|
|
20
|
+
|
|
21
|
+
- repo: https://github.com/codespell-project/codespell
|
|
22
|
+
rev: v2.3.0
|
|
23
|
+
hooks:
|
|
24
|
+
- id: codespell
|
|
25
|
+
args: [--skip, "*.lock,*.cast"]
|
visionlog_md-0.2.0/.visionlog/adr/ADR-001-the-trilogy-must-remain-composable-and-non-prescri.md
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: "ADR-001"
|
|
3
|
+
type: "decision"
|
|
4
|
+
title: "The trilogy must remain composable and non-prescriptive"
|
|
5
|
+
status: "accepted"
|
|
6
|
+
date: "2026-03-21"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Context
|
|
10
|
+
|
|
11
|
+
During a design session, an AI suggested adding an "Initiative" layer — a cross-cutting concept that would unify artifacts from all three trilogy tools under a single ID and lifecycle. The idea had genuine merit for observability and auditability.
|
|
12
|
+
|
|
13
|
+
The user's response: "we should be careful about becoming too opinionated."
|
|
14
|
+
|
|
15
|
+
This was not feedback on one feature. It was a design principle. The moment passed without being captured — which is itself the gap the trilogy exists to close.
|
|
16
|
+
|
|
17
|
+
## Decision
|
|
18
|
+
|
|
19
|
+
The trilogy tools (research.md, visionlog, ike.md) must remain composable and non-prescriptive. Each tool has one job. No tool should impose a cross-cutting methodology on top of the primitives it provides.
|
|
20
|
+
|
|
21
|
+
Workflow conventions — like linking all artifacts under an initiative ID — belong in SOPs, not in schemas. A SOP recommends. A schema enforces. Enforcement should be reserved for things that are always true, not things that are useful in some contexts.
|
|
22
|
+
|
|
23
|
+
The test for any proposed new construct: **does it make the existing job of the tool clearer, or does it add a new job?** If it adds a new job, it belongs in a SOP or in a separate tool.
|
|
24
|
+
|
|
25
|
+
## Consequences
|
|
26
|
+
|
|
27
|
+
- Feature proposals that add new cross-cutting abstractions must clear this bar before acceptance
|
|
28
|
+
- Linking conventions (e.g., initiative_id) should be documented as optional SOP guidance, not schema requirements
|
|
29
|
+
- The trilogy's value is in its simplicity — three focused tools with clear seams, not a framework
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: "GUARD-001"
|
|
3
|
+
type: "guardrail"
|
|
4
|
+
title: "No new cross-cutting abstractions without clearing the composability test"
|
|
5
|
+
status: "active"
|
|
6
|
+
date: "2026-03-21"
|
|
7
|
+
adr: "ADR-001"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Rule
|
|
11
|
+
|
|
12
|
+
Before adding any new construct to visionlog, research.md, or ike.md schemas, apply this test:
|
|
13
|
+
|
|
14
|
+
**Does this make the existing job of the tool clearer, or does it add a new job?**
|
|
15
|
+
|
|
16
|
+
If it adds a new job — stop. Either (a) put the convention in a SOP, (b) build it as a separate optional tool, or (c) run it through research.md to earn the decision before touching a schema.
|
|
17
|
+
|
|
18
|
+
## Why
|
|
19
|
+
|
|
20
|
+
The trilogy's strength is focused simplicity. Cross-cutting abstractions feel like improvements but are often methodology prescriptions in disguise. Once in a schema, they are enforced on every user. Once enforced, they are hard to remove. The cost compounds.
|
|
21
|
+
|
|
22
|
+
This guardrail exists because in a live design session, an AI proposed an "Initiative" layer with genuine merit — and the principle it violated had never been written down. An unwritten principle cannot be enforced.
|
|
23
|
+
|
|
24
|
+
## Violation Examples
|
|
25
|
+
|
|
26
|
+
- Adding `initiative_id` as a field on ike.md tasks, visionlog goals, and research.md projects — prescribes a cross-cutting workflow not everyone needs
|
|
27
|
+
- Adding a `risk_level` field to guardrails "because it would be useful" — adds a new classification job to what is already a clear construct
|
|
28
|
+
- Adding a `confidence_score` to ADRs — imports a research.md concept into visionlog's domain
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: "SOP-001"
|
|
3
|
+
type: "sop"
|
|
4
|
+
title: "Goal Decomposition"
|
|
5
|
+
status: "active"
|
|
6
|
+
date: "2026-03-21"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## When to use this
|
|
10
|
+
|
|
11
|
+
When a visionlog goal has no ike.md tasks yet, or when starting work on a goal that is `available` or `in-progress`. Do not create tasks without first consulting this SOP.
|
|
12
|
+
|
|
13
|
+
## Steps
|
|
14
|
+
|
|
15
|
+
1. **Read the goal** — call `visionlog.goal_view(id)`. Understand the exit criteria, dependencies, and what "complete" means.
|
|
16
|
+
|
|
17
|
+
2. **Check guardrails** — call `visionlog.guardrail_list(status: active)`. Identify any guardrails that constrain how this goal is executed. If a proposed approach would violate one, stop and redesign before proceeding.
|
|
18
|
+
|
|
19
|
+
3. **Propose milestones** — decompose the goal into 1–3 milestones. A milestone is a meaningful, demonstrable checkpoint — not a task list. Ask: what intermediate states of the world would prove we are on track?
|
|
20
|
+
|
|
21
|
+
4. **Create milestones in ike.md** — call `ike.milestone_create` for each milestone. Name them after the outcome, not the activity.
|
|
22
|
+
|
|
23
|
+
5. **Decompose each milestone into tasks** — for each milestone, identify the atomic work items. A task should be completable in one session. Call `ike.task_create` for each with:
|
|
24
|
+
- `visionlog_goal_id` set to the goal's ID
|
|
25
|
+
- `milestone` set to the milestone ID
|
|
26
|
+
- `priority` reflecting urgency
|
|
27
|
+
- `acceptance_criteria` defining what done looks like
|
|
28
|
+
|
|
29
|
+
6. **Update goal status** — if the goal was `locked`, check whether its `depends_on` goals are complete. If yes, call `visionlog.goal_update(status: available)`. If you are starting work now, set `in-progress`.
|
|
30
|
+
|
|
31
|
+
## Guards
|
|
32
|
+
|
|
33
|
+
- Never create tasks without reading the goal and active guardrails first
|
|
34
|
+
- A goal should have no more than 3 milestones unless the scope demands it — if it does, the goal is probably too large and should be split
|
|
35
|
+
- Every task must have `acceptance_criteria` — a task without a definition of done will never be verifiably complete
|
|
36
|
+
- Do not skip directly from goal to tasks — the milestone layer is what connects strategy to execution
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: "SOP-002"
|
|
3
|
+
type: "sop"
|
|
4
|
+
title: "Completion Feedback"
|
|
5
|
+
status: "active"
|
|
6
|
+
date: "2026-03-21"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## When to use this
|
|
10
|
+
|
|
11
|
+
After completing an ike.md task. Completion is not just marking a task done — it is closing the loop back to the goal. Follow this SOP every time.
|
|
12
|
+
|
|
13
|
+
## Steps
|
|
14
|
+
|
|
15
|
+
1. **Complete the task** — call `ike.task_complete(task_id)`. Record completion notes describing what was done and any decisions made during execution.
|
|
16
|
+
|
|
17
|
+
2. **Check the milestone** — call `ike.task_list(milestone: <milestone_id>)`. If all tasks in the milestone are complete, call `ike.milestone_close(milestone_id)`.
|
|
18
|
+
|
|
19
|
+
3. **Check the goal** — if a milestone was closed, call `ike.task_list(visionlog_goal_id: <goal_id>, include_completed: false)`. If no open tasks remain for this goal:
|
|
20
|
+
- Call `visionlog.goal_view(id)` — review exit criteria
|
|
21
|
+
- If exit criteria are met, call `visionlog.goal_update(id, status: complete)`
|
|
22
|
+
- If exit criteria are not fully met, create the remaining tasks before updating status
|
|
23
|
+
|
|
24
|
+
4. **Capture decisions made** — if any non-obvious decisions were made during execution that aren't recorded anywhere, call `visionlog.decision_create` with `status: accepted` to formalize them. A decision made in execution but not recorded is a contract that was never written.
|
|
25
|
+
|
|
26
|
+
5. **Check unlocks** — call `visionlog.goal_unlockable()`. If completing this goal unlocks others, update their status to `available`.
|
|
27
|
+
|
|
28
|
+
## Guards
|
|
29
|
+
|
|
30
|
+
- Never mark a goal complete without checking its exit criteria in visionlog
|
|
31
|
+
- If you made a decision during execution, write the ADR — do not leave it in task notes
|
|
32
|
+
- Do not skip step 5 — unlocking goals is how the DAG advances
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: "SOP-003"
|
|
3
|
+
type: "sop"
|
|
4
|
+
title: "Blocked Task Escalation"
|
|
5
|
+
status: "active"
|
|
6
|
+
date: "2026-03-21"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## When to use this
|
|
10
|
+
|
|
11
|
+
When an ike.md task cannot proceed. A blocked task is a signal that the plan is misaligned with reality. Do not leave it blocked without diagnosing why and taking explicit action.
|
|
12
|
+
|
|
13
|
+
## Steps
|
|
14
|
+
|
|
15
|
+
1. **Record the blockage** — call `ike.task_edit(task_id, status: "In Progress")` and add a note with the reason. Name the reason precisely. Vague blocked reasons ("can't proceed") are not acceptable.
|
|
16
|
+
|
|
17
|
+
2. **Diagnose the type** — determine which category applies:
|
|
18
|
+
|
|
19
|
+
**A. Dependency** — another task or goal must complete first.
|
|
20
|
+
Action: verify the dependency in ike.md or visionlog. Update `dependencies` on the task if not already set. Wait or switch to unblocked work.
|
|
21
|
+
|
|
22
|
+
**B. Information gap** — the task cannot be completed because knowledge is missing.
|
|
23
|
+
Action: open a research.md project to find the answer. Call `research.project_init` with a clear question. Update the blocked task's notes with the research project ID. Return to this task when the research project is decided.
|
|
24
|
+
|
|
25
|
+
**C. Contradiction** — the task conflicts with a visionlog guardrail or ADR.
|
|
26
|
+
Action: this is a serious escalation. The task as written is invalid. Either (a) redesign the task to comply, or (b) if the contract itself is wrong, open a research.md project to earn a new decision that supersedes the existing ADR. Do not proceed with a task that violates a guardrail.
|
|
27
|
+
|
|
28
|
+
**D. Resource or access constraint** — the agent lacks a tool, permission, or capability.
|
|
29
|
+
Action: create a high-priority task assigned to a human (`assignees: ["human"]`) describing the missing capability. The original task remains blocked until the human task is resolved.
|
|
30
|
+
|
|
31
|
+
3. **Never leave a task blocked without a linked action** — every blocked task must have either a dependency link, a research project ID in its notes, a redesigned scope, or a human-assigned task waiting for it.
|
|
32
|
+
|
|
33
|
+
## Guards
|
|
34
|
+
|
|
35
|
+
- A blocked task with no diagnosis is invisible debt — it will sit in the backlog forever
|
|
36
|
+
- Do not spawn a research.md project for questions that can be answered by reading existing visionlog ADRs or SOPs first
|
|
37
|
+
- A contradiction with a guardrail is never a blocker to work around — it is a signal to stop and govern
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "visionlog.md — The Governance Layer"
|
|
3
|
+
type: "vision"
|
|
4
|
+
date: "2026-03-21"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
visionlog is the governance layer for AI-assisted projects. It holds the contracts that all execution must honor: vision, goals, guardrails, SOPs, and ADRs.
|
|
8
|
+
|
|
9
|
+
## What it is
|
|
10
|
+
|
|
11
|
+
A place for decisions that have been earned, goals that have been committed to, and rules that must not be broken. It is the static layer — the part of the system that changes slowly and deliberately, because governance that changes fast is not governance.
|
|
12
|
+
|
|
13
|
+
## What it is not
|
|
14
|
+
|
|
15
|
+
visionlog is not an orchestrator. It does not run agents, schedule work, or manage tasks. It does not tell you how to work — only what you have committed to and what you must not do.
|
|
16
|
+
|
|
17
|
+
## Design philosophy
|
|
18
|
+
|
|
19
|
+
**Composable, not prescriptive.**
|
|
20
|
+
|
|
21
|
+
visionlog gives you primitives — goals, guardrails, SOPs, ADRs — and stays out of the way. It does not impose a methodology. It does not require you to use all of its constructs. It does not add cross-cutting concepts that prescribe how you organize work at a level above the tools.
|
|
22
|
+
|
|
23
|
+
The right test for any new feature: does it make the existing job of the tool clearer, or does it add a new job? New jobs belong elsewhere.
|
|
24
|
+
|
|
25
|
+
**Opinions go in SOPs, not in schemas.**
|
|
26
|
+
|
|
27
|
+
If a workflow pattern is valuable — like linking execution back to a research decision — that belongs in a SOP that recommends a convention. It does not belong in a required schema field that forces the convention on everyone.
|
|
28
|
+
|
|
29
|
+
**Contracts must be earned.**
|
|
30
|
+
|
|
31
|
+
No guardrail, ADR, or SOP should be created without a reason. The reason must be recorded. A contract without a recorded rationale is noise, not governance.
|
|
32
|
+
|
|
33
|
+
## The trilogy
|
|
34
|
+
|
|
35
|
+
visionlog is the middle layer of a three-tool trilogy:
|
|
36
|
+
|
|
37
|
+
- **research.md** — earn decisions with evidence before committing
|
|
38
|
+
- **visionlog** — record what was decided and what must not be violated
|
|
39
|
+
- **ike.md** — execute within those contracts
|
|
40
|
+
|
|
41
|
+
The flow is one-way by design: research feeds visionlog, visionlog feeds ike. Each tool has one job. None of them reach into the others' domain.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.1.0] - 2026-03-22
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- Initial release
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Contributing to visionlog
|
|
2
|
+
|
|
3
|
+
Thanks for your interest in contributing.
|
|
4
|
+
|
|
5
|
+
## Quick start
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
git clone https://github.com/eidos-agi/visionlog.md.git
|
|
9
|
+
cd visionlog.md
|
|
10
|
+
pip install -e ".[dev]"
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Development
|
|
14
|
+
|
|
15
|
+
We use [ruff](https://docs.astral.sh/ruff/) for linting and formatting:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
ruff check .
|
|
19
|
+
ruff format .
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Run tests:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
pytest
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## For agent developers
|
|
29
|
+
|
|
30
|
+
If you're building tools that AI agents will use, pay special attention to:
|
|
31
|
+
|
|
32
|
+
1. **Tool descriptions** — Every `@tool` decorator must have a description that explains *when* to use it, not just *what* it does. An agent choosing between 20 tools needs clear differentiation.
|
|
33
|
+
2. **Parameter descriptions** — Every parameter needs a `description` field. Agents don't have UI tooltips — the description is all they get.
|
|
34
|
+
3. **Error messages** — When something fails, the error message must tell the agent what to do next. "Invalid input" is useless. "Expected ISO 8601 date string (e.g., 2026-03-22), got: 'yesterday'" is actionable.
|
|
35
|
+
4. **Typed everything** — Type hints on all public functions. Agents parse types to understand contracts.
|
|
36
|
+
|
|
37
|
+
## Pull requests
|
|
38
|
+
|
|
39
|
+
- Keep PRs focused — one feature or fix per PR
|
|
40
|
+
- Include tests for new functionality
|
|
41
|
+
- Update CHANGELOG.md with your changes
|
|
42
|
+
- Ensure `ruff check .` and `pytest` pass
|
|
43
|
+
|
|
44
|
+
## Reporting issues
|
|
45
|
+
|
|
46
|
+
Open an issue with:
|
|
47
|
+
|
|
48
|
+
1. What you were trying to do
|
|
49
|
+
2. What happened instead
|
|
50
|
+
3. Steps to reproduce
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Daniel Shanklin
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: visionlog-md
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: The static St. Peter — vision, goals, guardrails, SOPs, ADRs for AI agent governance
|
|
5
|
+
Project-URL: Homepage, https://github.com/eidos-agi/visionlog.md
|
|
6
|
+
Project-URL: Repository, https://github.com/eidos-agi/visionlog.md
|
|
7
|
+
Author-email: Daniel Shanklin <daniel@eidosagi.com>
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Keywords: agent-tools,governance,guardrails,mcp,vision
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
17
|
+
Requires-Python: >=3.11
|
|
18
|
+
Requires-Dist: mcp>=1.0.0
|
|
19
|
+
Requires-Dist: pyyaml>=6.0
|
|
20
|
+
Provides-Extra: dev
|
|
21
|
+
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
|
|
24
|
+
# visionlog.md
|
|
25
|
+
|
|
26
|
+
MCP server for long-term project governance. Records vision, goals, guardrails, SOPs, and architectural decisions (ADRs) — the contracts that all execution must honor.
|
|
27
|
+
|
|
28
|
+
Part of the trilogy: **research.md → visionlog.md → ike.md**
|
|
29
|
+
|
|
30
|
+
- research.md earns decisions with evidence
|
|
31
|
+
- **visionlog.md** records them as binding contracts
|
|
32
|
+
- ike.md executes within those contracts
|
|
33
|
+
|
|
34
|
+
## What it enforces
|
|
35
|
+
|
|
36
|
+
- Guardrails are active or deprecated — never deleted
|
|
37
|
+
- ADRs are permanent once accepted — a new ADR supersedes, never overwrites
|
|
38
|
+
- Goals form a DAG — dependencies must be resolved before a goal is available
|
|
39
|
+
- Vision is sticky — it does not drift session to session
|
|
40
|
+
|
|
41
|
+
## Trilogy conventions
|
|
42
|
+
|
|
43
|
+
visionlog.md follows shared conventions with ike.md and research.md. See [CONVENTIONS.md](https://github.com/eidos-agi/ike.md/blob/main/CONVENTIONS.md) for the full standard.
|
|
44
|
+
|
|
45
|
+
- Config lives at `.visionlog/config.yaml` (committed to git)
|
|
46
|
+
- Tools: `project_init` (new project) and `project_set` (register existing for session)
|
|
47
|
+
|
|
48
|
+
## Install
|
|
49
|
+
|
|
50
|
+
Not yet published to npm. Install from local path.
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm install
|
|
54
|
+
npm run build
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Add to `.mcp.json`:
|
|
58
|
+
|
|
59
|
+
```json
|
|
60
|
+
{
|
|
61
|
+
"mcpServers": {
|
|
62
|
+
"visionlog": {
|
|
63
|
+
"command": "/absolute/path/to/visionlog.md/dist/visionlog",
|
|
64
|
+
"args": ["mcp", "start"]
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Session protocol
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
project_set { path: "/path/to/project" } <- returns project_id
|
|
74
|
+
visionlog_boot { project_id: "..." } <- active guardrails + goal state
|
|
75
|
+
visionlog_guide { project_id: "..." } <- vision + decisions + goal map
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Read both `visionlog_boot` and `visionlog_guide` at the start of every session before touching any task or code.
|
|
79
|
+
|
|
80
|
+
## Project structure
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
my-project/
|
|
84
|
+
.visionlog/
|
|
85
|
+
config.yaml <- project GUID + metadata (commit this)
|
|
86
|
+
vision.md <- north star, anti-goals, success criteria
|
|
87
|
+
goals/ <- GOAL-NNNN.md — DAG of milestones
|
|
88
|
+
adr/ <- ADR-NNNN.md — architectural decisions
|
|
89
|
+
guardrails/ <- GUARD-NNNN.md — active constraints
|
|
90
|
+
sops/ <- SOP-NNNN.md — coordination protocols
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Tools
|
|
94
|
+
|
|
95
|
+
### Session
|
|
96
|
+
| Tool | Description |
|
|
97
|
+
|------|-------------|
|
|
98
|
+
| `project_init` | Initialize visionlog in a new project |
|
|
99
|
+
| `project_set` | Register existing project for session, returns project_id |
|
|
100
|
+
|
|
101
|
+
### Orientation (call at session start)
|
|
102
|
+
| Tool | Description |
|
|
103
|
+
|------|-------------|
|
|
104
|
+
| `visionlog_boot` | Active guardrails + current goal state + backlog check |
|
|
105
|
+
| `visionlog_guide` | Vision + key decisions + full goal map |
|
|
106
|
+
| `visionlog_status` | Counts: goals, decisions, guardrails, SOPs |
|
|
107
|
+
|
|
108
|
+
### Vision
|
|
109
|
+
| Tool | Description |
|
|
110
|
+
|------|-------------|
|
|
111
|
+
| `vision_view` | Read the project vision |
|
|
112
|
+
| `vision_set` | Set or update the vision document |
|
|
113
|
+
|
|
114
|
+
### Goals
|
|
115
|
+
| Tool | Description |
|
|
116
|
+
|------|-------------|
|
|
117
|
+
| `goal_create` | Add a goal to the DAG |
|
|
118
|
+
| `goal_list` | List all goals with status |
|
|
119
|
+
| `goal_view` | Read a goal |
|
|
120
|
+
| `goal_update` | Update goal status or body |
|
|
121
|
+
| `goal_unlockable` | List goals whose dependencies are met |
|
|
122
|
+
|
|
123
|
+
### Decisions (ADRs)
|
|
124
|
+
| Tool | Description |
|
|
125
|
+
|------|-------------|
|
|
126
|
+
| `decision_create` | Record an architectural decision |
|
|
127
|
+
| `decision_list` | List all ADRs |
|
|
128
|
+
| `decision_view` | Read an ADR |
|
|
129
|
+
| `decision_update` | Update status or body |
|
|
130
|
+
|
|
131
|
+
### Guardrails
|
|
132
|
+
| Tool | Description |
|
|
133
|
+
|------|-------------|
|
|
134
|
+
| `guardrail_create` | Add a guardrail |
|
|
135
|
+
| `guardrail_list` | List all guardrails |
|
|
136
|
+
| `guardrail_view` | Read a guardrail |
|
|
137
|
+
| `guardrail_update` | Update status or body |
|
|
138
|
+
| `guardrail_inject` | Inject guardrails into an existing prompt |
|
|
139
|
+
|
|
140
|
+
### SOPs
|
|
141
|
+
| Tool | Description |
|
|
142
|
+
|------|-------------|
|
|
143
|
+
| `sop_create` | Add a standard operating procedure |
|
|
144
|
+
| `sop_list` | List all SOPs |
|
|
145
|
+
| `sop_view` | Read a SOP |
|
|
146
|
+
| `sop_update` | Update status or body |
|