Skip to content

Promote tested Agents catalog for Engine v2.5.0 - #1241

Merged
SpicyMarinara merged 1122 commits into
mainfrom
staging
Oct 6, 2026
Merged

SpicyMarinara merged 1122 commits into
mainfrom
staging

Conversation

@SpicyMarinara

Copy link
Copy Markdown
Contributor

Linked issue

Closes #1240

Related: Pasta-Devs/Marinara-Engine#7146 (Engine v2.5.0 release) and #1234 (Quartermaster and Relationship Tracker graduation). This is SpicyMarinara's authorized staging-to-main promotion for the Marinara Engine v2.5.0 release.

Why this change

Stable Engine users read the main catalog. Engine v2.5.0's What's New introduces Quartermaster and Relationship Tracker and the updated Gacha Forge, so the tested staging catalog needs to reach main alongside the Engine release.

What changed

  • Promote staging 533ae29de2281d48661d9219c755f394437029c8 into main, currently a16819a2994070b53e0150122bacf6ed78c58334 (the only main-only commit is the v2.4.6 promotion merge).
  • New on stable (39 packages): Quartermaster 0.1.23 (Engine 2.4.6+) and Relationship Tracker 0.6.2 (Engine 2.4.4+). Both were checked against Engine v2.4.6's catalog and agent schemas, capability API 1.18 and the server and client APIs they call, so stable v2.4.6 users can install them too.
  • Updated: Gacha Forge 1.8.0 → 1.8.12, Noodle 1.2.24 → 1.5.1, Slurp (formerly Slurp Remastered, slurp2) 0.0.15 → 0.3.17, Long-Term Memory 1.3.0 → 1.4.7, World Maps 1.4.2 → 1.5.1, Beholder 1.3.11 → 1.3.12, and patch updates for 20 more packages.
  • Retired from the catalog: Slurp Legacy (slurp), as decided in a98a923. Its artifacts stay, so existing installs keep working, and Legacy backups restore into Slurp.
  • Still staging-only through the preview overlay: Modern Life Sim and the 5e (SRD 5.1) ruleset. Pixelforge stays hidden.

Validation

  • Required checks pass on this PR
  • Install Quartermaster and Relationship Tracker from Download Agents on a stable Engine after promotion

Manual verification

On a stable Engine (v2.4.6, then v2.5.0 after its release), open Agents → Download Agents and confirm Quartermaster and Relationship Tracker are listed and install. Confirm an existing Slurp Legacy install still opens.

🤖 Generated with Claude Code

