openplanr 2.6.3 → 2.2639.1

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.
Files changed (33) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/cli/commands/company.d.ts.map +1 -1
  3. package/dist/cli/commands/company.js +23 -1
  4. package/dist/cli/commands/company.js.map +1 -1
  5. package/dist/cli/commands/diagram/index.d.ts.map +1 -1
  6. package/dist/cli/commands/diagram/index.js +63 -0
  7. package/dist/cli/commands/diagram/index.js.map +1 -1
  8. package/dist/services/company-sync-service.d.ts +44 -0
  9. package/dist/services/company-sync-service.d.ts.map +1 -1
  10. package/dist/services/company-sync-service.js +256 -7
  11. package/dist/services/company-sync-service.js.map +1 -1
  12. package/dist/services/diagram-authoring-service.d.ts +99 -0
  13. package/dist/services/diagram-authoring-service.d.ts.map +1 -0
  14. package/dist/services/diagram-authoring-service.js +184 -0
  15. package/dist/services/diagram-authoring-service.js.map +1 -0
  16. package/lib/host-packages/adapter-registry.json +5 -5
  17. package/lib/host-packages/capability-map.json +2 -2
  18. package/lib/host-packages/claude/.claude-plugin/marketplace.json +2 -2
  19. package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +1 -1
  20. package/lib/host-packages/claude/openplanr/.openplanr-content.json +4 -4
  21. package/lib/host-packages/claude/openplanr/skills/diagram/SKILL.md +20 -1
  22. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-intent-to-ir.md +9 -0
  23. package/lib/host-packages/cursor/openplanr/.openplanr-content.json +4 -4
  24. package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
  25. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-intent-to-ir.md +9 -0
  26. package/lib/host-packages/cursor/openplanr/rules/planr-diagram.mdc +20 -1
  27. package/lib/host-packages/openai/.claude-plugin/marketplace.json +2 -2
  28. package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +1 -1
  29. package/lib/host-packages/openai/openplanr/.openplanr-content.json +5 -5
  30. package/lib/host-packages/openai/openplanr/skills/diagram/SKILL.md +20 -1
  31. package/lib/host-packages/openai/openplanr/skills/diagram/agents/openai.yaml +2 -2
  32. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-intent-to-ir.md +9 -0
  33. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.2639.1
4
+
5
+ ## 2.2639.0
6
+
7
+ Releases are now numbered by release week. The middle number is the year and ISO week the release was prepared in (2026, week 39), and further releases in the same week raise the last number. The version still increases with every release, so existing `^2` ranges accept it.
8
+
9
+ ### Minor Changes
10
+
11
+ - b2e302c: Add canonical diagram creation, local owner editing, exact-base typed transaction previews, and explicit company revision adoption. Complete authored bundles now travel through reviewed publication and proposal application while preserving remote revision identity and atomic local custody; generated host guidance and command catalog cover the new workflow.
12
+
3
13
  ## 2.6.3
4
14
 
5
15
  ## 2.6.2
@@ -1 +1 @@
1
- {"version":3,"file":"company.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/company.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqDzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QA2LtD"}
1
+ {"version":3,"file":"company.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/company.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuDzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QAmOtD"}
@@ -1,5 +1,5 @@
1
1
  import { loginCompany, logoutCompany, storeCompanyManualToken, } from '../../services/company-auth-service.js';
2
- import { applyCompanyProposal, companyApi, companyBindingStatus, previewCompanyProposal, previewCompanyPublication, previewCompanyPull, previewCompanyPush, publishCompanyPreview, pullCompanyBinding, pushCompanyBinding, resolveCompanyOrigin, } from '../../services/company-sync-service.js';
2
+ import { adoptCompanyDiagramRevision, applyCompanyProposal, companyApi, companyBindingStatus, previewCompanyDiagramAdoption, previewCompanyProposal, previewCompanyPublication, previewCompanyPull, previewCompanyPush, publishCompanyPreview, pullCompanyBinding, pushCompanyBinding, resolveCompanyOrigin, } from '../../services/company-sync-service.js';
3
3
  function print(value) {
4
4
  process.stdout.write(JSON.stringify(value, null, 2) + '\n');
5
5
  }
