Human approval on anything worth money
The in-app assistant can prepare gift cards, promotions, and pricing rules from what it sees in a store. It cannot issue any of them. Each one is written as a draft — a real row, inert until approved — and surfaced where the merchant already manages that kind of thing. Approval is a separate, explicitly granted permission, checked on the server at the moment of approval rather than assumed from whoever created the draft. The limits are re-validated then too, against the row as it stands: a draft that was within bounds when prepared is checked again before it goes live, and a plan that lapsed in between blocks it. The same rule governs dynamic workflows. A workflow can rotate a collection or retag products on its own, because those are reversible. It cannot run a discount — it prepares one and waits. A rule that runs on a schedule carries further limits beyond approval. A workflow that drafts a gift card for every customer meeting a threshold is bounded on both how many it may prepare in one run and their combined face value, and a run matching more than that stops and reports it rather than choosing a subset. A cooldown prevents the same customer being rewarded again on the next run, which would otherwise compound at every cadence. These ceilings live in the database and are re-clamped on every call, so a rule can narrow them but never widen them, whatever the request asks for. A markdown pricing rule is bounded differently, by scope: it covers only the products it actually identified rather than the whole catalogue, and only one such draft is outstanding at a time so a weekly rule cannot stack duplicates while a merchant is deciding.What the model decides, and what code decides
The assistant is used for judgement, and only for judgement. It writes copy, drafts a rule, and chooses which of a store’s products a change should cover. Everything that bounds it is ordinary code: how many gift cards a run may prepare, how much a budget may move, whether a schedule is due, how much credit an action costs, whether a store has spent past its cap. The division is not stylistic. A limit expressed in a prompt is a request; a limit expressed as a constraint is a rule. The second kind can be tested, holds under a request written to talk past it, and behaves the same whichever model is answering. So a store’s ceilings live in the database and are re-checked at the moment of use, rather than being described to the assistant and trusted. The same reasoning applies to counting. Whether a standing rule has produced anything over its last several runs is a question about records, so it is answered by reading them — not by asking a model to summarise. Reserving inference for the parts that genuinely need judgement is also what keeps an automatic process cheap enough to run on a schedule.Autonomy changes who maintains a rule, not what a rule may do
A store can hand the assistant a standing job: rather than being asked for each rule, it keeps the set of standing rules current — adding ones worth running, retuning ones whose thresholds have drifted, and retiring ones that have stopped producing anything. This widens nothing about money. Every constraint above still holds, unchanged: a discount, a gift card and a pricing rule are still prepared as drafts and still wait for a person with the approval permission. What becomes automatic is the upkeep. Three further limits apply to the upkeep itself:- A rule a person paused stays paused. Pausing is an instruction, not an untidy state to be corrected, and it is never reversed automatically. The same holds for a rule stopped by the failure breaker: that is a fault for a person to look at.
- A rule that has ever acted is never retired. Retirement is reserved for rules that have produced nothing across a sustained run of evaluations, counted from the record rather than asserted, and it pauses rather than deletes — so a wrong call costs one click.
- Every adjustment is recorded with its evidence, in the same log as the actions themselves and distinguishable from them, so “what changed in my shop” and “what changed about my rules” stay separate questions.
Advertising spends nothing a merchant has not bounded
Where a store lets Galactic Core manage its advertising unattended, every automated write passes one checkpoint before it reaches the ad platform, and that checkpoint answers with one of three outcomes: proceed, ask, or refuse. A write is refused outright when it would carry the month past the spend limit the merchant set — there is nothing to approve, because approving would breach a limit they already expressed. A write at or above their per-change approval figure is held for a person, recorded as the exact change it would make so that approving replays it rather than reconstructing it. Everything else proceeds. Two details matter more than they look. A store that has set no limit is treated as the most cautious case, not the least — every spending change is held for approval, because a merchant who has configured nothing has expressed no appetite for unattended spend rather than an unlimited one. And a change that spends nothing is never measured against a spending limit: pausing a campaign is the safe direction, and a cap that blocked it would keep a losing campaign running precisely because the store was near its limit.Cost coverage before any pricing action
Any automated action that affects price first checks that the store’s cost data is complete enough to reason about. When a cost price is missing, margin arithmetic treats it as zero, which reads as 100% margin — a discount computed on that basis looks comfortably profitable and can be sold below cost. When coverage is too thin the action is refused, not merely flagged, and the response names the products whose costs are missing. The check applies to the assistant, to standing workflows, and to advertising rules alike.Test credentials cannot serve a real customer
A store can be live while a payment provider is still configured with test credentials, in which case a shopper would complete checkout against a sandbox processor, see a confirmation, and pay nothing. On a production request, a provider whose credentials are not live-grade is hidden from the available payment methods and refused at initialization. The shopper cannot select it, and a direct API call gets an explicit error rather than a phantom success. The check applies to production requests only. A sandbox key sees every provider, including ones still on test credentials, since hiding them would make the mode useless for the testing it exists to support. A sandbox checkout listing providers markedtest or sandbox is therefore the system working; point a
live key at the same store and those providers are gone. The same asymmetry holds for every integration
below.
The merchant’s own in-store point of sale warns rather than blocks, because that is the merchant’s own
device and they may be mid-setup. What differs between the two cases is who is transacting: a customer is
never allowed to pay into a test account, while a merchant may test their own till.
The same rule extends past payments to every integration a merchant connects themselves, because
every one of them has a test mode and a merchant can be live to shoppers while still holding test
credentials:
- Tax. A store connected to a sandbox tax account is not used to price real orders — a test engine’s rates are not the ones that get filed. The store’s own configured rates apply instead, so the shopper is still charged a number the merchant chose.
- Shipping. A test carrier token cannot buy a label for a production order. A test label is not accepted by any carrier, and buying one would mark the order shipped and send the customer a tracking number that never moves. Live rates are simply not offered, and the store’s own delivery pricing stands.
- Subscription billing. A billing processor configured with test credentials is not offered and is refused if named directly.
- Advertising. Automation rules run against a real ad account and move real budget, so only rules created in production ever execute. A rule authored while testing stays inert.
- Accounting. Ledger entries are never posted into a sandbox accounting company. When the connection is not pointed at a real one, entries stay queued rather than being sent, so nothing is lost and the queue delivers once the connection is corrected. An entry posted into a test book would be indistinguishable from a successful sync.

