coherence-cli 0.4.1__tar.gz → 0.5.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.
- coherence_cli-0.5.0/.eidetic/memory/coherence-cli__public.jsonl +7 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.gitignore +5 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.markdownlint-cli2.yaml +3 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/CHANGELOG.md +11 -0
- coherence_cli-0.5.0/PKG-INFO +170 -0
- coherence_cli-0.5.0/README.md +151 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/coherence/cli/__init__.py +2 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/coherence/cli/_commands/learn.py +6 -0
- coherence_cli-0.5.0/coherence/cli/_commands/meaning.py +264 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/coherence/cli/_commands/overview.py +2 -0
- coherence_cli-0.5.0/coherence/explain/catalog.py +251 -0
- coherence_cli-0.5.0/coherence/meaning/__init__.py +12 -0
- coherence_cli-0.5.0/coherence/meaning/anchors/affordance.high.txt +5 -0
- coherence_cli-0.5.0/coherence/meaning/anchors/affordance.low.txt +5 -0
- coherence_cli-0.5.0/coherence/meaning/anchors/agency.high.txt +5 -0
- coherence_cli-0.5.0/coherence/meaning/anchors/agency.low.txt +5 -0
- coherence_cli-0.5.0/coherence/meaning/anchors/causality.high.txt +5 -0
- coherence_cli-0.5.0/coherence/meaning/anchors/causality.low.txt +5 -0
- coherence_cli-0.5.0/coherence/meaning/anchors/consequence.high.txt +5 -0
- coherence_cli-0.5.0/coherence/meaning/anchors/consequence.low.txt +5 -0
- coherence_cli-0.5.0/coherence/meaning/anchors/future_constraint.high.txt +5 -0
- coherence_cli-0.5.0/coherence/meaning/anchors/future_constraint.low.txt +5 -0
- coherence_cli-0.5.0/coherence/meaning/anchors/meaning.high.txt +6 -0
- coherence_cli-0.5.0/coherence/meaning/anchors/meaning.low.txt +6 -0
- coherence_cli-0.5.0/coherence/meaning/axis.py +137 -0
- coherence_cli-0.5.0/coherence/meaning/compare.py +88 -0
- coherence_cli-0.5.0/coherence/meaning/diagnostics.py +171 -0
- coherence_cli-0.5.0/coherence/meaning/embed.py +137 -0
- coherence_cli-0.5.0/coherence/meaning/score.py +147 -0
- coherence_cli-0.5.0/coherence/meaning/trend.py +267 -0
- coherence_cli-0.5.0/docs/meaning-gradient-live-tests.md +155 -0
- coherence_cli-0.5.0/examples/experiments/issue-priority.yaml +91 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/pyproject.toml +5 -2
- coherence_cli-0.5.0/scripts/refresh_meaning_vectors.py +110 -0
- coherence_cli-0.5.0/tests/_meaning_recorded.py +68 -0
- coherence_cli-0.5.0/tests/_meaning_synthetic.py +31 -0
- coherence_cli-0.5.0/tests/conftest.py +46 -0
- coherence_cli-0.5.0/tests/fixtures/meaning/auth_middleware.high.txt +1 -0
- coherence_cli-0.5.0/tests/fixtures/meaning/auth_middleware.low.txt +1 -0
- coherence_cli-0.5.0/tests/fixtures/meaning/cache_stampede.high.txt +1 -0
- coherence_cli-0.5.0/tests/fixtures/meaning/cache_stampede.low.txt +1 -0
- coherence_cli-0.5.0/tests/fixtures/meaning/db_migration.high.txt +1 -0
- coherence_cli-0.5.0/tests/fixtures/meaning/db_migration.low.txt +1 -0
- coherence_cli-0.5.0/tests/fixtures/meaning/payment_webhook.high.txt +1 -0
- coherence_cli-0.5.0/tests/fixtures/meaning/payment_webhook.low.txt +1 -0
- coherence_cli-0.5.0/tests/fixtures/meaning/recorded_vectors.json +73874 -0
- coherence_cli-0.5.0/tests/fixtures/meaning/series/v1.txt +1 -0
- coherence_cli-0.5.0/tests/fixtures/meaning/series/v2.txt +1 -0
- coherence_cli-0.5.0/tests/fixtures/meaning/series/v3.txt +1 -0
- coherence_cli-0.5.0/tests/test_meaning_axis.py +166 -0
- coherence_cli-0.5.0/tests/test_meaning_cli.py +350 -0
- coherence_cli-0.5.0/tests/test_meaning_compare.py +250 -0
- coherence_cli-0.5.0/tests/test_meaning_diagnostics.py +138 -0
- coherence_cli-0.5.0/tests/test_meaning_embed.py +209 -0
- coherence_cli-0.5.0/tests/test_meaning_example_config.py +61 -0
- coherence_cli-0.5.0/tests/test_meaning_experiment_features.py +59 -0
- coherence_cli-0.5.0/tests/test_meaning_ordering.py +86 -0
- coherence_cli-0.5.0/tests/test_meaning_scaffold.py +28 -0
- coherence_cli-0.5.0/tests/test_meaning_schema.py +232 -0
- coherence_cli-0.5.0/tests/test_meaning_score.py +255 -0
- coherence_cli-0.5.0/tests/test_meaning_trend.py +314 -0
- coherence_cli-0.5.0/tests/test_refresh_vectors.py +67 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/uv.lock +137 -1
- coherence_cli-0.4.1/.eidetic/memory/coherence-cli__public.jsonl +0 -1
- coherence_cli-0.4.1/PKG-INFO +0 -75
- coherence_cli-0.4.1/README.md +0 -58
- coherence_cli-0.4.1/coherence/explain/catalog.py +0 -130
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/agent-config/SKILL.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/agent-config/data/backend-fingerprints.yaml +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/agent-config/scripts/show.sh +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/ask-colleague/SKILL.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/ask-colleague/prompts/explore.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/ask-colleague/prompts/review.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/ask-colleague/prompts/write.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/ask-colleague/scripts/ask-colleague.sh +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/cicd/SKILL.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/cicd/scripts/workflow.sh +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/communicate/SKILL.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/communicate/scripts/templates/skill-new-brief.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/pypi-maintainer/SKILL.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/pypi-maintainer/scripts/switch-source.sh +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/recall/SKILL.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/recall/scripts/recall.sh +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/remember/SKILL.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/remember/scripts/remember.sh +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/run-tests/SKILL.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/run-tests/scripts/test.sh +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/sonarclaude/SKILL.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/spec-to-plan/SKILL.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/think/SKILL.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/think/scripts/think.sh +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/version-bump/SKILL.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills/version-bump/scripts/bump.py +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.claude/skills.local.yaml.example +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.devague/current +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.devague/current_plan +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.devague/frames/coherence-cli-ships-meaning-gradient-as-a-measurab.json +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.devague/plans/coherence-cli-ships-meaning-gradient-as-a-measurab.json +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.flake8 +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.github/workflows/publish.yml +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/.github/workflows/tests.yml +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/CLAUDE.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/LICENSE +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/coherence/__init__.py +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/coherence/__main__.py +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/coherence/cli/_commands/__init__.py +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/coherence/cli/_commands/cli.py +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/coherence/cli/_commands/doctor.py +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/coherence/cli/_commands/explain.py +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/coherence/cli/_commands/whoami.py +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/coherence/cli/_errors.py +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/coherence/cli/_output.py +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/coherence/explain/__init__.py +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/culture.yaml +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/docs/plans/2026-07-04-coherence-cli-ships-meaning-gradient-as-a-measurab.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/docs/skill-sources.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/docs/specs/2026-07-04-coherence-cli-ships-meaning-gradient-as-a-measurab.md +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/sonar-project.properties +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/tests/__init__.py +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/tests/test_cli.py +0 -0
- {coherence_cli-0.4.1 → coherence_cli-0.5.0}/tests/test_cli_introspection.py +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{"id": "devague-converge-gate-all-claims", "hash": "84fd98b0e0d94229ece87b13a1ff64e9d2a04223daed7b036c019b0e6cb388fc", "content": "devague converge gate: the rule \"a confirmed honesty condition on every spec-affecting claim\" covers ALL core frame claims \u2014 audience, before_state, after_state, why_it_matters, boundary, success_signal \u2014 not just kind=requirement claims. Interrogate + confirm a condition on each, or converge fails with one gap per frame claim. Also: devague auto-adds .devague/reviews/ to .gitignore on first review; frames + specs are committed, review artifacts are working state. (Learned scoping coherence-cli issue #4, 2026-07-04.)", "scope": {"name": "coherence-cli", "visibility": "public"}, "metadata": {"type": "note", "record_metadata": {"source": "coherence-cli spec session", "topic": "devague usage", "date": "2026-07-04"}, "created": "2026-07-04T07:21:59.005289+00:00", "last_recall": null, "recall_count": 0, "links": [], "supersedes": null, "lifecycle": "active", "added_by": null}}
|
|
2
|
+
{"id": "meaning-gradient-continuation-2026-07-04", "hash": "7e590a120f07f1dfe9bad3d76d14115ac4fa28099beabfcec03c29c90672e847", "content": "Meaning Gradient (issue #4) scoping complete 2026-07-04; PR #5 MERGED \u2014 spec, plan, frame state all on main. Implementation tracker with full continuation guidance (serial path, /assign-to-workforce path with per-task model split, roadmap, paid-for gotchas): https://github.com/agentculture/coherence-cli/issues/6. Resume: recall this record, read issue #6, branch feat/meaning-gradient, work waves 0-5 TDD-first. Key confirmed decisions: coherence meaning noun (not separate CLI); anchor-axis projection, 5 subdimensions (consequence, agency, causality, affordance, future_constraint); trend verb with f-prime/f-double-prime of scores AND embedding drift; numpy+httpx first runtime deps; COHERENCE_EMBED_URL/_MODEL env contract (eidetic gear default); offline CI via recorded-vector fixtures.", "scope": {"name": "coherence-cli", "visibility": "public"}, "metadata": {"type": "note", "record_metadata": {"source": "issue-6 implementation tracker", "topic": "meaning gradient", "issue": "6", "pr": "5", "date": "2026-07-04"}, "created": "2026-07-04T08:16:15.263629+00:00", "last_recall": null, "recall_count": 0, "links": ["devague-converge-gate-all-claims"], "supersedes": null, "lifecycle": "shadowed", "added_by": null}}
|
|
3
|
+
{"id": "colleague-toolcall-format-bug-2026-07", "hash": "088fa4a396dd6f5249035400ab4ace35fada8e4cc5dd72d75bbfb543c56f2308", "content": "GOTCHA (paid for): the `colleague` backend (vllm-openai + Qwen3.6-27B at localhost:8001) reliably FAILS `ask-colleague write` on any non-trivial task. Root cause: the model emits tool calls as TEXT content (markdown ```bash <tool>``` fences or `<tool>{json}` XML) instead of native OpenAI tool_calls, so the harness parses 0 steps, burns the whole --max-steps budget, and returns status:incomplete with steps:[]. A trivial scaffold task (t1) worked; 3/3 medium tasks failed identically, even with a lean brief and 40 steps. `colleague doctor --probe` passes (single-shot tool-call OK) because the probe is too simple to trigger it. Why: filed as agentculture/colleague#289. How to apply: when using /assign-to-workforce with colleague as the worker, expect failure beyond trivial tasks \u2014 swap the worker to Claude general-purpose subagents (still in isolated worktrees, \u2264N parallel, TDD-gated merges) rather than retrying colleague. Verified 2026-07-04 during the Meaning Gradient build.", "scope": {"name": "coherence-cli", "visibility": "public"}, "metadata": {"type": "note", "record_metadata": {"topic": "assign-to-workforce / colleague", "issue": "agentculture/colleague#289", "date": "2026-07-04", "source": "meaning-gradient build session"}, "created": "2026-07-04T15:34:16.511073+00:00", "last_recall": null, "recall_count": 0, "links": ["meaning-gradient-mvp-shipped-2026-07-04"], "supersedes": null, "lifecycle": "active", "added_by": null}}
|
|
4
|
+
{"id": "embed-gear-at-8001-lazyload-2026-07", "hash": "48c7ae4ee962ff1aae7746c6b88e07d37adb8aadb6bca7bf7ad70c689e7d4908", "content": "INFRA FACT: this machine's OpenAI-compatible embedding gear is the multi-lobe router at http://localhost:8001/v1 (same server as the colleague chat model), NOT the coherence/eidetic default http://localhost:8002/v1 (which is down). `GET localhost:8001/v1/models` lists Qwen/Qwen3-Embedding-0.6B (dim 1024) + Qwen3-Reranker-0.6B alongside the chat models, owned_by 'lobes'. The lobes LAZY-LOAD on first request, so a cold embeddings call can exceed 30s (times out). How to apply: to run `coherence meaning score/compare/trend` live or to run scripts/refresh_meaning_vectors.py, set COHERENCE_EMBED_URL=http://localhost:8001/v1, COHERENCE_EMBED_MODEL=Qwen/Qwen3-Embedding-0.6B, COHERENCE_EMBED_TIMEOUT=120 (the timeout knob added in coherence-cli 0.5.0 for exactly this cold-start case). Same applies to eidetic recall: set EIDETIC_EMBED_URL=http://localhost:8001/v1.", "scope": {"name": "coherence-cli", "visibility": "public"}, "metadata": {"type": "note", "record_metadata": {"topic": "embed gear / infra", "date": "2026-07-04", "source": "meaning-gradient build session"}, "created": "2026-07-04T15:34:16.512575+00:00", "last_recall": null, "recall_count": 0, "links": ["colleague-toolcall-format-bug-2026-07"], "supersedes": null, "lifecycle": "active", "added_by": null}}
|
|
5
|
+
{"id": "venv-markdownlint-ci-gotcha-2026-07", "hash": "0634779a88819e172f3f6b319791d997ba24617ce355fa92ca5f05a898154404", "content": "GOTCHA (paid for): in AgentCulture repos whose CI lint runs `markdownlint-cli2 \"**/*.md\"`, adding the FIRST runtime dependency flips this check red. Before: `dependencies = []` means CI's `uv sync` installs nothing, so `.venv` has no markdown and the glob passes. After adding deps (e.g. numpy/httpx), `uv sync` populates `.venv/lib/.../*.dist-info/licenses/LICENSE.md` (numpy has ~9), which trip markdownlint (70 errors) because `.venv/**` was not in the ignore list. Fix: add `- \".venv/**\"` to `.markdownlint-cli2.yaml` `ignores:`. How to apply: when introducing runtime deps to a zero-dep AgentCulture repo, pre-empt this by adding `.venv/**` to the markdownlint ignores in the same PR. Fixed in coherence-cli PR #7.", "scope": {"name": "coherence-cli", "visibility": "public"}, "metadata": {"type": "note", "record_metadata": {"topic": "CI / markdownlint", "date": "2026-07-04", "source": "meaning-gradient PR #7"}, "created": "2026-07-04T15:34:16.522095+00:00", "last_recall": null, "recall_count": 0, "links": [], "supersedes": null, "lifecycle": "active", "added_by": null}}
|
|
6
|
+
{"id": "sonar-pr-quality-gate-2026-07", "hash": "03491653b0008ba66083221b47cad276364d89a74f546959106d96fffec38cd1", "content": "REFERENCE (paid for): coherence-cli's CI has a SonarCloud quality gate on NEW CODE that blocks the PR (project key agentculture_coherence-cli). Two traps: (1) the /sonarclaude `status` verb queries the MAIN-branch gate, which can read PASSED while the PR gate is ERROR \u2014 query the PR gate directly: `curl -u \"$SONAR_TOKEN:\" \"https://sonarcloud.io/api/qualitygates/project_status?projectKey=agentculture_coherence-cli&pullRequest=<PR>\"`, and PR bugs: `.../api/issues/search?componentKeys=...&pullRequest=<PR>&types=BUG&resolved=false`. (2) Rule python:S1244 (no `== 0.0` on floats) fires on zero-norm guards like `if norm == 0.0:` \u2014 new_reliability_rating jumps to 3 and fails the gate. Fix: guard with a small epsilon (`norm <= 1e-12`), which is also more robust. SONAR_TOKEN is available in this environment. How to apply: after opening a PR here, check the PR-scoped Sonar gate, not just CI red/green or the main-branch status.", "scope": {"name": "coherence-cli", "visibility": "public"}, "metadata": {"type": "note", "record_metadata": {"topic": "CI / SonarCloud", "date": "2026-07-04", "source": "meaning-gradient PR #7"}, "created": "2026-07-04T15:34:16.522259+00:00", "last_recall": null, "recall_count": 0, "links": [], "supersedes": null, "lifecycle": "active", "added_by": null}}
|
|
7
|
+
{"id": "meaning-gradient-mvp-shipped-2026-07-04", "hash": "2b5657f62b8bfa1ef9905e4e98a9ee4c4fecfad30699b180b7fca4a54869c027", "content": "Meaning Gradient MVP is BUILT and in review as coherence-cli PR #7 (branch feat/meaning-gradient, v0.5.0), superseding the continuation pointer. All 10 plan tasks / 6 waves done via /assign-to-workforce (workers were Claude subagents after colleague failed \u2014 see colleague-toolcall-format-bug-2026-07). Ships: `coherence meaning score/compare/trend` (--json, exit 0/1/2), the coherence/meaning engine (embed/axis+12 anchors/diagnostics/score/compare/trend), README + examples/experiments/issue-priority.yaml, and offline tests (133 passing) with committed recorded-vector fixtures + scripts/refresh_meaning_vectors.py. FALSIFIABILITY CONFIRMED: with real Qwen3-Embedding vectors the ordering test passes out of the box \u2014 every high-meaning fixture strictly outranks its paired low one, rewrite series monotonic, NO anchor tuning needed. numpy+httpx are the first runtime deps. Deferred (issue #6 roadmap, no code paths): experiment runner, LLM judge, doctor/certify --dimension meaning, pluggable providers, routing-policy output.", "scope": {"name": "coherence-cli", "visibility": "public"}, "metadata": {"type": "note", "record_metadata": {"topic": "meaning gradient", "pr": "7", "issue": "6", "date": "2026-07-04", "source": "meaning-gradient build session"}, "created": "2026-07-04T15:34:16.522572+00:00", "last_recall": null, "recall_count": 0, "links": ["colleague-toolcall-format-bug-2026-07", "embed-gear-at-8001-lazyload-2026-07"], "supersedes": "meaning-gradient-continuation-2026-07-04", "lifecycle": "active", "added_by": null}}
|
|
@@ -231,3 +231,8 @@ skills.local.yaml
|
|
|
231
231
|
|
|
232
232
|
# devague working state (not committed by default)
|
|
233
233
|
.devague/reviews/
|
|
234
|
+
|
|
235
|
+
# Recorded embedding vectors for the offline meaning tests ARE committed (see
|
|
236
|
+
# tests/fixtures/meaning/recorded_vectors.json) so the falsifiability ordering
|
|
237
|
+
# test runs in CI with zero network. Regenerate against a live embed gear with
|
|
238
|
+
# scripts/refresh_meaning_vectors.py after changing anchors or fixtures.
|
|
@@ -16,6 +16,9 @@ config:
|
|
|
16
16
|
|
|
17
17
|
ignores:
|
|
18
18
|
- "node_modules/**"
|
|
19
|
+
# The virtualenv holds third-party package LICENSE.md files (numpy, httpx, …)
|
|
20
|
+
# that trip markdownlint; it is created by `uv sync` in CI. Never our source.
|
|
21
|
+
- ".venv/**"
|
|
19
22
|
- ".local/**"
|
|
20
23
|
- ".afi/**"
|
|
21
24
|
- ".teken/**"
|
|
@@ -5,6 +5,17 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
Format follows [Keep a Changelog](https://keepachangelog.com/). This project
|
|
6
6
|
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.5.0] - 2026-07-04
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **Meaning Gradient coherence dimension** — a `coherence meaning` noun with `score <file>`, `compare <before> <after>`, and `trend <f1> <f2> …` verbs (all `--json`, exit codes 0/1/2). Measures a global `meaning_score` plus five subdimensions (consequence, agency, causality, affordance, future_constraint) via anchor-axis projection, with rule-based diagnostics (missing_consequence / missing_owner / missing_next_action). Implements issue #4 phases 1-2 + the trend extension (issue #6).
|
|
13
|
+
- Anchor-axis scoring engine (`coherence/meaning/`): env-configured OpenAI-compatible embedding client (`COHERENCE_EMBED_URL` / `COHERENCE_EMBED_MODEL`, EmbedUnavailable → exit 2 with a hint; diagnostics still run offline), in-repo plain-text anchor fixtures, score/compare/trend engines, and an open `subdimensions` map.
|
|
14
|
+
- `trend` trajectory signals — per-step first (f', velocity) and second (f'', acceleration) differences of the score signals and of embedding drift over an ordered measurement-point series (2+ points → f', 3+ → f'').
|
|
15
|
+
- Example phase-3 experiment config `examples/experiments/issue-priority.yaml` and a README "Meaning Gradient" section (anchor-axis method, JSON contract, steward/eidetic/taskmaster consumer map, scope boundary).
|
|
16
|
+
- Offline integration tests + recorded-vector fixture mechanism (`scripts/refresh_meaning_vectors.py`) so CI runs with zero network access; the high>low falsifiability ordering test is gated on committed recorded vectors.
|
|
17
|
+
- `numpy` and `httpx` as the package's first runtime dependencies.
|
|
18
|
+
|
|
8
19
|
## [0.4.1] - 2026-07-04
|
|
9
20
|
|
|
10
21
|
### Added
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: coherence-cli
|
|
3
|
+
Version: 0.5.0
|
|
4
|
+
Summary: Maintains information quality for agentic workflows — assesses the freshness, provenance, fidelity, and task-specific validity of claims, then refreshes or repairs degraded ones before agents consume them.
|
|
5
|
+
Project-URL: Homepage, https://github.com/agentculture/coherence-cli
|
|
6
|
+
Project-URL: Issues, https://github.com/agentculture/coherence-cli/issues
|
|
7
|
+
Author: Ori Nachum
|
|
8
|
+
License-Expression: Apache-2.0
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Topic :: Software Development
|
|
15
|
+
Requires-Python: >=3.12
|
|
16
|
+
Requires-Dist: httpx>=0.27
|
|
17
|
+
Requires-Dist: numpy>=1.26
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
|
|
20
|
+
# coherence-cli
|
|
21
|
+
|
|
22
|
+
Maintains information quality for agentic workflows — assesses the freshness, provenance, fidelity, and task-specific validity of claims, then refreshes or repairs degraded ones before agents consume them.
|
|
23
|
+
|
|
24
|
+
## What you get
|
|
25
|
+
|
|
26
|
+
- **An agent-first CLI** cited from [teken](https://github.com/agentculture/teken)
|
|
27
|
+
(`afi-cli`) — the runtime package has no third-party dependencies.
|
|
28
|
+
- **A mesh identity** — `culture.yaml` (`suffix` + `backend`) and the matching
|
|
29
|
+
prompt file (`CLAUDE.md` for `backend: claude`).
|
|
30
|
+
- **The canonical guildmaster skill kit** (11 skills) under `.claude/skills/`,
|
|
31
|
+
vendored cite-don't-import. See [`docs/skill-sources.md`](docs/skill-sources.md).
|
|
32
|
+
- **A build + deploy baseline** — pytest, lint, the agent-first rubric gate, and
|
|
33
|
+
PyPI Trusted Publishing wired into GitHub Actions.
|
|
34
|
+
|
|
35
|
+
## Quickstart
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
uv sync
|
|
39
|
+
uv run pytest -n auto # run the test suite
|
|
40
|
+
uv run coherence-cli whoami # identity from culture.yaml
|
|
41
|
+
uv run coherence-cli learn # self-teaching prompt (add --json)
|
|
42
|
+
uv run teken cli doctor . --strict # the agent-first rubric gate CI runs
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## CLI
|
|
46
|
+
|
|
47
|
+
| Verb | What it does |
|
|
48
|
+
|------|--------------|
|
|
49
|
+
| `whoami` | Report this agent's nick, version, backend, and model from `culture.yaml`. |
|
|
50
|
+
| `learn` | Print a structured self-teaching prompt. |
|
|
51
|
+
| `explain <path>` | Markdown docs for any noun/verb path. |
|
|
52
|
+
| `overview` | Read-only descriptive snapshot of the agent. |
|
|
53
|
+
| `doctor` | Check the agent-identity invariants (prompt-file-present, backend-consistency). |
|
|
54
|
+
| `cli overview` | Describe the CLI surface itself. |
|
|
55
|
+
|
|
56
|
+
Every command supports `--json`. Results go to stdout, errors/diagnostics to
|
|
57
|
+
stderr (never mixed). Exit codes: `0` success, `1` user error, `2` environment
|
|
58
|
+
error, `3+` reserved.
|
|
59
|
+
|
|
60
|
+
## Meaning Gradient
|
|
61
|
+
|
|
62
|
+
**Meaning Gradient is a coherence dimension of coherence-cli, not a separate
|
|
63
|
+
CLI.** It ships as the `coherence meaning` noun — same binary, same `--json`
|
|
64
|
+
and exit-code conventions as every other verb. It asks one question: *how
|
|
65
|
+
strongly does this artifact constrain future interpretation and action?*
|
|
66
|
+
|
|
67
|
+
### How it scores — the anchor axis
|
|
68
|
+
|
|
69
|
+
Scoring is anchor-axis projection over sentence embeddings, with the anchor
|
|
70
|
+
sets shipped in-repo as editable fixtures so the whole claim stays falsifiable:
|
|
71
|
+
|
|
72
|
+
```text
|
|
73
|
+
axis = mean(high-anchor embeddings) - mean(low-anchor embeddings)
|
|
74
|
+
score = cosine(embedding(artifact), axis), rescaled from [-1, 1] to [0, 1]
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
A parallel artifact scores `1.0`, orthogonal `0.5`, anti-parallel `0.0`. The
|
|
78
|
+
global `meaning` axis yields the scalar `meaning_score`; five subdimensions
|
|
79
|
+
each get their own high/low anchor pair:
|
|
80
|
+
|
|
81
|
+
| Subdimension | Asks |
|
|
82
|
+
|--------------|------|
|
|
83
|
+
| `consequence` | Does this change what happens next? |
|
|
84
|
+
| `agency` | Who can act because of this? |
|
|
85
|
+
| `causality` | Does this explain why something happened? |
|
|
86
|
+
| `affordance` | Does this reveal what action is possible? |
|
|
87
|
+
| `future_constraint` | Does this reduce the space of valid next actions? |
|
|
88
|
+
|
|
89
|
+
Alongside the embedding scores, three rule-based diagnostics run fully offline
|
|
90
|
+
(no network call, so they still work when the embed endpoint is down):
|
|
91
|
+
`missing_consequence`, `missing_owner`, `missing_next_action`.
|
|
92
|
+
|
|
93
|
+
### The three commands
|
|
94
|
+
|
|
95
|
+
| Command | What it does |
|
|
96
|
+
|---------|--------------|
|
|
97
|
+
| `coherence meaning score <file>` | Score one artifact → the JSON below. |
|
|
98
|
+
| `coherence meaning compare <before> <after>` | Signed per-subdimension deltas across a rewrite (the 2-point case). |
|
|
99
|
+
| `coherence meaning trend <f1> <f2> <f3> …` | Trajectory over an ordered series: first differences (f′, velocity) and second differences (f″, acceleration) of each score plus embedding drift. |
|
|
100
|
+
|
|
101
|
+
All three support `--json` and follow the CLI exit-code policy: `0` success,
|
|
102
|
+
`1` user-input error (missing file, or fewer than 2 files for `trend`), `2`
|
|
103
|
+
environment error — an unreachable embedding endpoint makes `score` exit `2`
|
|
104
|
+
with a hint naming `COHERENCE_EMBED_URL`, while the offline diagnostics still
|
|
105
|
+
run.
|
|
106
|
+
|
|
107
|
+
`coherence meaning score <file> --json` emits exactly:
|
|
108
|
+
|
|
109
|
+
```json
|
|
110
|
+
{
|
|
111
|
+
"meaning_score": 0.73,
|
|
112
|
+
"subdimensions": {
|
|
113
|
+
"consequence": 0.81,
|
|
114
|
+
"agency": 0.62,
|
|
115
|
+
"causality": 0.78,
|
|
116
|
+
"affordance": 0.69,
|
|
117
|
+
"future_constraint": 0.75
|
|
118
|
+
},
|
|
119
|
+
"diagnostics": [
|
|
120
|
+
{"code": "missing_owner", "message": "No responsible party named — name an owner (e.g. @name, 'owned by', 'assigned to')."}
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Every value is in `[0, 1]`. `subdimensions` is an open map: registering a sixth
|
|
126
|
+
subdimension adds a key here without breaking existing consumers.
|
|
127
|
+
|
|
128
|
+
### Consumer map — which field drives which decision
|
|
129
|
+
|
|
130
|
+
The score JSON is designed so a mesh consumer can act on it without human
|
|
131
|
+
translation. Each field maps to a concrete routing or memory decision:
|
|
132
|
+
|
|
133
|
+
| Consumer | Reads | Decision |
|
|
134
|
+
|----------|-------|----------|
|
|
135
|
+
| **steward** | `meaning_score` | Low `meaning_score` → route the artifact back for clarification / owner assignment before it flows downstream; high `meaning_score` with unclear ownership → ask steward to assign an owner. |
|
|
136
|
+
| **eidetic** | `subdimensions.consequence`, `subdimensions.future_constraint` | Gate memory writes: high on either → store (memory-worthy); low on both → compress or drop rather than persist. |
|
|
137
|
+
| **taskmaster** | `meaning_score`, `subdimensions.agency` | Prioritize the backlog: high `meaning_score` × high `agency` (someone can act) → surface for execution; low `agency` → hold, it needs an owner first. |
|
|
138
|
+
|
|
139
|
+
The `diagnostics` list is the always-available fallback: even with no embedding
|
|
140
|
+
endpoint, a fired `missing_consequence` / `missing_owner` / `missing_next_action`
|
|
141
|
+
is enough for a consumer to ask for clarification before acting.
|
|
142
|
+
|
|
143
|
+
### Scope boundary
|
|
144
|
+
|
|
145
|
+
This MVP ships scoring, comparison, and trend only. **The experiment runner,
|
|
146
|
+
the LLM-judge fallback, and doctor/certify integration are tracked follow-ups
|
|
147
|
+
with no code paths in this repo.** The committed
|
|
148
|
+
[`examples/experiments/issue-priority.yaml`](examples/experiments/issue-priority.yaml)
|
|
149
|
+
is the config *contract* for the deferred phase-3 experiment — every meaning
|
|
150
|
+
feature it names is already emitted by `coherence meaning score`, but nothing
|
|
151
|
+
executes it yet.
|
|
152
|
+
|
|
153
|
+
## Make it your own
|
|
154
|
+
|
|
155
|
+
1. Rename the package `coherence/` and the `coherence-cli`
|
|
156
|
+
CLI/dist name throughout `pyproject.toml`, the package, `tests/`,
|
|
157
|
+
`sonar-project.properties`, and this `README.md`. The name is hard-coded in
|
|
158
|
+
~100 places, so list every occurrence first — see the `git grep` discovery
|
|
159
|
+
command in [`CLAUDE.md`](CLAUDE.md), the authoritative rename procedure.
|
|
160
|
+
2. Edit `culture.yaml` with your `suffix` and `backend`.
|
|
161
|
+
3. Rewrite `CLAUDE.md` for your agent and run `/init`.
|
|
162
|
+
4. Re-vendor only the skills you need from guildmaster (see
|
|
163
|
+
[`docs/skill-sources.md`](docs/skill-sources.md)).
|
|
164
|
+
|
|
165
|
+
See [`CLAUDE.md`](CLAUDE.md) for the full conventions (version-bump-every-PR,
|
|
166
|
+
the `cicd` PR lane, deploy setup).
|
|
167
|
+
|
|
168
|
+
## License
|
|
169
|
+
|
|
170
|
+
Apache 2.0 — see [`LICENSE`](LICENSE).
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# coherence-cli
|
|
2
|
+
|
|
3
|
+
Maintains information quality for agentic workflows — assesses the freshness, provenance, fidelity, and task-specific validity of claims, then refreshes or repairs degraded ones before agents consume them.
|
|
4
|
+
|
|
5
|
+
## What you get
|
|
6
|
+
|
|
7
|
+
- **An agent-first CLI** cited from [teken](https://github.com/agentculture/teken)
|
|
8
|
+
(`afi-cli`) — the runtime package has no third-party dependencies.
|
|
9
|
+
- **A mesh identity** — `culture.yaml` (`suffix` + `backend`) and the matching
|
|
10
|
+
prompt file (`CLAUDE.md` for `backend: claude`).
|
|
11
|
+
- **The canonical guildmaster skill kit** (11 skills) under `.claude/skills/`,
|
|
12
|
+
vendored cite-don't-import. See [`docs/skill-sources.md`](docs/skill-sources.md).
|
|
13
|
+
- **A build + deploy baseline** — pytest, lint, the agent-first rubric gate, and
|
|
14
|
+
PyPI Trusted Publishing wired into GitHub Actions.
|
|
15
|
+
|
|
16
|
+
## Quickstart
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
uv sync
|
|
20
|
+
uv run pytest -n auto # run the test suite
|
|
21
|
+
uv run coherence-cli whoami # identity from culture.yaml
|
|
22
|
+
uv run coherence-cli learn # self-teaching prompt (add --json)
|
|
23
|
+
uv run teken cli doctor . --strict # the agent-first rubric gate CI runs
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## CLI
|
|
27
|
+
|
|
28
|
+
| Verb | What it does |
|
|
29
|
+
|------|--------------|
|
|
30
|
+
| `whoami` | Report this agent's nick, version, backend, and model from `culture.yaml`. |
|
|
31
|
+
| `learn` | Print a structured self-teaching prompt. |
|
|
32
|
+
| `explain <path>` | Markdown docs for any noun/verb path. |
|
|
33
|
+
| `overview` | Read-only descriptive snapshot of the agent. |
|
|
34
|
+
| `doctor` | Check the agent-identity invariants (prompt-file-present, backend-consistency). |
|
|
35
|
+
| `cli overview` | Describe the CLI surface itself. |
|
|
36
|
+
|
|
37
|
+
Every command supports `--json`. Results go to stdout, errors/diagnostics to
|
|
38
|
+
stderr (never mixed). Exit codes: `0` success, `1` user error, `2` environment
|
|
39
|
+
error, `3+` reserved.
|
|
40
|
+
|
|
41
|
+
## Meaning Gradient
|
|
42
|
+
|
|
43
|
+
**Meaning Gradient is a coherence dimension of coherence-cli, not a separate
|
|
44
|
+
CLI.** It ships as the `coherence meaning` noun — same binary, same `--json`
|
|
45
|
+
and exit-code conventions as every other verb. It asks one question: *how
|
|
46
|
+
strongly does this artifact constrain future interpretation and action?*
|
|
47
|
+
|
|
48
|
+
### How it scores — the anchor axis
|
|
49
|
+
|
|
50
|
+
Scoring is anchor-axis projection over sentence embeddings, with the anchor
|
|
51
|
+
sets shipped in-repo as editable fixtures so the whole claim stays falsifiable:
|
|
52
|
+
|
|
53
|
+
```text
|
|
54
|
+
axis = mean(high-anchor embeddings) - mean(low-anchor embeddings)
|
|
55
|
+
score = cosine(embedding(artifact), axis), rescaled from [-1, 1] to [0, 1]
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
A parallel artifact scores `1.0`, orthogonal `0.5`, anti-parallel `0.0`. The
|
|
59
|
+
global `meaning` axis yields the scalar `meaning_score`; five subdimensions
|
|
60
|
+
each get their own high/low anchor pair:
|
|
61
|
+
|
|
62
|
+
| Subdimension | Asks |
|
|
63
|
+
|--------------|------|
|
|
64
|
+
| `consequence` | Does this change what happens next? |
|
|
65
|
+
| `agency` | Who can act because of this? |
|
|
66
|
+
| `causality` | Does this explain why something happened? |
|
|
67
|
+
| `affordance` | Does this reveal what action is possible? |
|
|
68
|
+
| `future_constraint` | Does this reduce the space of valid next actions? |
|
|
69
|
+
|
|
70
|
+
Alongside the embedding scores, three rule-based diagnostics run fully offline
|
|
71
|
+
(no network call, so they still work when the embed endpoint is down):
|
|
72
|
+
`missing_consequence`, `missing_owner`, `missing_next_action`.
|
|
73
|
+
|
|
74
|
+
### The three commands
|
|
75
|
+
|
|
76
|
+
| Command | What it does |
|
|
77
|
+
|---------|--------------|
|
|
78
|
+
| `coherence meaning score <file>` | Score one artifact → the JSON below. |
|
|
79
|
+
| `coherence meaning compare <before> <after>` | Signed per-subdimension deltas across a rewrite (the 2-point case). |
|
|
80
|
+
| `coherence meaning trend <f1> <f2> <f3> …` | Trajectory over an ordered series: first differences (f′, velocity) and second differences (f″, acceleration) of each score plus embedding drift. |
|
|
81
|
+
|
|
82
|
+
All three support `--json` and follow the CLI exit-code policy: `0` success,
|
|
83
|
+
`1` user-input error (missing file, or fewer than 2 files for `trend`), `2`
|
|
84
|
+
environment error — an unreachable embedding endpoint makes `score` exit `2`
|
|
85
|
+
with a hint naming `COHERENCE_EMBED_URL`, while the offline diagnostics still
|
|
86
|
+
run.
|
|
87
|
+
|
|
88
|
+
`coherence meaning score <file> --json` emits exactly:
|
|
89
|
+
|
|
90
|
+
```json
|
|
91
|
+
{
|
|
92
|
+
"meaning_score": 0.73,
|
|
93
|
+
"subdimensions": {
|
|
94
|
+
"consequence": 0.81,
|
|
95
|
+
"agency": 0.62,
|
|
96
|
+
"causality": 0.78,
|
|
97
|
+
"affordance": 0.69,
|
|
98
|
+
"future_constraint": 0.75
|
|
99
|
+
},
|
|
100
|
+
"diagnostics": [
|
|
101
|
+
{"code": "missing_owner", "message": "No responsible party named — name an owner (e.g. @name, 'owned by', 'assigned to')."}
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Every value is in `[0, 1]`. `subdimensions` is an open map: registering a sixth
|
|
107
|
+
subdimension adds a key here without breaking existing consumers.
|
|
108
|
+
|
|
109
|
+
### Consumer map — which field drives which decision
|
|
110
|
+
|
|
111
|
+
The score JSON is designed so a mesh consumer can act on it without human
|
|
112
|
+
translation. Each field maps to a concrete routing or memory decision:
|
|
113
|
+
|
|
114
|
+
| Consumer | Reads | Decision |
|
|
115
|
+
|----------|-------|----------|
|
|
116
|
+
| **steward** | `meaning_score` | Low `meaning_score` → route the artifact back for clarification / owner assignment before it flows downstream; high `meaning_score` with unclear ownership → ask steward to assign an owner. |
|
|
117
|
+
| **eidetic** | `subdimensions.consequence`, `subdimensions.future_constraint` | Gate memory writes: high on either → store (memory-worthy); low on both → compress or drop rather than persist. |
|
|
118
|
+
| **taskmaster** | `meaning_score`, `subdimensions.agency` | Prioritize the backlog: high `meaning_score` × high `agency` (someone can act) → surface for execution; low `agency` → hold, it needs an owner first. |
|
|
119
|
+
|
|
120
|
+
The `diagnostics` list is the always-available fallback: even with no embedding
|
|
121
|
+
endpoint, a fired `missing_consequence` / `missing_owner` / `missing_next_action`
|
|
122
|
+
is enough for a consumer to ask for clarification before acting.
|
|
123
|
+
|
|
124
|
+
### Scope boundary
|
|
125
|
+
|
|
126
|
+
This MVP ships scoring, comparison, and trend only. **The experiment runner,
|
|
127
|
+
the LLM-judge fallback, and doctor/certify integration are tracked follow-ups
|
|
128
|
+
with no code paths in this repo.** The committed
|
|
129
|
+
[`examples/experiments/issue-priority.yaml`](examples/experiments/issue-priority.yaml)
|
|
130
|
+
is the config *contract* for the deferred phase-3 experiment — every meaning
|
|
131
|
+
feature it names is already emitted by `coherence meaning score`, but nothing
|
|
132
|
+
executes it yet.
|
|
133
|
+
|
|
134
|
+
## Make it your own
|
|
135
|
+
|
|
136
|
+
1. Rename the package `coherence/` and the `coherence-cli`
|
|
137
|
+
CLI/dist name throughout `pyproject.toml`, the package, `tests/`,
|
|
138
|
+
`sonar-project.properties`, and this `README.md`. The name is hard-coded in
|
|
139
|
+
~100 places, so list every occurrence first — see the `git grep` discovery
|
|
140
|
+
command in [`CLAUDE.md`](CLAUDE.md), the authoritative rename procedure.
|
|
141
|
+
2. Edit `culture.yaml` with your `suffix` and `backend`.
|
|
142
|
+
3. Rewrite `CLAUDE.md` for your agent and run `/init`.
|
|
143
|
+
4. Re-vendor only the skills you need from guildmaster (see
|
|
144
|
+
[`docs/skill-sources.md`](docs/skill-sources.md)).
|
|
145
|
+
|
|
146
|
+
See [`CLAUDE.md`](CLAUDE.md) for the full conventions (version-bump-every-PR,
|
|
147
|
+
the `cicd` PR lane, deploy setup).
|
|
148
|
+
|
|
149
|
+
## License
|
|
150
|
+
|
|
151
|
+
Apache 2.0 — see [`LICENSE`](LICENSE).
|
|
@@ -66,6 +66,7 @@ def _build_parser() -> argparse.ArgumentParser:
|
|
|
66
66
|
from coherence.cli._commands import doctor as _doctor_cmd
|
|
67
67
|
from coherence.cli._commands import explain as _explain_cmd
|
|
68
68
|
from coherence.cli._commands import learn as _learn_cmd
|
|
69
|
+
from coherence.cli._commands import meaning as _meaning_cmd
|
|
69
70
|
from coherence.cli._commands import overview as _overview_cmd
|
|
70
71
|
from coherence.cli._commands import whoami as _whoami_cmd
|
|
71
72
|
|
|
@@ -88,6 +89,7 @@ def _build_parser() -> argparse.ArgumentParser:
|
|
|
88
89
|
_overview_cmd.register(sub)
|
|
89
90
|
_doctor_cmd.register(sub)
|
|
90
91
|
_cli_group.register(sub)
|
|
92
|
+
_meaning_cmd.register(sub)
|
|
91
93
|
# Register your own noun groups here:
|
|
92
94
|
# from coherence.cli._commands import my_noun as _my_noun_group
|
|
93
95
|
# _my_noun_group.register(sub)
|
|
@@ -29,6 +29,9 @@ Commands
|
|
|
29
29
|
coherence-cli overview Descriptive snapshot of the agent.
|
|
30
30
|
coherence-cli doctor Check the agent-identity invariants.
|
|
31
31
|
coherence-cli cli overview Describe the CLI surface itself.
|
|
32
|
+
coherence meaning score <file> Score an artifact's meaning gradient.
|
|
33
|
+
coherence meaning compare <a> <b> Signed before/after meaning delta.
|
|
34
|
+
coherence meaning trend <f>... Per-step f'/f'' across a series.
|
|
32
35
|
|
|
33
36
|
Machine-readable output
|
|
34
37
|
-----------------------
|
|
@@ -60,6 +63,9 @@ def _as_json_payload() -> dict[str, object]:
|
|
|
60
63
|
{"path": ["overview"], "summary": "Descriptive snapshot of the agent."},
|
|
61
64
|
{"path": ["doctor"], "summary": "Check the agent-identity invariants."},
|
|
62
65
|
{"path": ["cli", "overview"], "summary": "Describe the CLI surface."},
|
|
66
|
+
{"path": ["meaning", "score"], "summary": "Score an artifact's meaning gradient."},
|
|
67
|
+
{"path": ["meaning", "compare"], "summary": "Signed before/after meaning delta."},
|
|
68
|
+
{"path": ["meaning", "trend"], "summary": "Per-step f'/f'' across a series."},
|
|
63
69
|
],
|
|
64
70
|
"exit_codes": {
|
|
65
71
|
"0": "success",
|