Auto close stale quests older than 30 days with no pr linked - #475
Open
ekwe7 wants to merge 6 commits into
Open
Conversation
- Create lib/renderer/construction.ts to manage the 4-phase animation timeline. - Integrate district.unlocked SSE event listener into components/pixel-city.tsx. - Add scaffolding, grid layout, and structural canvas drawing rules to lib/renderer.ts. - Implement user skip interaction to instantly fast-forward to the celebration phase.
Adds CityAudioEngine (Web Audio API, no deps) with looping day/night ambient beds per district, viewport-weighted spatial mixing, and one-shot event stings for task completion, payments, level-ups, badges, district wins, and agent errors. Ambient loops and stings are procedurally synthesized WAV assets (scripts/generate-audio-assets.mjs) checked into public/audio/. Wires the engine into PixelCity (focus volume per district, AudioContext unlock on click) and the hub's system-event handling, plus a HUD volume/mute control persisted to localStorage with an S keyboard shortcut.
…) unlocked via XP Adds the cosmetic system from the spec: 6 level-gated skins, 5 badge-gated accessories, and an XLM-payable agent color change. - lib/cosmetics.ts: skin/accessory/badge catalog + unlock predicates, single source of truth shared by the renderer, the panel, and the API route - lib/renderer.ts: drawBot now layers skin overlays, equipped accessory glyphs, and a legendary aura/particle trail on top of the base sprite - app/api/agents/[id]/appearance: persists equipped cosmetics server-side (agents are regenerated client-side on reload) and verifies the 0.5 XLM treasury payment on-chain via Horizon before saving a custom color - components/appearance-panel.tsx: new sidebar tab with live preview canvas, locked/unlocked skin and accessory grids, and a Freighter-signed payment flow for color changes - lib/data.ts, lib/types.ts: agents now carry a default AgentAppearance Also fixes two pre-existing bugs that were blocking `next build` for the whole repo: a missing NextResponse import in the passport status route, and a broken relative import path in lib/types-construction.ts. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…idden The preview comment is informational only. On forks/PRs where the target repo's Actions token lacks issue-comment write access (a repo-level Workflow permissions setting, not something fixable from a PR branch), the step was throwing and failing the whole job. Catch and warn instead. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…s, badges, district wins Adds lib/renderer/particles.ts with a ParticleSystem driven by its own requestAnimationFrame loop on a dedicated overlay canvas in PixelCity, so gravity/bounce physics and fades stay smooth independent of the tick-based city redraw. SSE events (task.completed, payment.received, agent.xp, badge.unlocked, district.unlocked) now spawn matching particle triggers from OpenStellarHub: XP burst text, payment sparks, level-up starburst with background flash, rarity-colored badge confetti, and staggered district-win fireworks. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements GET /api/cron/close-stale-quests secured with CRON_SECRET. In-progress quests with no PR activity (updatedAt) in 30+ days transition to 'abandoned'; unassigned quests with no applicants older than 30 days transition to 'expired'. Both emit protocol events (quest.abandoned / quest.expired) via the system event bus. Schedule added to vercel.json at midnight UTC daily (0 0 * * *). 14 unit tests cover auth, state transitions, event emission, and the no-op path when all quests are within the 30-day window. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.




closes #232
Description
This PR implements the automated cleanup pipeline for abandoned and stale items on the quest board via a secure Cron endpoint (
GET /api/cron/close-stale-quests). Previously, quests could be initialized or claimed indefinitely without resolution, causing the active dashboard to accumulate unmaintained or stalled listings.By executing a daily sweeping lifecycle evaluation, the engine isolates stale in-progress items (no activity within 30 days) and shifts them to an
abandonedstatus, while old unassigned requests decay cleanly into anexpiredstatus. This preserves workspace state optimization and frees up platform bandwidth.Changes
⚙️ Automation Cron API Pipeline (
pages/api/cron/close-stale-quests.ts)CRON_SECRETmatch, blocking unauthenticated public invokes with a fast401 Unauthorizedfail-state.status === 'in_progress'. IfupdatedAtthresholds exceed the 30-day temporal limit, the row transitions toabandoned, releasing locked allocation scopes.expired.quest.abandonedandquest.expired) dynamically per resolved record to sync downstream logging systems.📅 Engine Configuration (
vercel.json)"schedule": "0 0 * * *"to trigger the endpoint cleanly at midnight UTC every day.🧪 Integration Testing Suite
updatedAtto 31 days in the past) to assert successful transition handling and zero-leakage configurations when objects remain within the safe 30-day boundary.Verification & Execution Results
📊 Local Test Framework Output
🎁 Visual Evidence (End-to-End Simulation Capture)
Checklist
CRON_SECRETtokens and drops unauthenticated requests.abandonedpool.expired.quest.abandoned/quest.expired).