coherence-cli 0.3.0__tar.gz → 0.4.1__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.3.0 → coherence_cli-0.4.1}/.claude/skills/recall/scripts/recall.sh +35 -13
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/remember/scripts/remember.sh +39 -13
- coherence_cli-0.4.1/.devague/current +1 -0
- coherence_cli-0.4.1/.devague/current_plan +1 -0
- coherence_cli-0.4.1/.devague/frames/coherence-cli-ships-meaning-gradient-as-a-measurab.json +367 -0
- coherence_cli-0.4.1/.devague/plans/coherence-cli-ships-meaning-gradient-as-a-measurab.json +382 -0
- coherence_cli-0.4.1/.eidetic/memory/coherence-cli__public.jsonl +1 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.github/workflows/tests.yml +1 -1
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.gitignore +3 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.markdownlint-cli2.yaml +6 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/CHANGELOG.md +51 -0
- coherence_cli-0.4.1/CLAUDE.md +56 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/PKG-INFO +1 -1
- coherence_cli-0.4.1/docs/plans/2026-07-04-coherence-cli-ships-meaning-gradient-as-a-measurab.md +106 -0
- coherence_cli-0.4.1/docs/specs/2026-07-04-coherence-cli-ships-meaning-gradient-as-a-measurab.md +73 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/pyproject.toml +1 -1
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/uv.lock +1 -1
- coherence_cli-0.3.0/CLAUDE.md +0 -28
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/agent-config/SKILL.md +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/agent-config/data/backend-fingerprints.yaml +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/agent-config/scripts/show.sh +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/ask-colleague/SKILL.md +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/ask-colleague/prompts/explore.md +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/ask-colleague/prompts/review.md +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/ask-colleague/prompts/write.md +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/ask-colleague/scripts/ask-colleague.sh +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/cicd/SKILL.md +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/cicd/scripts/workflow.sh +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/communicate/SKILL.md +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/communicate/scripts/templates/skill-new-brief.md +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/pypi-maintainer/SKILL.md +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/pypi-maintainer/scripts/switch-source.sh +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/recall/SKILL.md +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/remember/SKILL.md +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/run-tests/SKILL.md +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/run-tests/scripts/test.sh +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/sonarclaude/SKILL.md +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/spec-to-plan/SKILL.md +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/think/SKILL.md +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/think/scripts/think.sh +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/version-bump/SKILL.md +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills/version-bump/scripts/bump.py +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.claude/skills.local.yaml.example +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.flake8 +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/.github/workflows/publish.yml +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/LICENSE +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/README.md +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/coherence/__init__.py +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/coherence/__main__.py +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/coherence/cli/__init__.py +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/coherence/cli/_commands/__init__.py +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/coherence/cli/_commands/cli.py +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/coherence/cli/_commands/doctor.py +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/coherence/cli/_commands/explain.py +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/coherence/cli/_commands/learn.py +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/coherence/cli/_commands/overview.py +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/coherence/cli/_commands/whoami.py +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/coherence/cli/_errors.py +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/coherence/cli/_output.py +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/coherence/explain/__init__.py +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/coherence/explain/catalog.py +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/culture.yaml +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/docs/skill-sources.md +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/sonar-project.properties +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/tests/__init__.py +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/tests/test_cli.py +0 -0
- {coherence_cli-0.3.0 → coherence_cli-0.4.1}/tests/test_cli_introspection.py +0 -0
|
@@ -6,10 +6,11 @@
|
|
|
6
6
|
# forwards every flag verbatim — so `recall.sh "<query>" --mode hybrid --json`
|
|
7
7
|
# is exactly `eidetic recall "<query>" --mode hybrid --json`.
|
|
8
8
|
#
|
|
9
|
-
# The store is the files backend
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
#
|
|
9
|
+
# The store is the files backend. Default location resolves per-operation:
|
|
10
|
+
# PUBLIC records inside a git repo → <repo-root>/.eidetic/memory (committed,
|
|
11
|
+
# team-shared); PRIVATE records, or any record outside a git repo →
|
|
12
|
+
# $HOME/.eidetic/memory (never committed). Recall reads both stores and merges.
|
|
13
|
+
# An explicit EIDETIC_DATA_DIR wins and short-circuits to that single dir.
|
|
13
14
|
|
|
14
15
|
set -euo pipefail
|
|
15
16
|
|
|
@@ -34,12 +35,10 @@ resolve_eidetic() {
|
|
|
34
35
|
fi
|
|
35
36
|
dir=$(dirname "$dir")
|
|
36
37
|
done
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
The console script is `eidetic` (dist name: eidetic-cli).
|
|
42
|
-
EOF
|
|
38
|
+
# In a vendored copy there is no eidetic-cli checkout to fall back to, so the
|
|
39
|
+
# only honest remedy is to install the CLI. One `error:` + one `hint:` line.
|
|
40
|
+
printf 'error: eidetic CLI not found.\n' >&2
|
|
41
|
+
printf 'hint: install it with: uv tool install eidetic-cli (or pipx install eidetic-cli); the console script is eidetic.\n' >&2
|
|
43
42
|
return 1
|
|
44
43
|
}
|
|
45
44
|
|
|
@@ -65,10 +64,17 @@ EOF
|
|
|
65
64
|
}
|
|
66
65
|
|
|
67
66
|
case "${1:-}" in
|
|
68
|
-
-h | --help
|
|
67
|
+
-h | --help)
|
|
69
68
|
usage
|
|
70
69
|
exit 0
|
|
71
70
|
;;
|
|
71
|
+
"")
|
|
72
|
+
# A missing query is a usage error, not success. The bareword `help` is
|
|
73
|
+
# a legitimate search term, so it is intentionally NOT a usage alias.
|
|
74
|
+
printf 'error: no query given.\n' >&2
|
|
75
|
+
printf 'hint: recall.sh "<query>" [--mode ...] [--json]; run recall.sh --help for usage.\n' >&2
|
|
76
|
+
exit 1
|
|
77
|
+
;;
|
|
72
78
|
esac
|
|
73
79
|
|
|
74
80
|
resolve_eidetic || exit 2
|
|
@@ -100,9 +106,12 @@ resolve_scope() {
|
|
|
100
106
|
# inline `# comment` or trailing space can't bleed into the scope),
|
|
101
107
|
# then strip surrounding quotes only — matching the canonical parser
|
|
102
108
|
# in .claude/skills/cicd/scripts/_resolve-nick.sh.
|
|
109
|
+
# `|| true`: under `set -o pipefail`, `head -n1` closing the pipe
|
|
110
|
+
# early can SIGPIPE `sed`, making the substitution non-zero and
|
|
111
|
+
# aborting the script. An empty parse must yield "" here, not exit.
|
|
103
112
|
suffix=$(sed -n \
|
|
104
113
|
's/^[[:space:]]*-\{0,1\}[[:space:]]*suffix:[[:space:]]*\([^[:space:]]*\).*/\1/p' \
|
|
105
|
-
"$dir/culture.yaml" | head -n1 | tr -d "\"'")
|
|
114
|
+
"$dir/culture.yaml" | head -n1 | tr -d "\"'" || true)
|
|
106
115
|
break
|
|
107
116
|
fi
|
|
108
117
|
dir=$(dirname "$dir")
|
|
@@ -127,7 +136,20 @@ if ! has_flag --scope "$@"; then
|
|
|
127
136
|
EIDETIC_SCOPE=$(resolve_scope)
|
|
128
137
|
if [ -n "$EIDETIC_SCOPE" ]; then
|
|
129
138
|
SCOPE_ARGS+=(--scope "$EIDETIC_SCOPE")
|
|
130
|
-
|
|
139
|
+
# rollout-cli eidetic-memory recipe POLICY OVERRIDE (not eidetic's
|
|
140
|
+
# upstream private default): default to PUBLIC, so a plain recall queries
|
|
141
|
+
# the in-repo public pool (<repo>/.eidetic/memory) this repo writes to.
|
|
142
|
+
# Pass --visibility private to also surface this agent's private ($HOME)
|
|
143
|
+
# notes. The two-store read model reads both dirs regardless.
|
|
144
|
+
has_flag --visibility "$@" || SCOPE_ARGS+=(--visibility public)
|
|
145
|
+
elif ! has_flag --visibility "$@"; then
|
|
146
|
+
# No suffix AND no explicit --visibility: the query runs against
|
|
147
|
+
# eidetic's own default (scope=default, visibility=public), not this
|
|
148
|
+
# agent's private personal scope — so an empty result isn't silently
|
|
149
|
+
# misread. Warn on stderr (stdout stays clean for --json). Warn ONLY
|
|
150
|
+
# here: an explicit --scope (outer guard) or --visibility (this guard) is
|
|
151
|
+
# a deliberate choice, honored verbatim, so either flag silences this.
|
|
152
|
+
printf 'warning: no culture.yaml suffix resolved; querying the public default scope rather than a private personal scope. Pass --scope or --visibility to target deliberately.\n' >&2
|
|
131
153
|
fi
|
|
132
154
|
fi
|
|
133
155
|
|
|
@@ -12,10 +12,11 @@
|
|
|
12
12
|
# Upsert is idempotent by id (and dedups by content hash): re-remembering the
|
|
13
13
|
# same record updates it in place, never duplicates.
|
|
14
14
|
#
|
|
15
|
-
# The store is the files backend
|
|
16
|
-
#
|
|
17
|
-
#
|
|
18
|
-
#
|
|
15
|
+
# The store is the files backend. Default location resolves per-operation:
|
|
16
|
+
# PUBLIC records inside a git repo → <repo-root>/.eidetic/memory (committed,
|
|
17
|
+
# team-shared); PRIVATE records, or any record outside a git repo →
|
|
18
|
+
# $HOME/.eidetic/memory (never committed). An explicit EIDETIC_DATA_DIR still
|
|
19
|
+
# wins and short-circuits to that single dir. Use --backend mongo|neo4j (with
|
|
19
20
|
# EIDETIC_MONGO_URI / NEO4J_URI) for a server-backed shared store.
|
|
20
21
|
|
|
21
22
|
set -euo pipefail
|
|
@@ -40,12 +41,10 @@ resolve_eidetic() {
|
|
|
40
41
|
fi
|
|
41
42
|
dir=$(dirname "$dir")
|
|
42
43
|
done
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
The console script is `eidetic` (dist name: eidetic-cli).
|
|
48
|
-
EOF
|
|
44
|
+
# In a vendored copy there is no eidetic-cli checkout to fall back to, so the
|
|
45
|
+
# only honest remedy is to install the CLI. One `error:` + one `hint:` line.
|
|
46
|
+
printf 'error: eidetic CLI not found.\n' >&2
|
|
47
|
+
printf 'hint: install it with: uv tool install eidetic-cli (or pipx install eidetic-cli); the console script is eidetic.\n' >&2
|
|
49
48
|
return 1
|
|
50
49
|
}
|
|
51
50
|
|
|
@@ -60,7 +59,9 @@ Usage:
|
|
|
60
59
|
|
|
61
60
|
A record needs `id`, `text`, and `type`; `hash` and `metadata` are recommended
|
|
62
61
|
(hash is derived from text when omitted). Upsert is idempotent by id.
|
|
63
|
-
|
|
62
|
+
Records default to this agent's PRIVATE personal scope (--scope from the
|
|
63
|
+
culture.yaml suffix); pass --visibility public to contribute to the shared
|
|
64
|
+
public pool. Every flag is forwarded verbatim to `eidetic remember`.
|
|
64
65
|
See `eidetic explain remember`.
|
|
65
66
|
EOF
|
|
66
67
|
}
|
|
@@ -72,6 +73,16 @@ case "${1:-}" in
|
|
|
72
73
|
;;
|
|
73
74
|
esac
|
|
74
75
|
|
|
76
|
+
# No record argument AND stdin is an interactive terminal → `eidetic remember`
|
|
77
|
+
# would block forever waiting for NDJSON. Show usage instead of hanging. A piped
|
|
78
|
+
# or redirected stdin (`cat records.ndjson | remember.sh`) is not a TTY and
|
|
79
|
+
# proceeds to the batch path normally.
|
|
80
|
+
if [ "$#" -eq 0 ] && [ -t 0 ]; then
|
|
81
|
+
usage >&2
|
|
82
|
+
printf 'hint: pass a JSON record as an argument, or pipe NDJSON on stdin.\n' >&2
|
|
83
|
+
exit 1
|
|
84
|
+
fi
|
|
85
|
+
|
|
75
86
|
resolve_eidetic || exit 2
|
|
76
87
|
|
|
77
88
|
# ── default to this agent's PERSONAL, PRIVATE scope (culture.yaml `suffix`) ──
|
|
@@ -100,9 +111,12 @@ resolve_scope() {
|
|
|
100
111
|
# inline `# comment` or trailing space can't bleed into the scope),
|
|
101
112
|
# then strip surrounding quotes only — matching the canonical parser
|
|
102
113
|
# in .claude/skills/cicd/scripts/_resolve-nick.sh.
|
|
114
|
+
# `|| true`: under `set -o pipefail`, `head -n1` closing the pipe
|
|
115
|
+
# early can SIGPIPE `sed`, making the substitution non-zero and
|
|
116
|
+
# aborting the script. An empty parse must yield "" here, not exit.
|
|
103
117
|
suffix=$(sed -n \
|
|
104
118
|
's/^[[:space:]]*-\{0,1\}[[:space:]]*suffix:[[:space:]]*\([^[:space:]]*\).*/\1/p' \
|
|
105
|
-
"$dir/culture.yaml" | head -n1 | tr -d "\"'")
|
|
119
|
+
"$dir/culture.yaml" | head -n1 | tr -d "\"'" || true)
|
|
106
120
|
break
|
|
107
121
|
fi
|
|
108
122
|
dir=$(dirname "$dir")
|
|
@@ -127,7 +141,19 @@ if ! has_flag --scope "$@"; then
|
|
|
127
141
|
EIDETIC_SCOPE=$(resolve_scope)
|
|
128
142
|
if [ -n "$EIDETIC_SCOPE" ]; then
|
|
129
143
|
SCOPE_ARGS+=(--scope "$EIDETIC_SCOPE")
|
|
130
|
-
|
|
144
|
+
# rollout-cli eidetic-memory recipe POLICY OVERRIDE (not eidetic's
|
|
145
|
+
# upstream private default): default to PUBLIC so a plain remember lands
|
|
146
|
+
# in <repo>/.eidetic/memory — committed, team- and mesh-shared. Pass
|
|
147
|
+
# --visibility private to keep a record in $HOME (uncommitted).
|
|
148
|
+
has_flag --visibility "$@" || SCOPE_ARGS+=(--visibility public)
|
|
149
|
+
elif ! has_flag --visibility "$@"; then
|
|
150
|
+
# No suffix AND no explicit --visibility: the record falls back to
|
|
151
|
+
# eidetic's own default (scope=default, visibility=public). Don't let an
|
|
152
|
+
# expected-private record go public silently — warn on stderr (stdout
|
|
153
|
+
# stays clean for --json). Warn ONLY here: an explicit --scope (outer
|
|
154
|
+
# guard) or --visibility (this guard) means the caller chose deliberately
|
|
155
|
+
# and is honored verbatim, so either flag silences this.
|
|
156
|
+
printf 'warning: no culture.yaml suffix resolved; this record falls back to the public default scope. Pass --scope or --visibility to place it deliberately.\n' >&2
|
|
131
157
|
fi
|
|
132
158
|
fi
|
|
133
159
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
coherence-cli-ships-meaning-gradient-as-a-measurab
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
coherence-cli-ships-meaning-gradient-as-a-measurab
|
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "coherence-cli-ships-meaning-gradient-as-a-measurab",
|
|
3
|
+
"title": "coherence-cli ships Meaning Gradient as a measurable coherence dimension: 'coherence meaning score <file>' returns a scalar meaning score plus per-subdimension scores and rule-based diagnostics as JSON, and 'coherence meaning compare <before> <after>' shows whether a rewrite gained or lost meaning \u2014 with the anchor sets shipped in-repo so the whole claim stays falsifiable.",
|
|
4
|
+
"schema_version": 1,
|
|
5
|
+
"status": "exported",
|
|
6
|
+
"created": "2026-07-04T07:08:00Z",
|
|
7
|
+
"updated": "2026-07-04T07:21:10Z",
|
|
8
|
+
"claims": [
|
|
9
|
+
{
|
|
10
|
+
"id": "c1",
|
|
11
|
+
"kind": "announcement",
|
|
12
|
+
"text": "coherence-cli ships Meaning Gradient as a measurable coherence dimension: 'coherence meaning score <file>' returns a scalar meaning score plus per-subdimension scores and rule-based diagnostics as JSON, and 'coherence meaning compare <before> <after>' shows whether a rewrite gained or lost meaning \u2014 with the anchor sets shipped in-repo so the whole claim stays falsifiable.",
|
|
13
|
+
"origin": "user",
|
|
14
|
+
"status": "confirmed",
|
|
15
|
+
"honesty_conditions": [
|
|
16
|
+
{
|
|
17
|
+
"id": "h6",
|
|
18
|
+
"text": "Both commands exist and emit valid JSON matching the documented schema; the README states Meaning Gradient is a coherence dimension of coherence-cli, not a separate tool; issue #4's minimum-tier acceptance boxes are all checkable.",
|
|
19
|
+
"status": "confirmed"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"hard_questions": [],
|
|
23
|
+
"links": []
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"id": "c2",
|
|
27
|
+
"kind": "audience",
|
|
28
|
+
"text": "Agents and operators in the AgentCulture mesh that route, remember, compress, or gate artifacts (steward, eidetic, taskmaster, colleague) \u2014 plus humans triaging issues and reviewing rewrites.",
|
|
29
|
+
"origin": "llm",
|
|
30
|
+
"status": "confirmed",
|
|
31
|
+
"honesty_conditions": [
|
|
32
|
+
{
|
|
33
|
+
"id": "h8",
|
|
34
|
+
"text": "At least one named mesh consumer can act on the score JSON without human translation \u2014 schema fields map directly to a routing or memory decision.",
|
|
35
|
+
"status": "confirmed"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"hard_questions": [],
|
|
39
|
+
"links": []
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "c3",
|
|
43
|
+
"kind": "before_state",
|
|
44
|
+
"text": "coherence-cli is a bare scaffold (whoami/learn/explain/doctor only, zero runtime deps); meaning of artifacts is judged by vibes \u2014 no measurable signal, no way to test whether a rewrite added meaning, no instrumentation to falsify the Meaning Gradient thesis.",
|
|
45
|
+
"origin": "llm",
|
|
46
|
+
"status": "confirmed",
|
|
47
|
+
"honesty_conditions": [
|
|
48
|
+
{
|
|
49
|
+
"id": "h9",
|
|
50
|
+
"text": "Before this lands the repo has no 'meaning' noun and no scoring code \u2014 verifiable against the scaffold at the spec's base commit.",
|
|
51
|
+
"status": "confirmed"
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
"hard_questions": [],
|
|
55
|
+
"links": []
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": "c4",
|
|
59
|
+
"kind": "after_state",
|
|
60
|
+
"text": "'coherence meaning score <file>' emits JSON with meaning_score, at least 4 subdimension scores, and rule-based diagnostics (missing_consequence / missing_owner / missing_next_action); 'coherence meaning compare before after' emits per-subdimension deltas; anchor sets live in-repo as editable fixtures.",
|
|
61
|
+
"origin": "llm",
|
|
62
|
+
"status": "confirmed",
|
|
63
|
+
"honesty_conditions": [
|
|
64
|
+
{
|
|
65
|
+
"id": "h10",
|
|
66
|
+
"text": "Running both commands on the shipped fixtures reproduces the documented JSON shape exactly, validated in tests.",
|
|
67
|
+
"status": "confirmed"
|
|
68
|
+
}
|
|
69
|
+
],
|
|
70
|
+
"hard_questions": [],
|
|
71
|
+
"links": []
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"id": "c5",
|
|
75
|
+
"kind": "why_it_matters",
|
|
76
|
+
"text": "Routing, memory, compression, and certification policies need a signal that predicts what humans and agents remember, prioritize, and execute \u2014 and the claim must stay empirical: instrumentation first, so the phase-3 experiment can prove or disprove predictive value.",
|
|
77
|
+
"origin": "llm",
|
|
78
|
+
"status": "confirmed",
|
|
79
|
+
"honesty_conditions": [
|
|
80
|
+
{
|
|
81
|
+
"id": "h11",
|
|
82
|
+
"text": "Every meaning feature the phase-3 experiment YAML names is emitted by 'coherence meaning score' \u2014 the MVP output is a sufficient input for the deferred experiment.",
|
|
83
|
+
"status": "confirmed"
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"hard_questions": [],
|
|
87
|
+
"links": []
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": "c6",
|
|
91
|
+
"kind": "boundary",
|
|
92
|
+
"text": "This spec covers issue #4 phases 1-2 only (score + compare). No separate meaning-cli, no LLM judge, no experiment runner execution, no doctor/certify integration, no pluggable embedding providers \u2014 those are tracked follow-ups, not silent scope.",
|
|
93
|
+
"origin": "llm",
|
|
94
|
+
"status": "rejected",
|
|
95
|
+
"honesty_conditions": [
|
|
96
|
+
{
|
|
97
|
+
"id": "h12",
|
|
98
|
+
"text": "No MVP code path executes an experiment, calls an LLM judge, or touches doctor/certify; each deferred phase is a tracked follow-up, not silent scope.",
|
|
99
|
+
"status": "rejected"
|
|
100
|
+
}
|
|
101
|
+
],
|
|
102
|
+
"hard_questions": [],
|
|
103
|
+
"links": []
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"id": "c7",
|
|
107
|
+
"kind": "success_signal",
|
|
108
|
+
"text": "On repo fixtures, score orders each high-meaning rewrite above its low-meaning original (e.g. the issue's auth-middleware pair); the JSON contract and each diagnostic rule are exercised by tests; README documents Meaning Gradient as a coherence dimension.",
|
|
109
|
+
"origin": "llm",
|
|
110
|
+
"status": "confirmed",
|
|
111
|
+
"honesty_conditions": [
|
|
112
|
+
{
|
|
113
|
+
"id": "h13",
|
|
114
|
+
"text": "CI runs the fixture-ordering and diagnostic tests; a failing high/low ordering fails the build.",
|
|
115
|
+
"status": "confirmed"
|
|
116
|
+
}
|
|
117
|
+
],
|
|
118
|
+
"hard_questions": [],
|
|
119
|
+
"links": []
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"id": "c8",
|
|
123
|
+
"kind": "requirement",
|
|
124
|
+
"text": "Scoring uses anchor-axis projection: embed the artifact, build meaning_axis = mean(high-anchor embeddings) - mean(low-anchor embeddings), score = cosine(artifact, axis) normalized to [0,1]; each subdimension gets its own high/low anchor pair set.",
|
|
125
|
+
"origin": "llm",
|
|
126
|
+
"status": "confirmed",
|
|
127
|
+
"honesty_conditions": [
|
|
128
|
+
{
|
|
129
|
+
"id": "h1",
|
|
130
|
+
"text": "Scoring is deterministic for a fixed anchor set + embedding endpoint, and on the shipped fixtures every high-meaning artifact scores strictly above its paired low-meaning artifact.",
|
|
131
|
+
"status": "confirmed"
|
|
132
|
+
}
|
|
133
|
+
],
|
|
134
|
+
"hard_questions": [],
|
|
135
|
+
"links": []
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"id": "c9",
|
|
139
|
+
"kind": "requirement",
|
|
140
|
+
"text": "Embeddings come from an OpenAI-compatible /v1/embeddings endpoint configured via env (COHERENCE_EMBED_URL / COHERENCE_EMBED_MODEL, defaulting to the same local embed gear eidetic uses); when unreachable, score exits with the CLI's environment-error code and a clear hint, while rule-based diagnostics still run offline.",
|
|
141
|
+
"origin": "llm",
|
|
142
|
+
"status": "confirmed",
|
|
143
|
+
"honesty_conditions": [
|
|
144
|
+
{
|
|
145
|
+
"id": "h2",
|
|
146
|
+
"text": "With the embed endpoint down, 'coherence meaning score' exits with the environment-error code and an actionable hint, and a diagnostics-only invocation still succeeds; with it up, no non-stdlib import is needed.",
|
|
147
|
+
"status": "rejected"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"id": "h7",
|
|
151
|
+
"text": "With the embed endpoint down, 'coherence meaning score' exits with the environment-error code and an actionable hint, and a diagnostics-only invocation still succeeds offline.",
|
|
152
|
+
"status": "confirmed"
|
|
153
|
+
}
|
|
154
|
+
],
|
|
155
|
+
"hard_questions": [],
|
|
156
|
+
"links": []
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"id": "c10",
|
|
160
|
+
"kind": "requirement",
|
|
161
|
+
"text": "Rule-based diagnostics detect missing_consequence, missing_owner, and missing_next_action without any embedding call, and land in the JSON output as a diagnostics list.",
|
|
162
|
+
"origin": "llm",
|
|
163
|
+
"status": "confirmed",
|
|
164
|
+
"honesty_conditions": [
|
|
165
|
+
{
|
|
166
|
+
"id": "h3",
|
|
167
|
+
"text": "Each diagnostic rule fires on a fixture artifact that lacks the property and stays silent on a fixture that has it \u2014 one positive and one negative test per rule.",
|
|
168
|
+
"status": "confirmed"
|
|
169
|
+
}
|
|
170
|
+
],
|
|
171
|
+
"hard_questions": [],
|
|
172
|
+
"links": []
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"id": "c11",
|
|
176
|
+
"kind": "requirement",
|
|
177
|
+
"text": "MVP ships 5 subdimensions \u2014 consequence, agency, causality, affordance, future_constraint \u2014 chosen from the issue's 'most important for Culture.dev' list; the JSON schema leaves room to add more without breaking consumers.",
|
|
178
|
+
"origin": "llm",
|
|
179
|
+
"status": "confirmed",
|
|
180
|
+
"honesty_conditions": [
|
|
181
|
+
{
|
|
182
|
+
"id": "h4",
|
|
183
|
+
"text": "All 5 subdimensions appear in the score JSON with values in [0,1], and compare emits a signed delta per subdimension; adding a 6th subdimension later requires no schema change for existing consumers.",
|
|
184
|
+
"status": "confirmed"
|
|
185
|
+
}
|
|
186
|
+
],
|
|
187
|
+
"hard_questions": [],
|
|
188
|
+
"links": []
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"id": "c12",
|
|
192
|
+
"kind": "decision",
|
|
193
|
+
"text": "Runtime dependencies stay zero: HTTP via stdlib urllib, cosine/mean in pure Python, anchors as plain text fixtures. The scaffold's agent-first CLI conventions (exit codes 0/1/2, --json, explain catalog entry) apply to the new noun.",
|
|
194
|
+
"origin": "llm",
|
|
195
|
+
"status": "rejected",
|
|
196
|
+
"honesty_conditions": [],
|
|
197
|
+
"hard_questions": [],
|
|
198
|
+
"links": []
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"id": "c13",
|
|
202
|
+
"kind": "requirement",
|
|
203
|
+
"text": "An example experiment config (issue-priority YAML, per issue #4 phase 3 shape) ships under examples/ as a committed artifact so the falsifiability path is visible \u2014 but the runner itself is out of scope.",
|
|
204
|
+
"origin": "llm",
|
|
205
|
+
"status": "confirmed",
|
|
206
|
+
"honesty_conditions": [
|
|
207
|
+
{
|
|
208
|
+
"id": "h5",
|
|
209
|
+
"text": "The example experiment YAML parses against the documented config shape and is referenced from the README; no code path executes it.",
|
|
210
|
+
"status": "confirmed"
|
|
211
|
+
}
|
|
212
|
+
],
|
|
213
|
+
"hard_questions": [],
|
|
214
|
+
"links": []
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"id": "c14",
|
|
218
|
+
"kind": "assumption",
|
|
219
|
+
"text": "Anchor-axis projection yields a signal that is not just length or sentiment in disguise \u2014 this is exactly what the phase-3 experiment must test; the MVP makes no predictive-validity claim.",
|
|
220
|
+
"origin": "llm",
|
|
221
|
+
"status": "confirmed",
|
|
222
|
+
"honesty_conditions": [],
|
|
223
|
+
"hard_questions": [],
|
|
224
|
+
"links": []
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"id": "c15",
|
|
228
|
+
"kind": "non_goal",
|
|
229
|
+
"text": "The MVP does not claim meaning is 'solved' or predictive; it ships the instrumentation needed to prove or disprove the thesis empirically.",
|
|
230
|
+
"origin": "llm",
|
|
231
|
+
"status": "confirmed",
|
|
232
|
+
"honesty_conditions": [],
|
|
233
|
+
"hard_questions": [],
|
|
234
|
+
"links": []
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"id": "c16",
|
|
238
|
+
"kind": "decision",
|
|
239
|
+
"text": "Runtime deps for the meaning engine: numpy (vector math) and httpx (embedding HTTP) are allowed as the package's first runtime dependencies \u2014 chosen over stdlib-only because phase 3 (experiments, cross-validation) lands in this same package next. Anchors stay plain-text fixtures; the scaffold's agent-first CLI conventions (exit codes 0/1/2, --json, explain catalog entry) apply to the new noun.",
|
|
240
|
+
"origin": "user",
|
|
241
|
+
"status": "confirmed",
|
|
242
|
+
"honesty_conditions": [],
|
|
243
|
+
"hard_questions": [],
|
|
244
|
+
"links": []
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"id": "c17",
|
|
248
|
+
"kind": "requirement",
|
|
249
|
+
"text": "Meaning is also measured as a trajectory: given an ordered series of measurement points (versions of an artifact), compute first differences (f' \u2014 velocity of change) and second differences (f'' \u2014 acceleration, the change of the change) between consecutive points.",
|
|
250
|
+
"origin": "user",
|
|
251
|
+
"status": "confirmed",
|
|
252
|
+
"honesty_conditions": [
|
|
253
|
+
{
|
|
254
|
+
"id": "h14",
|
|
255
|
+
"text": "On a 3+ point fixture series, trend emits f' for every consecutive pair and f'' for every consecutive f' pair; with exactly 2 points it emits f' only and marks f'' unavailable instead of erroring.",
|
|
256
|
+
"status": "confirmed"
|
|
257
|
+
}
|
|
258
|
+
],
|
|
259
|
+
"hard_questions": [],
|
|
260
|
+
"links": []
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
"id": "c18",
|
|
264
|
+
"kind": "requirement",
|
|
265
|
+
"text": "Two trajectory signals per step: (a) score derivatives \u2014 f'/f'' of meaning_score and of each subdimension score; (b) embedding drift \u2014 cosine distance moved in embedding space between consecutive points, with its own f' and f'' \u2014 so a rewrite series shows both where meaning went and how fast the artifact itself is moving.",
|
|
266
|
+
"origin": "llm",
|
|
267
|
+
"status": "confirmed",
|
|
268
|
+
"honesty_conditions": [
|
|
269
|
+
{
|
|
270
|
+
"id": "h15",
|
|
271
|
+
"text": "Both signals appear per step in trend JSON \u2014 score deltas (meaning_score + every subdimension) and embedding-drift distance \u2014 each with its own velocity and acceleration series, computed from the same one-embed-call-per-point vectors used for scoring.",
|
|
272
|
+
"status": "confirmed"
|
|
273
|
+
}
|
|
274
|
+
],
|
|
275
|
+
"hard_questions": [],
|
|
276
|
+
"links": []
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
"id": "c19",
|
|
280
|
+
"kind": "requirement",
|
|
281
|
+
"text": "New verb 'coherence meaning trend <f1> <f2> <f3> [...]' takes an ordered series (2+ points for f', 3+ for f''); 'compare' stays the 2-point special case; JSON output lists per-step deltas plus per-signal velocity/acceleration series.",
|
|
282
|
+
"origin": "llm",
|
|
283
|
+
"status": "confirmed",
|
|
284
|
+
"honesty_conditions": [
|
|
285
|
+
{
|
|
286
|
+
"id": "h16",
|
|
287
|
+
"text": "compare and trend agree on the same two files (identical deltas); trend with fewer than 2 inputs is a user-input error with a hint.",
|
|
288
|
+
"status": "confirmed"
|
|
289
|
+
}
|
|
290
|
+
],
|
|
291
|
+
"hard_questions": [],
|
|
292
|
+
"links": []
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
"id": "c20",
|
|
296
|
+
"kind": "boundary",
|
|
297
|
+
"text": "This spec covers issue #4 phases 1-2 (score + compare) plus the trend/trajectory extension (f'/f'' over measurement-point series \u2014 beyond issue #4's text). Still excluded: separate meaning-cli, LLM judge, experiment runner execution, doctor/certify integration, pluggable embedding providers \u2014 tracked follow-ups, not silent scope.",
|
|
298
|
+
"origin": "user",
|
|
299
|
+
"status": "confirmed",
|
|
300
|
+
"honesty_conditions": [
|
|
301
|
+
{
|
|
302
|
+
"id": "h17",
|
|
303
|
+
"text": "No MVP code path executes an experiment, calls an LLM judge, or touches doctor/certify; each deferred phase is a tracked follow-up, not silent scope.",
|
|
304
|
+
"status": "confirmed"
|
|
305
|
+
}
|
|
306
|
+
],
|
|
307
|
+
"hard_questions": [],
|
|
308
|
+
"links": []
|
|
309
|
+
}
|
|
310
|
+
],
|
|
311
|
+
"open_vagueness": [
|
|
312
|
+
{
|
|
313
|
+
"id": "v1",
|
|
314
|
+
"text": "Exact anchor texts per subdimension \u2014 seed from issue #4's high/low lists, expect iteration once real scores are observed; anchors are fixtures precisely so tuning them is a data change, not a code change.",
|
|
315
|
+
"kind": "unknown_nonblocking",
|
|
316
|
+
"claim_id": null
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
"id": "v2",
|
|
320
|
+
"text": "Whether the 5 subdimension axes are actually independent signals or collapse into one factor (or into length/sentiment) \u2014 answerable only by the phase-3 experiment.",
|
|
321
|
+
"kind": "unknown_nonblocking",
|
|
322
|
+
"claim_id": null
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
"id": "v3",
|
|
326
|
+
"text": "Score normalization choice (raw cosine vs rescaled [0,1] vs percentile against anchors) may need revisiting once distributions on real artifacts are visible.",
|
|
327
|
+
"kind": "unknown_nonblocking",
|
|
328
|
+
"claim_id": null
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
"id": "v4",
|
|
332
|
+
"text": "Phase 3: 'coherence meaning experiment run' + a 100-300 issue human-rated dataset (needs human raters and outcome labels).",
|
|
333
|
+
"kind": "follow_up",
|
|
334
|
+
"claim_id": null
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
"id": "v5",
|
|
338
|
+
"text": "Phases 4-5: 'coherence doctor --dimension meaning' and 'coherence certify --dimension meaning' \u2014 integrate once scoring is trusted.",
|
|
339
|
+
"kind": "follow_up",
|
|
340
|
+
"claim_id": null
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"id": "v6",
|
|
344
|
+
"text": "LLM-judge fallback and pluggable embedding providers (issue #4 stretch tier).",
|
|
345
|
+
"kind": "follow_up",
|
|
346
|
+
"claim_id": null
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
"id": "v7",
|
|
350
|
+
"text": "Culture.dev routing policy output (route_to / memory_candidate recommendations) \u2014 depends on validated scores.",
|
|
351
|
+
"kind": "follow_up",
|
|
352
|
+
"claim_id": null
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
"id": "v8",
|
|
356
|
+
"text": "Derivative denominator: MVP uses per-step differences (unitless, ordered series); time-normalized derivatives (divide by delta-t from git dates or mtimes) revisit when git-history sampling lands.",
|
|
357
|
+
"kind": "unknown_nonblocking",
|
|
358
|
+
"claim_id": null
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
"id": "v9",
|
|
362
|
+
"text": "Git-history sampling as measurement-point source ('coherence meaning trend --git <path>' walking commits) \u2014 natural follow-up once explicit file series works.",
|
|
363
|
+
"kind": "follow_up",
|
|
364
|
+
"claim_id": null
|
|
365
|
+
}
|
|
366
|
+
]
|
|
367
|
+
}
|