Skip to content

HTTP API: continuity

What this checkout's lifecycle is holding: the open episode, the record the next worker would resume from with the label that says how far to trust it, the newest progress note, and what is blocking acceptance. Read from the local half of the layer, which this process serves to the worker in front of it and never publishes.

Rendered from docs/generated/openapi.json, which the executable generates from its capability registry and CI refuses stale. The raw document is at /openapi.json; a running server serves the same document at its own /openapi.json and Swagger UI at /swagger.

continuity

What this checkout's lifecycle is holding: the open episode, the record the next worker would resume from with the label that says how far to trust it, the newest progress note, and what is blocking acceptance. Read from the local half of the layer, which this process serves to the worker in front of it and never publishes.

GET /api/v1/continuity continuity.state

What the lifecycle is holding

The open episode, the active task, the handover and checkpoint that resolve for this worktree and branch, each with its divergence label, the unresolved questions that refuse completion, and the record tallies. Selection is two-tiered and never repository-wide: a record from an unrelated worktree or branch is not offered, because a briefing that is quietly about somebody else is worse than none. Absence is reported as absence.

  • query
  • behaviorally_verified
  • benchmark required
  • cache process (max_entries=2, ttl_seconds=2)
  • MCP tool majordomus_continuity
  • MCP resource {"name": "continuity", "uri": "majordomus://continuity"}

No parameters.

Try it

The port is whatever the server logged; 8741 is the one it asks for first. The values are the operation's first example.

curl -s "http://127.0.0.1:8741/api/v1/continuity"

Tested by apps/majordomus-cli/tests/http_serve.rs, which replays the route with these values against a server on a real socket.

Responses

statusbodymeaning
200 Continuity What the lifecycle is holding: the result.
400 ErrorBody invalid_input: The input does not fit the schema: a parameter of the wrong type, an unknown one, or a value the capability rejects.
404 ErrorBody not_found: The input names something the repository does not hold.
500 ErrorBody internal: The capability failed for a reason of its own; the message names it.
default ErrorBody Any other failure the transport reports: 405 method_not_allowed for another method on this path, 400 invalid_input for a body that is not a JSON object.
POST /api/v1/continuity/device continuity.device

This device's identity, and its label