… is an action with a preview that writes nothing, a plain-words planner on a new Plans budget row, plays that run exactly the previewed steps with one Undo, and Slurp Support proposing Stir cards instead of changing the Creator at once
…d holds products (pitch, price feel, spice fit, look), ten new pre-made parody brands, old ads find their brand by name, export/import carry brands, brand picture draw/store helpers
…e flavour brief as parts, the viewpoint phrase per model family, the tie partners and the posts a purpose points at
…size (read once from the file header), so the client can reserve its frame
…s own ratio between 4:5 and 1.91:1 (feed, dialog, profile, locked, pending slot, shared-post cards), reserved before the picture loads
…lay, suggestions, the deck from the action catalog, Business and Relationships), the ✦ sheet on Creators and posts with the steering card, Support cards in the thread, the own profile's Dashboard sheet instead of Studio, Me instead of More, Start now and chapter moves out of Settings, Generate posts out of Pulse
…R, slice 2): brand/product routes with upload or drawn pictures, deals pick a fitting product by brand words and spice fit, the sponsored post shows the product and knows the brand's voice, a Brand deals pace setting, and the actions list-brands / offer-brand-deal (preview or run, for Stir) / draw-brand-picture
…s with their products (on/off switch, edit, logo and product pictures by upload or the picture assist with Undo, price feel and spice fit), a Brand deals pace control, and the feed ad wears the brand's logo
…ck under the 800-line cap, own sparkle glyph instead of Lucide Sparkles, stir before studio in the saved-view check) and the Studio pins moved on purpose to the Dashboard sheet and the Stir tab (W)
…nder their brand by name, brand switch, rename, delete, export/import with and without brands, spice fit, pace, sponsored beat, the Stir lever and the actions
… went up with its tease/drop and poll/answer chain, what happens, who the Creator was that day, your steering, spice, who it was made with, the picture with the kept viewpoint and what the enhance step changed, cost; the Flowchart and Canvas carry the same cards
…he blurred teaser frame is at least 20rem tall)
…er; pins follow on purpose (route inventory +6 brand routes, AI assist action list +3, the pool test's fake store gets listBrands/saveBrand, deal sources import Garnish through the ads contract)
…(M): the Slurp sparkle for detail bullets (the font had no ✦), facts as label-over-value, where/when/who as facts, a picture line that fits beside its status
…r pinned form (per-file compare: cropped previews, perspective)
…y poll's answer is not shown as your steering, the love-life line is quoted as what Slurp told the Creator, and a step fed by more than two values shows each arrow label only when its value is chosen
…one / Suggestive / Explicit so it fits one row at 390 px
…g-shaped bowl, a narrow neck, a rounded handle, turned 45° as if stirring, with the family ✦) on the centre tab, the sidebar row, the Stir header and box, the profile's Stir button, Creator tools and the post menu; plan cards drop the repeated name line and the refusal chip a note already says; the box examples use first names and never repeat the placeholder
…he tab painted it in its own muted colour, pale pink on pink)
…s ramen (the branding scan reads the word noodle as the old app name) and brand logos and product thumbnails keep the top-centre crop anchor
…dicts, read off the stance the reply is written from (R1-012); Prompt details builds from the reply's own inputs, the same fan, connection, availability, strikes and thread overrides (R1-011)

One helper file (features/messages/slp-thread-stance.ts) now holds the reply's availability, the
fan it answers and its stance; the reply operation, buildSlurpMessagePrompt, the thread and compose
routes and the prompt route all read it. The rise blocker (slurpAdultRiseBlock) and the picture
state block (slurpCreatorStateMediaBlock) sit next to the rules they explain.
…shes, not when its slot is prepared (R1-034)

recordSlurpPromiseKept moves to the opportunity storage (data layer) so the reserve publish loop can
call it with the published post id; the reserve prepare path no longer records it. A discarded
slot therefore no longer counts as a kept promise.
…I-written fan runs, the background profiles and the world dial (R1-116)

The estimate builds the tick's actor weights from the player's Fan Types, passes them with the
funnel stages and the sample's locked posts to the pulse and the world planner, pays tips and
unlocks into income, counts AI-written runs at their ceiling, and applies the world dial. The dial's
rule (slp-scale.ts) moves to shared so the client reads the server's own rule. Tips and Unlocks
get their own tiles; the explanation says what the number now includes.
…ay 40 + 6 per Creator, calls an hour 6 + 1, each job row base + per-Creator from the sim table + 25 % headroom); a budget saved before F keeps only the limits the player changed and gets a one-time note; every claim, the fan-activity plan and the DM retry time use the sized budget; the usage route reports the Creator count (F)
…posts, Creator messages, comment threads, fan DMs for your N Creators, the most text calls, pictures, tokens and a cost example), each limit shows "Grows with your Creators" or "Set by you · recommended N", Use recommended limits; a one-time Pulse note that the budget grew with Open AI budget; clearer row names; en/de/ko/pl (F)
…im table, caps, hand-set limits stay, migration of old defaults and old custom values, the summary numbers, wiring) (F)
…art and Creators options go through locale keys (English; translations come with K) (R1-120 part)

Also rewords the audience estimate note from R1-116 so it keeps naming what it includes.
… the reply, and the photo sheet closes (R1-019 part)

Both photo routes (upload and draw) now return the reply, its status and its typing time through one
helper; a reply that fails is a status, so it can no longer reach the catch that deletes the photo
just stored.
Gunterlie and others added 16 commits October 5, 2026 23:31
… owned

