Skip to content

Composer: toggle type badges, edit-mode media adding, inline URL adder, 📦 Things rename - #496

Merged
lopugit merged 6 commits into
developfrom
claude/post-editor-media-badges-7b2acd
Aug 31, 2026
Merged

Composer: toggle type badges, edit-mode media adding, inline URL adder, 📦 Things rename#496
lopugit merged 6 commits into
developfrom
claude/post-editor-media-badges-7b2acd

Conversation

@lopugit

@lopugit lopugit commented Aug 31, 2026

Copy link
Copy Markdown
Owner

Composer: toggle type badges, edit-mode media adding, inline URL adder, 📦 Things

Four owner requests in one composer pass:

1. Media is addable when editing a post again

Edit mode previously replaced the upload panel with a read-only reorder gallery because binding was create-only. Now:

  • ServerPATCH /api/v1/things { id, attachmentIds } is upgraded from a pure-permutation reorder to a sync: the list is the full desired display order. It must still include every bound id (removals stay a delete operation and get the 409), and it may append newly uploaded ready drafts, which are bound into the post via the existing bindReadyAttachmentsForPurpose fences (owner-only, ready, purpose-matched, unexpired) inside a home-Mongo transaction. A new owner-fenced post-family target check means an edit can never bind the editor's media onto someone else's thread. Pure permutations keep the old non-transactional idempotent stamp path.
    • planAttachmentSync in attachmentCore.ts (+ unit tests), syncBoundTargetAttachments in attachmentStore.ts, syncReadyAttachmentsForTarget service wrapper, PATCH route wired before updateThing so the returned projection and boundAttachmentPresence crystal validation both see the new media.
    • Rich-comment edits bind purpose comment drafts (composer mints the matching purpose from editPost.thingtime).
  • Client — the edit composer mounts the live AttachmentComposer next to the reorder gallery; Save sends attachmentIds = [reordered bound set, …new uploads] whenever either changed, and markCommitted now runs for edits too so unmount cleanup can't delete just-bound media.

2. Type badges are additive toggles

Text is the always-on base. Photos, Marketplace, and Things each switch their field group on top without deselecting the others; clicking Text switches every extra group off. The stored crystal type is derived (things > marketplace > photos-with-visual-media > text), so the server vocabulary and feed rendering are unchanged — a files-only or empty media panel still saves as a valid text post. Text-only posts no longer show the media panel until Photos is toggled on. The old Thingtime-tab inner Photos/Marketplace buttons are gone; the top badges now control those groups everywhere.

3. 🌀 Thingtime → 📦 Things

POST_TYPE_META rename, so the composer badges, feed filter chips, and algorithm interest labels all follow; composer eyebrows updated to match.

4. URL adder below the upload grid, with an Add button

LinkedImageGallery gains an inline variant used by the composer: a single always-visible URL input + Add button below the media grid. Each valid URL becomes a preview tile and the field clears for the next one; Enter adds too, and pasting several whitespace-separated URLs adds them all. Other gallery usages keep the existing disclosure/textarea flow.

Docs / tests

  • apiDocs.ts PATCH + attachments-completion entries updated for the sync contract.
  • TESTING.md: toggle-badge, URL-adder, and edit-add-media checklist items; stale "no upload panel on edit" item rewritten.
  • Unit: planAttachmentSync suite, postCreate sync-kind tests. test:attachments (125) and test:things (20) green.