The device a published handover names: the mesh node key (created when this device has none, in the user's state directory and never in a repository), its node id, its public key — what a trust list admits — and the label a person reads. With a label, renames the device; the key and every signature it made are unchanged.

  • command
  • experimental
  • benchmark waived: destructive
  • cache disabled
  • MCP tool majordomus_continuity_device
  • $ continuity device

Request body — DeviceInput, JSON

example default

{}

Try it

The port is whatever the server logged; 8741 is the one it asks for first. The values are the operation's first example.

curl -s -X POST "http://127.0.0.1:8741/api/v1/continuity/device" -H "content-type: application/json" -d '{}'

Tested by apps/majordomus-cli/tests/http_serve.rs, which replays the route with these values against a server on a real socket.

Responses

statusbodymeaning
200 DeviceView This device's identity, and its label: the result.
400 ErrorBody invalid_input: The input does not fit the schema: a parameter of the wrong type, an unknown one, or a value the capability rejects.
404 ErrorBody not_found: The input names something the repository does not hold.
422 ErrorBody refused: The command was understood and turned down for the reason the message gives.
500 ErrorBody internal: The capability failed for a reason of its own; the message names it.
default ErrorBody Any other failure the transport reports: 405 method_not_allowed for another method on this path, 400 invalid_input for a body that is not a JSON object.
GET /api/v1/continuity/plan continuity.plan

Whether and how a published handover can be resumed here

Writes nothing. Chooses the record (named, or the one other device's handover this checkout has not resumed, on this branch first) and decides: is its signer trusted, does it diverge from the record this checkout stands on, does the local source hold the commit and branch it was written against, was it written in a dirty tree whose uncommitted files never reached a commit, may the other device still be working. The verdict is ready, ready_with_warnings, requires_source_update, conflict, choose_record, nothing_to_resume or refused, with blockers, warnings, the commands that resolve them (recommended, never run), what a resume restores and what this checkout recomputes for itself.

  • query
  • experimental
  • benchmark required
  • cache disabled
  • MCP tool majordomus_continuity_plan
  • $ continuity plan

Query parameters

nametyperequireddescriptionexamples
record string no A record id, or a unique prefix of one. by-prefix: "0000"

Try it

The port is whatever the server logged; 8741 is the one it asks for first. The values are the operation's first example.

curl -s "http://127.0.0.1:8741/api/v1/continuity/plan?record=0000"

Tested by apps/majordomus-cli/tests/http_serve.rs, which replays the route with these values against a server on a real socket.

Responses

statusbodymeaning
200 ResumePlan Whether and how a published handover can be resumed here: the result.
400 ErrorBody invalid_input: The input does not fit the schema: a parameter of the wrong type, an unknown one, or a value the capability rejects.
404 ErrorBody not_found: The input names something the repository does not hold.
500 ErrorBody internal: The capability failed for a reason of its own; the message names it.
default ErrorBody Any other failure the transport reports: 405 method_not_allowed for another method on this path, 400 invalid_input for a body that is not a JSON object.
POST /api/v1/continuity/publish continuity.publish

Publish this checkout's newest handover for another machine

Projects the newest handover record into a portable record — the handover body, the repository and device identity, the episode, the source state (branch, commit, and for a dirty tree the changed paths and a fingerprint, never their content), the task and its decisions, and the record it continues — refuses it when any value carries a credential, a secret environment value or a path of this machine's disk, signs it with the device's mesh key and adds it to refs/majordomus/continuity. Touches no branch, index or working tree, and no network: a sync publishes it.

  • command
  • experimental
  • benchmark waived: destructive
  • cache disabled
  • MCP tool majordomus_continuity_publish
  • $ continuity publish

Request body — PublishInput, JSON

example default

{}

Try it

The port is whatever the server logged; 8741 is the one it asks for first. The values are the operation's first example.

curl -s -X POST "http://127.0.0.1:8741/api/v1/continuity/publish" -H "content-type: application/json" -d '{}'

Tested by apps/majordomus-cli/tests/http_serve.rs, which replays the route with these values against a server on a real socket.

Responses

statusbodymeaning
200 Published Publish this checkout's newest handover for another machine: the result.
400 ErrorBody invalid_input: The input does not fit the schema: a parameter of the wrong type, an unknown one, or a value the capability rejects.
404 ErrorBody not_found: The input names something the repository does not hold.
422 ErrorBody refused: The command was understood and turned down for the reason the message gives.
500 ErrorBody internal: The capability failed for a reason of its own; the message names it.
default ErrorBody Any other failure the transport reports: 405 method_not_allowed for another method on this path, 400 invalid_input for a body that is not a JSON object.
GET /api/v1/continuity/records continuity.records

Every published handover the local store admits

Every record of refs/majordomus/continuity that passed admission — schema, id, signature, repository identity, portability — by line, with each line's heads, and a diagnostic for every file refused and every lineage defect.

  • query
  • experimental
  • benchmark required
  • cache disabled
  • MCP tool majordomus_continuity_records
  • $ continuity records

No parameters.

Try it

The port is whatever the server logged; 8741 is the one it asks for first. The values are the operation's first example.

curl -s "http://127.0.0.1:8741/api/v1/continuity/records"

Tested by apps/majordomus-cli/tests/http_serve.rs, which replays the route with these values against a server on a real socket.

Responses

statusbodymeaning
200 Records Every published handover the local store admits: the result.
400 ErrorBody invalid_input: The input does not fit the schema: a parameter of the wrong type, an unknown one, or a value the capability rejects.
404 ErrorBody not_found: The input names something the repository does not hold.
500 ErrorBody internal: The capability failed for a reason of its own; the message names it.
default ErrorBody Any other failure the transport reports: 405 method_not_allowed for another method on this path, 400 invalid_input for a body that is not a JSON object.
POST /api/v1/continuity/resume continuity.resume

Resume a handover another machine published

Plans exactly as continuity.plan does and acts only on a ready or ready_with_warnings plan: writes the handover into this checkout's handovers (where handover --resolve and the session briefing find it), appends the task's decisions to the decision log once each, and records the record as the one this checkout continues, so that its next publication extends the same line. Runs nothing the record says; the start command for the task is returned as a recommendation.

  • command
  • experimental
  • benchmark waived: destructive
  • cache disabled
  • MCP tool majordomus_continuity_resume
  • $ continuity resume

Request body — RecordInput, JSON

example by-prefix

{"record":"0000"}

example default

{}

Try it

The port is whatever the server logged; 8741 is the one it asks for first. The values are the operation's first example.

curl -s -X POST "http://127.0.0.1:8741/api/v1/continuity/resume" -H "content-type: application/json" -d '{"record":"0000"}'

Tested by apps/majordomus-cli/tests/http_serve.rs, which replays the route with these values against a server on a real socket.

Responses

statusbodymeaning
200 Resumed Resume a handover another machine published: the result.
400 ErrorBody invalid_input: The input does not fit the schema: a parameter of the wrong type, an unknown one, or a value the capability rejects.
404 ErrorBody not_found: The input names something the repository does not hold.
422 ErrorBody refused: The command was understood and turned down for the reason the message gives.
500 ErrorBody internal: The capability failed for a reason of its own; the message names it.
default ErrorBody Any other failure the transport reports: 405 method_not_allowed for another method on this path, 400 invalid_input for a body that is not a JSON object.
GET /api/v1/continuity/status continuity.status

Where this device stands in the work published from every device

This device and repository identity, the record this checkout continues on its branch, how the local continuity store stands towards the remote's (from the refs alone, no network), every line of work with its heads, the handovers other devices published that this checkout could resume, and every refused record or broken lineage as a diagnostic. A diverged line — the same work continued twice — is reported; separate lines of work on separate devices are not a conflict.

  • query
  • experimental
  • benchmark required
  • cache disabled
  • MCP tool majordomus_continuity_status
  • $ continuity status

No parameters.

Try it

The port is whatever the server logged; 8741 is the one it asks for first. The values are the operation's first example.

curl -s "http://127.0.0.1:8741/api/v1/continuity/status"

Tested by apps/majordomus-cli/tests/http_serve.rs, which replays the route with these values against a server on a real socket.

Responses

statusbodymeaning
200 Status Where this device stands in the work published from every device: the result.
400 ErrorBody invalid_input: The input does not fit the schema: a parameter of the wrong type, an unknown one, or a value the capability rejects.
404 ErrorBody not_found: The input names something the repository does not hold.
500 ErrorBody internal: The capability failed for a reason of its own; the message names it.
default ErrorBody Any other failure the transport reports: 405 method_not_allowed for another method on this path, 400 invalid_input for a body that is not a JSON object.
POST /api/v1/continuity/sync continuity.sync

Exchange published handovers with a git remote

Fetches the remote's refs/majordomus/continuity, merges it into the local store as the union of both (records are content-addressed, so a name holding different bytes is reported and the local copy kept), and pushes the result, never forced. Reports each line as equal, remote_newer, local_newer, diverged, local_only or remote_only. An unreachable remote changes nothing and leaves what is pending pending.

  • command
  • experimental
  • benchmark waived: external_dependency
  • cache disabled
  • MCP tool majordomus_continuity_sync
  • $ continuity sync

Request body — SyncInput, JSON

example default

{}

Try it

The port is whatever the server logged; 8741 is the one it asks for first. The values are the operation's first example.

curl -s -X POST "http://127.0.0.1:8741/api/v1/continuity/sync" -H "content-type: application/json" -d '{}'

Tested by apps/majordomus-cli/tests/http_serve.rs, which replays the route with these values against a server on a real socket.

Responses

statusbodymeaning
200 Synced Exchange published handovers with a git remote: the result.
400 ErrorBody invalid_input: The input does not fit the schema: a parameter of the wrong type, an unknown one, or a value the capability rejects.
404 ErrorBody not_found: The input names something the repository does not hold.
422 ErrorBody refused: The command was understood and turned down for the reason the message gives.
500 ErrorBody internal: The capability failed for a reason of its own; the message names it.
default ErrorBody Any other failure the transport reports: 405 method_not_allowed for another method on this path, 400 invalid_input for a body that is not a JSON object.

Schemas

The components only this tag's operations use. Each row is the type's own field, its doc comment the description; a type another page owns links there.

Component

"handover" | "intent" | "issue" | "decisions" | "next_action" | "lineage" | "provenance" | "worktree" | "repository_id" | "episode" | "working_context" | "source_state"
What a resume writes, recomputes or leaves.
  • handoverThe handover, into this checkout's handovers.
  • intentThe task's title and scope, offered as the start to run.
  • issueThe issue and milestone.
  • decisionsThe decisions the task recorded, into this checkout's decision log.
  • next_actionThe handover's next action.
  • lineageThe record this checkout continues: the parent of its next publication.
  • provenanceWho published it, where, when, from which source state.
  • worktreeThis checkout's path, recomputed rather than copied.
  • repository_idThe repository id the shell compares, recomputed.
  • episodeThe episode, opened here by the provider's hooks.
  • working_contextThe working context, compiled here from the restored records and this git.
  • source_stateThe source state, from this checkout's git.

Used by ResumePlan

Continuity

object
What the lifecycle of this checkout is holding.
propertytyperequireddescription
present boolean yes Whether this checkout's lifecycle has ever run: a ledger line, a task, an episode or a record. False in a fresh clone, which is not a fault.

It is not "the directory exists". Several things create that directory before anything has been recorded in it, so a reader that took its presence for evidence would be told the lifecycle had run in a checkout where it never had.

worktree string yes The worktree this answer is about. Every selection below is scoped to it.
branch string yes The branch, or DETACHED.
head string no The commit this checkout is on.
working_tree string no clean or dirty.
session OpenSession | null → OpenSession no The open episode, or None.
task ActiveTask | null → ActiveTask no The active task, or None.
handover Record | null → Record no The record the next worker would resume from, or None when nothing resolves here.
checkpoint Record | null → Record no The newest progress note for this worktree and branch, or None.
blockers array of string no Unresolved questions on this branch. Every one refuses finish --outcome completed, whichever task opened it.
tallies map of integer (uint) yes How many records of each kind this checkout holds, against the policy's caps.
findings array of string no What a reader should know before trusting any of the above: a diverged record, a foreign open session, a malformed file that was skipped. Empty is the good case.

Used by continuity.state

Device

object
The device a record was written on: the mesh node key's id and the label its identity file carries. The label is presentation; the node id is identity.
propertytyperequireddescription
node string yes The node id: the first 32 hex of the SHA-256 of the device's Ed25519 public key.
label string yes The display label of the device's identity file (macbook-pro), or the first eight hex of its node id when it has none.

Used by DeviceView RecordView Status

DeviceInput

object
The input of continuity.device.
propertytyperequireddescription
label string | null no A label to give this device (macbook-pro, mac-mini): letters, digits, ., _, -. The key, and so the identity, is unchanged.

Used by continuity.device

DeviceView

object
The answer of continuity device.
propertytyperequireddescription
device Device → Device yes The node id and label.
public_key string yes The Ed25519 public key (hex): what a trust list names.

Used by continuity.device

LineState

"linear" | "diverged"
Whether a line has one current record or several.
  • linearOne head: the line continues from it.
  • divergedMore than one head: the same work was continued in more than one place.

Used by LineView

LineSync

"equal" | "remote_newer" | "local_newer" | "diverged" | "local_only" | "remote_only"
How the local store and a remote's stand towards each other, for one line.
  • equalBoth hold the same heads.
  • remote_newerThe remote holds records that continue the local heads: fetching brings them.
  • local_newerThe local store holds records that continue the remote's: publishing sends them.
  • divergedEach holds a continuation the other lacks: after merging, the line has two heads.
  • local_onlyOnly the local store holds the line.
  • remote_onlyOnly the remote holds the line.

Used by LineSyncView

LineSyncView

object
One line's comparison in a sync.
propertytyperequireddescription
line string yes The line.
relation LineSync → LineSync yes How the local store and the remote's stood before the merge.
heads array of string yes The line's heads after the merge.

Used by Synced

LineView

object
A line of work as status shows it.
propertytyperequireddescription
id string yes The line id.
state LineState → LineState yes Linear or diverged.
records integer (uint) yes How many records it holds.
heads array of RecordView → RecordView yes Its heads.

Used by Records Status

Match

"same_worktree_same_branch" | "same_branch"
Which tier of the resolution rule matched. There is no third tier on purpose: a record from an unrelated worktree or branch is never offered.
  • same_worktree_same_branchSame repository, same worktree, same branch.
  • same_branchSame repository, same branch, another worktree of it.

Used by Record

OpenSession

object
The open episode this checkout points at, when there is one.

One execution episode belongs to one provider session, and several can be open in one checkout at once — two windows of the same provider are two workers. What is read here is state/session-current.yaml, the pointer to the episode of this checkout; a worker that knows its own provider session resolves its own episode instead, which is what mj_session_here_file in lib/common.sh does and what stamps each ledger line.

propertytyperequireddescription
session_id string yes The episode's id.
started_at string yes When it opened.
owner string no Who opened it.
worker string no The worker identity, when one was supplied. Never inferred.
provider string no The provider whose event opened it, when one did.
provider_session string no That provider's own session identity — the string the prompt archive stamps on the same worker's records, and the name this episode is keyed by. Empty for an episode opened by hand, which is the one episode no provider session owns.
branch string no The branch it opened on.
start_head string no The commit it opened at.
foreign boolean yes True when the open record here belongs to another checkout. Such a record is reported and never treated as this checkout's episode.

Used by Continuity

PlanItem

object
One thing a plan says about itself.
propertytyperequireddescription
code string yes A stable code: source_incomplete, line_diverged, origin_untrusted, …
message string yes What it means here.

Used by ResumePlan

PlanStatus

"ready" | "ready_with_warnings" | "requires_source_update" | "conflict" | "choose_record" | "nothing_to_resume" | "refused"
The verdict of a resume plan.
  • readyResume restores everything; nothing needs attention.
  • ready_with_warningsResume restores everything; the warnings say what is not what it was at the origin.
  • requires_source_updateThe local source does not hold what the record was written against: update git first, as the actions say.
  • conflictThe same work was continued twice, or the source histories diverged: a person chooses.
  • choose_recordMore than one record could be meant: name one with --record.
  • nothing_to_resumeNothing to resume.
  • refusedThe record is not one this checkout may resume from (an untrusted signer).

Used by ResumePlan

Position

object
The record this checkout continues on one branch.
propertytyperequireddescription
line string yes The line.
record string yes The record: the parent of this checkout's next publication on the branch.
via Via → Via yes Published here or resumed here.
at string yes When, by this machine's clock.

Used by Resumed Status

PublishInput

object
The input of continuity.publish.
propertytyperequireddescription
handover string | null no The file name of a handover record under .ai/local/state/handovers/; the newest when absent.
issue string | null no The issue the work belongs to (#184, I0042).
milestone string | null no The milestone it belongs to.

Used by continuity.publish

Published

object
The answer of continuity publish.
propertytyperequireddescription
record RecordView → RecordView yes The record.
written boolean yes False when the same handover at the same source state was already the record this checkout stands on: nothing new was written.
tip string yes The local ref's commit.
handover string yes The handover record it was read from, relative to the checkout.
next array of string yes What is next: the record reaches another machine only through a sync.

Used by continuity.publish

Record

object
One durable record of the local half, as much of it as a reader needs to decide whether to open the file.
propertytyperequireddescription
path string yes Repository-relative path. The body is at the path; it is not copied here.
created_at string yes When the record says it was written.
task_id string yes The task it belongs to, or none.
branch string yes The branch it was written on.
head string yes The commit it was written at.
working_tree string yes Whether the working tree was clean or dirty then.
matched Match → Match yes Which tier of the resolution rule matched.
divergence Divergence → Divergence yes How far its commit is from this one.
freshness Freshness → Freshness yes How old it is, judged against session.freshness. Independent of divergence: a record is routinely advanced and stale at once, and that pair is what a reader must not collapse into "trustworthy".
age_minutes integer | null no Its age in whole minutes, when it has a timestamp that parses.
freshness_reason string yes Why it was judged that way, in one phrase. Never empty: a verdict a reader cannot act on is the failure this subsystem is being corrected for.
next_action string no The section a resuming worker acts on, when the record has one and is still current. A handover's Next Action; empty for a record that carries no sections, and deliberately empty for one that is stale or invalid — see next_action_withheld.
next_action_withheld string no Why next_action is empty despite the record having one. Set only when it was withheld, never when the record simply carries no such section, so that a reader can tell "there is nothing to do" from "what there was to do is six days old".

Used by Continuity

RecordInput

object
The input of continuity.plan and continuity.resume: which record, by id or a prefix of one. Absent, the one handover another device published that this checkout has not resumed — on this branch when there is one there.
propertytyperequireddescription
record string | null no A record id, or a unique prefix of one.

Used by continuity.resume

RecordView

object
One record as every surface shows it.
propertytyperequireddescription
id string yes The record id.
line string yes Its line.
parent string | null no The record it continues.
device Device → Device yes The device that published it.
this_device boolean yes Whether that device is this one.
trust Trust → Trust yes Whether its signer is trusted here.
session string | null no The episode it was published from.
branch string | null no The branch it was written on.
head string | null no The commit it was written at.
working_tree WorkingTree → WorkingTree yes Clean or dirty at the origin.
changed_total integer (uint) yes How many paths differed from HEAD at the origin.
published_at string yes When it was published, by the publisher's clock.
age_minutes integer | null no Minutes since then, by this machine's clock; absent when either clock's reading is unusable.
task string | null no The task's title: the intent.
issue string | null no The issue.
objective string no The handover's # Objective, first line.

Used by LineView Published Records ResumePlan Status Synced

Records

object
The answer of continuity records.
propertytyperequireddescription
records array of RecordView → RecordView yes Every admitted record, by line and then by id.
lines array of LineView → LineView yes Every line.
diagnostics array of Diagnostic → Diagnostic yes Refused files and lineage findings.

Used by continuity.records

Relation

"equal" | "newer" | "older" | "diverged" | "independent"
What one record is to another.
  • equalThe same record.
  • newerThe second descends from the first: the second is newer.
  • olderThe first descends from the second: the second is older.
  • divergedSame line, neither descends from the other: the work was continued twice.
  • independentDifferent lines: separate work.

Used by ResumePlan

ResumePlan

object
The answer of continuity plan, and the plan continuity resume acts on.
propertytyperequireddescription
status PlanStatus → PlanStatus yes The verdict.
record RecordView | null → RecordView no The record it is about.
candidates array of RecordView → RecordView no When the record is not decided: the records that could be meant.
source SourceCheck | null → SourceCheck no The source check.
lineage Relation | null → Relation no What the record is to the record this checkout stands on, when it stands on one.
task TaskRef | null → TaskRef no The task, as published: the intent.
milestone string | null no The milestone.
decisions array of string no The headings of the decisions a resume carries.
objective string no The handover's # Objective.
current_state string no The handover's # Current State.
next_action string no The handover's # Next Action.
blockers array of PlanItem → PlanItem yes What stops a resume.
warnings array of PlanItem → PlanItem yes What a resume proceeds past and a person should know.
actions array of string yes The commands that resolve the blockers or follow the resume. Recommended, never run: nothing a record says is executed.
restores array of Component → Component yes What a resume writes into this checkout.
recomputes array of Component → Component yes What this checkout computes for itself instead of copying.

Used by continuity.plan Resumed

Resumed

object
The answer of continuity resume.
propertytyperequireddescription
resumed boolean yes Whether anything was restored. False when the plan did not admit a resume.
plan ResumePlan → ResumePlan yes The plan it acted on, or declined on.
handover string | null no The handover record written into this checkout, relative to it.
decisions_carried integer (uint) yes How many decisions were appended to this checkout's log.
position Position | null → Position no The record this checkout now stands on.

Used by continuity.resume

SourceCheck

object
The source half of a plan.
propertytyperequireddescription
expected_branch string | null no The branch the record was written on.
expected_head string | null no The commit it was written at.
local_branch string | null no This checkout's branch.
local_head string | null no This checkout's commit.
relation SourceRelation → SourceRelation yes How they stand.
origin_dirty boolean yes Whether the origin's tree was dirty.
origin_changed array of string no The paths that were uncommitted at the origin, as listed.
origin_changed_total integer (uint) yes How many were uncommitted.
local_dirty boolean yes Whether this checkout's tree is dirty.
same_uncommitted_work boolean | null no Whether this checkout holds the very uncommitted work the origin held (their fingerprints agree); absent when either side is clean.

Used by ResumePlan

SourceRelation

"exact" | "local_ahead" | "local_behind" | "diverged" | "head_missing" | "branch_differs" | "unknown"
How the local source stands towards the record's.
  • exactSame branch, same commit.
  • local_aheadSame branch; the local branch has commits the record did not see.
  • local_behindSame branch; the record's commit is ahead of the local one.
  • divergedSame branch; neither commit contains the other.
  • head_missingThe record's commit is not in this clone.
  • branch_differsThis checkout is on another branch.
  • unknownThe record carries no commit, or git could not answer.

Used by SourceCheck

Status

object
The answer of continuity status.
propertytyperequireddescription
repository string yes This repository's identity (32 hex), the same on every clone.
device Device → Device yes This device.
branch string yes The branch this checkout is on, or DETACHED.
head string | null no The commit it is on.
working_tree WorkingTree → WorkingTree yes Clean or dirty.
position Position | null → Position no The record this checkout continues on its branch.
store StoreView → StoreView yes The stores.
last_sync SyncNote | null → SyncNote no The last sync, as this checkout recorded it.
lines array of LineView → LineView yes Every line, by id.
resumable array of RecordView → RecordView yes What other devices published that this checkout could resume, newest first.
diagnostics array of Diagnostic → Diagnostic yes Refused files, broken lineage, diverged lines.
next array of string no The command to run next, when there is an obvious one.

Used by continuity.status

StoreView

object
The two stores, as refs.
propertytyperequireddescription
reference string yes The local ref.
tip string | null no Its commit.
remote string | null no The remote sync uses.
remote_tip string | null no The commit last fetched from or pushed to it.
sync SyncState → SyncState yes How they stand.
records integer (uint) yes Records admitted.
refused integer (uint) yes Files refused.

Used by Status Synced

SyncAction

"none" | "fetched" | "published" | "exchanged" | "unreachable" | "no_remote"
What a sync did.
  • noneNothing to move: both held the same records.
  • fetchedRecords were fetched.
  • publishedRecords were published.
  • exchangedBoth.
  • unreachableThe remote could not be reached; nothing local changed, and what is pending stays pending.
  • no_remoteNo remote is configured.

Used by Synced

SyncInput

object
The input of continuity.sync.
propertytyperequireddescription
remote string | null no The git remote; the current branch's, else origin, when absent.

Used by continuity.sync

SyncNote

object
What the last sync did, so that a later status can report it without the network.
propertytyperequireddescription
remote string yes The remote.
at string yes When, by this machine's clock.
outcome string yes ok, or unreachable when the remote could not be asked.
detail string | null no What git said when it was not ok.

Used by Status

SyncState

"no_remote" | "never_synced" | "in_sync" | "pending" | "behind" | "diverged" | "empty"
How the local store stands towards the remote's, from the refs alone — no network.
  • no_remoteNo remote is configured: the store is local, and that is a valid answer.
  • never_syncedNever synced with the remote.
  • in_syncBoth hold the same records.
  • pendingThis store holds records the remote has not received: a sync publishes them.
  • behindThe last fetch brought records not merged yet.
  • divergedBoth of the above.
  • emptyThe store is empty and nothing was ever fetched.

Used by StoreView

Synced

object
The answer of continuity sync.
propertytyperequireddescription
remote string | null no The remote, when there is one.
action SyncAction → SyncAction yes What happened.
fetched integer (uint) yes Records the local store gained.
published integer (uint) yes Records the remote gained.
lines array of LineSyncView → LineSyncView yes Every line either side holds, compared.
store StoreView → StoreView yes The store after the sync.
resumable array of RecordView → RecordView yes What other devices published that this checkout could resume.
diagnostics array of Diagnostic → Diagnostic yes Refused files, collisions, diverged lines, an unreachable remote.

Used by continuity.sync

TaskRef

object
The task the handover was written under, as the task record named it.
propertytyperequireddescription
id string yes The task id, t-<stamp>-<hex>.
title string yes What the task is, in its author's words: the intent.
profile string | null no The profile it ran under.
scope array of string no The repository paths it may touch.
outcome string | null no The outcome the task record held when the handover was published.

Used by ResumePlan

Trust

"this_device" | "trusted" | "untrusted" | "undeclared"
Whether the device that signed a record is one this repository trusts.
  • this_deviceThis device signed it.
  • trustedThe mesh declaration's trust list admits the key.
  • untrustedThe mesh declaration exists and does not admit the key: never resumed from.
  • undeclaredThe repository declares no mesh, so no list exists to check the key against. The signature still binds the record to its key; the plan warns.

Used by RecordView

Via

"published" | "resumed"
How this checkout came to stand on a record.
  • publishedThis checkout published it.
  • resumedThis checkout resumed from it.

Used by Position

WorkingTree

"clean" | "dirty"
Whether the working tree had changes git does not hold in a commit.
  • cleanNothing outside HEAD.
  • dirtyModified, staged or untracked files that HEAD does not hold.

Used by RecordView Status

Searches the titles and descriptions of every page this site publishes.