{"prompt": "kmp: move the networking and models into the shared module for ios and android, keeping both apps' current behavior exactly", "purpose": "refactor", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "so the kmp question. we have an android app in kotlin and an ios app in swift with the same 40 api calls and the same models written twice, and they've drifted enough that two bugs last month were 'the ios one does it differently'. i want the plan: what we share, what we don't, and how much build pain we're signing up for", "purpose": "planning", "secondary": null, "mixed": false, "difficulty": 0.9, "slice": "core", "lang": "en"} {"prompt": "shared repository layer in kmp with ktor, coroutines exposed to swift as async, and a sqldelight cache", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "the ios build takes 9 minutes because the kmp framework rebuilds every time", "purpose": "debugging", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "the shared module's version is pinned to a kotlin version older than the android app's", "purpose": "quickFix", "secondary": null, "mixed": false, "difficulty": 0.3, "slice": "core", "lang": "en"} {"prompt": "explain how our shared coroutine scopes get cancelled from the swift side, i don't trust that they do", "purpose": "review", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "write the shared module's readme: what belongs in it, what doesn't, how to add a model, and the swift interop gotchas", "purpose": "writing", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "the ios app crashes with a kotlin exception that surfaces as NSGenericException with no useful message", "purpose": "debugging", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "error mapping from the shared layer into idiomatic errors on each platform, so swift gets a typed error not a generic throw", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "postgis: nearest-neighbour query for 'stores within 20km, sorted by distance', fast at 400k stores", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "the distance query uses ST_Distance on geometry not geography so the results are wrong by a few percent depending on latitude", "purpose": "quickFix", "secondary": null, "mixed": false, "difficulty": 0.4, "slice": "boundary", "lang": "en"} {"prompt": "store locator map: clustered pins, a list synced to the viewport, and 'use my location' with a graceful denial path", "purpose": "frontendImpl", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "the locator returns stores in the wrong hemisphere for users with negative longitudes", "purpose": "debugging", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "plan the territory management feature — polygons per sales rep, overlap detection, and assignment of an address to a territory at scale", "purpose": "planning", "secondary": null, "mixed": false, "difficulty": 0.9, "slice": "core", "lang": "en"} {"prompt": "our geometry columns use three different srids across tables and we transform ad hoc in queries. normalize on 4326 with the transforms at the edges, same query results", "purpose": "refactor", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "review our spatial indexes and tell me which queries aren't using them", "purpose": "review", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "geospatial data doc: our srids, the units we store distances in, and the conventions for lat/lng ordering because everyone gets it backwards", "purpose": "writing", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "boundary", "lang": "en"} {"prompt": "territory polygon editor: draw, edit vertices, snap to boundaries, and warn on overlap with another territory", "purpose": "frontendImpl", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "webgl: the product configurator needs to load a 40mb gltf without freezing the tab, with a progressive reveal", "purpose": "frontendImpl", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "the three.js scene leaks memory when you switch products, about 30mb each time", "purpose": "debugging", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "the configurator renders at devicePixelRatio 3 on phones and melts them", "purpose": "quickFix", "secondary": null, "mixed": false, "difficulty": 0.3, "slice": "boundary", "lang": "en"} {"prompt": "asset pipeline for the 3d models: draco compression, ktx2 textures, and lods generated at build time", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "our three material setups are duplicated per product type with copy-pasted shader code. one material system with parameters, visually identical renders", "purpose": "refactor", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "map out how we'd support ar viewing on top of the configurator, ios and android, and what the model requirements become", "purpose": "planning", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "sure keep going", "purpose": "frontendImpl", "secondary": null, "mixed": false, "difficulty": 0.3, "slice": "vague-eval", "lang": "en"} {"prompt": "here's what the analytics show for the configurator and it's making me rethink the whole thing:\n\nSessions reaching configurator: 41,200\n Model load started: 41,200\n Model load completed: 26,900 (65%)\n First interaction (rotate/zoom): 19,400 (47%)\n Changed a variant: 11,100 (27%)\n Added to cart: 2,900 (7%)\n\nMedian time to model loaded: 8.4s\n p75: 14.1s\n p90: 31.0s\n\nDrop-off before load completes, by connection type:\n 4g: 48%\n wifi: 19%\n 3g/slow: 81%\n\nDevice: 62% mobile\n\na third of people never see the thing at all. i want the plan for what we do about this", "purpose": "planning", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "pasted-context", "lang": "en"} {"prompt": "static hero render as the initial view with the interactive model loading behind it, so the page is useful in a second", "purpose": "frontendImpl", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "prerendered turntable images per variant, generated at build time, as the low-bandwidth fallback", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "we load all variants' textures upfront, load only the selected one", "purpose": "quickFix", "secondary": null, "mixed": false, "difficulty": 0.4, "slice": "boundary", "lang": "en"} {"prompt": "connection-aware quality selection using the network information api with a manual override", "purpose": "frontendImpl", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "review the configurator's asset loading order and tell me what's on the critical path that shouldn't be", "purpose": "review", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "write the asset authoring guidelines for the 3d team: polygon budgets, texture sizes, and the naming convention the pipeline expects", "purpose": "writing", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "the loading indicator shows 0% until the whole file arrives", "purpose": "quickFix", "secondary": null, "mixed": false, "difficulty": 0.3, "slice": "core", "lang": "en"} {"prompt": "plan the performance budget for the configurator page and how we enforce it as the 3d team adds models", "purpose": "planning", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "asset size checks in CI that fail the build when a model exceeds the budget, with the report saying which mesh grew", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "one product's model is 40mb and the others are 3mb, and nobody noticed for two months", "purpose": "debugging", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "variant switching ui: swatches, an active indicator, and the change should apply without a visible reload of the scene", "purpose": "frontendImpl", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "switching variants resets the camera position", "purpose": "quickFix", "secondary": null, "mixed": false, "difficulty": 0.3, "slice": "core", "lang": "en"} {"prompt": "explain how our variant state maps to the cart line item, and whether a shared url reproduces the exact configuration", "purpose": "review", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "shareable configuration urls that encode the variant state compactly and survive a variant being discontinued", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "our configurator state lives in a react context, a url param and a zustand store, all partially. one source of truth, same behavior", "purpose": "refactor", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "shared configuration links from six months ago render the wrong product", "purpose": "debugging", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "documentation of the configuration url format for the marketing team who want to link to preset configs", "purpose": "writing", "secondary": null, "mixed": false, "difficulty": 0.4, "slice": "boundary", "lang": "en"} {"prompt": "plan the configurator's accessibility — it's a canvas, so what does keyboard and screen reader support even look like", "purpose": "planning", "secondary": "frontendImpl", "mixed": true, "difficulty": 0.8, "slice": "mixed", "lang": "en"} {"prompt": "find the memory leak in the scene switching and then note the pattern in the frontend guidelines", "purpose": "debugging", "secondary": "writing", "mixed": true, "difficulty": 0.8, "slice": "mixed", "lang": "en"} {"prompt": "next up", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.3, "slice": "vague-eval", "lang": "en"} {"prompt": "the routing data situation. we buy road network data, load it into postgis, and build a routing graph nightly. the load takes 11 hours and the graph build another 4, so a data update is a two-day operation and we've stopped doing them monthly. i want the plan to get this to something we can run weekly, including whether we should be using a purpose-built routing engine instead", "purpose": "planning", "secondary": null, "mixed": false, "difficulty": 0.9, "slice": "core", "lang": "en"} {"prompt": "parallel loader for the road network by tile, with each tile's load independent and resumable", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "the loader inserts row by row with autocommit", "purpose": "quickFix", "secondary": null, "mixed": false, "difficulty": 0.4, "slice": "boundary", "lang": "en"} {"prompt": "data load progress view: tiles by state, throughput, and an estimated completion that isn't a lie", "purpose": "frontendImpl", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "our geometry simplification runs at load time in the loader and again in the tile server with different tolerances. pick one, do it once, same rendered tiles", "purpose": "refactor", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "the graph build produces a graph with 400 disconnected components and last month it was 12", "purpose": "debugging", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "read the graph build and tell me how it decides two road segments connect, because i suspect it's coordinate equality", "purpose": "review", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "write the data update runbook: the steps, the validation gates, and how to roll back to the previous graph", "purpose": "writing", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "graph validation gates — connectivity, a set of known routes that must still resolve, and travel time sanity checks", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "routes across one metro area got 40% longer after the last data update and nobody caught it for a week", "purpose": "debugging", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "vector tile server for the road network with caching, so the map isn't rendering from raw geometry", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "tiles at zoom 14+ take 3 seconds each", "purpose": "debugging", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "the tile cache has no max age so a data update doesn't invalidate anything", "purpose": "quickFix", "secondary": null, "mixed": false, "difficulty": 0.3, "slice": "core", "lang": "en"} {"prompt": "plan how we serve historical graph versions so a route computed last month can be reproduced for a dispute", "purpose": "planning", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "explain how we version the routing graph today and whether an old route can be recomputed identically", "purpose": "review", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "routing api documentation: the parameters, what the returned geometry represents, the travel time model, and the accuracy caveats", "purpose": "writing", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "boundary", "lang": "en"} {"prompt": "isochrone endpoint — reachable area in 15/30/45 minutes as polygons, cached per origin grid cell", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.9, "slice": "core", "lang": "en"} {"prompt": "isochrone polygons have self-intersections that break the client's rendering", "purpose": "debugging", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "isochrone overlay on the map with three bands, semi-transparent, and a legend", "purpose": "frontendImpl", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "die Isochronen-Farben sind fast identisch, mach sie unterscheidbar", "purpose": "frontendImpl", "secondary": null, "mixed": false, "difficulty": 0.2, "slice": "boundary", "lang": "de"} {"prompt": "our coordinate parsing accepts lat,lng in one endpoint and lng,lat in another, matching neither convention consistently. standardize, and add a compatibility period", "purpose": "refactor", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "boundary", "lang": "en"} {"prompt": "check whether our address geocoder can return a result in the wrong country for an ambiguous input", "purpose": "review", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "geocoding with a country bias, a confidence score, and a clear 'we're not sure' state rather than a wrong answer", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "address input with autocomplete, a map pin the user can drag to correct it, and the corrected coordinate saved", "purpose": "frontendImpl", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "vale, sigamos", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.3, "slice": "vague-eval", "lang": "es"} {"prompt": "ok the mobile release process is killing us. two apps, two stores, manual version bumps in four places, screenshots regenerated by hand, and release notes written twice. every release takes a day of someone's time and we ship monthly because of it. i want the plan for automating this end to end, including the bits the stores won't let us automate", "purpose": "planning", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "release automation: version derived from the tag, build and upload to both stores, and the release notes pulled from the changelog", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "the version is defined in build.gradle, Info.plist, a constants file and the api's minimum-version check, independently", "purpose": "refactor", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "boundary", "lang": "en"} {"prompt": "screenshot generation from ui tests, all locales and device sizes, with the status bar faked consistently", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "generated screenshots show the debug banner", "purpose": "quickFix", "secondary": null, "mixed": false, "difficulty": 0.3, "slice": "core", "lang": "en"} {"prompt": "release dashboard: what's in flight per store, the review status, the staged rollout percentage, and crash rate on the new version", "purpose": "frontendImpl", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "the crash-free rate shown is for all versions combined", "purpose": "quickFix", "secondary": null, "mixed": false, "difficulty": 0.3, "slice": "core", "lang": "en"} {"prompt": "builds succeed locally and fail in CI with a provisioning profile error that changes every few weeks", "purpose": "debugging", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "explain how our CI gets its signing certificates and what happens when one expires", "purpose": "review", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "mobile release runbook, with the manual steps clearly marked and the store-review turnaround expectations", "purpose": "writing", "secondary": null, "mixed": false, "difficulty": 0.5, "slice": "core", "lang": "en"} {"prompt": "staged rollout automation — start at 5%, hold on a crash rate regression, and promote on a schedule if healthy", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "the rollout promoted to 100% despite a crash rate 4x the previous version", "purpose": "debugging", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "plan the minimum-supported-version policy — how we force an upgrade, the warning period, and what an unsupported client sees", "purpose": "planning", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "force-upgrade gate in the app driven by a server response, with a soft warning period first", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "force-upgrade screen with the store link, what's new, and no way to dismiss it", "purpose": "frontendImpl", "secondary": null, "mixed": false, "difficulty": 0.4, "slice": "core", "lang": "en"} {"prompt": "the force-upgrade check runs after the auth call, so unsupported clients see an auth error first", "purpose": "quickFix", "secondary": null, "mixed": false, "difficulty": 0.3, "slice": "boundary", "lang": "en"} {"prompt": "review our minimum version enforcement — can a client skip it by not calling the endpoint that returns the gate", "purpose": "review", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "user-facing copy for the upgrade prompts, soft and hard variants, that doesn't sound like a threat", "purpose": "writing", "secondary": null, "mixed": false, "difficulty": 0.3, "slice": "core", "lang": "en"} {"prompt": "crash reporting with the symbols uploaded automatically per build, so we're not looking at hex addresses", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "symbols aren't uploaded for the last three releases so all our crashes are unsymbolicated", "purpose": "quickFix", "secondary": null, "mixed": false, "difficulty": 0.4, "slice": "core", "lang": "en"} {"prompt": "keep it up", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.3, "slice": "vague-eval", "lang": "en"} {"prompt": "here's the crash cluster that appeared with 4.2, i can't reproduce it and the reports are thin:\n\nCrashlytics issue: 8f21a — 2,140 users, 4,880 crashes, all on 4.2.0\nFatal Exception: kotlin.UninitializedPropertyAccessException\nlateinit property syncCoordinator has not been initialized\n\n at com.acme.field.sync.SyncService.onStartCommand(SyncService.kt:64)\n at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4712)\n at android.os.Handler.dispatchMessage(Handler.java:106)\n\nDevice breakdown: 94% Android 14+, no single manufacturer\nMemory state: 71% of crashes report \"low memory\" true\nForeground: 8% (so mostly background)\nTime since app start: median 4.2 hours\n\n4.2 moved the sync service to a foreground service", "purpose": "debugging", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "pasted-context", "lang": "en"} {"prompt": "make the sync service resilient to process death — reinitialize its dependencies in onStartCommand rather than relying on application state", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "our lateinit-in-application pattern appears in 12 services and every one of them is this bug waiting to happen. move to proper injection with lazy resolution, same behavior when the process is alive", "purpose": "refactor", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "the service is started with startService not startForegroundService in one path", "purpose": "quickFix", "secondary": null, "mixed": false, "difficulty": 0.3, "slice": "core", "lang": "en"} {"prompt": "review every entry point into the app for whether it assumes Application.onCreate already ran with our state intact", "purpose": "review", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "write the android process lifecycle notes for the team — what survives process death, what doesn't, and the patterns we use", "purpose": "writing", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "plan the background work strategy properly — what's a foreground service, what's workmanager, and what we do about the OEMs that kill everything", "purpose": "planning", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "sync notification for the foreground service that's informative rather than a permanent 'Syncing' with no detail", "purpose": "frontendImpl", "secondary": null, "mixed": false, "difficulty": 0.5, "slice": "core", "lang": "en"} {"prompt": "the foreground notification says 'Acme is running' which users find creepy", "purpose": "writing", "secondary": null, "mixed": false, "difficulty": 0.2, "slice": "boundary", "lang": "en"} {"prompt": "background sync stops entirely on some xiaomi devices after a day", "purpose": "debugging", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "device-specific battery optimization guidance surfaced in the app, only on the affected manufacturers, with a deep link to the setting", "purpose": "frontendImpl", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "explain how our sync decides it's been too long since the last successful run, and whether the user is ever told", "purpose": "review", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "stale-data warning in the app when sync hasn't succeeded in 24 hours, with a manual sync action", "purpose": "frontendImpl", "secondary": null, "mixed": false, "difficulty": 0.5, "slice": "core", "lang": "en"} {"prompt": "support doc for field users whose data isn't syncing: the three things to check, in order", "purpose": "writing", "secondary": null, "mixed": false, "difficulty": 0.4, "slice": "core", "lang": "en"} {"prompt": "sync telemetry so we can see, per device, when sync last succeeded and why it failed", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "sync health view per customer: devices, last successful sync, and the failure reason distribution", "purpose": "frontendImpl", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "the last-sync timestamp is the attempt time not the success time", "purpose": "quickFix", "secondary": null, "mixed": false, "difficulty": 0.3, "slice": "core", "lang": "en"} {"prompt": "plan the offline conflict resolution for field data, then implement the merge for the simple field types", "purpose": "planning", "secondary": "backendImpl", "mixed": true, "difficulty": 0.8, "slice": "mixed", "lang": "en"} {"prompt": "look at the sync service and clean up the initialization mess", "purpose": "review", "secondary": "refactor", "mixed": true, "difficulty": 0.7, "slice": "mixed", "lang": "en"} {"prompt": "next thing", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.3, "slice": "vague-eval", "lang": "en"} {"prompt": "propose how we do multi-language support in the shared kmp module. the strings currently live in android resources and a swift Localizable file, translated separately, and the two apps say different things for the same error. i want one source with the platform formatting still working properly", "purpose": "planning", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "shared string resources in kmp generating both android xml and swift string catalogs from one source", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.8, "slice": "core", "lang": "en"} {"prompt": "our error messages are built in the shared layer for some cases and per-platform for others, so the same failure reads differently. one message catalog, consistent copy", "purpose": "refactor", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "plurals break in polish because we generate a simple one/other from the shared source", "purpose": "debugging", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "the generated swift strings file isn't added to the xcode project so new strings silently fall back to the key", "purpose": "quickFix", "secondary": null, "mixed": false, "difficulty": 0.3, "slice": "core", "lang": "en"} {"prompt": "review our string generation for whether a missing translation fails the build or ships as the key", "purpose": "review", "secondary": null, "mixed": false, "difficulty": 0.5, "slice": "boundary", "lang": "en"} {"prompt": "localization guide for the shared module: adding a string, plurals, placeholders, and how translations flow in", "purpose": "writing", "secondary": null, "mixed": false, "difficulty": 0.5, "slice": "core", "lang": "en"} {"prompt": "date and number formatting in the shared layer using the platform locale, with the results verified against the platform's own formatters", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "dates in the shared layer format as US style on both platforms regardless of locale", "purpose": "debugging", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "settings screen for language override, per app, defaulting to the system language", "purpose": "frontendImpl", "secondary": null, "mixed": false, "difficulty": 0.5, "slice": "core", "lang": "en"} {"prompt": "the language list shows locale codes not language names", "purpose": "quickFix", "secondary": null, "mixed": false, "difficulty": 0.2, "slice": "core", "lang": "en"} {"prompt": "plan how we handle right-to-left in both apps given the shared layer knows nothing about layout direction", "purpose": "planning", "secondary": null, "mixed": false, "difficulty": 0.7, "slice": "core", "lang": "en"} {"prompt": "explain how the shared module gets the current locale on each platform, and what happens when the user changes it while the app is running", "purpose": "review", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "translation contribution guide for our external translators: the file format, the placeholder rules, and the context notes we provide", "purpose": "writing", "secondary": null, "mixed": false, "difficulty": 0.5, "slice": "core", "lang": "en"} {"prompt": "pseudo-locale build for both apps to catch hardcoded strings and layout overflow before translation", "purpose": "backendImpl", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "core", "lang": "en"} {"prompt": "the pseudo-locale build shows 140 hardcoded strings in the ios app", "purpose": "refactor", "secondary": null, "mixed": false, "difficulty": 0.6, "slice": "boundary", "lang": "en"} {"prompt": "figure out the shared strings approach then implement the generator", "purpose": "planning", "secondary": "backendImpl", "mixed": true, "difficulty": 0.7, "slice": "mixed", "lang": "en"} {"prompt": "that's enough, just finish the small thing", "purpose": "quickFix", "secondary": null, "mixed": false, "difficulty": 0.3, "slice": "vague-eval", "lang": "en"}