Reference

Capture syntax

The grammar, metadata tokens, defaults, quoting rules, and validation behavior for direct capture.

Direct capture accepts either an entity name or a subject–predicate–object assertion followed by optional metadata tokens.

subject predicate object @source ^evidence !status %confidence #tag

Body forms

Form Result
customer-portal Creates or reuses an entity without capturing an assertion.
billing-service owns invoice-generation Captures an assertion with the default source placeholder and metadata defaults.
service-a contains component-1, component-2 Captures the remaining body as the object. Predicate schema determines how values are stored.

The first body token is the subject and the second is the predicate. All remaining body tokens form the object. Metadata must follow a complete body: an entity name, or a subject, predicate, and object. Once metadata begins, another body token is invalid.

An entity may carry metadata for grammar consistency even though creating or reusing it does not create an assertion. The metadata is accepted but does not create assertion provenance or tag the entity:

customer-portal @"Architecture review" #observed

Metadata tokens

Token Meaning Default
@source Person, document, call, repository, or other origin of the assertion source placeholder in the capture preview
^evidence Locator within the source, such as a timestamp, section, URL fragment, or commit Not recorded
!status Assertion review state active
%confidence Decimal confidence from 0 through 1 1.0
#tag Retrieval tag None

Source, evidence, status, and confidence may each appear at most once. Repeating one is an error. More than one tag may be supplied, and tag order is preserved.

billing-service owns invoice-generation @alice ^00:32:18 !needs_review %0.8 #ownership #billing

These examples combine elements in different ways:

customer-portal
billing-service owns invoice-generation
billing-service owns invoice-generation @alice #ownership
billing-service owns invoice-generation @alice ^00:32:18 !confirmed %0.84 #ownership #billing
billing-service owned-by ? @client-call #missing-owner
billing-service deployed-to us-east-1, us-west-2 @platform-team #deployment

Quoting

Double quotes keep whitespace inside a single token. The quote characters are not stored as part of the value.

billing-service named "Billing Service" @"Architecture review"
"Order Management Service" depends-on postgres @architecture-team
customer-portal calls "Identity API" @repo:customer-portal ^commit:9f32c1

A quoted subject or object is one value. Autocomplete adds quotes when a known entity name contains spaces. Quoting a complete metadata-looking value makes it ordinary body data: "@literal" is not source metadata. To quote a metadata value, keep the prefix outside the quotes, such as @"Design review" or #"customer claim".

Inside a quoted token, these escapes are supported:

Escape Stored character
\\ Backslash
\" Double quote
\n Newline
\r Carriage return
\t Tab

Other escapes are invalid. A quoted value must close and must be followed by whitespace, a comma, or another structural delimiter.

Object lists and literal delimiters

An unquoted comma separates object values. Whitespace around a comma is optional, but every item must contain a value; leading, trailing, and consecutive commas are invalid on submission.

service-a contains component-1, component-2
service-a named "Research, Development"

Quote a comma, equals sign, or plus sign when it is data. An unquoted equals sign is invalid in Capture. A standalone plus surrounded by whitespace is a reserved Capture separator and is ignored; a plus attached to a value is invalid, so quote literal plus data.

service-a named "tier=a"
service-a supports "C++"

Capture has no comment syntax. A // pair is ordinary data in Capture, including in an unquoted URL. CFText uses // for comments outside quotes, so the same value must be quoted when it appears in a CFText file.

Unknown objects

Use ? as the object when the value is known to exist but is not yet known.

billing-service owned-by ? @alice

An unknown object is rendered as unknown. Unless explicitly supplied, its status becomes needs_review, and Claimframe adds the missing tag.

Claim references

An object beginning with claim: targets an existing assertion. Claimframe uses this form when drafting dispute and contradiction claims.

bob disputes claim:ASSERTION_ID @client-call #dispute
architect supports claim:ASSERTION_ID @review-notes ^decision-7 #judgment

The new assertion gets its own source and evidence. The target assertion remains intact, so support, dispute, and contradiction can be reviewed as sourced claims in their own right.

Validation

  • Confidence must be a finite number from 0 through 1, inclusive.
  • Status must be active, needs_review, confirmed, disputed, stale, superseded, rejected, or inferred.
  • Metadata values cannot be empty, and metadata cannot precede or interrupt the body.
  • A one-token body, optionally followed by metadata, creates or reuses an entity.
  • An assertion requires at least a subject, predicate, and object.
  • Input must be consumed completely: malformed quotes, escapes, delimiters, repeated singleton metadata, and trailing body data are rejected with a positioned diagnostic.
  • The predicate’s value type, cardinality, uniqueness, and set/list semantics determine how the object is interpreted and stored.

While editing, Capture distinguishes empty, incomplete, complete, and invalid drafts. Commit is enabled only for a complete draft. Incomplete input such as two body tokens, an open quote, an empty metadata prefix, or a trailing comma keeps safe preview data without showing a notification; invalid input shows one localized explanation. The Rust parser validates the complete input again before any mutation.

Capture autocomplete suggests existing entities, predicates, sources, tags, and adopted vocabulary terms. Ctrl/Cmd + Space explicitly opens suggestions at the cursor.