@@ -104,6 +104,28 @@ export function registerCompanyCommand(program) {
104
104
  .option('--api-url <origin>', 'company API HTTPS origin override')
105
105
  .option('--json', 'structured output')
106
106
  .action(async (options) => print(await companyApi(resolveCompanyOrigin(options.apiUrl), '/v1/projects')));
107
+ company
108
+ .command('adopt')
109
+ .argument('<artifact-id>', 'company diagram artifact ID')
110
+ .requiredOption('--project <id>', 'company project ID')
111
+ .requiredOption('--revision <id>', 'exact authorized revision ID')
112
+ .requiredOption('--path <file>', 'canonical local diagrams/{slug}/{slug}.planr-diagram-bundle.json')
113
+ .option('--api-url <origin>', 'company API HTTPS origin override')
114
+ .option('--accept <preview-token>', 'adopt the exact reviewed revision and local target')
115
+ .option('--json', 'structured output')
116
+ .description('Preview or explicitly adopt a company diagram revision into local authoring custody')
117
+ .action(async (artifactId, options) => {
118
+ const request = {
119
+ apiUrl: resolveCompanyOrigin(options.apiUrl),
120
+ projectId: options.project,
121
+ artifactId,
122
+ revisionId: options.revision,
123
+ filePath: options.path,
124
+ };
125
+ print(options.accept
126
+ ? await adoptCompanyDiagramRevision(root(), { ...request, accept: options.accept })
127
+ : await previewCompanyDiagramAdoption(root(), request));
128
+ });
107
129
  company
108
130
  .command('preview')
109
131
  .argument('<file>', 'repository-relative artifact; --kind design bundles an authored design document and its references')
@@ -1 +1 @@
1
- {"version":3,"file":"company.js","sourceRoot":"","sources":["../../../src/cli/commands/company.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"company.js","sourceRoot":"","sources":["../../../src/cli/commands/company.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/diagram/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0CzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsE7D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/diagram/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqEzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuI7D"}
@@ -1,5 +1,22 @@
1
+ import { applyDiagramTransaction, DiagramAuthoringError, editDiagram, newDiagram, } from '../../../services/diagram-authoring-service.js';
1
2
  import { diagramGallery, inspectDiagramInput, renderDiagramInput, rerenderDiagramInput, } from '../../../services/diagram-pipeline-service.js';
3
+ import { display, logger } from '../../../utils/logger.js';
2
4
  import { presentDiagramGallery, presentDiagramResult } from './presentation.js';
5
+ function presentAuthoring(value, json) {
6
+ if (json) {
7
+ display.line(JSON.stringify(value));
8
+ return;
9
+ }
10
+ logger.success(`${String(value.diagramId)}: ${String(value.status)}`);
11
+ if (value.path)
12
+ display.keyValue('Bundle', String(value.path));
13
+ if (value.url)
14
+ display.keyValue('Studio', String(value.url));
15
+ if (value.diff)
16
+ display.line(JSON.stringify(value.diff, null, 2));
17
+ if (value.nextAction)
18
+ display.line(`Next: ${String(value.nextAction)}`);
19
+ }
3
20
  function projectDir(program) {
4
21
  return program.opts().projectDir;
5
22
  }
@@ -16,6 +33,52 @@ export function registerDiagramCommand(program) {
16
33
  const diagram = program
17
34
  .command('diagram')
18
35
  .description('Create, verify, inspect, and rerender offline professional diagrams');
36
+ diagram
37
+ .command('new')
38
+ .argument('<path>', 'canonical diagrams/{slug}/{slug}.planr-diagram-bundle.json path')
39
+ .requiredOption('--title <title>', 'diagram title')
40
+ .option('--json', 'output one stable machine envelope')
41
+ .description('Create a canonical editable diagram bundle')
42
+ .action(async (input, options) => {
43
+ presentAuthoring(await newDiagram(projectDir(program), input, options.title ?? ''), Boolean(options.json));
44
+ });
45
+ diagram
46
+ .command('edit')
47
+ .argument('<path>', 'canonical diagram bundle path')
48
+ .option('--json', 'output one stable machine envelope')
49
+ .description('Open the local owner studio for an existing diagram')
50
+ .action(async (input, options) => {
51
+ const owner = await editDiagram(projectDir(program), input);
52
+ presentAuthoring({ ok: true, action: 'diagram.edit', status: 'open', diagramId: input, url: owner.baseUrl }, Boolean(options.json));
53
+ let stop;
54
+ try {
55
+ await new Promise((resolve) => {
56
+ stop = resolve;
57
+ process.once('SIGINT', stop);
58
+ process.once('SIGTERM', stop);
59
+ });
60
+ }
61
+ finally {
62
+ if (stop) {
63
+ process.removeListener('SIGINT', stop);
64
+ process.removeListener('SIGTERM', stop);
65
+ }
66
+ await owner.close();
67
+ }
68
+ });
69
+ diagram
70
+ .command('apply')
71
+ .argument('<path>', 'canonical diagram bundle path')
72
+ .requiredOption('--transaction <file>', 'typed diagram-edit-transaction JSON')
73
+ .option('--dry-run', 'preview semantic and layout changes without applying')
74
+ .option('--accept <preview-token>', 'apply the exact previewed transaction')
75
+ .option('--json', 'output one stable machine envelope')
76
+ .description('Preview a scoped edit, then explicitly accept that preview')
77
+ .action(async (input, options) => {
78
+ if (options.dryRun && options.accept)
79
+ throw new DiagramAuthoringError('E_DIAGRAM_OPTIONS', '--dry-run and --accept cannot be used together.');
80
+ presentAuthoring(await applyDiagramTransaction(projectDir(program), input, options.transaction ?? '', options.accept), Boolean(options.json));
81
+ });
19
82
  diagram
20
83
  .command('render')
21
84
  .argument('<input>', 'canonical .planr-diagram.json or Mermaid source')
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/diagram/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/diagram/index.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,8 @@ export interface CompanyPreview {
9
9
  kind: 'diagram' | 'design' | 'plan' | 'document';
10
10
  contentType: string;
11
11
  contentDigest: string;
12
+ /** Canonical local bytes can differ from the immutable remote revision's bytes after adoption. */
13
+ localContentDigest?: string;
12
14
  byteLength: number;
13
15
  createdAt: string;
14
16
  artifactId?: string;
@@ -107,6 +109,48 @@ interface CompanyPullPreview {
107
109
  revision: CompanyRemoteRevision;
108
110
  createdAt: string;
109
111
  }
112
+ export declare function previewCompanyDiagramAdoption(root: string, options: {
113
+ apiUrl: string;
114
+ projectId: string;
115
+ artifactId: string;
116
+ revisionId: string;
117
+ filePath: string;
118
+ }): Promise<{
119
+ ok: true;
120
+ action: string;
121
+ status: "preview" | "collision";
122
+ organizationId: string;
123
+ projectId: string;
124
+ artifactId: string;
125
+ revisionId: string;
126
+ remoteContentDigest: string;
127
+ remoteByteLength: number;
128
+ localPath: string;
129
+ localCollision: boolean;
130
+ previewToken: string | null;
131
+ bundle: object;
132
+ notice: string;
133
+ }>;
134
+ export declare function adoptCompanyDiagramRevision(root: string, options: {
135
+ apiUrl: string;
136
+ projectId: string;
137
+ artifactId: string;
138
+ revisionId: string;
139
+ filePath: string;
140
+ accept: string;
141
+ }): Promise<{
142
+ ok: true;
143
+ action: string;
144
+ status: string;
145
+ bindingId: string;
146
+ organizationId: string;
147
+ projectId: string;
148
+ artifactId: string;
149
+ revisionId: string;
150
+ filePath: string;
151
+ remoteContentDigest: string;
152
+ localContentDigest: string | undefined;
153
+ }>;
110
154
  export declare function previewCompanyPull(root: string, bindingId: string, options?: {
111
155
  revisionId?: string;
112
156
  }): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"company-sync-service.d.ts","sourceRoot":"","sources":["../../src/services/company-sync-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"company-sync-service.d.ts","sourceRoot":"","sources":["../../src/services/company-sync-service.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import path from 'node:path';
4
4
  import { pathToFileURL } from 'node:url';
5
5
  import { resolveCompanyAccessToken } from './company-auth-service.js';
6
6
  import { CompanySyncError, normalizeCompanyOrigin } from './company-common.js';
7
+ import { adoptDiagramBundle, canonicalDiagramTarget, commitReviewedDiagramSuccessor, } from './diagram-authoring-service.js';
7
8
  import { resolvePipelinePackage } from './pipeline-package-service.js';
8
9
  export { CompanySyncError, DEFAULT_COMPANY_API_ORIGIN, normalizeCompanyOrigin, resolveCompanyOrigin, } from './company-common.js';
9
10
  const fail = (code, message, cause) => {
@@ -17,6 +18,7 @@ const id = (value) => typeof value === 'string' &&
17
18
  : fail('E_COMPANY_ID', 'Invalid company resource identifier.');
18
19
  const MAX_BYTES = 1024 * 1024;
19
20
  const MAX_RESPONSE_BYTES = 2 * 1024 * 1024;
21
+ const expectedLocalDigest = (binding) => binding.localContentDigest ?? binding.contentDigest;
20
22
  // Reject C0 controls and DEL in externally supplied paths and element identifiers.
21
23
  function hasControlCharacters(value) {
22
24
  return [...value].some((character) => character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127);
@@ -170,6 +172,7 @@ async function loadState(root, section, key) {
170
172
  data.id !== key ||
171
173
  typeof data.contentDigest !== 'string' ||
172
174
  !/^[a-f0-9]{64}$/.test(data.contentDigest) ||
175
+ (data.localContentDigest !== undefined && !isDigest(data.localContentDigest)) ||
173
176
  typeof data.filePath !== 'string' ||
174
177
  typeof data.title !== 'string' ||
175
178
  !data.title.trim() ||
@@ -324,6 +327,26 @@ function checkContent(content) {
324
327
  if (/-----BEGIN (?:RSA |EC |OPENSSH )?PRIVATE KEY-----|(?:sk_live_|ghp_)[A-Za-z0-9]{20,}|(?:authorization["']?\s*[:=]\s*["']?bearer\s+)[A-Za-z0-9._-]{20,}/i.test(content))
325
328
  fail('E_COMPANY_SENSITIVE', 'This artifact appears to contain credentials. Remove them before sharing.');
326
329
  }
330
+ async function diagramAuthoringRuntime() {
331
+ const pipeline = resolvePipelinePackage(true);
332
+ if (!pipeline)
333
+ return fail('E_COMPANY_RUNTIME', 'The diagram authoring runtime is unavailable.');
334
+ const runtime = await import(pathToFileURL(path.join(pipeline.root, 'lib/artifact/diagram/authoring/index.mjs')).href);
335
+ if (typeof runtime.validateAuthoringBundle !== 'function' ||
336
+ typeof runtime.diffDiagramBundles !== 'function')
337
+ return fail('E_COMPANY_RUNTIME', 'The installed workflow package does not support complete diagram bundles.');
338
+ return runtime;
339
+ }
340
+ async function assertCompleteDiagramBundle(content, filePath) {
341
+ const checked = (await diagramAuthoringRuntime()).validateAuthoringBundle(content);
342
+ if (!checked.ok)
343
+ return fail('E_COMPANY_AUTHORING', 'The complete diagram bundle is invalid or unsupported.');
344
+ const bundle = content;
345
+ if (filePath &&
346
+ filePath !== `diagrams/${bundle.diagramId}/${bundle.diagramId}.planr-diagram-bundle.json`)
347
+ return fail('E_COMPANY_SCOPE', 'Publish the canonical diagram-authoring-bundle file.');
348
+ return bundle;
349
+ }
327
350
  async function prepareCompanyContent(root, source, detectDesign = false) {
328
351
  const file = await safeFile(root, source.filePath);
329
352
  const extension = path.extname(file).toLowerCase();
@@ -337,6 +360,19 @@ async function prepareCompanyContent(root, source, detectDesign = false) {
337
360
  return fail('E_COMPANY_TYPE', 'Publish a JSON, Markdown, SVG, or HTML artifact.');
338
361
  const original = await readArtifactFile(file);
339
362
  checkContent(original);
363
+ if (source.kind === 'diagram' && extension === '.json') {
364
+ let parsed;
365
+ try {
366
+ parsed = JSON.parse(original);
367
+ }
368
+ catch {
369
+ /* Legacy JSON validation remains at its domain boundary. */
370
+ }
371
+ if (parsed &&
372
+ typeof parsed === 'object' &&
373
+ parsed.kind === 'diagram-authoring-bundle')
374
+ await assertCompleteDiagramBundle(parsed, source.filePath);
375
+ }
340
376
  let isDesignDocument = false;
341
377
  if (source.kind === 'design' && extension === '.json') {
342
378
  try {
@@ -644,7 +680,7 @@ export async function companyBindingStatus(root, bindingId) {
644
680
  remote.headRevisionId === null)
645
681
  return fail('E_COMPANY_RESPONSE', 'The remote artifact does not match its local binding.');
646
682
  id(remote.headRevisionId);
647
- const localChanged = hash(current) !== binding.contentDigest || !sameSourceManifest(binding, prepared);
683
+ const localChanged = hash(current) !== expectedLocalDigest(binding) || !sameSourceManifest(binding, prepared);
648
684
  const remoteChanged = remote.headRevisionId !== binding.revisionId;
649
685
  return {
650
686
  ok: true,
@@ -744,6 +780,153 @@ async function remoteRevisionContent(binding, revision) {
744
780
  return fail('E_COMPANY_INTEGRITY', 'The downloaded bytes do not match the selected revision digest and size.');
745
781
  return content;
746
782
  }
783
+ export async function previewCompanyDiagramAdoption(root, options) {
784
+ const apiUrl = normalizeCompanyOrigin(options.apiUrl);
785
+ const projectId = id(options.projectId);
786
+ const artifactId = id(options.artifactId);
787
+ const revisionId = id(options.revisionId);
788
+ assertSafeRelativePath(options.filePath);
789
+ const target = await canonicalDiagramTarget(root, options.filePath);
790
+ const remote = await companyApi(apiUrl, `/v1/projects/${projectId}/artifacts/${artifactId}`);
791
+ if (remote?.artifact?.id !== artifactId ||
792
+ remote.artifact.projectId !== projectId ||
793
+ remote.artifact.kind !== 'diagram')
794
+ return fail('E_COMPANY_SCOPE', 'The selected artifact is not a diagram in this company project.');
795
+ const organizationId = id(remote.artifact.organizationId);
796
+ const provisional = { apiUrl, organizationId, projectId, artifactId };
797
+ const revision = await findRemoteRevision(provisional, revisionId);
798
+ if (revision.contentType !== 'application/json')
799
+ return fail('E_COMPANY_TYPE', 'Adoption requires a complete JSON diagram bundle.');
800
+ const content = await remoteRevisionContent(provisional, revision);
801
+ let bundle;
802
+ try {
803
+ bundle = JSON.parse(content);
804
+ }
805
+ catch (cause) {
806
+ return fail('E_COMPANY_AUTHORING', 'The selected revision is not a JSON diagram bundle.', cause);
807
+ }
808
+ if (!bundle ||
809
+ typeof bundle !== 'object' ||
810
+ bundle.kind !== 'diagram-authoring-bundle')
811
+ return fail('E_COMPANY_AUTHORING', 'The selected revision is not a complete diagram-authoring-bundle.');
812
+ await assertCompleteDiagramBundle(bundle, options.filePath);
813
+ if (bundle.diagramId !== target.slug)
814
+ return fail('E_COMPANY_SCOPE', 'The selected revision identity does not match the local diagram path.');
815
+ const previewToken = hash(JSON.stringify([
816
+ apiUrl,
817
+ organizationId,
818
+ projectId,
819
+ artifactId,
820
+ revisionId,
821
+ revision.contentDigest,
822
+ options.filePath,
823
+ ]));
824
+ let collision = false;
825
+ try {
826
+ const info = await lstat(target.file);
827
+ collision =
828
+ !info.isFile() ||
829
+ info.isSymbolicLink() ||
830
+ hash(await readArtifactFile(target.file)) !== hash(JSON.stringify(bundle, null, 2) + '\n');
831
+ if (!collision) {
832
+ // Matching loose bytes are not enough: only the authoring store can own a bundle.
833
+ const owner = await lstat(path.join(path.dirname(target.file), '.authoring', 'owner.json')).catch((error) => {
834
+ if (error.code === 'ENOENT')
835
+ return null;
836
+ throw error;
837
+ });
838
+ collision = !owner?.isFile() || owner.isSymbolicLink();
839
+ }
840
+ }
841
+ catch (error) {
842
+ if (error.code !== 'ENOENT')
843
+ throw error;
844
+ const entries = await readdir(path.dirname(target.file)).catch((directoryError) => {
845
+ if (directoryError.code === 'ENOENT')
846
+ return [];
847
+ throw directoryError;
848
+ });
849
+ collision = entries.length > 0;
850
+ }
851
+ return {
852
+ ok: true,
853
+ action: 'company.adopt-preview',
854
+ status: collision ? 'collision' : 'preview',
855
+ organizationId,
856
+ projectId,
857
+ artifactId,
858
+ revisionId,
859
+ remoteContentDigest: revision.contentDigest,
860
+ remoteByteLength: revision.byteLength,
861
+ localPath: options.filePath,
862
+ localCollision: collision,
863
+ previewToken: collision ? null : previewToken,
864
+ bundle,
865
+ notice: collision
866
+ ? 'The local target already differs. Resolve the collision before adopting; no file was changed.'
867
+ : 'Review this exact company revision and target, then explicitly accept its preview token. Pull remains an inspection-only operation.',
868
+ };
869
+ }
870
+ export async function adoptCompanyDiagramRevision(root, options) {
871
+ const preview = await previewCompanyDiagramAdoption(root, options);
872
+ const previewToken = preview.previewToken;
873
+ if (!previewToken || previewToken !== options.accept)
874
+ return fail('E_COMPANY_CONFLICT', 'The selected revision, scope, or local target no longer matches the reviewed adoption preview.');
875
+ return withBindingLock(root, previewToken, async () => {
876
+ const candidateLocalDigest = hash(JSON.stringify(preview.bundle, null, 2) + '\n');
877
+ let prior;
878
+ try {
879
+ prior = (await loadState(root, 'bindings', previewToken));
880
+ }
881
+ catch (error) {
882
+ if (error.code !== 'ENOENT')
883
+ throw error;
884
+ }
885
+ if (prior &&
886
+ (prior.organizationId !== preview.organizationId ||
887
+ prior.projectId !== preview.projectId ||
888
+ prior.artifactId !== preview.artifactId ||
889
+ prior.revisionId !== preview.revisionId ||
890
+ prior.filePath !== options.filePath ||
891
+ prior.contentDigest !== preview.remoteContentDigest ||
892
+ expectedLocalDigest(prior) !== candidateLocalDigest))
893
+ return fail('E_COMPANY_STATE', 'Existing adoption binding conflicts with the reviewed revision.');
894
+ const adopted = await adoptDiagramBundle(root, options.filePath, preview.bundle, preview.remoteContentDigest);
895
+ const localContent = await readArtifactFile(await safeFile(root, options.filePath));
896
+ const binding = {
897
+ schemaVersion: '1.0.0',
898
+ id: previewToken,
899
+ apiUrl: normalizeCompanyOrigin(options.apiUrl),
900
+ organizationId: preview.organizationId,
901
+ projectId: preview.projectId,
902
+ artifactId: preview.artifactId,
903
+ revisionId: preview.revisionId,
904
+ filePath: options.filePath,
905
+ title: preview.bundle.document.title,
906
+ kind: 'diagram',
907
+ contentType: 'application/json',
908
+ contentDigest: preview.remoteContentDigest,
909
+ localContentDigest: hash(localContent),
910
+ byteLength: preview.remoteByteLength,
911
+ createdAt: new Date().toISOString(),
912
+ };
913
+ if (!prior)
914
+ await saveState(root, 'bindings', binding.id, binding);
915
+ return {
916
+ ok: true,
917
+ action: 'company.adopt',
918
+ status: adopted.replayed ? 'already-adopted' : 'synchronized',
919
+ bindingId: binding.id,
920
+ organizationId: binding.organizationId,
921
+ projectId: binding.projectId,
922
+ artifactId: binding.artifactId,
923
+ revisionId: binding.revisionId,
924
+ filePath: binding.filePath,
925
+ remoteContentDigest: binding.contentDigest,
926
+ localContentDigest: binding.localContentDigest,
927
+ };
928
+ });
929
+ }
747
930
  export async function previewCompanyPull(root, bindingId, options = {}) {
748
931
  return withBindingLock(root, bindingId, async () => {
749
932
  const binding = (await loadState(root, 'bindings', bindingId));
@@ -781,7 +964,7 @@ export async function previewCompanyPull(root, bindingId, options = {}) {
781
964
  preview,
782
965
  content,
783
966
  comparison: {
784
- localChanged: localDigest !== publicationSourceDigest(binding.contentDigest, binding),
967
+ localChanged: localDigest !== publicationSourceDigest(expectedLocalDigest(binding), binding),
785
968
  localMissing: localDigest === null,
786
969
  remoteChanged: remoteHeadRevisionId !== binding.revisionId,
787
970
  },
@@ -917,9 +1100,54 @@ export async function previewCompanyProposal(root, bindingId, proposalId) {
917
1100
  if (status.status !== 'synchronized')
918
1101
  return fail('E_COMPANY_CONFLICT', 'Local or remote content changed. Compare revisions before applying.');
919
1102
  const content = await readArtifactFile(await safeFile(root, binding.filePath));
920
- if (hash(content) !== binding.contentDigest)
1103
+ if (hash(content) !== expectedLocalDigest(binding))
921
1104
  return fail('E_COMPANY_CONFLICT', 'The local file changed while preparing the preview. Compare revisions before applying.');
922
1105
  const original = JSON.parse(content);
1106
+ if (original?.kind === 'diagram-authoring-bundle') {
1107
+ await assertCompleteDiagramBundle(original, binding.filePath);
1108
+ const replacement = Array.isArray(proposal.operations) && proposal.operations.length === 1
1109
+ ? proposal.operations[0]
1110
+ : null;
1111
+ if (replacement?.op !== 'replace-document')
1112
+ return fail('E_COMPANY_AUTHORING', 'Complete diagram bundles require one reviewed successor bundle proposal.');
1113
+ const successor = replacement.content;
1114
+ await assertCompleteDiagramBundle(successor, binding.filePath);
1115
+ const runtime = await diagramAuthoringRuntime();
1116
+ const diff = runtime.diffDiagramBundles(original, successor);
1117
+ if (!diff.ok)
1118
+ return fail('E_COMPANY_AUTHORING', 'The successor bundle could not be compared with its exact base.');
1119
+ const baseLayout = await loadLayout(root, bindingId);
1120
+ if (Object.keys(baseLayout).length)
1121
+ return fail('E_COMPANY_AUTHORING', 'An authored bundle cannot carry a separate legacy layout.');
1122
+ const rendered = JSON.stringify(successor, null, 2) + '\n';
1123
+ if (Buffer.byteLength(rendered) > MAX_BYTES)
1124
+ return fail('E_COMPANY_SIZE', 'The proposed bundle exceeds the 1 MiB company limit.');
1125
+ checkContent(rendered);
1126
+ return {
1127
+ ok: true,
1128
+ action: 'company.proposal-preview',
1129
+ bindingId,
1130
+ proposalId,
1131
+ summary: proposal.summary,
1132
+ filePath: binding.filePath,
1133
+ baseRevisionId: binding.revisionId,
1134
+ baseDigest: expectedLocalDigest(binding),
1135
+ baseLayoutDigest: layoutDigest(baseLayout),
1136
+ document: successor,
1137
+ layout: baseLayout,
1138
+ semanticChanged: hash(rendered) !== expectedLocalDigest(binding),
1139
+ layoutChanged: false,
1140
+ changes: {
1141
+ semantic: diff.semantic,
1142
+ presentation: diff.presentation,
1143
+ source: {
1144
+ originalBytesChanged: original.originalSource?.sourceDigest !== successor.originalSource?.sourceDigest,
1145
+ correspondenceChanged: hash(JSON.stringify(original.sourceMap)) !== hash(JSON.stringify(successor.sourceMap)),
1146
+ },
1147
+ },
1148
+ before: original,
1149
+ };
1150
+ }
923
1151
  if (original.kind !== 'planr-diagram')
924
1152
  return fail('E_COMPANY_AUTHORING', 'This document type does not yet support validated semantic application.');
925
1153
  const baseLayout = await loadLayout(root, bindingId);
@@ -947,7 +1175,7 @@ export async function previewCompanyProposal(root, bindingId, proposalId) {
947
1175
  summary: proposal.summary,
948
1176
  filePath: binding.filePath,
949
1177
  baseRevisionId: binding.revisionId,
950
- baseDigest: binding.contentDigest,
1178
+ baseDigest: expectedLocalDigest(binding),
951
1179
  baseLayoutDigest: layoutDigest(baseLayout),
952
1180
  document,
953
1181
  layout: transformed.layout ?? {},
@@ -994,7 +1222,7 @@ async function resumePendingApplication(root, binding, pending) {
994
1222
  pending.projectId !== binding.projectId ||
995
1223
  pending.artifactId !== binding.artifactId ||
996
1224
  pending.baseRevisionId !== binding.revisionId ||
997
- pending.baseDigest !== binding.contentDigest ||
1225
+ pending.baseDigest !== expectedLocalDigest(binding) ||
998
1226
  !isDigest(pending.baseDigest) ||
999
1227
  !isDigest(pending.resultDigest) ||
1000
1228
  !isDigest(pending.baseLayoutDigest) ||
@@ -1015,6 +1243,23 @@ async function resumePendingApplication(root, binding, pending) {
1015
1243
  pending.semanticChanged !== (pending.baseDigest !== pending.resultDigest) ||
1016
1244
  pending.layoutChanged !== (pending.baseLayoutDigest !== pending.resultLayoutDigest))
1017
1245
  return fail('E_COMPANY_STATE', 'Pending application content failed its digest check.');
1246
+ const original = JSON.parse(backup);
1247
+ const authored = original?.kind === 'diagram-authoring-bundle';
1248
+ if (authored) {
1249
+ await assertCompleteDiagramBundle(original, binding.filePath);
1250
+ const successor = JSON.parse(staged);
1251
+ await assertCompleteDiagramBundle(successor, binding.filePath);
1252
+ if (pending.layoutChanged)
1253
+ return fail('E_COMPANY_AUTHORING', 'A complete bundle cannot apply a separate layout.');
1254
+ await commitReviewedDiagramSuccessor(root, binding.filePath, successor, `company-${hash(`${binding.id}:${pending.proposalId}`).slice(0, 40)}`, {
1255
+ byteDigest: `sha256:${pending.baseDigest}`,
1256
+ basis: {
1257
+ bundleDigest: original.bundleDigest,
1258
+ semanticDigest: original.document.documentDigest,
1259
+ presentationDigest: original.presentation.presentationDigest,
1260
+ },
1261
+ });
1262
+ }
1018
1263
  const inspect = async () => {
1019
1264
  const sourceDigest = hash(await readArtifactFile(await safeFile(root, binding.filePath)));
1020
1265
  const currentLayoutDigest = layoutDigest(await loadLayout(root, binding.id));
@@ -1029,6 +1274,8 @@ async function resumePendingApplication(root, binding, pending) {
1029
1274
  };
1030
1275
  let state = await inspect();
1031
1276
  if (state.sourceDigest !== pending.resultDigest) {
1277
+ if (authored)
1278
+ return fail('E_COMPANY_CONFLICT', 'The reviewed complete bundle was not committed by the authoring store.');
1032
1279
  const target = await safeFile(root, binding.filePath);
1033
1280
  await replaceDurably(target, staged, (await lstat(target)).mode & 0o777, async () => {
1034
1281
  const latest = await inspect();
@@ -1181,6 +1428,7 @@ export async function previewCompanyPush(root, bindingId) {
1181
1428
  ...binding,
1182
1429
  ...source,
1183
1430
  contentDigest: hash(content),
1431
+ localContentDigest: hash(content),
1184
1432
  byteLength: Buffer.byteLength(content),
1185
1433
  createdAt: new Date().toISOString(),
1186
1434
  operationId: randomUUID(),
@@ -1189,7 +1437,8 @@ export async function previewCompanyPush(root, bindingId) {
1189
1437
  return {
1190
1438
  ok: true,
1191
1439
  action: 'company.push-preview',
1192
- status: preview.contentDigest === binding.contentDigest && sameSourceManifest(binding, prepared)
1440
+ status: preview.contentDigest === expectedLocalDigest(binding) &&
1441
+ sameSourceManifest(binding, prepared)
1193
1442
  ? 'unchanged'
1194
1443
  : 'preview',
1195
1444
  bindingId,
@@ -1244,7 +1493,7 @@ export async function pushCompanyBinding(root, bindingId) {
1244
1493
  };
1245
1494
  if (preview.revisionId !== binding.revisionId)
1246
1495
  return fail('E_COMPANY_CONFLICT', 'The binding changed after this preview. Review a new update preview.');
1247
- if (preview.contentDigest === binding.contentDigest) {
1496
+ if (preview.contentDigest === expectedLocalDigest(binding)) {
1248
1497
  // A reviewed source-only change (for example JSON whitespace) needs no new hosted
1249
1498
  // revision, but its exact local source manifest becomes the accepted baseline.
1250
1499
  await saveState(root, 'bindings', bindingId, {