# Release 0.0.2 (/docs/release-notes/0.0.2)



Topic scoping moves from two separate fields to one expression. `topicIds` and `topicFields` are gone; `topicQuery` replaces both on proof-point, fact, and manifestation requests. Fact requests also stop accepting `certainty`.

These are **breaking** changes on the new routes introduced in [Release 0.0.1](/docs/release-notes/0.0.1). Deprecated `/indicators/*` routes keep their own `topicIds` / `topicFields` / `certainty` parameters and are mapped internally, so existing integrations on those routes are unaffected.

## Breaking request changes [#breaking-request-changes]

| Removed                               | Replacement                                                   |
| ------------------------------------- | ------------------------------------------------------------- |
| `topicIds: [a, b]`                    | `topicQuery: "a OR b"`                                        |
| `topicFields: ["title"]`              | `title:` prefix per term, e.g. `topicQuery: "title:a"`        |
| `topicFields: ["title", "summary"]`   | One term per field, e.g. `topicQuery: "title:a OR summary:a"` |
| `topicFields: ["body"]` or all fields | Unprefixed term, e.g. `topicQuery: "a"`                       |
| `certainty: 0.8` (facts)              | `title:` prefix, which sets the score floor                   |

Requests that still send the removed fields are **not rejected** — unknown fields are ignored, so an unmigrated caller silently returns unfiltered results. Check for `topicIds` and `topicFields` explicitly rather than relying on error responses.

## topicQuery syntax [#topicquery-syntax]

`topicQuery` is a Lucene-lite expression whose terms are **topic UUIDs**, not free text. Each UUID matches that topic and its descendants. Consecutive UUIDs are combined with implicit `AND`. Quotes and `body:` are rejected.

| `topicQuery`            | Meaning                                 |
| ----------------------- | --------------------------------------- |
| `a`                     | Mentions topic A (or children) anywhere |
| `a OR b`                | Former `topicIds: [a, b]`               |
| `title:a`               | Topic A in title only                   |
| `title:a AND summary:b` | Title has A and summary has B           |
| `a NOT b`               | Has A, excludes B                       |
| `(a OR b) AND NOT c`    | Grouping with parentheses               |

`AND` binds tighter than `OR`, so mix them with explicit parentheses. Operators are case-sensitive: lowercase `and` is read as a term and fails UUID parsing.

Fields map to `title` → `topics__title`, `summary` → `topics__summary`, and `document` or unprefixed → `topics`.

## Certainty on facts [#certainty-on-facts]

Field prefixes now carry what `certainty` used to express. On fact routes each `topicQuery` term sets an `IS_ACTIVE_IN` score floor:

| Term                | Score floor |
| ------------------- | ----------- |
| `title:a`           | 80          |
| `summary:a`         | 60          |
| `a` or `document:a` | 0           |

`certainty` remains a **response** field on organization, investment, and acquisition records, and a valid `sortColumn`. Only the request filter was removed.

Schemas for all operations are in the [OpenAPI spec](https://connect-api.trendtracker.ai/openapi.json) and the [API reference](/docs/api-reference). Machine-readable docs: [/llms-full.txt](/llms-full.txt).

## Migrate with an LLM [#migrate-with-an-llm]

Paste the prompt below into Cursor, ChatGPT, or another coding agent **in the repository that calls Connect**.

```text
Migrate this codebase off the removed Trendtracker Connect API request fields `topicIds`, `topicFields`, and fact `certainty` onto the single `topicQuery` expression.

Source of truth (fetch these; do not invent schemas):
- OpenAPI JSON: https://connect-api.trendtracker.ai/openapi.json
  (If CONNECT_API is set, use `{CONNECT_API}/openapi.json` instead.)
- Release note with these rules: Connect API docs "Release 0.0.2".

Scope: request bodies sent to /proof-points/*, /facts/*, and /manifestations/search.
Do NOT change callers of deprecated /indicators/* routes: those keep their own
topicIds / topicFields / certainty parameters and are mapped server-side.

Rules:
1. Find every request body, client method, type, fixture, and test that sets
   `topicIds`, `topicFields`, or `certainty` on a /proof-points, /facts, or
   /manifestations call. These fields are silently ignored by the API, so there
   is no error to grep for: search the field names.
2. Replace them with a single `topicQuery` string built from topic UUIDs:
   - topicIds: [a, b]                  -> "a OR b"
   - topicFields: ["title"]            -> "title:a OR title:b"
   - topicFields: ["title","summary"]  -> "title:a OR summary:a OR title:b OR summary:b"
   - topicFields: ["body"] or all      -> "a OR b"   (unprefixed)
   - fact certainty >= 0.8             -> "title:a"  (score floor 80)
   - fact certainty >= 0.6             -> "summary:a" (score floor 60)
   - fact certainty 0                  -> "a"        (score floor 0)
3. Terms must be topic UUIDs. Operators are AND / OR / NOT, uppercase only.
   AND binds tighter than OR, so add parentheses when mixing them.
   Never emit `body:` (use `document:` or no prefix) and never quote terms.
4. Keep reading `certainty` from fact RESPONSES and keep `sortColumn: "certainty"`.
   Only the request filter was removed.
5. If a caller builds topic filters from user input or config, add the join
   logic in one helper rather than at each call site.
6. Update tests and fixtures. Report any caller you could not map.
```
