@pcircle/memesh 4.8.3 → 4.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +2 -1
- package/.codex-plugin/mcp.json +6 -4
- package/.codex-plugin/plugin.json +1 -1
- package/AGENTS.md +68 -17
- package/README.de.md +83 -555
- package/README.md +83 -581
- package/README.zh-TW.md +84 -572
- package/dashboard/dist/index.html +10 -10
- package/dist/cli/view-live.d.ts.map +1 -1
- package/dist/cli/view-live.js +154 -384
- package/dist/cli/view-live.js.map +1 -1
- package/dist/core/agent-message-inbox.d.ts +2 -1
- package/dist/core/agent-message-inbox.d.ts.map +1 -1
- package/dist/core/agent-message-inbox.js +23 -4
- package/dist/core/agent-message-inbox.js.map +1 -1
- package/dist/core/agent-messaging.d.ts.map +1 -1
- package/dist/core/agent-messaging.js +23 -15
- package/dist/core/agent-messaging.js.map +1 -1
- package/dist/core/agent-router.d.ts +11 -10
- package/dist/core/agent-router.d.ts.map +1 -1
- package/dist/core/agent-router.js +29 -14
- package/dist/core/agent-router.js.map +1 -1
- package/dist/core/agent-scope-id.d.ts +11 -0
- package/dist/core/agent-scope-id.d.ts.map +1 -0
- package/dist/core/agent-scope-id.js +40 -0
- package/dist/core/agent-scope-id.js.map +1 -0
- package/dist/core/analytics.d.ts.map +1 -1
- package/dist/core/analytics.js.map +1 -1
- package/dist/core/briefing.d.ts.map +1 -1
- package/dist/core/briefing.js +8 -2
- package/dist/core/briefing.js.map +1 -1
- package/dist/core/config.d.ts +4 -40
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +75 -141
- package/dist/core/config.js.map +1 -1
- package/dist/core/demo.d.ts.map +1 -1
- package/dist/core/demo.js +6 -6
- package/dist/core/demo.js.map +1 -1
- package/dist/core/doctor.d.ts +2 -6
- package/dist/core/doctor.d.ts.map +1 -1
- package/dist/core/doctor.js +120 -154
- package/dist/core/doctor.js.map +1 -1
- package/dist/core/dreamer.d.ts +32 -47
- package/dist/core/dreamer.d.ts.map +1 -1
- package/dist/core/dreamer.js +214 -704
- package/dist/core/dreamer.js.map +1 -1
- package/dist/core/install-channel.d.ts.map +1 -1
- package/dist/core/install-channel.js +4 -47
- package/dist/core/install-channel.js.map +1 -1
- package/dist/core/install-id.d.ts.map +1 -1
- package/dist/core/install-id.js.map +1 -1
- package/dist/core/kg-backfill.d.ts.map +1 -1
- package/dist/core/kg-backfill.js.map +1 -1
- package/dist/core/lesson-engine.d.ts +0 -5
- package/dist/core/lesson-engine.d.ts.map +1 -1
- package/dist/core/lesson-engine.js +0 -25
- package/dist/core/lesson-engine.js.map +1 -1
- package/dist/core/lifecycle.d.ts.map +1 -1
- package/dist/core/lifecycle.js +58 -49
- package/dist/core/lifecycle.js.map +1 -1
- package/dist/core/memory-tool.d.ts.map +1 -1
- package/dist/core/memory-tool.js +20 -18
- package/dist/core/memory-tool.js.map +1 -1
- package/dist/core/operations.d.ts +3 -27
- package/dist/core/operations.d.ts.map +1 -1
- package/dist/core/operations.js +10 -245
- package/dist/core/operations.js.map +1 -1
- package/dist/core/paths.d.ts +4 -1
- package/dist/core/paths.d.ts.map +1 -1
- package/dist/core/paths.js +88 -14
- package/dist/core/paths.js.map +1 -1
- package/dist/core/product-improvements.js +2 -2
- package/dist/core/product-improvements.js.map +1 -1
- package/dist/core/project-tags.d.ts +2 -0
- package/dist/core/project-tags.d.ts.map +1 -1
- package/dist/core/project-tags.js +29 -1
- package/dist/core/project-tags.js.map +1 -1
- package/dist/core/schema-export.d.ts.map +1 -1
- package/dist/core/schema-export.js +13 -3
- package/dist/core/schema-export.js.map +1 -1
- package/dist/core/semver.d.ts +7 -0
- package/dist/core/semver.d.ts.map +1 -0
- package/dist/core/semver.js +49 -0
- package/dist/core/semver.js.map +1 -0
- package/dist/core/serializer.d.ts.map +1 -1
- package/dist/core/serializer.js +69 -57
- package/dist/core/serializer.js.map +1 -1
- package/dist/core/signal-scorer.d.ts.map +1 -1
- package/dist/core/signal-scorer.js.map +1 -1
- package/dist/core/transcript-extractor.d.ts +1 -85
- package/dist/core/transcript-extractor.d.ts.map +1 -1
- package/dist/core/transcript-extractor.js +5 -364
- package/dist/core/transcript-extractor.js.map +1 -1
- package/dist/core/transcript-source.d.ts +22 -6
- package/dist/core/transcript-source.d.ts.map +1 -1
- package/dist/core/transcript-source.js +108 -69
- package/dist/core/transcript-source.js.map +1 -1
- package/dist/core/types.d.ts +1 -17
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/version-check.d.ts +1 -0
- package/dist/core/version-check.d.ts.map +1 -1
- package/dist/core/version-check.js +46 -1
- package/dist/core/version-check.js.map +1 -1
- package/dist/db.d.ts +0 -34
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +6 -287
- package/dist/db.js.map +1 -1
- package/dist/host-runtime/acp.d.ts.map +1 -1
- package/dist/host-runtime/acp.js +4 -3
- package/dist/host-runtime/acp.js.map +1 -1
- package/dist/host-runtime/claude.d.ts.map +1 -1
- package/dist/host-runtime/claude.js +11 -11
- package/dist/host-runtime/claude.js.map +1 -1
- package/dist/host-runtime/codex-session.d.ts +9 -1
- package/dist/host-runtime/codex-session.d.ts.map +1 -1
- package/dist/host-runtime/codex-session.js +474 -29
- package/dist/host-runtime/codex-session.js.map +1 -1
- package/dist/host-runtime/codex.d.ts.map +1 -1
- package/dist/host-runtime/codex.js +4 -3
- package/dist/host-runtime/codex.js.map +1 -1
- package/dist/host-runtime/config.d.ts +1 -0
- package/dist/host-runtime/config.d.ts.map +1 -1
- package/dist/host-runtime/config.js +4 -0
- package/dist/host-runtime/config.js.map +1 -1
- package/dist/host-runtime/entry.d.ts +5 -0
- package/dist/host-runtime/entry.d.ts.map +1 -0
- package/dist/host-runtime/entry.js +11 -0
- package/dist/host-runtime/entry.js.map +1 -0
- package/dist/host-runtime/router-client.d.ts.map +1 -1
- package/dist/host-runtime/router-client.js +62 -15
- package/dist/host-runtime/router-client.js.map +1 -1
- package/dist/host-runtime/router.js +2 -2
- package/dist/host-runtime/router.js.map +1 -1
- package/dist/knowledge-graph.d.ts +0 -1
- package/dist/knowledge-graph.d.ts.map +1 -1
- package/dist/knowledge-graph.js +77 -60
- package/dist/knowledge-graph.js.map +1 -1
- package/dist/mcp/THIRD_PARTY_NOTICES.txt +217 -0
- package/dist/mcp/server.js +30685 -38
- package/dist/mcp/server.js.map +6 -1
- package/dist/skills-manifest.json +39 -34
- package/dist/storage/entity-index.d.ts +3 -0
- package/dist/storage/entity-index.d.ts.map +1 -0
- package/dist/storage/entity-index.js +8 -0
- package/dist/storage/entity-index.js.map +1 -0
- package/dist/storage/fts-index.d.ts.map +1 -1
- package/dist/storage/fts-index.js +11 -7
- package/dist/storage/fts-index.js.map +1 -1
- package/dist/storage/graph-repairs.d.ts +7 -2
- package/dist/storage/graph-repairs.d.ts.map +1 -1
- package/dist/storage/graph-repairs.js +89 -13
- package/dist/storage/graph-repairs.js.map +1 -1
- package/dist/storage/schema.d.ts +1 -1
- package/dist/storage/schema.d.ts.map +1 -1
- package/dist/storage/schema.js +1 -2
- package/dist/storage/schema.js.map +1 -1
- package/dist/storage/sqlite.d.ts +0 -1
- package/dist/storage/sqlite.d.ts.map +1 -1
- package/dist/storage/sqlite.js.map +1 -1
- package/dist/transports/agent-messaging.d.ts.map +1 -1
- package/dist/transports/agent-messaging.js +5 -7
- package/dist/transports/agent-messaging.js.map +1 -1
- package/dist/transports/cli/cli.d.ts.map +1 -1
- package/dist/transports/cli/cli.js +75 -686
- package/dist/transports/cli/cli.js.map +1 -1
- package/dist/transports/http/retired-routes.js +1 -1
- package/dist/transports/http/retired-routes.js.map +1 -1
- package/dist/transports/http/server.d.ts.map +1 -1
- package/dist/transports/http/server.js +13 -232
- package/dist/transports/http/server.js.map +1 -1
- package/dist/transports/mcp/handlers.d.ts +130 -4
- package/dist/transports/mcp/handlers.d.ts.map +1 -1
- package/dist/transports/mcp/handlers.js +56 -7
- package/dist/transports/mcp/handlers.js.map +1 -1
- package/dist/transports/schemas.d.ts +71 -19
- package/dist/transports/schemas.d.ts.map +1 -1
- package/dist/transports/schemas.js +57 -11
- package/dist/transports/schemas.js.map +1 -1
- package/docs/platforms/README.md +6 -5
- package/docs/platforms/agent-messaging.md +241 -20
- package/hooks/hooks.json +23 -2
- package/llms-install.md +62 -30
- package/package.json +12 -9
- package/scripts/hooks/_generated/agent-message-inbox.js +23 -4
- package/scripts/hooks/_generated/core-paths.js +88 -14
- package/scripts/hooks/_generated/fts-index.js +11 -7
- package/scripts/hooks/_generated/schema.js +1 -2
- package/scripts/hooks/_shared.js +65 -23
- package/scripts/hooks/decision-nudge.js +152 -0
- package/scripts/hooks/post-commit.js +11 -0
- package/scripts/hooks/pre-compact.js +12 -4
- package/scripts/hooks/session-start.js +32 -9
- package/scripts/hooks/session-summary.js +19 -374
- package/scripts/upgrade-plugin.sh +71 -2
- package/skills/memesh/SKILL.md +24 -15
- package/skills/memesh-review/SKILL.md +7 -6
- package/dist/core/auto-tagger.d.ts +0 -10
- package/dist/core/auto-tagger.d.ts.map +0 -1
- package/dist/core/auto-tagger.js +0 -63
- package/dist/core/auto-tagger.js.map +0 -1
- package/dist/core/conflict-candidates.d.ts +0 -20
- package/dist/core/conflict-candidates.d.ts.map +0 -1
- package/dist/core/conflict-candidates.js +0 -71
- package/dist/core/conflict-candidates.js.map +0 -1
- package/dist/core/conflict-judge.d.ts +0 -58
- package/dist/core/conflict-judge.d.ts.map +0 -1
- package/dist/core/conflict-judge.js +0 -189
- package/dist/core/conflict-judge.js.map +0 -1
- package/dist/core/digest-validator.d.ts +0 -18
- package/dist/core/digest-validator.d.ts.map +0 -1
- package/dist/core/digest-validator.js +0 -85
- package/dist/core/digest-validator.js.map +0 -1
- package/dist/core/embedder.d.ts +0 -20
- package/dist/core/embedder.d.ts.map +0 -1
- package/dist/core/embedder.js +0 -242
- package/dist/core/embedder.js.map +0 -1
- package/dist/core/failure-analyzer.d.ts +0 -19
- package/dist/core/failure-analyzer.d.ts.map +0 -1
- package/dist/core/failure-analyzer.js +0 -83
- package/dist/core/failure-analyzer.js.map +0 -1
- package/dist/core/json-utils.d.ts +0 -3
- package/dist/core/json-utils.d.ts.map +0 -1
- package/dist/core/json-utils.js +0 -46
- package/dist/core/json-utils.js.map +0 -1
- package/dist/core/llm-client.d.ts +0 -22
- package/dist/core/llm-client.d.ts.map +0 -1
- package/dist/core/llm-client.js +0 -203
- package/dist/core/llm-client.js.map +0 -1
- package/dist/core/llm-telemetry.d.ts +0 -47
- package/dist/core/llm-telemetry.d.ts.map +0 -1
- package/dist/core/llm-telemetry.js +0 -117
- package/dist/core/llm-telemetry.js.map +0 -1
- package/dist/core/llm-validator.d.ts +0 -20
- package/dist/core/llm-validator.d.ts.map +0 -1
- package/dist/core/llm-validator.js +0 -231
- package/dist/core/llm-validator.js.map +0 -1
- package/dist/core/ollama-host.d.ts +0 -6
- package/dist/core/ollama-host.d.ts.map +0 -1
- package/dist/core/ollama-host.js +0 -30
- package/dist/core/ollama-host.js.map +0 -1
- package/dist/core/output-language.d.ts +0 -6
- package/dist/core/output-language.d.ts.map +0 -1
- package/dist/core/output-language.js +0 -25
- package/dist/core/output-language.js.map +0 -1
- package/dist/core/prompt-safety.d.ts +0 -4
- package/dist/core/prompt-safety.d.ts.map +0 -1
- package/dist/core/prompt-safety.js +0 -20
- package/dist/core/prompt-safety.js.map +0 -1
- package/dist/storage/vector-index.d.ts +0 -3
- package/dist/storage/vector-index.d.ts.map +0 -1
- package/dist/storage/vector-index.js +0 -13
- package/dist/storage/vector-index.js.map +0 -1
- /package/{.mcp.json → .claude-plugin/mcp.json} +0 -0
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"name": "memesh",
|
|
9
9
|
"source": "./",
|
|
10
10
|
"description": "MeMesh \u2014 agentic memory for coding agents. Captured from the agent's real work via hooks, recalled when it acts. One SQLite file, zero cloud required.",
|
|
11
|
-
"version": "4.
|
|
11
|
+
"version": "4.9.0",
|
|
12
12
|
"author": {
|
|
13
13
|
"name": "PCIRCLE AI"
|
|
14
14
|
},
|
package/.codex-plugin/mcp.json
CHANGED
package/AGENTS.md
CHANGED
|
@@ -23,7 +23,18 @@ host is recallable from all of them. Not installed yet? Follow
|
|
|
23
23
|
field out if it was not said.
|
|
24
24
|
3. **"What do you remember?"** — call `briefing` and relay its content. Do
|
|
25
25
|
not answer from your own conversation context.
|
|
26
|
-
4. **When
|
|
26
|
+
4. **When memory could be condensed from a calendar cluster or a recent Claude Code session** —
|
|
27
|
+
when the host supports interactive prompts, offer concise choices in the
|
|
28
|
+
user's conversation language, such as **Dispatch agent task**, **Later**, or
|
|
29
|
+
**Don't suggest again this session**.
|
|
30
|
+
The last choice suppresses only this session's prompt; it does not create a
|
|
31
|
+
durable opt-out. Dispatch means
|
|
32
|
+
using `work_package` in this already-running agent session; it does not mean
|
|
33
|
+
the Dashboard can start or wake an agent. Prepare either one calendar-selected
|
|
34
|
+
digest package or, when the MCP client supplies one unambiguous matching
|
|
35
|
+
workspace root, one package from its newest Claude Code session's visible
|
|
36
|
+
turns. Submit one bounded result for human review or defer without writing.
|
|
37
|
+
5. **When you need another agent** — to hand off, to ask, to report back —
|
|
27
38
|
first use `message discover` with the exact project when you do not already
|
|
28
39
|
know the recipient. It lists only live registrations and their routing IDs,
|
|
29
40
|
host kind, declared model/current work, generation, and lease; missing
|
|
@@ -35,10 +46,11 @@ host is recallable from all of them. Not installed yet? Follow
|
|
|
35
46
|
`recipient`; poll first, then fetch each returned `message_id`. Fetching
|
|
36
47
|
does not acknowledge.
|
|
37
48
|
|
|
38
|
-
## All
|
|
49
|
+
## All 12 MCP tools
|
|
39
50
|
|
|
40
51
|
| Tool | Purpose |
|
|
41
52
|
|---|---|
|
|
53
|
+
| `work_package` | Prepare one bounded untrusted digest (calendar-selected) or transcript package from the newest Claude Code session under the client's single matching MCP workspace root; submit one strictly validated result for pending human review or defer without durable change. Submission retains bounded redacted source turns for comparison; agents cannot apply or reject, and hashes identify freshness and workspace scope rather than authentication. |
|
|
42
54
|
| `remember` | Store knowledge as an entity with observations, tags, and relations |
|
|
43
55
|
| `recall` | Search stored knowledge (words are OR-ed, ranked by relevance); empty query lists recent |
|
|
44
56
|
| `forget` | Archive an entity (soft-delete), or remove one observation via the `observation` parameter |
|
|
@@ -78,9 +90,8 @@ host is recallable from all of them. Not installed yet? Follow
|
|
|
78
90
|
before concluding anything.
|
|
79
91
|
- Every recall answer carries a `retrieval` block that says how it was
|
|
80
92
|
produced — read it instead of guessing: `truncated: true` means the
|
|
81
|
-
window filled and more may exist
|
|
82
|
-
|
|
83
|
-
right now (worth telling the user, and `memesh doctor` explains why).
|
|
93
|
+
window filled and more may exist. Recall is local FTS5 search; do not
|
|
94
|
+
describe results as semantic, vector-ranked, or model-generated.
|
|
84
95
|
|
|
85
96
|
## What Claude Code already does — do not double-write
|
|
86
97
|
|
|
@@ -91,7 +102,10 @@ Under Claude Code with the MeMesh plugin, hooks capture automatically:
|
|
|
91
102
|
- **PreToolUse (Edit|Write)** surfaces memories related to the file being
|
|
92
103
|
edited.
|
|
93
104
|
- **PostToolUse (Bash)** records git commits with diff stats.
|
|
94
|
-
- **
|
|
105
|
+
- **PostToolUse (ExitPlanMode|AskUserQuestion)** reminds you to `remember` a
|
|
106
|
+
decision just made — once per tool per session. It only reminds; unlike
|
|
107
|
+
the hooks above, it writes nothing to the graph itself.
|
|
108
|
+
- **Stop** captures bounded session evidence, including observed error/fix signals.
|
|
95
109
|
- **PreCompact** saves important knowledge before history is compressed.
|
|
96
110
|
- **UserPromptSubmit** detects "remember this" intent in the prompt.
|
|
97
111
|
- **PreToolUse (Bash)** fires accepted lesson-guards: a fenced warning
|
|
@@ -100,25 +114,32 @@ Under Claude Code with the MeMesh plugin, hooks capture automatically:
|
|
|
100
114
|
you do.
|
|
101
115
|
|
|
102
116
|
So under Claude Code: skip step 1 of the loop (the topology is already
|
|
103
|
-
injected), and do not `remember` commits or session summaries by hand.
|
|
104
|
-
|
|
105
|
-
|
|
117
|
+
injected), and do not `remember` commits or session summaries by hand. A
|
|
118
|
+
decision made via `ExitPlanMode`/`AskUserQuestion` gets a reminder, not a
|
|
119
|
+
write — act on it with a real `remember` call. Manual calls are still how
|
|
120
|
+
decisions, their rationale, lessons worth keeping, and user-stated task state
|
|
121
|
+
actually get stored.
|
|
106
122
|
|
|
107
123
|
On a host with no hooks (Gemini CLI, Cursor, an MCP-only setup, …) the loop is
|
|
108
124
|
fully manual, and it is worth running.
|
|
109
125
|
|
|
110
|
-
Codex CLI can be either. Wired as an MCP server it has no hooks,
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
126
|
+
Codex CLI can be either. Wired only as an MCP server it has no hooks, so call
|
|
127
|
+
`briefing` yourself. Installed as a plugin
|
|
128
|
+
(`codex plugin add memesh@pcircle-memesh`) it wires the MCP server and the
|
|
129
|
+
separate SessionStart companion. On macOS or Linux, an eligible ordinary Codex
|
|
130
|
+
CLI startup or resume registers that exact active thread for native delivery.
|
|
131
|
+
The companion does not run Claude Code's eight capture/recall hooks or prove
|
|
132
|
+
that topology was injected. Do not assume Codex Desktop or an unattached task
|
|
133
|
+
registered; confirm the exact live session with `message discover`.
|
|
134
|
+
`memesh doctor` reports installation and local integration health, but it does
|
|
135
|
+
not prove host acceptance or model-visible delivery.
|
|
116
136
|
|
|
117
137
|
## Working on this repository (contributing agents)
|
|
118
138
|
|
|
119
139
|
The sections above are for agents whose user installed memesh. If you are an
|
|
120
|
-
agent making changes to this codebase, [CLAUDE.md](CLAUDE.md)
|
|
121
|
-
point
|
|
140
|
+
agent making changes to this codebase, read [CLAUDE.md](CLAUDE.md) as the
|
|
141
|
+
contributor entry point and apply the working and delegation requirements
|
|
142
|
+
below with it:
|
|
122
143
|
|
|
123
144
|
- **Blast radius picks the process.** One module, no security surface, no
|
|
124
145
|
cross-surface behaviour → implement, run the affected tests + typecheck,
|
|
@@ -132,5 +153,35 @@ point; the policy it carries, compressed:
|
|
|
132
153
|
- **Delegation is disjoint.** Two writers never touch one file; file-editing
|
|
133
154
|
subagents work in isolated worktrees and never commit or push — the
|
|
134
155
|
orchestrator reads every diff before it lands.
|
|
156
|
+
- **Delegate the smallest verifiable slice.** Give each agent one coherent
|
|
157
|
+
outcome that can be implemented and falsified independently. Do not hand a
|
|
158
|
+
broad implementation or cleanup to one worker when it can be split at
|
|
159
|
+
file-disjoint boundaries. Read-only analysis may be divided further by
|
|
160
|
+
symbol, test, UI, documentation, or runtime question. A formal independent
|
|
161
|
+
reviewer still receives the same complete diff; specialist scope narrows
|
|
162
|
+
the questions, never the changed files. Delegation must reduce uncertainty
|
|
163
|
+
or work, not merely add an agent.
|
|
164
|
+
- **Use an explicit task card.** Every delegated task states: observable
|
|
165
|
+
outcome; owned paths and forbidden paths; frozen repository input (branch,
|
|
166
|
+
commit and, when relevant, tree or artifact digest); required invariants and
|
|
167
|
+
failure paths; exact checks and readbacks; non-goals and mutation authority;
|
|
168
|
+
and the required findings/evidence return format. Unknowns must be reported,
|
|
169
|
+
not guessed. A task without a falsifiable acceptance check is not ready to
|
|
170
|
+
delegate.
|
|
171
|
+
- **Treat DeepSeek as a bounded team worker.** Prefer the local DeepSeek worker
|
|
172
|
+
for small source inventories, candidate patches, test ideas, failure-log
|
|
173
|
+
analysis, mechanical classifications, and documentation comparisons when
|
|
174
|
+
its result can be checked cheaply. Give it only the minimum secret-free
|
|
175
|
+
context and least-privilege tools. It never receives credentials, MeMesh
|
|
176
|
+
database access, external mutation authority, architecture ownership,
|
|
177
|
+
formal independent-review authority, or completion authority. Its output is
|
|
178
|
+
an untrusted candidate until the orchestrator verifies it against the frozen
|
|
179
|
+
source and executable evidence.
|
|
180
|
+
- **Keep roles and evidence separate.** The orchestrator owns architecture,
|
|
181
|
+
integration, claim coverage, authorization boundaries, and the final status.
|
|
182
|
+
Implementers return a candidate, never `PASS`. A fresh read-only reviewer
|
|
183
|
+
who authored none of the changed paths replays every claim on the exact
|
|
184
|
+
immutable candidate. Any source change invalidates earlier test and review
|
|
185
|
+
evidence for that candidate.
|
|
135
186
|
- **Internal notes stay local.** Plans and scratch analyses are never
|
|
136
187
|
committed and never appear in commit messages or release notes.
|