Backfill complete eco-trades history into cycle-relative price data #123
Labels
No labels
burndown-2026-06
headless
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
c#
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-gaming/eco-app#123
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
Eco App already has three adjacent pieces:
The missing piece is acquisition of the older history that predates durable exporter backups.
The intended source here is the DiscordLink-generated eco-trades channel containing completed-trade messages. It is not a player-authored offer channel. The previous closure decision rested on that incorrect source interpretation and is superseded.
What to build
Perform a bounded, one-time backfill of the complete accessible eco-trades channel into a normalized historical-trade dataset.
Read backward to the oldest message Discord makes available, parse every supported completed-trade message, identify the cycle in which it occurred, and express its date as both an absolute timestamp and a day relative to that cycle start.
The backfill must be restartable, idempotent, provenance-preserving, and safe to reconcile with the authoritative exporter rows already used by #6.
After this historical gap is filled, normal ongoing collection should come from the authoritative trade exporter and its periodic backups. Discord ingestion is not the long-term source of truth.
Normalized record
Preserve every field that the source can support, including:
Do not silently coerce missing or ambiguous values. Preserve a bounded parse status and reason.
Cycle-relative dating
Create or reuse a reviewable cycle-start catalog.
For each imported message:
Cross-cycle visualization must retain cycle identity. It must not silently average unlike cycles whose progression, recipes, upgrades, logistics, or currency systems differ.
Backfill mechanics
Deduplication and reconciliation
Historical Discord data may overlap with authoritative exporter history.
Implement a documented matching strategy using the strongest available combination of cycle, timestamp window, item, quantity, currency, total price, buyer, seller, and store.
The result must:
Price-data behavior
The normalized history should support #198 without manufacturing one universal price.
For each item and currency, downstream consumers should be able to derive:
Currencies remain separate unless an explicit, evidence-backed conversion model exists.
Acceptance criteria
State and safety boundary
Deliverables
Related
Verified live preflight
Read-only verification on 2026-08-01 established:
These observations establish source availability and need. They do not mean the importer or durable storage is already deployed.
Selected end-to-end architecture
Source transport
Use the already-deployed read-only Discord MCP as the sole Discord transport.
This keeps Discord credentials and permissions in the existing dedicated reader boundary.
Application code ownership
The Eco App repository owns:
The importer must be runnable with an explicit run identifier and support:
Operational input ownership
The app owns the cycle-window input schema. Server-specific cycle start and end values are operational inputs owned by Eco Ops, not generic constants embedded in Eco App source.
The cycle catalog must provide:
The importer copies the exact catalog version or checksum into each import run. Missing or overlapping cycle windows fail closed before the full run.
Durable storage
Use a dedicated SQLite database on a new Eco App PersistentVolumeClaim as the initial storage design.
Rationale:
Deployment requirements:
Minimum durable entities:
Stable Discord message identity prevents duplicate source ingestion. A trade-line identity derived from source message plus line position prevents duplicate line items.
Deployment ownership
The deploy repository owns:
The Job is operator-triggered. It must not run from normal CD, pod startup, a recurring CronJob, or every Eco App rollout.
The Job may remain as a tracked reusable manifest, but no active backfill workload remains after successful completion.
Role handoff
Engineer
The engineer:
Ops
Ops:
Advisor
Advisor returns only if live evidence creates a decision question, such as irreconcilable cross-cycle semantics, ambiguous message classes, or unacceptable parser loss.
Attended execution sequence
Dry-run and full-run evidence
Every run report must record:
The report contains aggregate evidence and bounded public-safe examples. It does not publish the raw Discord archive.
Failure and rollback behavior
End-to-end definition of done
This issue is complete only when:
Explicit boundary with downstream issues
#123 ends when the historical dataset is durably deployed and queryable through Eco App.
#156 remains the durable dataset and future-backup product concern. #198 remains the price-distribution visualization concern. Both are currently closed and must be reopened or replaced only when #123 returns evidence proving their required input exists.
Execution issues
This issue remains the end-to-end umbrella and application work package.
Each child issue closes only its repository or role boundary. Final deployment, import, reconciliation, and activation evidence returns here before #123 closes.
Decision: do not import the Discord trade-channel backlog.
Discord posts are player-authored messages, not an authoritative ledger of completed sales. Offers can be edited, deleted, reposted, or fulfilled at a different price, and a historical export would introduce a privacy and retention contract for weak pricing evidence.
#156 now owns the durable pricing dataset from actual in-game sale records, including periodic backups and per-item distributions. That is the correct source for guidance going forward. Prior-cycle Discord history remains out of scope unless Kai later requests a separately consented archival project.
Closing this proposed Discord backfill without exporting or ingesting player messages.
Pull historical data to establish pricing guidelinesto Backfill complete eco-trades history into cycle-relative price dataCorrection to the previous closure: the intended eco-trades source is the DiscordLink-generated completed-trade feed, not a player-authored offer channel. The privacy and weak-evidence rationale therefore addressed the wrong data source.
This issue is reopened as the bounded historical acquisition job. #156 remains the durable normalized-dataset concern, and #198 remains the downstream per-item distribution and presentation concern.
End-to-end spec update: live preflight confirmed that the completed-trade feed is accessible through the deployed read-only Discord MCP, while Eco App has no durable historical store or backfill workload yet. The issue now selects that existing reader boundary, a dedicated Eco App SQLite PVC, and an operator-triggered one-shot Job. It defines application, deploy, and Eco Ops ownership, cycle-catalog inputs, dry-run and full-run evidence, reconciliation, promotion, rollback, and deployed definition-of-done criteria. The label is now interactive because the production import, backup verification, and activation require an attended Ops checkpoint.
Execution split created. deploy #295 owns persistent storage and the one-shot Job. eco-ops #70 owns the cycle catalog and attended import. This issue remains the application work package and end-to-end evidence umbrella.
Discord source for this work, found while sweeping
#suggestions-feedback-bugsinto Forgejo. Not filed separately because it is the same deliverable as this issue.Thread // https://discord.com/channels/1300204416229441587/1530725974105395331
Opened by // Kai, 2026-07-25
Title // "Use discord link history to create pricing bell curves for each item"
Signal // no replies
The thread body is a pointer: "See primarily [the pricing thread]". So the framing lives in the parent discussion at https://discord.com/channels/1300204416229441587/1530651520150802472, which ran to 30 replies and is the busiest thread in the forum.
What the title adds to this issue
A specific output shape. Not just backfilled price history, but a distribution per item, so a seller can see where their price sits against what the item has actually traded at rather than against one calculated number.
Why the community needs it, which is the part worth carrying over
The existing tools are failing, and that is what pushed Kai toward building this:
Kai's conclusion in that thread:
And the gap she named: "I need to populate price info tho. I can do that ... maybe later today?"
Design input from the same discussion
A bell curve is descriptive, and the community explicitly rejected prescriptive pricing. Both Kai and Octavian came out against forcing prices. That is an argument for this feature rather than against it: a distribution informs without mandating, which is the only shape that fits the stated policy.
Two open questions that affect what the curve should be computed over:
Related issues filed from the same sweep