Skip to content

Commit dcf61bc

Browse files
committed
fix(metadata-protocol): pin the draft save's D9.9 address on a real kernel across a boot
Claude-Session: https://claude.ai/code/session_01VXa74mKHXdwRyYmB3TCuo1 Co-authored-by: Claude <noreply@anthropic.com>
1 parent 0719d47 commit dcf61bc

2 files changed

Lines changed: 422 additions & 10 deletions

File tree

‎packages/metadata-protocol/src/protocol.ts‎

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19784,19 +19784,17 @@ export class ObjectStackProtocolImplementation implements
1978419784
// or discard naming none resolves by the rows the earlier steps
1978519785
// leave. With the rows and the package drafts gone, the address is
1978619786
// the package-unbound draft (`packagelessDraftAddress`).
19787+
// Every step is a request, in order, spelled as the row deletes
19788+
// above are, so one row and two drafts fit the REST message bound.
1978719789
const drafts = [...new Set(state.strandedDrafts ?? [])].sort();
19788-
const list = (pkgs: readonly string[]) => pkgs.map((pkg) => `'${pkg}'`).join(', ');
19789-
const what = [
19790-
...(rows.length > 0 ? [`delete its row${rows.length > 1 ? 's' : ''} bound to ${list(rows)}`] : []),
19791-
...(drafts.length > 0 ? [`discard its draft${drafts.length > 1 ? 's' : ''} bound to ${list(drafts)}`] : []),
19792-
].join(' and ');
1979319790
const steps = [
19794-
...rows.map((pkg) => `DELETE ${path}?package=${pkg}`),
19795-
...drafts.map((pkg) => `DELETE ${path}?state=draft&package=${pkg}`),
19796-
].join(', then ');
19791+
...rows.map((pkg) => `?package=${pkg}`),
19792+
...drafts.map((pkg, i) => `?state=draft&package=${pkg}${i === 0 ? ' (the draft discard)' : ''}`),
19793+
];
1979719794
message = `A draft save naming no package of object '${name}' writes a draft bound to '${q}', which no `
19798-
+ 'publish can serve: the object is served by its definition bound to no package. First '
19799-
+ `${what} (REST: ${steps}), then send this save again: it then writes the package-less draft.` + tail;
19795+
+ 'publish can serve: the object is served by its package-less definition. First '
19796+
+ `DELETE ${path}${steps.join(', then ')}, then send this save again: it writes the package-less `
19797+
+ 'draft.' + tail;
1980019798
} else if (rows.length > 0 && state.namedNoPackage) {
1980119799
// A save naming no package is addressed to the one binding present.
1980219800
message = `A save naming no package of object '${name}' is addressed to its stored definition bound to `

0 commit comments

Comments
 (0)