- a failed public image keeps its prompt, so the background retry can draw it again
- the DM transcript checks every post the fan owns, not only the last four
- an opened chat always refetches on mount (marks read, shows replies that arrived meanwhile)
- a cold-profile background fill is dropped after a post action instead of re-adding a deleted post
- search messages memoized so the thread memos hold; owned-post set typed; unused import removed
- stale source assertions updated
Both packages were held in STAGING_ONLY_PACKAGE_IDS for the next Engine
main release. Engine v2.5.0 is that release, so they leave the preview
overlay and join the published v2/v3 lanes along with their release notes.

The dedicated builders rewrote only catalog entries and notes sidecars: the
artifacts, manifests and payloads are byte-identical, so neither version
changes. The catalog documentation links now point at main, the published
count is 39 (24 agents, 15 features), and the README and package guides no
longer call either package staging-only.

Modern Life Sim and the 5e ruleset stay staging-only.

Closes #1233

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…omance per Creator, Stir fixes

- collab posts: the partner's look, bio and identity (under their own disclosure) reach the post
  prompt; their look reaches every collab picture at any level
- Stir: 'End it' works (row levers pass the play filter); an empty preview toasts instead of silence
- Stir: leaving a Support chat returns to Desk, not Stir
- agreed collabs: 'Post it now' (due now + host writes it) and 'Drop it' (off, pair not blocked), on
  the Stir row and in the Collabs panel
- romance per Creator (Settings › Collaborations): off, or only with picked Creators; enforced in the
  couple fit (world, storylines, reunions, suggestions), drama casting and drama couple outcomes; the
  player's own Stir set-up may still force it (+ regressions)
- 'Send a photo': the whole button opens the picker
- chat bubbles and shared-post cards drop their backdrop blur (smoother long threads)
- one scale everywhere: Clean · Flirty · Suggestive · Explicit (Clean = picture level none), one shared
  control for the Slurp-wide default (Settings › Spice), Content rules and the Stir sheet
- Settings › Spice holds default level, Language (soft/frank/dirty), limit, taste and nevers
- Writing keeps only the house style text; the Mild/Steamy/Explicit presets and the picture level leave it
- the old presets' word lists became the Language line in post and chat prompts (dirty words only
  where nudity is allowed); post level stays slurpPostLevelInstruction
- one-time migration: a shipped preset becomes the house style text + its language (mild → soft,
  steamy/explicit → dirty); an edited guidance text is never touched
- steering route accepts Clean and answers the Slurp-wide level for 'Use Slurp-wide'
…-relationship-tracker

chore(catalog): publish Quartermaster and Relationship Tracker to stable
…mance vs player, safer migration

- collab partners reach nude/explicit pictures only through their own spice check again
- Post it now: only an agreed collab, one post in flight per collab
- romance settings apply between Slurp-run Creators only (player crushes and steers unaffected)
- language migration writes the guidance first; edited texts keep their own words (frank/soft/dirty)
- Settings › Spice default level can go back to Shipped
- 0.3.17 changelog and release notes
… queue, safer fills