Verification

  • Vite build:client green; targeted ESLint green (full-project tsc has known pre-existing failures).
  • Live worktree dev stack (PM2, port 13510), desktop + 375px mobile: toggle combos (Text+Photos, Things+Marketplace, Text reset), post create with 3 linked images (derived type image), edit → add a 4th linked image → save → card shows 4, Things bottom-sheet opens/closes, no horizontal overflow.
  • Limitation: the local stack has no S3 credentials, so upload-complete → edit-save binding was exercised at the unit level only (same limitation as PR feat(attachments): drag/drop sort ordering for post media & files (create + edit) #306); needs the TESTING.md preview pass. The test user's upload scope also wasn't admin-approved locally, so the edit-mode panel rendered its approval card in screenshots — the panel itself is the same component as create mode.

🤖 Generated with Claude Code

…inline URL adder, 📦 Things rename

- Post-type badges are now additive toggles: Text is the always-on base;
  Photos, Marketplace, and Things each switch their field group on top
  without deselecting the others (clicking Text switches them all off).
  The stored crystal type is derived from the live toggles
  (things > marketplace > photos-with-visual-media > text), so the server
  vocabulary is unchanged. The media panel only shows when Photos is on.
- Edit mode mounts the live upload panel again: PATCH /api/v1/things
  attachmentIds is upgraded from a pure-permutation reorder to a sync —
  the full desired display order that must cover every bound id (removals
  still rejected) and may append newly uploaded ready drafts, which are
  bound with the same owner/purpose fences create-time binding uses
  (plus an owner-fenced post-family target check so an edit can never
  deface another owner's thread).
- The linked-image URL adder moves below the upload grid as a single
  inline input with an Add button: each valid URL becomes a grid tile and
  the field clears for the next one (Enter works, multi-URL paste splits).
- 🌀 Thingtime badge renamed to 📦 Things (POST_TYPE_META, composer
  eyebrows, feed filter chips follow).

Verified: attachments + things unit suites green (planAttachmentSync +
sync-kind tests added), Vite client build green, live browser pass on the
worktree dev stack at desktop + 375px mobile (toggle combos, URL adder,
create, edit-add-linked-image, Things sheet). Upload binding on edit is
unit-tested; local stack has no S3, so the upload-complete-then-save flow
needs a preview/prod pass per TESTING.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Aug 31, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
thingtime Ready Ready Preview Aug 31, 2026 12:39pm
thingtime (develop) Ready Ready Preview Aug 31, 2026 12:39pm

Request Review

@github-actions
github-actions Bot temporarily deployed to develop-pr-496 August 31, 2026 05:28 Destroyed
@github-actions

github-actions Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

🧹 Develop S3 preview removed

The PR-specific alias and every workflow-created develop deployment were removed when this PR closed.

The ordinary generated Vercel Preview remains available on the shared development runtime.

@github-actions github-actions Bot added lopu: mergeable The PR branches can currently be merged without conflicts lopu: overlapping files This PR changes files also changed by another open PR labels Aug 31, 2026
@github-actions

github-actions Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Lopu repository review

Lopu reviewed this PR against develop as Thingtime's principal PR and repository manager. Using Claude Opus 5.

Lopu found no justified local change to publish from this review pass.

The model did not leave a detailed report; inspect this workflow run for the Lopu session log.

View Lopu workflow run

github-actions Bot added a commit that referenced this pull request Aug 31, 2026
…ding, inline URL adder, 📦 Things rename
github-actions Bot added a commit that referenced this pull request Aug 31, 2026
…ding, inline URL adder, 📦 Things rename
…-visible pending; hidden-tolerant PATCH sync

Round 2 of the composer overhaul (owner QA feedback on PR #496):

- URL media now mints real linked-attachment things (POST
  /api/v1/attachments/link): attachmentLinked root marker, linked/<id>
  object key, zero object bytes, url-bearing crystal with a DECLARED render
  hint, ready at mint, moderation stamped 'skipped'. Accounting treats the
  shape as a closed variant (partial/forged combinations fail closed); only
  doc bytes hit quota; the server never fetches the URL. Duplicate URLs are
  deliberately allowed. Rate-limit row, import-map entry, and apiDocs entry
  (docs registry = Nitro registration + capability feature) included.
- Lifecycle: cleanupClaimedDoc takes a lazy S3 getter and short-circuits
  linked docs straight to the transactional remove+refund, so delete/cancel/
  reap/cascade/session-sweep work without S3; the content endpoint 302s
  linked ids to their external URL as a renderer fallback; the analyzer
  skips linked docs.
- Composer: the add-by-URL input lives INSIDE the Media & files panel below
  the grid (Add button; clears per add; probe demotes extensionless URLs to
  file when they fail to load as images); linked entries share the uploads
  list so reorder/snapshot/markCommitted/remove behave identically; the
  panel stays usable before upload approval. Legacy crystal.images seed as
  local linked tiles on edit and migrate to linked attachments on save; new
  posts never write crystal.images. LinkedImageGallery removed from the
  composer.
- Renderers (card gallery, lightbox, media page, reorder gallery, layout
  canvas) use crystal.url directly for linked media; linked file rows and
  downloads open the original URL in a new tab.
- Moderation fixes for the vanished-image + edit-409 report: owners now see
  their own PENDING attachments (pending: true → "Checking…" badge; blocked
  stays hidden for all), and planAttachmentSync exempts moderation-hidden
  bound ids from the cover requirement, re-stamping them after the requested
  order inside the bind transaction.

Verified: full test:unit green (new suites: linked crystal canonicalization,
closed-union accounting, ownerView pending, hidden-tolerant sync, extension
table client/server pin), build:client green, live E2E on the worktree stack
(duplicates, pdf file-row + download, probe path, post render from external
URLs, edit-add-URL save via PATCH sync, legacy 4-image migration, linked
mint/delete with no S3 configured, desktop + 375px mobile). Detailed note in
PRs/496-claude-post-editor-media-badges-7b2acd--*.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions
github-actions Bot temporarily deployed to develop-pr-496 August 31, 2026 07:08 Destroyed
@lopugit

lopugit commented Aug 31, 2026

Copy link
Copy Markdown
Owner Author

Round 2 — URL media unified into attachments + the edit-save/vanishing-image fixes (a6409b8)

All five QA items from testing are addressed:

1. URL media now IS the media/attachments system. Adding a URL mints a real linked attachment (POST /api/v1/attachments/link, new endpoint) that lands in the same grid/file list as uploads — same tiles, drag-reorder, annotate, remove, layout modes, lightbox. No separate section anymore; the URL input + Add button live inside the Media & files panel below the grid and clear after each add. Linked media consumes no storage quota and works even before upload approval.

2. Duplicate URLs are allowed. Every Add mints its own attachment — same URL twice = two tiles (verified live).

3. The edit/save failure is fixed — root cause found. Uploaded images get a moderation: pending stamp while analysis runs; projections hid pending media from everyone including you, while the save-time bound-set check still counted it → guaranteed “Post did not go through” 409, and…

4. …that same hiding is why your uploaded picture “disappeared”. Now: you always see your own pending media with a small “Checking…” badge (card, file rows, edit composer); other viewers see it once analysis clears. The save path additionally tolerates moderation-hidden bound ids, so that 409 can’t recur even from a stale tab.

5. Image-vs-file detection with working download. File-extension URLs (.pdf, .zip, .md…) render as file attachments with the download icon (opens the original URL — cross-origin ignores the HTML download attribute, so it opens in a new tab); image/video extensions become media tiles; extensionless URLs are probed in the browser and demoted to a file row only if they fail to load as an image. A file extension can never claim a visual kind (server-enforced).

Bonus: editing an old post that still has legacy URL-images migrates them into linked attachments on save — everything renders through one gallery from then on.

Verified: full test:unit green (new suites for the linked crystal, closed-union accounting, owner-visible pending, hidden-tolerant sync, and a client/server extension-table pin), build:client green, and live E2E on the worktree stack: duplicates, pdf file-row + download, probe path, posting, edit-add-URL → “Post updated ✏️”, legacy 4-image migration, mint/delete with no S3 configured, desktop + 375px mobile. Real-byte upload E2E still needs an S3-enabled environment (this preview) — TESTING.md has the checklist, including the new “Checking…” moderation window. Detailed note: PRs/496-claude-post-editor-media-badges-7b2acd--toggle-badges-linked-attachments-edit-media.md.

🤖 Generated with Claude Code

…atomic S3 failure, name round-trip, mint compensation, seed cap)

Confirmed by the 12-agent adversarial review of a6409b8:

- The content endpoint now 404s linked attachment ids instead of 302ing to
  crystal.url — the redirect made the first-party content URL an open
  redirect to attacker-chosen origins (CWE-601). Renderers always use
  crystal.url directly, so nothing needed the fallback.
- cleanupClaimedDoc resolves S3 BEFORE the destructive deleting claim for
  non-linked docs (attachmentLinked is immutable, so the pre-claim doc is
  authoritative): an unconfigured/broken S3 fails atomically again instead
  of half-deleting a mixed linked+uploaded cascade and stranding uploaded
  docs in an endless deleting retry loop. Linked docs still need no S3.
- linkedAttachmentNameForUrl re-validates after the 255-char slice (trim,
  control chars, well-formed unicode; falls back hostname → 'linked-media')
  so exotic basenames can no longer produce a non-canonical crystal that
  fails the mint. Round-trip pin test added.
- A linked mint whose tile was removed mid-flight now fires a compensating
  delete instead of orphaning the draft until the 24h reap.
- Legacy image seeds cap at the remaining attachment slots so a >25-media
  legacy post cannot 400-loop on every save.

Accepted-by-design (documented in the PR note): linked mints skip the beta
upload-approval gate and byte moderation — exact parity with the legacy
crystal.images flow they replace; pre-hygiene URLs that fail today's
canonicalizer drop on edit-save exactly as the old composer's client filter
already did.

Verified: test:attachments 134/134 green, lint green, build:client green,
live check — content?id=<linked> now 404s while the card keeps rendering
from the external URL.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@lopugit

lopugit commented Aug 31, 2026

Copy link
Copy Markdown
Owner Author

Adversarial review round (post-push hardening, 1bec66c)

Ran a 12-agent adversarial review workflow over the linked-media commit; 9 findings, 8 confirmed. Fixed immediately:

  • Open redirect (medium) — the content endpoint briefly 302'd linked ids to their external URL, which would let anyone launder an arbitrary link through the first-party thingtime.com/api/v1/attachments/content?id=… URL. Removed: linked ids now 404 there; renderers always use the attachment's url directly, so nothing changes visually.
  • No-S3 delete atomicity (medium) — S3 resolves before the destructive delete claim again for uploaded files, so a deployment without S3 fails post-deletes atomically instead of half-deleting mixed linked+uploaded media.
  • Un-mintable exotic URLs (medium) — over-long/emoji-boundary basenames could make the mint fail; the derived name now always survives the sanitizer (pin test added).
  • Mid-mint removal orphan + legacy seed cap (low) — compensating delete when a tile is removed while its mint is in flight; legacy image seeds cap at the free attachment slots.

Two accepted-by-design items flagged for your call (detailed in PRs/496-…md): linked mints intentionally skip the beta upload-approval gate and byte moderation — exact parity with the legacy image-URL flow they replace. If you'd rather gate them, it's a one-line requireUploadPermission: true on the link route.

134/134 attachment tests, full unit suite, lint and client build all green.

🤖 Generated with Claude Code

@github-actions
github-actions Bot temporarily deployed to develop-pr-496 August 31, 2026 07:42 Destroyed
github-actions Bot added a commit that referenced this pull request Aug 31, 2026
…ding, inline URL adder, 📦 Things rename
@github-actions
github-actions Bot temporarily deployed to develop-pr-496 August 31, 2026 08:52 Destroyed
@github-actions github-actions Bot added lopu: conflicting GitHub reports merge conflicts for the current PR snapshot lopu: queued The current PR snapshot is waiting in Lopu's PR-management queue and removed lopu: mergeable The PR branches can currently be merged without conflicts labels Aug 31, 2026
@github-actions

github-actions Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

🤖 Lopu live PR update

Status: ↪️ Resolver finished; a newer conflict remains

Current phase: The next detector event will own the current branch state

Estimated completion: Done — no further active-work ETA.

Time conversion (UTC source)

Moment UTC Los Angeles Melbourne
Updated 2026-08-31 09:37 UTC (UTC+00:00) 2026-08-31 02:37 PDT (UTC-07:00) 2026-08-31 19:37 AEST (UTC+10:00)

Los Angeles and Melbourne use their real IANA time zones, so PDT/PST and AEST/AEDT offsets change automatically.

Lopu queue and PR pulse

Scope Metric Count
Repository Open PRs 38
Repository Conflicting 15
Repository Out-of-date with target 0
Repository GitHub state unknown 0
Repository Part of an open stack 2
Repository Touch files changed by another open PR 38
Repository Target a non-root branch without an open parent PR 0
This resolver batch Admitted snapshots 1
This resolver batch Currently resolving 0
This resolver batch Waiting 0
This resolver batch Finished 1

Related PR context

  • Stack: No open parent or child PR currently links to this branch.
  • Target: develop is a repository root/integration branch.
  • Changed-file overlap: 18 changed files are also touched by #10, #54, #57, #68, #72, #74, #79, #92, #93, #101, #105, #107, +18 more.

Exact branch pair: developclaude/post-editor-media-badges-7b2acd.

Timeline

  • 08:53 UTC — Detected conflicts between develop and claude/post-editor-media-badges-7b2acd; assigning the exact snapshot to the resolver queue.
  • 08:54 UTC — The immutable head/base selection is reserved; waiting for its worker job to enter the serialized lane.
  • 08:54 UTC — The immutable head/base selection is reserved; waiting for its worker job to enter the serialized lane.
  • 08:55 UTC — Still safely queued behind earlier admitted Lopu work; no duplicate resolver was spawned.
  • 08:55 UTC — Still safely queued behind earlier admitted Lopu work; no duplicate resolver was spawned.
  • 09:06 UTC — 10-minute check-in: still working — Waiting in Lopu's serialized PR-management lane.
  • 09:06 UTC — 10-minute check-in: still working — Waiting in Lopu's serialized PR-management lane.
  • 09:16 UTC — 10-minute check-in: still working — Waiting in Lopu's serialized PR-management lane.
  • 09:16 UTC — 10-minute check-in: still working — Waiting in Lopu's serialized PR-management lane.
  • 09:26 UTC — 10-minute check-in: still working — Waiting in Lopu's serialized PR-management lane.
  • 09:35 UTC — The worker published its verified result, but GitHub reports the latest PR state as conflicting again; Lopu will rediscover it automatically.
  • 09:36 UTC — Still safely queued behind earlier admitted Lopu work; no duplicate resolver was spawned.
  • 09:37 UTC — The worker published its verified result, but GitHub reports the latest PR state as conflicting again; Lopu will rediscover it automatically.

Technical run details — optional; this comment is the human-facing source of truth.

@github-actions

github-actions Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

🤖 Lopu live PR update

Status: 🛠️ Lopu is actively working

Current phase: Merging the target branch into the PR branch

Estimated completion: around 12:50 UTC (~14 minutes; adjusted as work moves).

Next automatic check-in: within 10 minutes, or sooner when the phase changes. You can stay on this PR; there is no need to find the Actions run.

Time conversion (UTC source)

Moment UTC Los Angeles Melbourne
Updated 2026-08-31 12:36 UTC (UTC+00:00) 2026-08-31 05:36 PDT (UTC-07:00) 2026-08-31 22:36 AEST (UTC+10:00)
Estimated finish 2026-08-31 12:50 UTC (UTC+00:00) 2026-08-31 05:50 PDT (UTC-07:00) 2026-08-31 22:50 AEST (UTC+10:00)

Los Angeles and Melbourne use their real IANA time zones, so PDT/PST and AEST/AEDT offsets change automatically.

Lopu queue and PR pulse

Scope Metric Count
Repository Open PRs 34
Repository Conflicting 27
Repository Out-of-date with target 0
Repository GitHub state unknown 0
Repository Part of an open stack 0
Repository Touch files changed by another open PR 35
Repository Target a non-root branch without an open parent PR 0
This resolver batch Admitted snapshots 1
This resolver batch Currently resolving 1
This resolver batch Waiting 0
This resolver batch Finished 0

Related PR context

  • Stack: No open parent or child PR currently links to this branch.
  • Target: develop is a repository root/integration branch.
  • Changed-file overlap: 18 changed files are also touched by #10, #54, #57, #68, #72, #74, #79, #92, #93, #101, #105, #107, +15 more.

Exact branch pair: developclaude/post-editor-media-badges-7b2acd.

Timeline

  • 11:33 UTC — Detected conflicts between develop and claude/post-editor-media-badges-7b2acd; assigning the exact snapshot to the resolver queue.
  • 12:21 UTC — The immutable head/base selection is reserved; waiting for its worker job to enter the serialized lane.
  • 12:23 UTC — Still safely queued behind earlier admitted Lopu work; no duplicate resolver was spawned.
  • 12:25 UTC — Preparing the isolated repository environment.
  • 12:26 UTC — Merging the target branch into the PR branch.
  • 12:36 UTC — 10-minute check-in: still working — Merging the target branch into the PR branch.

Technical run details — optional; this comment is the human-facing source of truth.

github-actions Bot added a commit that referenced this pull request Aug 31, 2026
…ding, inline URL adder, 📦 Things rename
github-actions Bot added a commit that referenced this pull request Aug 31, 2026
…ding, inline URL adder, 📦 Things rename
github-actions Bot added a commit that referenced this pull request Aug 31, 2026
…ding, inline URL adder, 📦 Things rename
@github-actions

Copy link
Copy Markdown
Contributor

🤖 Lopu is resolving this PR — work started at 12:24 UTC.

Expected to finish around 12:32 UTC (most updates still land in 3-8 minutes; the hosted-runner ceiling is 360). On success the target branch is merged into this PR branch, Graphify is rebuilt, and this status comment updates with the result — no manual action is needed meanwhile.

Live status

…gallery-search

# Conflicts:
#	remix/CHANGELOG.md
#	remix/app/components/Feed/PostComposer.tsx
@lopugit
lopugit merged commit 99e7e9c into develop Aug 31, 2026
22 checks passed
@github-actions github-actions Bot removed lopu: conflicting GitHub reports merge conflicts for the current PR snapshot lopu: overlapping files This PR changes files also changed by another open PR lopu: queued The current PR snapshot is waiting in Lopu's PR-management queue labels Aug 31, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Promoted to main in #517.

An earlier run stood aside on this PR; that verdict no longer applies.

@github-actions

Copy link
Copy Markdown
Contributor

✅ Promotion #517 has verified source lineage at current develop tip 99e7e9cb9672056f5d5f5cba9c590cc390d41bd1.

@lopugit

lopugit commented Aug 31, 2026

Copy link
Copy Markdown
Owner Author

🚀 Promotion PR for main opened: #517

github-actions Bot added a commit that referenced this pull request Aug 31, 2026
…e media adding, inline URL adder, 📦 Things rename (#496)
github-actions Bot added a commit that referenced this pull request Aug 31, 2026
…e media adding, inline URL adder, 📦 Things rename (#496)
github-actions Bot added a commit that referenced this pull request Aug 31, 2026
…e media adding, inline URL adder, 📦 Things rename (#496)
github-actions Bot added a commit that referenced this pull request Aug 31, 2026
…e media adding, inline URL adder, 📦 Things rename (#496)
github-actions Bot added a commit that referenced this pull request Aug 31, 2026
…e media adding, inline URL adder, 📦 Things rename (#496)
github-actions Bot added a commit that referenced this pull request Sep 1, 2026
…e media adding, inline URL adder, 📦 Things rename (#496)
github-actions Bot added a commit that referenced this pull request Sep 1, 2026
…e media adding, inline URL adder, 📦 Things rename (#496)
lopugit added a commit that referenced this pull request Sep 1, 2026
…-badges-7b2acd--to-main

[Promote] Composer: toggle type badges, edit-mode media adding, inline URL adder, 📦 Things rename (#496)
@lopugit

lopugit commented Sep 1, 2026

Copy link
Copy Markdown
Owner Author

🤖 Promotion conflict resolution was queued automatically for promote/pr-496-post-editor-media-badges-7b2acd--to-main at exact base main (53c461c71047f1ad6bab6b952b7c7f22dbd5f49a).

Conflicted source paths: remix/CHANGELOG.md, remix/app/api/utils/things/emojiSearch.ts, remix/app/components/Attachments/MediaLightbox.tsx, remix/app/components/Attachments/attachmentUiCore.test.ts, remix/package.json.

The trusted worker will reconstruct, verify, publish, and attest the review branch; no manual branch update is needed.

⚠️ Source lineage is review-required-ambiguous; the resulting PR will carry source-lineage-unverified and must be reviewed for restoration intent.

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

🔄 Promotion state moved or could not be revalidated while this run was active; the promoter is replanning safely.

Branch: promote/pr-496-post-editor-media-badges-7b2acd--to-main · base: main at 4adda985252632f2c1d0738b3e6bf84faf874af8 · plan: 87068beaef78f53aa3cd7cdc39f3fbb8c702b349e75ae8b1fbc2d7281ab62705.

No pause was recorded because develop, the base, or the reserved branch no longer matches this transient run snapshot. A fresh promoter run was requested to re-derive authority and continue. Review the run.

@lopugit

lopugit commented Sep 1, 2026

Copy link
Copy Markdown
Owner Author

🤖 Promotion conflict resolution was queued automatically for promote/pr-496-post-editor-media-badges-7b2acd--to-main at exact base main (f56959a73c6514664b3e2cdd59f38333c4684ead).

Conflicted source paths: remix/CHANGELOG.md, remix/app/api/utils/things/emojiSearch.ts, remix/app/components/Attachments/MediaLightbox.tsx, remix/app/components/Attachments/attachmentUiCore.test.ts, remix/package.json.

The trusted worker will reconstruct, verify, publish, and attest the review branch; no manual branch update is needed.

⚠️ Source lineage is review-required-ambiguous; the resulting PR will carry source-lineage-unverified and must be reviewed for restoration intent.

@lopugit

lopugit commented Sep 1, 2026

Copy link
Copy Markdown
Owner Author

🤖 Promotion conflict resolution was queued automatically for promote/pr-496-post-editor-media-badges-7b2acd--to-main at exact base main (fc5b14d3cf24b9a1f105cab9b722e71aa0534527).

Conflicted source paths: remix/CHANGELOG.md, remix/app/api/utils/things/emojiSearch.ts, remix/app/components/Attachments/MediaLightbox.tsx, remix/app/components/Attachments/attachmentUiCore.test.ts, remix/package.json.

The trusted worker will reconstruct, verify, publish, and attest the review branch; no manual branch update is needed.

⚠️ Source lineage is review-required-ambiguous; the resulting PR will carry source-lineage-unverified and must be reviewed for restoration intent.

@lopugit

lopugit commented Sep 1, 2026

Copy link
Copy Markdown
Owner Author

🤖 Promotion conflict resolution was queued automatically for promote/pr-496-post-editor-media-badges-7b2acd--to-main at exact base main (4adda985252632f2c1d0738b3e6bf84faf874af8).

Conflicted source paths: remix/CHANGELOG.md, remix/app/api/utils/things/emojiSearch.ts, remix/app/components/Attachments/MediaLightbox.tsx, remix/app/components/Attachments/PostAttachments.tsx, remix/app/components/Attachments/attachmentUiCore.test.ts, remix/app/components/Feed/PostComposer.tsx, remix/package.json.

The trusted worker will reconstruct, verify, publish, and attest the review branch; no manual branch update is needed.

⚠️ Source lineage is review-required-ambiguous; the resulting PR will carry source-lineage-unverified and must be reviewed for restoration intent.

@lopugit
lopugit deleted the claude/post-editor-media-badges-7b2acd branch September 3, 2026 08:57
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.

1 participant