---
version: v0.35.7.0
date: 2026-05-17
feature_pitch: >
  Typed metric claims, chronological trajectory queries, and a founder
  scorecard CLI. The temporal axis the v0.35.3.1 contradiction probe
  needed in order to be useful, finally landed.
---

# v0.35.7.0 — Temporal trajectory + founder scorecard

## What changed

- **Migration v67** (`facts_typed_claim_columns`) adds four optional
  columns to `facts`: `claim_metric`, `claim_value`, `claim_unit`,
  `claim_period`. All nullable — existing facts persist identically.
- The `## Facts` fence widens from 10 to 14 columns when a row carries
  typed-claim data. Backward compat: fences without typed data stay at
  10 cells.
- New MCP op: `find_trajectory` (read scope, not localOnly). Federated
  source-scoped, visibility-filtered for remote callers.
- New CLI commands: `gbrain eval trajectory <entity>` and
  `gbrain founder scorecard <entity>`.
- The `extract_facts` cycle phase now batch-embeds facts before insert
  AND threads `pages.effective_date` as the fallback `valid_from`.
- The `consolidate` cycle phase now uses semantic upsert on `(page_id,
  claim, since_date)` so re-running the full cycle on stable input
  produces zero duplicate takes. Also writes chronological `valid_until`
  on each cluster's older facts.

## What agents need to do

Most of this is automatic on upgrade. Three things worth knowing:

### 1. Author typed-claim rows in `## Facts` fences

When you write facts about a company or person that include metric
assertions, add the four typed columns to the fence row:

```markdown
| # | claim | kind | confidence | visibility | notability | valid_from | valid_until | source | context | claim_metric | claim_value | claim_unit | claim_period |
|---|-------|------|------------|------------|------------|------------|-------------|--------|---------|--------------|-------------|------------|--------------|
| 1 | MRR hit $50K (Jan 2026) | fact | 1.0 | private | high | 2026-01-15 |  | OH transcript |  | mrr | 50000 | USD | monthly |
| 2 | ARR target | commitment | 0.6 | private | high | 2026-01-15 | 2026-12-31 | OH transcript | predicted $1M ARR by Q4 | arr | 1000000 | USD | annual |
```

The `claim_metric` column normalizes to lowercase snake_case (mrr, arr,
team_size, runway, burn_rate, cac, ltv, mau, dau, churn_rate, revenue,
fundraise, headcount, gross_margin, users). Unknown labels lowercase +
underscore-collapse and pass through verbatim.

### 2. When the user asks "how has X trended"

Use `gbrain eval trajectory`:

```bash
gbrain eval trajectory companies/acme-example
gbrain eval trajectory companies/acme-example --metric mrr
gbrain eval trajectory companies/acme-example --since 2026-01-01 --json
```

Or the MCP op `find_trajectory` with `{entity_slug, metric?, since?,
until?, limit?}`.

Regressions are auto-flagged at 10% drops by default. Drift score
indicates narrative stability (0 = stable, 1 = every claim is unrelated;
null when <3 embedded points).

### 3. When the user asks "is this founder consistent / reliable"

Use `gbrain founder scorecard`:

```bash
gbrain founder scorecard companies/acme-example --json
```

Returns four signals: `claim_accuracy` (over resolved takes),
`consistency` (1 minus the fraction of metric value-changes),
`growth_trajectory` (direction + delta per metric), `red_flags`
(regressions + high drift + missed predictions).

JSON schema is `schema_version: 1`, additive-only across releases.

## Iron-rule contracts to preserve

- The contradiction probe MUST NOT write `valid_until` on facts.
  `consolidate` writes it; the probe emits paste-ready commands instead.
  This invariant is pinned by
  `test/eval-contradictions/no-valid-until-write.test.ts` (R1 + R8 grep
  guards).
- `find_trajectory` MUST visibility-filter remote callers (`ctx.remote ===
  true` → SQL adds `AND visibility = 'world'`). Mirrors `recall`'s
  posture.
- `consolidate`'s semantic upsert MUST be keyed on `(page_id, claim,
  since_date)`, NOT `MAX(row_num)+1`. Pinned by
  `test/consolidate-valid-until.test.ts` (R4b/R7).

## Where to look

- Cycle phase: `src/core/cycle/extract-facts.ts`,
  `src/core/cycle/phases/consolidate.ts`
- Engine method: `BrainEngine.findTrajectory` in
  `src/core/engine.ts`, `src/core/postgres-engine.ts`,
  `src/core/pglite-engine.ts`
- Trajectory math: `src/core/trajectory.ts`
- MCP op: `src/core/operations.ts` (search for `find_trajectory`)
- CLIs: `src/commands/eval-trajectory.ts`,
  `src/commands/founder-scorecard.ts`
- Schema: `src/core/migrate.ts` (migration v67)
