@standards/schema 1.0.0-alpha.387 → 1.0.0-alpha.389

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -814,6 +814,9 @@ export interface LinkedRecordRef {
814
814
  export type MeetingStatus = "confirmed" | "tentative" | "cancelled";
815
815
  export type MeetingParticipantRole = "organizer" | "required" | "optional";
816
816
  export type MeetingResponseStatus = "accepted" | "declined" | "tentative" | "needs_action";
817
+ /** An invitation's answer; "needs_action" is no answer and is not sent. */
818
+ export declare const MEETING_RESPONSES: readonly ["accepted", "declined", "tentative"];
819
+ export type MeetingResponse = (typeof MEETING_RESPONSES)[number];
817
820
  /** Lifecycle of the recording bot's transcript for one meeting. */
818
821
  export type TranscriptStatus = "scheduled" | "recording" | "completed" | "failed";
819
822
  /** An explicit per-meeting choice that beats the workspace policy. */
@@ -1029,6 +1032,19 @@ export interface MeetingsListResponse {
1029
1032
  meetings: Meeting[];
1030
1033
  /** Offset to request next, absent when the page was the last one. */
1031
1034
  nextOffset?: number;
1035
+ /**
1036
+ * The calls a record's meetings tab lists — one per call however many of
1037
+ * its copies the viewer sees, and only meetings the viewer can see — not
1038
+ * the page. Present only when `meetings.forRecord` was asked a `countMode`:
1039
+ * `null` under `countMode: "none"`, which is "not counted" and never "zero".
1040
+ */
1041
+ total?: number | null;
1042
+ /**
1043
+ * False when `total` is a lower bound rather than the real count, as on the
1044
+ * records page: see `ContinuationPage.totalIsExact`. Present beside a
1045
+ * numeric `total`; derive it from the response, never from the mode asked.
1046
+ */
1047
+ totalIsExact?: boolean;
1032
1048
  }
1033
1049
  //#endregion
1034
1050
  //#region src/api/meetings.operations.d.ts
@@ -1059,7 +1075,7 @@ export declare const meetingsQuery: z$2.ZodDefault<z$2.ZodObject<{
1059
1075
  limit: z$2.ZodOptional<z$2.ZodNumber>;
1060
1076
  offset: z$2.ZodOptional<z$2.ZodNumber>;
1061
1077
  }, z$2.core.$strip>>;
1062
- /** `POST /meetings/records/:recordId` — the record's email attributes and the same query. */
1078
+ /** `POST /meetings/records/:recordId` — the record's email attributes, the same query and the count asked for. */
1063
1079
  export declare const recordMeetingsBody: z$2.ZodDefault<z$2.ZodObject<{
1064
1080
  emailAttributeIds: z$2.ZodOptional<z$2.ZodArray<z$2.ZodString>>;
1065
1081
  query: z$2.ZodOptional<z$2.ZodObject<{
@@ -1075,6 +1091,11 @@ export declare const recordMeetingsBody: z$2.ZodDefault<z$2.ZodObject<{
1075
1091
  limit: z$2.ZodOptional<z$2.ZodNumber>;
1076
1092
  offset: z$2.ZodOptional<z$2.ZodNumber>;
1077
1093
  }, z$2.core.$strip>>;
1094
+ countMode: z$2.ZodOptional<z$2.ZodEnum<{
1095
+ exact: "exact";
1096
+ none: "none";
1097
+ estimated: "estimated";
1098
+ }>>;
1078
1099
  }, z$2.core.$strip>>;
1079
1100
  export declare const meetingsOperations: {
1080
1101
  search: Operation<{
@@ -1227,6 +1248,11 @@ export declare const meetingsOperations: {
1227
1248
  limit: z$2.ZodOptional<z$2.ZodNumber>;
1228
1249
  offset: z$2.ZodOptional<z$2.ZodNumber>;
1229
1250
  }, z$2.core.$strip>>;
1251
+ countMode: z$2.ZodOptional<z$2.ZodEnum<{
1252
+ exact: "exact";
1253
+ none: "none";
1254
+ estimated: "estimated";
1255
+ }>>;
1230
1256
  }, z$2.core.$strip>;
1231
1257
  readonly output: OutputType<MeetingsListResponse>;
1232
1258
  }>;
@@ -1363,6 +1389,15 @@ export declare const NOTIFICATION_TYPE_CONNECTOR_CONNECTION_ERROR = "connector.c
1363
1389
  * `objectPluralLabel`, `recordLabel`, `actorName` and `count`.
1364
1390
  */
1365
1391
  export declare const NOTIFICATION_TYPE_RECORD_ASSIGNED = "record.assigned";
1392
+ /**
1393
+ * A person newly mentioned (`[@Name](stndrds:user/<id>)`) in a record's
1394
+ * richtext (#5828). Shaped like `record.assigned`: the subject is the record
1395
+ * when one is announced; the mentions of one window by the same actor on one
1396
+ * object are one notification with `payload.count`. `payload` carries
1397
+ * `objectName`, `objectLabel`, `objectPluralLabel`, `recordLabel`,
1398
+ * `actorName` and `count`.
1399
+ */
1400
+ export declare const NOTIFICATION_TYPE_RECORD_MENTIONED = "record.mentioned";
1366
1401
  /**
1367
1402
  * Someone gave the recipient access to an agent, a routine or a record, or
1368
1403
  * raised it (#5303). `payload.role` is the level granted, `payload.actorName`
@@ -1370,13 +1405,13 @@ export declare const NOTIFICATION_TYPE_RECORD_ASSIGNED = "record.assigned";
1370
1405
  * carries `payload.objectName`.
1371
1406
  */
1372
1407
  export declare const NOTIFICATION_TYPE_ACCESS_GRANTED = "access.granted";
1373
- export declare const NOTIFICATION_TYPES_V1: readonly ["agent.session.waiting_human", "agent.task.assigned", "agent.question.requested", "agent.routine_run.failed", "agent.routine_run.notice", "connector.connection.reauth_required", "connector.connection.error", "record.assigned", "access.granted"];
1408
+ export declare const NOTIFICATION_TYPES_V1: readonly ["agent.session.waiting_human", "agent.task.assigned", "agent.question.requested", "agent.routine_run.failed", "agent.routine_run.notice", "connector.connection.reauth_required", "connector.connection.error", "record.assigned", "record.mentioned", "access.granted"];
1374
1409
  export type NotificationV1Type = (typeof NOTIFICATION_TYPES_V1)[number];
1375
1410
  /** Kinds that ask the recipient to act: always delivered in-app (#5448). */
1376
1411
  export declare const ACTIONABLE_NOTIFICATION_KINDS: readonly ["task", "question", "handoff"];
1377
1412
  export declare function isActionableNotificationKind(kind: NotificationKind): boolean;
1378
1413
  /** Where a type's delivery switches sit on the Account ▸ Notifications screen. */
1379
- export declare const NOTIFICATION_SETTINGS_AREAS: readonly ["agents", "connectors", "assignment", "sharing"];
1414
+ export declare const NOTIFICATION_SETTINGS_AREAS: readonly ["agents", "connectors", "assignment", "mentions", "sharing"];
1380
1415
  export type NotificationSettingsArea = (typeof NOTIFICATION_SETTINGS_AREAS)[number];
1381
1416
  /**
1382
1417
  * Every declared notification type, its kind and its settings area (#5448):
@@ -1418,6 +1453,10 @@ export declare const NOTIFICATION_TYPE_KINDS: {
1418
1453
  readonly kind: "fyi";
1419
1454
  readonly area: "assignment";
1420
1455
  };
1456
+ readonly "record.mentioned": {
1457
+ readonly kind: "fyi";
1458
+ readonly area: "mentions";
1459
+ };
1421
1460
  readonly "access.granted": {
1422
1461
  readonly kind: "fyi";
1423
1462
  readonly area: "sharing";
@@ -3109,7 +3148,7 @@ export declare function harnessModelChoices(harness: EnvironmentHarnessId, model
3109
3148
  * Typed agent references: `<kind>:<id>`. The one parser shared by the runtime
3110
3149
  * verbs and the UI tool views; it never guesses a kind from a bare id.
3111
3150
  */
3112
- export declare const REFERENCE_KINDS: readonly ["record", "document", "file", "email", "thread", "event", "memory", "skill", "schema", "user", "guide", "draft"];
3151
+ export declare const REFERENCE_KINDS: readonly ["record", "document", "file", "email", "thread", "event", "memory", "skill", "schema", "user", "guide", "catalog", "draft"];
3113
3152
  export type ReferenceKind = (typeof REFERENCE_KINDS)[number];
3114
3153
  export type Reference = {
3115
3154
  kind: ReferenceKind;
@@ -3336,11 +3375,11 @@ export declare const RESOURCE_KIND_CATALOG: {
3336
3375
  };
3337
3376
  readonly browser: {
3338
3377
  readonly icon: "link";
3339
- readonly tools: readonly ["browser_autopilot", "browser_batch", "browser_computer", "browser_find", "browser_form_input", "browser_get_text", "browser_javascript", "browser_navigate", "browser_read_page", "browser_tabs"];
3378
+ readonly tools: readonly ["browser_autopilot", "browser_batch", "browser_computer", "browser_find", "browser_form_input", "browser_get_text", "browser_javascript", "browser_navigate", "browser_read_page", "browser_sign_in", "browser_tabs"];
3340
3379
  };
3341
3380
  readonly "browser-profile": {
3342
3381
  readonly icon: "globe";
3343
- readonly tools: readonly ["browser_launch", "browser_autopilot", "browser_batch", "browser_computer", "browser_find", "browser_form_input", "browser_get_text", "browser_javascript", "browser_navigate", "browser_read_page", "browser_tabs"];
3382
+ readonly tools: readonly ["browser_launch", "browser_autopilot", "browser_batch", "browser_computer", "browser_find", "browser_form_input", "browser_get_text", "browser_javascript", "browser_navigate", "browser_read_page", "browser_sign_in", "browser_tabs"];
3344
3383
  };
3345
3384
  readonly login: {
3346
3385
  readonly icon: "key";
@@ -3442,12 +3481,12 @@ export declare const GRANT_ENABLES: {
3442
3481
  readonly browser: {
3443
3482
  readonly kinds: readonly [];
3444
3483
  readonly capabilities: readonly [];
3445
- readonly tools: readonly ["browser_autopilot", "browser_batch", "browser_computer", "browser_find", "browser_form_input", "browser_get_text", "browser_javascript", "browser_navigate", "browser_read_page", "browser_tabs"];
3484
+ readonly tools: readonly ["browser_autopilot", "browser_batch", "browser_computer", "browser_find", "browser_form_input", "browser_get_text", "browser_javascript", "browser_navigate", "browser_read_page", "browser_sign_in", "browser_tabs"];
3446
3485
  };
3447
3486
  readonly "browser-profile": {
3448
3487
  readonly kinds: readonly [];
3449
3488
  readonly capabilities: readonly [];
3450
- readonly tools: readonly ["browser_launch", "browser_autopilot", "browser_batch", "browser_computer", "browser_find", "browser_form_input", "browser_get_text", "browser_javascript", "browser_navigate", "browser_read_page", "browser_tabs"];
3489
+ readonly tools: readonly ["browser_launch", "browser_autopilot", "browser_batch", "browser_computer", "browser_find", "browser_form_input", "browser_get_text", "browser_javascript", "browser_navigate", "browser_read_page", "browser_sign_in", "browser_tabs"];
3451
3490
  };
3452
3491
  readonly login: {
3453
3492
  readonly kinds: readonly [];
@@ -4045,7 +4084,7 @@ export interface AgentTodoPlanView {
4045
4084
  id: string;
4046
4085
  sessionId: string;
4047
4086
  status: AgentTodoPlanStatus;
4048
- todos: AITodoItem[];
4087
+ todos: AgentTodoPlanViewItem[];
4049
4088
  version: number;
4050
4089
  createdAt: string;
4051
4090
  updatedAt: string;
@@ -5127,6 +5166,65 @@ export interface AITodoItem {
5127
5166
  description: string;
5128
5167
  status: AITodoStatus;
5129
5168
  updatedAt?: number;
5169
+ /**
5170
+ * What an architect build todo is anchored on in the draft. A targeted
5171
+ * todo's status is the server's: `draft_schema` recomputes it from the
5172
+ * folded draft, and `write_todos` keeps the stored one.
5173
+ */
5174
+ target?: AITodoTarget;
5175
+ }
5176
+ /**
5177
+ * The phases of an architect build, always worked in this order: a plan
5178
+ * whose targeted todos run out of this order is refused.
5179
+ */
5180
+ export declare const TODO_PHASES: readonly ["objects", "fields", "relations", "views", "samples"];
5181
+ export type AITodoPhase = (typeof TODO_PHASES)[number];
5182
+ /** Where a build todo is anchored, by phase. */
5183
+ export type AITodoTarget =
5184
+ /** Completed when the folded draft has the object. */
5185
+ {
5186
+ phase: "objects";
5187
+ objectName: string;
5188
+ } |
5189
+ /** Completed when every named attribute is on the object. */
5190
+ {
5191
+ phase: "fields";
5192
+ objectName: string;
5193
+ attributes: string[];
5194
+ } |
5195
+ /** Completed when every named relation attribute is on the object. */
5196
+ {
5197
+ phase: "relations";
5198
+ objectName: string;
5199
+ attributes: string[];
5200
+ } |
5201
+ /**
5202
+ * Completed when an executed operation of the draft writes that view (and,
5203
+ * when named, that content). The empty default views `add_object` folds do
5204
+ * not count, nor does a view that is merely published.
5205
+ */
5206
+ {
5207
+ phase: "views";
5208
+ objectName: string;
5209
+ viewName: string;
5210
+ contentName?: string;
5211
+ } | {
5212
+ phase: "views";
5213
+ pageId: string;
5214
+ } |
5215
+ /** Completed when the draft holds at least one sample record of the object. */
5216
+ {
5217
+ phase: "samples";
5218
+ objectName: string;
5219
+ };
5220
+ /**
5221
+ * A todo as clients read it: a target is exposed by its phase only, which is
5222
+ * all the progress surfaces need.
5223
+ */
5224
+ export interface AgentTodoPlanViewItem extends Omit<AITodoItem, "target"> {
5225
+ target?: {
5226
+ phase: AITodoPhase;
5227
+ };
5130
5228
  }
5131
5229
  /**
5132
5230
  * Persisted bounds on a todo, beside the type they constrain.
@@ -6016,6 +6114,88 @@ export interface BundleSyncResult {
6016
6114
  }>;
6017
6115
  }
6018
6116
  //#endregion
6117
+ //#region src/types/catalog.d.ts
6118
+ /** The languages a catalog piece compiles in; the routes accept no other. */
6119
+ export declare const CATALOG_LOCALES: readonly ["fr", "en"];
6120
+ export type CatalogLocale = (typeof CATALOG_LOCALES)[number];
6121
+ /** What a catalog entry installs; the `kind` filter of `catalog.list` accepts no other. */
6122
+ export declare const CATALOG_KINDS: readonly ["object", "view", "agent"];
6123
+ export type CatalogEntryKind = (typeof CATALOG_KINDS)[number];
6124
+ /** Where an installed piece came from; stamped on every draft operation it produces. */
6125
+ export interface OperationOrigin {
6126
+ entryId: string;
6127
+ version: number;
6128
+ packId?: string;
6129
+ /** The language the piece was compiled in; its install row records it. */
6130
+ locale: CatalogLocale;
6131
+ }
6132
+ export interface CatalogSummary {
6133
+ label: string;
6134
+ description: string;
6135
+ icon: IconName;
6136
+ category?: string;
6137
+ }
6138
+ export interface CatalogEntrySummary extends CatalogSummary {
6139
+ id: string;
6140
+ kind: CatalogEntryKind;
6141
+ version: number;
6142
+ requires: string[];
6143
+ installed: boolean;
6144
+ }
6145
+ export interface CatalogPackSummary extends CatalogSummary {
6146
+ id: string;
6147
+ version: number;
6148
+ entries: string[];
6149
+ hasSamples: boolean;
6150
+ installed: boolean;
6151
+ }
6152
+ /** A summary plus the ids it pulls in when installed. */
6153
+ export type CatalogEntryDetail = (CatalogEntrySummary | CatalogPackSummary) & {
6154
+ closure: string[];
6155
+ };
6156
+ export interface CatalogSelection {
6157
+ entries?: string[];
6158
+ packs?: string[];
6159
+ }
6160
+ export type CatalogDecision = "bind" | "skip" | {
6161
+ rename: string;
6162
+ };
6163
+ export interface CatalogPlanPiece {
6164
+ entryId: string;
6165
+ kind: CatalogEntryKind;
6166
+ status: "new" | "collides";
6167
+ existingName?: string;
6168
+ installable: boolean;
6169
+ reason?: string;
6170
+ inverseRelations?: {
6171
+ objectName: string;
6172
+ attributeName: string;
6173
+ }[];
6174
+ }
6175
+ export interface CatalogInstallPlan {
6176
+ pieces: CatalogPlanPiece[];
6177
+ fingerprint: string;
6178
+ }
6179
+ export interface CatalogInstallInput {
6180
+ selection: CatalogSelection;
6181
+ locale: CatalogLocale;
6182
+ withSamples: boolean;
6183
+ decisions: Record<string, CatalogDecision>;
6184
+ fingerprint: string;
6185
+ }
6186
+ export interface CatalogInstallResult {
6187
+ installed: {
6188
+ entryId: string;
6189
+ version: number;
6190
+ targetKind: CatalogEntryKind;
6191
+ targetId: string;
6192
+ }[];
6193
+ failed: {
6194
+ entryId: string;
6195
+ reason: string;
6196
+ }[];
6197
+ }
6198
+ //#endregion
6019
6199
  //#region src/types/schema-state.d.ts
6020
6200
  type Without<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;
6021
6201
  export type ViewSourceOwner = "core" | `bundle:${string}` | `source:${string}`;
@@ -10633,10 +10813,13 @@ export declare const RECORD_LINKS_BLOCK: BlockDefinition<"record_links", import(
10633
10813
  /** The chosen record's object; absent, the block centres on the host record. */
10634
10814
  readonly object: BlockInput<"object", import("zod").ZodString, true>;
10635
10815
  readonly record: BlockInput<"record", import("zod").ZodString, true>;
10636
- /** How many rings are expanded on open; two when absent. */
10816
+ /** How many rings are expanded on open, one to five; two when absent. */
10637
10817
  readonly depth: ListableBlockInput<"enum", import("zod").ZodEnum<{
10638
10818
  1: "1";
10639
10819
  2: "2";
10820
+ 3: "3";
10821
+ 4: "4";
10822
+ 5: "5";
10640
10823
  }>, true>;
10641
10824
  }>, import("zod/v4/core").$strip>>;
10642
10825
  /**
@@ -11027,10 +11210,13 @@ export declare const NATIVE_BLOCKS: readonly [BlockDefinition<"artifact_preview"
11027
11210
  /** The chosen record's object; absent, the block centres on the host record. */
11028
11211
  readonly object: BlockInput<"object", import("zod").ZodString, true>;
11029
11212
  readonly record: BlockInput<"record", import("zod").ZodString, true>;
11030
- /** How many rings are expanded on open; two when absent. */
11213
+ /** How many rings are expanded on open, one to five; two when absent. */
11031
11214
  readonly depth: ListableBlockInput<"enum", import("zod").ZodEnum<{
11032
11215
  1: "1";
11033
11216
  2: "2";
11217
+ 3: "3";
11218
+ 4: "4";
11219
+ 5: "5";
11034
11220
  }>, true>;
11035
11221
  }>, import("zod/v4/core").$strip>>];
11036
11222
  //#endregion
@@ -11811,6 +11997,20 @@ export declare function collectContentViewCatalogue(input: ContentViewCatalogueI
11811
11997
  * `rule` discriminator that carried it. A reader refuses every violation.
11812
11998
  */
11813
11999
  export declare function validateStoredViews(input: ContentViewCatalogueInput): void;
12000
+ /** The first rule a view breaks and where: `<message> (<path>)`, the path left out at the root. */
12001
+ export declare function describeViewIssue(issue: {
12002
+ message: string;
12003
+ path: readonly PropertyKey[];
12004
+ }): string;
12005
+ /**
12006
+ * Says which view was refused and the first rule it breaks: the bare "Invalid
12007
+ * content view" reached the person and the agent with nothing to fix (#5888).
12008
+ * The architect's publish blockers word the same refusal through it (#5932).
12009
+ */
12010
+ export declare function invalidViewMessage(raw: unknown, issue: {
12011
+ message: string;
12012
+ path: readonly PropertyKey[];
12013
+ } | undefined): string;
11814
12014
  /** Resolves names against a collected snapshot; it performs no writes or adoption. */
11815
12015
  export declare function validateContentViewCatalogue(input: ContentViewCatalogueInput): ContentViewCatalogueResult;
11816
12016
  //#endregion
@@ -12356,6 +12556,8 @@ export interface ArchitectChange {
12356
12556
  after: unknown;
12357
12557
  /** The agent's note on this operation, when it wrote one (D9). */
12358
12558
  note?: string;
12559
+ /** Set when the operation was produced by a catalog install. */
12560
+ origin?: OperationOrigin;
12359
12561
  }
12360
12562
  /** One operation of a draft as stored and sent: its shared fields plus its type's payload. */
12361
12563
  export type ViewOperation = BaseOperation & Record<string, unknown>;
@@ -12448,6 +12650,8 @@ export interface BaseOperation {
12448
12650
  type: string;
12449
12651
  /** The architect's own sentence — what it does and why; ≤ 160 chars. Persisted with the operation. */
12450
12652
  note?: string;
12653
+ /** Set on every operation a catalog install produced; the publish records it in `catalog_installs`. */
12654
+ origin?: OperationOrigin;
12451
12655
  }
12452
12656
  //#endregion
12453
12657
  //#region src/architect/proposal-types.d.ts
@@ -12489,6 +12693,45 @@ export declare const namedTargetSchema: z$2.ZodUnion<readonly [z$2.ZodObject<{
12489
12693
  }, z$2.core.$strict>]>;
12490
12694
  export type NamedTarget = z$2.infer<typeof namedTargetSchema>;
12491
12695
  export declare function parseNamedTarget(input: unknown): NamedTarget;
12696
+ /** How much a step deserves the person's eye: a new object is dwelt on, a rename flown past. */
12697
+ export type DraftStepPace = "major" | "normal" | "minor";
12698
+ /**
12699
+ * An operation's focus, resolved on the draft it was committed to: the ids the
12700
+ * draft minted, and what a route needs that the operation itself does not
12701
+ * name. A step routes from this alone, with no catalogue and no projection.
12702
+ */
12703
+ export interface DraftStepFocus extends DraftFocus {
12704
+ /** The focused view's id, the minted one for a view only the draft holds. */
12705
+ viewId?: string;
12706
+ /** The focused content's id within its view. */
12707
+ contentId?: string;
12708
+ /** How the focused object view is reached: its context, and whether it is its object's default. */
12709
+ viewRoute?: {
12710
+ context: "collection" | "record";
12711
+ default: boolean;
12712
+ };
12713
+ /**
12714
+ * How the focused page is reached: a record page through its object's record
12715
+ * view (on the tab rendering it, when one does), a standalone page by the key
12716
+ * its route carries.
12717
+ */
12718
+ pageRoute?: {
12719
+ objectName: string;
12720
+ tabName?: string;
12721
+ } | {
12722
+ key: string;
12723
+ };
12724
+ }
12725
+ /** One committed operation, as the follow shows it. */
12726
+ export interface DraftStep {
12727
+ /** The draft version the operation's commit produced. */
12728
+ version: number;
12729
+ operationId: string;
12730
+ focus: DraftStepFocus;
12731
+ pace: DraftStepPace;
12732
+ /** The agent's note on the operation, when it wrote one. */
12733
+ note?: string;
12734
+ }
12492
12735
  export interface MutationReceipt {
12493
12736
  operationIds: string[];
12494
12737
  revision: ProposalRevision;
@@ -12498,10 +12741,81 @@ export interface MutationReceipt {
12498
12741
  }>;
12499
12742
  /** Operation id → the agent's note, for the committed operations that carry one. Absent when none does. */
12500
12743
  notes?: Readonly<Record<string, string>>;
12744
+ /**
12745
+ * One step per operation this receipt committed, in order. Empty for a
12746
+ * receipt that commits none (a removal, a discard, a publication); absent
12747
+ * from a receipt sent before steps existed.
12748
+ */
12749
+ steps?: DraftStep[];
12750
+ }
12751
+ /**
12752
+ * What a publish refusal or a publish blocker names: an object, one of its
12753
+ * attributes or views, or a page (addressed by id). Its kind is the most
12754
+ * specific key present.
12755
+ */
12756
+ export interface PublishTarget {
12757
+ objectName?: string;
12758
+ attributeName?: string;
12759
+ viewName?: string;
12760
+ pageId?: string;
12761
+ }
12762
+ export type PublishTargetKind = "object" | "attribute" | "view" | "page";
12763
+ /** The target a publish refusal carries in its `details.target`. */
12764
+ export interface PublishRefusalTarget extends PublishTarget {
12765
+ kind: PublishTargetKind;
12766
+ }
12767
+ /**
12768
+ * The code a stored publish refusal carries: the refusal's own
12769
+ * `SchemaErrorCode`, or `INTERNAL` for a failure that was not a refusal at
12770
+ * all, whose server text is never stored (#5933).
12771
+ */
12772
+ export type PublishOutcomeCode = SchemaErrorCode | "INTERNAL";
12773
+ /**
12774
+ * Why the last publish of a draft was refused, as the draft row keeps it
12775
+ * (`schema_drafts.last_publish_error`). Written after the publish rolled
12776
+ * back, so it survives the rollback and a response the client never read.
12777
+ */
12778
+ export interface LastPublishError {
12779
+ code: PublishOutcomeCode;
12780
+ /** What was refused, when the refusal named it. */
12781
+ target?: PublishRefusalTarget;
12782
+ /** The last operation of the draft that changed `target`. */
12783
+ operationId?: string;
12784
+ /** The refusal's own words: only a refusal of the draft (a 4xx) keeps them. */
12785
+ message?: string;
12786
+ /** ISO 8601. */
12787
+ at: string;
12788
+ }
12789
+ /**
12790
+ * How the owner's last publication ended, whichever is later: its most
12791
+ * recent published draft, or the refusal stored on its composing draft.
12792
+ */
12793
+ export interface LastPublication {
12794
+ draftId: string;
12795
+ outcome: "published" | "refused";
12796
+ /** ISO 8601: when the draft was published, or when the refusal was stored. */
12797
+ at: string;
12798
+ /** Present when `outcome` is `refused`. */
12799
+ error?: LastPublishError;
12800
+ }
12801
+ /**
12802
+ * The publish rules the append runs on the folded draft, beyond its own: what
12803
+ * no single operation breaks, so the append accepts it, and the publish then
12804
+ * refuses (#5932).
12805
+ */
12806
+ export type PublishBlockerRule = "computed-cycle" | "bilateral-pair" | "content-view";
12807
+ /** One thing the publish would refuse in the draft as it stands. */
12808
+ export interface PublishBlocker {
12809
+ rule: PublishBlockerRule;
12810
+ target: PublishTarget;
12811
+ /** The refusal the publish would raise, word for word. */
12812
+ message: string;
12501
12813
  }
12502
12814
  /** HTTP append result: enough to continue editing without a second guard request. */
12503
12815
  export interface DraftAppendReceipt extends MutationReceipt {
12504
12816
  commandGuard: DraftCommandGuard;
12817
+ /** What the publish would refuse in the draft after this append; empty when nothing. */
12818
+ publishBlockers: PublishBlocker[];
12505
12819
  }
12506
12820
  export interface DraftPublishCommand {
12507
12821
  revision: ProposalRevision;
@@ -13680,6 +13994,15 @@ export declare const todoItemSchema: z$2.ZodObject<{
13680
13994
  }>;
13681
13995
  result: z$2.ZodOptional<z$2.ZodString>;
13682
13996
  updatedAt: z$2.ZodOptional<z$2.ZodNumber>;
13997
+ target: z$2.ZodOptional<z$2.ZodObject<{
13998
+ phase: z$2.ZodEnum<{
13999
+ fields: "fields";
14000
+ relations: "relations";
14001
+ views: "views";
14002
+ objects: "objects";
14003
+ samples: "samples";
14004
+ }>;
14005
+ }, z$2.core.$strict>>;
13683
14006
  }, z$2.core.$strict>;
13684
14007
  export declare const todoPlanSchema: z$2.ZodObject<{
13685
14008
  id: z$2.ZodString;
@@ -13700,6 +14023,15 @@ export declare const todoPlanSchema: z$2.ZodObject<{
13700
14023
  }>;
13701
14024
  result: z$2.ZodOptional<z$2.ZodString>;
13702
14025
  updatedAt: z$2.ZodOptional<z$2.ZodNumber>;
14026
+ target: z$2.ZodOptional<z$2.ZodObject<{
14027
+ phase: z$2.ZodEnum<{
14028
+ fields: "fields";
14029
+ relations: "relations";
14030
+ views: "views";
14031
+ objects: "objects";
14032
+ samples: "samples";
14033
+ }>;
14034
+ }, z$2.core.$strict>>;
13703
14035
  }, z$2.core.$strict>>;
13704
14036
  version: z$2.ZodNumber;
13705
14037
  createdAt: z$2.ZodString;