Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,13 @@ Release discipline:
direct substrate-layout or `git-warp` runtime leakage
- removed Think-managed `git-warp` cache/checkpoint reads, doctor checks, and
ref deletion from product runtime paths
- upgraded `@git-stunts/git-warp` to 18.2.1
- replaced the production storage path with the public
`@git-stunts/git-warp` v19 Runtime, Lane, Intent, Observer, and captured
coordinate APIs, with no v18 compatibility path
- upgraded the registry dependency to `@git-stunts/git-warp` 19.0.2
- read bounded native index pages concurrently at one captured coordinate,
preserving deterministic newest-first recall while avoiding serial optic
latency

## [0.7.2] - 2026-06-23

Expand Down
2 changes: 1 addition & 1 deletion benchmarks/capture-latency.js
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ function measureCapturePhases(homeDir, text) {

const wallMs = Number(wallEnd - wallStart) / 1_000_000;

const events = result.stderr
const events = `${result.stdout}\n${result.stderr}`
.split('\n')
.filter((line) => line.trim().startsWith('{'))
.map((line) => {
Expand Down
120 changes: 120 additions & 0 deletions contracts/think-git-warp-v19.graphql
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# Think's authored git-warp v19 application contract.
#
# Wesley owns deterministic operation metadata. Think's renderer binds that
# metadata to git-warp's public v19 Intent and Observer constructors.
#
# This is intentionally not a generic graph or property facade. The only
# retained property shapes exposed to application code are Think's three
# schema-versioned byte documents.

directive @intent(
kind: IntentKind!
subject: String
property: String
value: String
) on FIELD_DEFINITION

directive @observer(
id: String!
reading: ReadingKind!
subject: String!
property: String
cardinality: ObserverCardinality!
decoder: ValueDecoder!
) on FIELD_DEFINITION

enum IntentKind {
NODE_ADD
PROPERTY_SET_BYTES
}

enum ReadingKind {
PROPERTY
NODE_EXISTS
}

enum ObserverCardinality {
EXACTLY_ONE
}

enum ValueDecoder {
BOOLEAN
BYTES
}

type IntentBinding {
operation: String!
}

scalar Bytes

type Mutation {
declareMemoryObject(subject: ID!): IntentBinding!
@intent(kind: NODE_ADD, subject: "subject")

storeMemoryDocument(subject: ID!, value: Bytes!): IntentBinding!
@intent(
kind: PROPERTY_SET_BYTES
subject: "subject"
property: "think.memory-document.v1"
value: "value"
)

storeMemoryIndex(subject: ID!, value: Bytes!): IntentBinding!
@intent(
kind: PROPERTY_SET_BYTES
subject: "subject"
property: "think.memory-index.v1"
value: "value"
)

storeMemoryIndexPage(subject: ID!, value: Bytes!): IntentBinding!
@intent(
kind: PROPERTY_SET_BYTES
subject: "subject"
property: "think.memory-index-page.v1"
value: "value"
)

}

type Query {
memoryDocument(subject: ID!): Bytes
@observer(
id: "think.memory.document"
reading: PROPERTY
subject: "subject"
property: "think.memory-document.v1"
cardinality: EXACTLY_ONE
decoder: BYTES
)

memoryIndex(subject: ID!): Bytes
@observer(
id: "think.memory.index"
reading: PROPERTY
subject: "subject"
property: "think.memory-index.v1"
cardinality: EXACTLY_ONE
decoder: BYTES
)

memoryIndexPage(subject: ID!): Bytes
@observer(
id: "think.memory.index-page"
reading: PROPERTY
subject: "subject"
property: "think.memory-index-page.v1"
cardinality: EXACTLY_ONE
decoder: BYTES
)

memoryObjectExists(subject: ID!): Boolean!
@observer(
id: "think.memory.object-exists"
reading: NODE_EXISTS
subject: "subject"
cardinality: EXACTLY_ONE
decoder: BOOLEAN
)
}
25 changes: 17 additions & 8 deletions docs/MIND_ORCHESTRATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,25 @@ Any directory under `~/.think/` that contains a git repository
(a `.git/` subdirectory) is a mind. The directory name is the
mind's display name.

The repository must contain Think's native git-warp v19 application data.
Think does not open v18 substrates or the rejected v19 compatibility-record
layout. Migrate those repositories with
`docs/operations/git-warp-v19-cutover.md` before placing them at an
authoritative mind path.

```
~/.think/
repo/ → "default" mind (the original single-mind path)
james/ → "default" human mind
repo/ → "repo" mind (retained pre-James path, when present)
claude/ → "claude" mind
work/ → "work" mind
metrics/ → NOT a mind (no .git/)
```
Comment on lines 20 to 27

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add a language hint to satisfy markdownlint (MD040).

📝 Proposed fix
-```
+```text
 ~/.think/
   james/         → "default" human mind
   repo/          → "repo" mind (retained pre-James path, when present)
   claude/        → "claude" mind
   work/          → "work" mind
   metrics/       → NOT a mind (no .git/)
</details>

<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

```suggestion

🧰 Tools
🪛 markdownlint-cli2 (0.23.1)

[warning] 20-20: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/MIND_ORCHESTRATION.md` around lines 20 - 27, Update the fenced code
block in MIND_ORCHESTRATION.md to include the text language hint while
preserving its directory listing content.

Source: Linters/SAST tools


The special directory `~/.think/repo` displays as **"default"** for
backward compatibility — it's the mind Think uses when no other is
selected.
The special directory `~/.think/james` displays as **"default"** and
is the mind Think uses when no other is selected. A retained
`~/.think/repo` remains discoverable under the display name **"repo"**;
Think does not silently merge or delete it.

## Creating a mind

Expand All @@ -32,8 +40,9 @@ git init
```

That's it. Think discovers it automatically on the next browse launch.
No configuration files, no registration step. The filesystem is the
registry.
The first capture initializes the native v19 substrate and bounded Think
indexes. No configuration file or separate registration command is required;
the filesystem is the registry.

## Discovery

Expand Down Expand Up @@ -72,7 +81,7 @@ The header shows the active mind name when multiple minds exist

## Capture

Capture always goes to the default mind (`~/.think/repo`) or
Capture always goes to the default mind (`~/.think/james`) or
whatever `THINK_REPO_DIR` points to. Mind selection in browse is
read-only — it does not change which mind receives new captures.

Expand All @@ -89,7 +98,7 @@ both capture and browse. The mind switcher in the TUI is limited to
a single-element list containing the overridden path.

When `THINK_REPO_DIR` is not set, Think discovers all minds under
`~/.think/` and uses `~/.think/repo` as the default.
`~/.think/` and uses `~/.think/james` as the default.

## Agent isolation

Expand Down
13 changes: 8 additions & 5 deletions docs/audit/hexagonal-boundary-ratchet-baseline.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
{
"allowedBoundaryFiles": [
"scripts/hexagonal-boundary-ratchet.mjs",
"scripts/prepare-v19-mind.mjs",
"scripts/replay-v19-capture-on-v18.mjs",
"scripts/repair-v17-mind.mjs",
"src/browse-benchmark.js",
"src/browse/adapters/git-warp-worker.js",
"src/browse/adapters/git-warp.js",
"src/cli/commands/doctor.js",
"src/doctor.js",
"src/history/git-warp-read.js"
"src/history/git-warp-read.js",
"src/store/git-warp-v19.js",
"src/store/think-warp-sdk.js"
],
"generatedFrom": "scripts/hexagonal-boundary-ratchet.mjs",
"leaks": {
Expand All @@ -19,14 +23,13 @@
"src/store/enrichment/runner.js": 2,
"src/store/migrations.js": 6,
"src/store/reflect.js": 6,
"src/store/runtime.js": 11
"src/store/runtime.js": 4
},
"byTerm": {
"git-warp-package": 1,
"git-warp-runtime-symbol": 37,
"git-warp-runtime-symbol": 31,
"warp-ref-layout": 1
},
"total": 39
"total": 32
},
"substrateTermIds": [
"git-warp-package",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@ blocked_by:
Think runtime compatibility must be proven against the published
`@git-stunts/git-warp` package declared in `package.json`, not against a linked
local checkout or private package internals. The current product runtime targets
the public worldline API in `@git-stunts/git-warp@18.2.1`; legacy checkpoint
repair remains quarantined in the v17 repair lane.
the public Runtime, Lane, Intent, Observer, and captured-coordinate APIs in
`@git-stunts/git-warp@19.0.2`; legacy checkpoint repair remains quarantined in
the v17 repair lane.

## Acceptance Criteria

Expand Down
12 changes: 9 additions & 3 deletions docs/method/backlog/bad-code/CORE_large-mind-read-timeouts.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,21 @@ unavailable even when the underlying mind is intact.
not call `read.view.query()`.
- [x] Store self-contained fast capture records so default `remember` can score
ambient project matches without hydrating capture nodes.
- [x] Read the bounded native index page set concurrently at one captured v19
coordinate while preserving newest-first order. Six installed-wrapper
runs on `~/.think/codex` reduced median `codex-think --remember --json`
wall time from 11.111s to 4.814s at `/Users/james` and from 11.161s to
5.081s at `/Users/james/git/think`.
- [ ] Add a deterministic large-mind fixture or synthetic benchmark for MCP read
timeout budgets.
- [ ] Add an explicit read-model backfill/repair command for existing minds so
old captures can enter the bounded indexes without default recall scanning
from genesis.
- [ ] Establish target budgets for `recent`, `stats`, `doctor`, and `remember`
against large repaired minds. Current `codex-think --remember --json`
smoke exits under a 20s timeout on `~/.think/codex`, but still spends
roughly 13-14s in one git-warp optic property read.
exits reliably on `~/.think/codex`, but its 4.814-5.081s median remains
above the sub-second product doctrine; the measured scan phase still
consumes about 3.7s for nine bounded v19 index-page reads.
- [ ] Document and automate safe maintenance for high-loose-object minds.
- [ ] Prefer public worldline/optic bounded reads where broad transitional
- [x] Prefer public worldline/optic bounded reads where broad transitional
queries are not required.
Loading
Loading