- a failed steering read means no romance (fail closed), not permission
- couple roles cast earlier (situation, previous stage) are held to the romance settings
- drama questions are no longer held back by a scene: the deadline would answer them unseen
- the language migration runs inside the spice write queue (no lost taste or PATCH), no deadlock
- the romance control saves only from the loaded value
- a cold profile's background fill stops once nobody shows the profile
feat(slurp2): 0.3.17 — one spice system, romance per Creator, collab and Stir fixes, speed
…s instead of forking local identities (#1237)

* fix(long-term-memory): 1.4.5 — review short names for known characters instead of forking local identities (#1225)

A short form of a known character or persona name ("Alex" for "Alex Rivera") had no exact or alias match, so extraction forked a duplicate `local_character:` subject and split the character's and the relationship's memories across two identities.

Automatic binding now happens only on an exact full name, an explicit alias, a trusted subject key, or a choice the user already saved. When a short or partial name relates to exactly one trusted character or persona, the candidate waits in the Review Queue with per-participant bind-existing, different-character (Roleplay only), and skip choices instead of being bound by first name or forked. Two trusted subjects sharing a first name stay ambiguous and are never merged. Decisions are keyed to the chat or group family, reused by later extractions in every mode, and round-trip through backup and restore. Recovered content becomes a pending draft that only the normal review/apply path can write; it never renames an existing memory or replaces another pending proposal.

Saved decisions are listed per source and deleted with the ordinary rejected-suggestion delete, which also removes a still-pending recovery draft in the same journal; an accepted draft is left alone.

Preserved: exact-name and explicit-alias binding, Roleplay-only local identities, scope isolation, the default pending-only rejected list, and `DELETE` returning `{deleted:false}` for an id that is not present.

Rebuilt manifest, bundle, artifact, catalog, and notes from source. Proof in the PR.

* fix(long-term-memory): give recovery drafts their own id (#1225)

A recovery draft reused the rejected-suggestion id. The suggestion id is derived from a fingerprint, so re-extracting the same candidate recreates the same id, while the older draft stays on disk whenever it is not pending: a newer extraction supersedes it, or it was already accepted. Re-resolving that candidate then failed forever with `ltm_identity_draft_conflict` ("A recovery draft with this ID already exists."), which the delete-a-saved-choice flow makes reachable.

The draft now gets a fresh `randomUUID()` for both its id and its operationId, and the resolution's `draftId` keeps pointing at it. The guard that detected the collision is removed, since a fresh id cannot collide and nothing referenced its error code.

Regression: a superseded recovery draft no longer blocks re-resolving the same re-extracted candidate. Rebuilt manifest, bundle, artifact, and catalog from source.
…-only instead of failing the import (#1226) (#1238)

Extraction created every new note with all selected availability modes. A new local character subject with
Conversation or Game selected therefore failed the Roleplay-only note validator, and the whole source failed.

New local character notes are now created with Roleplay only and a `local_character_restricted_to_roleplay`
warning. When Roleplay is not selected, those units are dropped before event-graph closure with a
`local_character_requires_roleplay` diagnostic and are counted as validation rejections. The rest of the
source is still proposed. The Roleplay-only validator is unchanged, and trusted character and persona subjects
keep every selected mode.

Regression: local-characters covers both cases plus trusted and persona subjects. Rebuilt manifest, bundle,
artifact, catalog, and notes from source.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…odes; show extraction and retry modes (#1227) (#1239)

Re-extract now sends the current availability selection, and the route saves
it on the source note (after request validation, and only when it changed),
keeping the previous extraction mode so a narrower selection does not fail as
not enabled. Import results carry extractionMode, so "Imports as" shows the
extraction mode and lists every availability mode. "Retry failed" still
repeats the original attempt and now shows the modes it will use. Re-extract
buttons are disabled until availability settings load.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 6, 2026

Copy link
Copy Markdown

Walkthrough

Warning

Review details and warnings were omitted to fit the comment limit.

@github-actions github-actions Bot added docs ci packages Agent package sources and manifests artifacts Generated downloadable package artifacts catalog Official catalog and package schemas build Build scripts, snapshots, and validation labels Oct 6, 2026
@SpicyMarinara SpicyMarinara self-assigned this Oct 6, 2026
Records the v2.4.6 promotion merge (#873) on staging so the staging-to-main
promotion (#1241) is up to date. No files change.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…-v250

Sync main into staging before the v2.5.0 promotion
@SpicyMarinara
SpicyMarinara merged commit e816c5b into main Oct 6, 2026
16 of 22 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

artifacts Generated downloadable package artifacts build Build scripts, snapshots, and validation catalog Official catalog and package schemas ci docs packages Agent package sources and manifests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Promote Agents catalog to main for Engine v2.5.0

5 participants