Skip to content

Observe x-web replies.create as a parent-bound CreateTweet contract - #100

Closed
0thernet wants to merge 2 commits into
mainfrom
cursor/x-web-replies-create-after-99-afe3
Closed

Observe x-web replies.create as a parent-bound CreateTweet contract#100
0thernet wants to merge 2 commits into
mainfrom
cursor/x-web-replies-create-after-99-afe3

Conversation

@0thernet

Copy link
Copy Markdown
Member

x-web replies.create@1 is now an observed R3 text-reply contract. A confirmed wrench invoke x-web replies.create --auth x-main publishes exact text to one exact parent without opening the X composer.

This is the descendant replay after #99. Closed #94, #96, and #98 stay on their original bases. This branch starts from current main (3a8221d, #99) and replays the two reply-contract commits.

What changed

The reserved capture-required reply already sat on the same reviewed CreateTweet mutation as posts.publish@4. This PR makes that path executable and complete:

  • Bind reply.in_reply_to_tweet_id to the confirmed post_id
  • Reject quote IDs, media, and made_with_ai / content-disclosure fields
  • Admit one CreateTweet dispatch and retain the response-bound reply ID
  • Independently read that exact reply through TweetResultByRestId
  • Fail closed if CreateTweet or readback shows a Made with AI sparkle
  • Reconcile an indeterminate reply from the retained target the same way as posts.publish

posts.quote stays capture-required. No composer fallback.

Why this is observed, not a completeness flip

posts.publish was graduated when the code-owned CreateTweet request, response binding, durable accepted-target evidence, and fail-closed TweetResultByRestId readback were executable and covered by deterministic tests. Transaction-header bootstrap is already reviewed on that path.

replies.create now uses that same executable contract plus parent binding. The registry flip matches that standard: the operation is implemented in executeXWebOperation, not reserved behind the capture-required gate.

A separate live reply fixture is not required to mark this observed, because the mutation, transaction header, and readback are the current posts.publish contract. The new work is the parent-binding variables, response/readback echo of in_reply_to_status_id_str, and unlabeled-copy rules on that reply.

Tests

  • Input validation: required post_id + body, digit parent IDs, no media, no quote IDs, no made_with_ai
  • CreateTweet authorization of the exact reply object and rejection of quote/AI extras
  • Parent and viewer binding on the create response
  • Permalink/id projection after independent readback
  • Sparkle fail-closed on CreateTweet and TweetResultByRestId
  • Read-only recovery of one accepted reply
  • Article-draft upgrade baseline pinned to current x-web 1.14.0

Adapter and package budget

Current x-web is 1.14.0. 1.13.0 is archived unchanged. replies.create remains contract version 1 because the input schema did not change.

Remeasured on this descendant of #99 with bun pm pack --ignore-scripts plus scripts/package-artifact.ts:

  • 1,894,058 packed bytes (limit 2,050,000)
  • 11,115,891 unpacked bytes (limit 11,200,000)
  • 435 files (limit 450)

No ceiling change. #99 did not change the published package payload.

Local check notes

This environment's Node 22.14.0 fails test:package on the inert-root-import guard (fs.promises.readFile via the ESM loader). That is existing environment drift, not this contract. CI Required is the merge gate.

Open in Web Open in Cursor 

cursoragent and others added 2 commits August 29, 2026 19:14
…ract

Graduate the reserved R3 reply route onto the reviewed CreateTweet path used
by posts.publish: bind one exact parent, reject quote IDs, media, and
made_with_ai, retain the response-bound reply ID, and independently read it
back through TweetResultByRestId. A live Made with AI sparkle remains a
failed unlabeled-copy publish, and the composer is never a fallback.

Co-authored-by: ben <0thernet@users.noreply.github.com>
The replies.create observation bumped the current authenticated-web adapter to 1.14.0 and archived 1.13.0. Keep the Article draft upgrade-baseline test on that current manifest.

Co-authored-by: ben <0thernet@users.noreply.github.com>
@vercel

vercel Bot commented Aug 29, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
wrench Ready Ready Preview Aug 29, 2026 7:15pm

Request Review

@0thernet

Copy link
Copy Markdown
Member Author

Closed to preserve the serialized provider → PR78 → editorial → production-control lane. This branch is preserved for later independent review. Wrench policy requires current operation-specific authorized live evidence before replies.create may move from capture-required to observed; posts.publish/CreateTweet evidence alone does not prove reply parent binding and readback. Do not replay or merge this branch into the reserved v0.16.3 candidate without that evidence, exact descendant replay, and package remeasurement.

@0thernet 0thernet closed this Aug 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants