Change control — Friday 4 September
v2.5.0Nothing below is live yet. This is the release going out on Friday morning. It was drafted on Thursday on purpose — every “before” on this page can only be measured while the live store is still serving it, and that disappears the moment the release goes out. Where a measurement could not be taken, the row says so in red rather than showing a number.
The one thing to take from this page, if you read nothing else. This release cannot go out as it stands. One setting is missing on the live search service, and the new search code refuses to start without it. The system is built to fail safely, so the consequence is that Friday’s release does not happen — not that the store breaks. Setting it takes a minute and it is the first item below. The decision this page needs is who sets it, and in what order the two halves of the address change go out — those two answers are what stand between this release and Friday morning.
Ninety-two changes since the 28 August release: fifty-eight on the store website, twenty-four on search, ten on the order and payment services. Three pieces of work account for most of them. The first is the parts diagram on a phone, which stops being a picture you fight with and becomes a place you can buy from. The second is that every part page changes address, which needs the store website and search to agree with each other on the same morning. The third finishes the work of the last two releases on which part pages Google is invited to read.
Unlike the last release, almost nothing here is behind a switch. The 28 August release shipped its main work switched off and asked which switches to turn on; those four settings are still where they were and this release does not touch them. What is here takes effect on Friday, which is why the ordering question in the second section matters more than usual.
Three genuinely new things do ship switched off: a place for a customer to keep their own machines, a hardware store, and a chat widget. None of them is reachable on Saturday morning. Each is a separate decision for a later week, and each is described in its own section rather than buried in the list.
What Friday actually changes on the live store — measured Thursday, not a forecast
For a customer: three things. The parts diagram on a phone becomes usable — one finger moves it, two fingers zoom, the callouts are big enough to hit with a thumb, and tapping one adds that part to the cart without leaving the diagram. Photographs move onto our own address, which nobody should notice and which is the point. And several long-standing wrong answers in search and in the cart are corrected — filters that were offered but never actually applied, two machines with the same name that could not be told apart, and a quantity stepper in the cart that did not always match the part it sat next to.
For Google: every part page changes address. A part page is currently found at
/parts/ct-nhl-100016 and will be found at /parts/100016-nhl-ct. Every old
address answers with a single permanent redirect to the new one, which is the form Google is built
to follow and the form that keeps the ranking. This is the one change on this page that must happen
on the store website and in search in the correct order, and it is the second item in the next
section.
What does not change: what Google is allowed to read. The four settings from the 28 August release are read off the live store as of Thursday: indexing on, relaxed indexing off, priced-only on, diagram and equipment-tree pages held back. Friday does not alter any of them. The work in this release makes the site agree with those settings in more places — it does not change what they say.
What the call has to decide — found Thursday, ahead of the promote
The release cannot go out until one setting is added to the live search service blocks the releasenobody can see thissearch#999, search#1000
Search has been finding the address of a photograph in six different places in its own code, each with the same address written into it as a last resort. This release replaces all six with one setting, and deliberately removes the last resort: if the setting is missing, the service refuses to start rather than quietly serving the old address.
Before — the live search service todayIts settings were read off the running service on Thursday. The list contains nineteen entries and the new one is not among them.
After — what Friday would doThe new version starts, does not find the setting, and stops. Because the platform only sends customers to a version that has started successfully, the version running today keeps every request. The result is a release that does not happen, not a store that breaks.
What it needsOne setting added to the live search service before the release is promoted. It takes about a minute, and its value is the address photographs are served from today, so nothing about what a customer sees changes.
WhoVova, before the promote. There is no way to do it from inside the release itself — the setting lives on the running service, not in the code.
The address change has two halves, and they have to go out in one order must settleGoogle can see thisfront#4044, search#996
The store website has to accept the new part-page address before search starts handing it out. The store website half is what answers a request; the search half is what writes the address into the sitemap, the shopping feed, and the links inside parts diagrams.
In the right orderThe store website goes first. For the few minutes between the two, search is still handing out old addresses, and the store website answers both the old and the new. Nothing is broken at any point.
In the wrong orderSearch hands out addresses that the store website does not yet answer. Every newly-issued link is a dead page until the second half lands, and the shopping feed and sitemap are the two places most likely to be read by a machine in that window.
Why it is a decision and not just a stepThe two halves are promoted by different mechanisms — the store website by merging, search by swapping the running image — so nothing enforces the order automatically. It has to be held by whoever runs the promote.
A change is queued straight onto the live branch, going around the release train must settlenobody can see thisfront#4020
front#4020 is aimed directly at the live branch rather than at the integration branch every other change goes through. It is also a second copy of work that is already in this release: the chat widget arrived on 27 August and is in the list below.
Why it mattersA change that goes straight to the live branch skips the week of integration testing that everything else on this page has had, and it is the one shape of change the process is written to prevent.
The decisionClose it as already covered, or re-aim it at the integration branch so it rides a train. Either is fine; leaving it queued where it is, is not.
The New Holland price re-sync has been delayed four times and now waits on us must settlea customer can see thishub#349
Open since 27 July. One hundred and twenty-two thousand five hundred and thirty-three parts currently hold a price that disagrees with the source. On 28 August the testing step moved to Vova, which is where it has sat since.
The decisionYes or no this week. It is not blocked by anything in this release; it is blocked by nobody having run the check.
Nothing was cut to the test site this week, and nobody owns the sign-off processnobody can see thisno issue
The process has a Thursday step that copies the candidate to the test site so it can be checked before Friday. It did not run this week — the test site still holds what was put there on 21 August. The 28 August release also went straight out without it.
Why it keeps happeningThe person who held testing left on 20 August and the role was not filled. The step has no owner, so it is nobody’s to skip and nobody’s to run.
The decisionEither a named person checks the candidate before Friday, or the existing rule applies and anything unchecked is a no. Both are workable answers; the current state, where the rule exists and nothing enforces it, is not.
A database change ships without the credential it was written for — and that is safe no action needednobody can see thissearch#982
Recorded here so it is not mistaken for the first item. This release gives the heavy overnight index work its own restricted database login, so it cannot compete with customer searches. The login has not been created on the live service.
What happens without itThe work falls back to the shared login and writes a warning when the service starts. That is the behaviour today, so nothing gets worse — the isolation simply is not gained yet. Unlike the first item, this does not stop the release.
The parts diagram on a phone — the largest single piece of customer-facing work in this release
A parts diagram is how someone finds the part they need without knowing its number: an exploded drawing of an assembly with numbered callouts. On a desktop it works. On a phone it has been a picture you fight with — and phones are where most of these are opened.
One finger moves the diagram, two fingers zoom, and the page stops scrolling underneath ships Fridaya customer can see thisfront#4026, front#4034
The gesture handling was written by hand and did not distinguish a drag on the diagram from a scroll of the page, so trying to move the drawing scrolled the page away from it. It is now handled by a maintained library that every mobile map uses, with the conventional rule: one finger pans, two fingers zoom.
Tapping a callout adds that part to the cart, without leaving the diagram ships Fridaya customer can see thisfront#4028, front#4048
Previously a callout identified a part and the customer had to find it again in the list below to buy it. The callout now leads to the purchase, and the row in the rail beneath the diagram is a buy surface rather than a legend — price, availability and an add button on the row itself.
The floating marker that covered the diagram is gone, and the callouts are big enough to hit ships Fridaya customer can see thisfront#4058, front#4057, front#4061
A marker floated above the drawing to show which callout was selected, and on a phone it sat on top of the thing it was describing. Its two jobs moved into the rail. The callouts and the zoom controls were below the size a thumb can reliably hit and have been enlarged. The sheet that covers the lower half of the screen now closes with a downward swipe instead of a hunt for a small cross.
Every part page changes address — the change with an order dependency
The part number moves to the front of the address ships FridayGoogle can see thisfront#4044, search#996, search#994
Before — the live store today/parts/ct-nhl-100016
answers 200. /parts/100016-nhl-ct answers not-found. An address typed in capitals
redirects once to the lower-case form.
AfterThe two swap over, and every old address answers with a single permanent redirect to the new one. One hop, never two, which is what preserves the ranking a page has already earned.
Why do it at allThe part number is the thing a customer recognises and the thing they search for. Putting it first makes the address readable and puts the identifying term where both a person and a search engine look for it.
OrderSee the second item in the decisions above. This is the change that needs the two halves promoted in sequence.
Two smaller address corrections that ride with it ships FridayGoogle can see thisfront#3991, front#3990
Every segment of the remaining address families is now lower case, so the same page cannot be reached by two spellings. And a discontinued part no longer redirects to a replacement that has itself been discontinued — a chain that ended in a dead page.
What Google is allowed to read — finishing the work of the last two releases
The decision itself was made and shipped on 28 August: which part pages are worth offering to Google. This release does not change that decision. It makes the rest of the site obey it — the sixteen places that were still answering by their own older rules.
A link to a held part is no longer written into a page at all ships FridayGoogle can see thisfront#4047
Held parts were kept out of the sitemap but still linked from listings and diagrams, so Google found them by following links. Links now fail closed: if a part is not offered, no clickable link to it is written, on either the parts pages or the lookup pages.
Note for anyone checking the live store todayA check that finds dead links under the lookup pages is finding the problem this change fixes, not a new one. It has been on the integration branch since 3 September and reaches the live store on Friday.
The listing grids, filters and counts now agree with the same rule ships FridayGoogle can see thisfront#3945, #3953, #3956, #3957, #3959, #3960, #3969, #3973, #3975, #3977, #3979, #3987, #3989, #3995search#944, #952, #956, #959, #961, #965, #980, #983
Twenty-two changes, all the same shape: a filtered listing, a facet count, a brand page or an automated check applied the rule in one place and not in another, so the number shown and the rows shown disagreed. They now use one rule in one place. The visible effect is that a count matches what is on the page.
One that is a decision, not a fixOpening a brand to Google is now a recorded decision rather than something that happened automatically once a brand had enough rows. A brand with nothing worth offering hides itself instead of listing pages that answer not-found.
One that is about freshnessWhether a part is published is now read live rather than from a snapshot rebuilt overnight, so a part that becomes available is offered the same day rather than the next.
Search results and filters — filters that were offered but never applied
Every filter the sidebar offers now actually narrows the results ships Fridaya customer can see thissearch#967, #971, #973, #975, #977, #978
Six changes with one cause. The sidebar and the grid were built by different code paths, and the sidebar advertised cuts — price, top sellers, and others — that the grid never ran. A customer ticked a box and the results did not change. Two filters that had never applied anywhere were removed rather than fixed, because nothing was behind them.
Search stops handing out results that cannot be bought or opened ships Fridaya customer can see thissearch#946, #949, #995front#3958
Attachment and kit entries were being returned as if they were parts, leading to addresses that answer not-found. And when the site cannot work out which part a search means, it now shows the results page rather than guessing at a part page address that may not exist.
Two search fixes already on the live store as emergency repairs already livea customer can see thisfront#3963, front#3999
Recorded so the list adds up, not as news. A search matching exactly one part was answering with an error instead of showing it — the problem reported on the 28 August page as unresolved. It was fixed and pushed out on its own on 29 August. Separately, when search is struggling the site now remembers the failure briefly instead of retrying hard and making it worse; that went out on 1 September. Both are in this release properly.
Cart, checkout and measurement — four small corrections
The quantity stepper in the cart now belongs to the right part ships Fridaya customer can see thisfront#4045
When a part appears inside an assembly’s parts list, the stepper next to it was keyed off a value that two different rows could share, so changing the quantity on one could change it on another. It is now keyed off the identifier that is unique per row.
Product views are being counted again ships Fridaynobody can see thisfront#4008
The event that records someone looking at a part had stopped firing, so the analytics figures for product views have been understated. It fires again, and reports the same identifier the rest of the site uses, so the numbers can be joined up.
Two shipping corrections already on the live store, and one payment safeguard already livea customer can see thisfront#3983, front#3985, ps#715
The cart quoted a carrier estimate rather than what checkout actually charges, and the estimate described the pickup counter as if it were delivery. Both were pushed out on 30 August. Separately, a paid order that failed to record itself was being marked as handled, which meant nothing retried it; it is no longer marked handled unless the order exists. That went out on 29 August.
Photographs move onto our own address — invisible if it is right, site-wide if it is wrong
Photographs are currently served from a separate address on a small service of our own. This release moves them onto the store’s own address, which removes that service from the path a customer’s browser takes. The customer sees the same photographs.
Why this half has to ship before the old service can be switched off ships Fridaya customer can see thisfront#4051, front#4052, search#1000, ps#729
Before — measured ThursdayA photograph requested from the store's own address answers 200 as an image, cached for a week. But that request is currently passed through to the very service we are retiring. So a comparison taken on the live store today compares that service with itself and proves nothing — recorded here rather than presented as a measurement.
AfterThe store reads the photograph from storage directly. Only then can the intermediate service be switched off, which is a later week’s work.
A related fixOnce the store trusts its own address for images, one internal request began fetching from itself — and on the protected test environments that returns a login page, which was then cached as if it were a picture. It now reads from storage instead. Found before it reached the live store.
The settingThis is the half that needs the missing setting in the first decision above. The value is deliberately different per environment, so a single fixed value would have looked correct on the live store and blanked every photograph on the test site.
Three new things, all switched off — nothing here is reachable on Saturday
A place for a customer to keep their own machines switched offnobody can see this yetfront#4021, ps#710
A customer can record the machines they own and keep photographs, manual PDFs and links against each one, so the parts they need are found from their own machine rather than from a catalogue search. The storage half is in the order services; the page half is on the store website behind a setting that does not exist on the live store.
Order, if it is ever switched onThe services half must be live first. This release carries it, so after Friday the switch becomes possible — it does not become set.
A hardware store, switched off with a second switch added on purpose switched offnobody can see this yetfront#4022, front#4046
Bin-stock hardware — bolts, fasteners and similar — as its own section. It ships off and should stay off for a specific measured reason: of the 629 hardware part numbers, 585 do not exist in the catalogue at all, and 44 collide with a New Holland part carrying the same number. A dedicated off switch was added after the section was built, so it can be stopped without withdrawing the release.
The decision, for a later weekNot whether to switch it on, but what to do about 44 numbers meaning two different parts.
A chat widget, off because nothing configures it switched offnobody can see this yetfront#4004, front#4005
The widget reads its configuration from a setting that does not exist on the live store, so it does not load. Confirmed by reading the live store’s settings on Thursday rather than by assuming. See the third decision above about the duplicate copy of this work.
One thing that looks like it ships switched off, and does not ships Friday, ona customer can see thissearch#988, search#989
Parts that carry a tiered price but no straightforward one become buyable, behind a setting. That setting was read off the live search service on Thursday and it is already on. So this one takes effect immediately on promote — it is listed here because grouping it with the switched-off work would have been wrong.
Catalogue and brand pages — three changes
Two machines with the same name can be told apart ships Fridaya customer can see thisfront#3970
Where two models share a name, the page now names what distinguishes them and fills in the column showing what each part fits. An earlier attempt at this was closed without shipping, so this is genuinely new for the live store rather than a repeat.
The brand page heading stops jumping as it loads, and seven dead links are gone ships Fridaya customer can see thisfront#3951, front#4049
Space for the second line of the heading is now reserved, so the view control below it does not move under the cursor as the page settles. Seven brand-hub addresses that no longer lead anywhere were removed.
Housekeeping — nothing visible from outside
Twenty-eight changes: security updates to third-party code, two retired services deleted, build checks corrected, and documentation. Two are worth naming. A build check was reporting a critical security finding on every build that was not one, which trains people to ignore the check — fixed. And two services that had already been removed from the servers months ago still existed in the code; they are now deleted, which is the difference between something being off and something being gone.
Everything in this release — 92 changes, each with a one-line summary
The store website58 changes 37 a customer or Google can notice
| Change | What it is | What moved | Built by |
|---|---|---|---|
| front#4068 | The parts rail carried a dead open state and two lines that described behaviour it no longer had. | dead state and misleading comments removed | Vova |
| front#4063 | Several spellings of the same photograph address folded into one on-origin path. | one media path, self-fetch resolved to storage | Vova |
| front#4067 | An accessibility check was auditing a not-found page and passing it. | a11y smoke audits the real search route | Vova |
| front#4061 | The mobile parts sheet closes with a swipe instead of a small cross. | collapse gesture on the sheet | Vova |
| front#4055 | Three comments promised a fail-fast behaviour the build disproves. | comments corrected | Vova |
| front#4058 | The floating marker covered the diagram it was describing; its jobs moved to the rail. | floating callout pin deleted | Vova |
| front#4057 | Diagram callouts and zoom controls were too small to hit with a thumb. | tap targets enlarged | Vova |
| front#4047 | A held part could still be reached by following a link, including through the lookup pages. | links fail closed via mayLink | Vova |
| front#4054 | A configuration guard reported a critical security finding on every build that was not one. | guard stops false-firing | Vova |
| front#4051 | The image optimizer now reads storage directly, so no page names the retiring media address. | optimizer points at the bucket | Vova |
| front#4048 | The row beneath a diagram is a buy surface, not a legend. | rail row carries price and add | Vova |
| front#4053 | A colour check warned on one notation of a colour while passing two identical ones. | colour scan normalises notation | Vova |
| front#4035 | The index-gate auditor knew two of the three address forms it had been granted. | auditor covers all three forms | Vova |
| front#4046 | A dedicated off switch for the hardware section, so it can be stopped without withdrawing the release. | NEXT_PUBLIC_FEATURE_HARDWARE, default off | Vova |
| front#4049 | Seven brand-hub addresses that no longer led anywhere. | dead aliases deleted | Vova |
| front#4044 | The part number moves to the front of every part page address; old addresses redirect once. | PDP slug is part-number first | Vova |
| front#4040 | A useless code fragment turned the integration branch's lint red. | fragment removed | Vova |
| front#4021 | A place for a customer to record their own machines, with photographs, manuals and links. Ships switched off. | My Shed behind NEXT_PUBLIC_FEATURE_SHED | John |
| front#4045 | The quantity stepper next to a part inside an assembly could change the wrong row. | stepper keyed off the branded productId | Vova |
| front#4034 | One finger moves the diagram, two fingers zoom, and the page no longer scrolls underneath. | one-finger pan, two-finger zoom | Vova |
| front#4022 | A bin-stock hardware section at /hardware. Ships switched off. | Fastenal hardware store, flagged | John |
| front#4028 | Tapping a callout on a diagram adds that part to the cart without leaving the diagram. | callout add to cart | Vova |
| front#4026 | The hand-rolled gesture handling is replaced by the maintained library every mobile map uses. | react-zoom-pan-pinch replaces custom hook | Vova |
| front#4027 | Third-party code carrying security advisories published that day. | fast-uri override bumped | Vova |
| front#4008 | The event that counts someone viewing a part had stopped firing, understating the figures. | GA4 view_item restored, branded item id | Vova |
| front#4014 | Superseded browser and identifier libraries. | browserslist and nanoid updated | Vova |
| front#4005 | A widget test was loading a real third-party script during the test run. | chat widget SDK stubbed in tests | Vova |
| front#4003 | Raw colour values the design-token audit was still reporting. | oklch literals named | Vova |
| front#3999 | When search is struggling the site retried hard and made it worse; it now remembers the failure briefly. Already live. | failure verdict cached | Vova |
| front#3995 | A model variant became unreachable when its card clamped the text. | full variant kept reachable | Vova |
| front#3993 | Automated issue filing used label names that no longer exist. | CI points at the governance families | Vova |
| front#3992 | A smoke test passed unless every one of its reference parts had rotted. | fails on any rotted canary | Vova |
| front#3986 | The live-store end-to-end reference parts pointed at parts that no longer have pages. | canaries re-pointed | Vova |
| front#3991 | The same page could be reached by two spellings of its address. | every slug segment lower case | Vova |
| front#3990 | A discontinued part redirected to a replacement that was itself discontinued. | no redirect to a withdrawn part | Vova |
| front#3989 | The all-categories grid lost each model's own equipment type. | equipment type preserved per model | Vova |
| front#3987 | Opening a brand to Google happened automatically on row count; it is now a recorded decision. | brand opening is a decision | Vova |
| front#3985 | The cart quoted a carrier estimate rather than what checkout charges. Already live. | cart states the charged amount | Vova |
| front#3983 | The shipping estimate described the pickup counter as if it were delivery. Already live. | estimate quotes shipping | Vova |
| front#3979 | The model variant was missing from the card the grid actually renders. | variant on the rendered card | Vova |
| front#3977 | The filter sidebar counted rows the grid could not show. | sidebar counts what the grid shows | Vova |
| front#3975 | The brand grid dropped the index rule on a word search. | gate honoured on word search | Vova |
| front#3973 | On-site search could not find held parts. | held parts findable on site | Vova |
| front#3970 | Two models with the same name could not be told apart, and the Fits column was empty. | distinguishing attribute named, Fits filled | Vova |
| front#3969 | The word-search grid showed rows the index rule excludes. | word-search grid gated | Vova |
| front#3965 | A duplication check compared against the wrong baseline. | ratchet audits the PR's own base | Vova |
| front#3963 | A search matching exactly one part answered with an error instead of showing it. Already live. | sole exact match renders | Vova |
| front#3962 | The shopping feed's registry half is live and the affected class is four times the filed size. | documentation corrected | Vova |
| front#3950 | A condensed proxy documentation block back-merged from the live branch. | docs back-merge | Vova |
| front#3960 | A parts-list row with no page was judged by the wrong field. | judged on the carrying vendor code | Vova |
| front#3959 | The sitemap check subtracted the same held rows twice. | brand hold stamped, double-subtract fixed | Vova |
| front#3958 | When the site cannot resolve a search it now shows results instead of guessing an address. | resolver miss goes to results | Vova |
| front#3957 | Comment debt around held brands, and an end-to-end test that ignored the rule. | comments trimmed, e2e follows the gate | Vova |
| front#3956 | The navigation shell assumed a brand was open when it did not know. | pessimistic fallback in the shell | Vova |
| front#3953 | A brand with no offerable part listed pages that answer not-found. | empty brand hides itself | Vova |
| front#3945 | Test-site checks followed only one half of the index rule. | gates follow the dual contract | Vova |
| front#3951 | The brand heading's second line moved the view switch as the page loaded. | h1 second line reserved | Vova |
| front#3871 | The equipment showcase said '1 matches'. | count line pluralised | Vova |
Search24 changes 17 a customer or Google can notice
| Change | What it is | What moved | Built by |
|---|---|---|---|
| search#1000 | The photograph address was written into the code in six places; now one setting, and the service refuses to start without it. | CDN_URL required, no fallback | Vova |
| search#998 | An automation caller pinned to a superseded version. | github-script bumped to v8 | Vova |
| search#996 | The sitemap, shopping feed, parts lists and canonical links emit the new part-page address. | part-number-first slug emitted | Vova |
| search#995 | Attachment entries were handed out as if they were parts. | attachment slugs withheld | Vova |
| search#994 | A lower-case part number did not answer on the assemblies path. | case-insensitive assemblies lookup | Vova |
| search#991 | Contract test fixtures had rotted against the real responses. | fixtures refreshed | Vova |
| search#982 | Heavy overnight index work shared the customer database login and competed with searches. | separate indexer pool, falls back safely | Vova |
| search#989 | The tiered-price setting turned on for the test service. | flag enabled on dev | Vova |
| search#988 | Parts with a tiered price but no straightforward one become buyable. The setting is already on in production. | ladder-priced rows sellable | Vova |
| search#987 | Whether a part is published was read from a snapshot rebuilt overnight. | live publish_status | Vova |
| search#985 | The index rule was computed from a nightly view rather than from the registry that decides it. | gate driven from the registry | Alex |
| search#984 | Issue templates referenced labels that do not exist. | templates corrected | Vova |
| search#983 | A core deposit outranked a buyable part in the results. | buyable row ranked first | Vova |
| search#980 | The result count included rows the grid cannot render. | count matches the grid | Vova |
| search#978 | The ungated results grid ignored sidebar filters it had accepted. | every accepted cut runs | Vova |
| search#977 | The gated results grid ignored the top-seller filter it had accepted. | top-seller cut runs | Vova |
| search#975 | The price filter was accepted and then not applied to the grid. | price cut kept and run | Vova |
| search#973 | The results lane advertised filters its own grid could not run. | only runnable cuts offered | Vova |
| search#971 | The top-sellers filter did nothing, and two filters had never applied anywhere. | top sellers honoured, two filters removed | Vova |
| search#969 | A deployment health check raced the service's own cold start and failed a good deploy. | candidate probe retries | Vova |
| search#967 | Some filter counts ignored the price cut. | price honoured in every facet producer | Vova |
| search#965 | A held brand's listing ignored the search terms typed into it. | gated brand listing keeps its query | Vova |
| search#961 | Filter counts ignored the index rule. | indexableOnly honoured in facets | Vova |
| search#959 | The main results lane ignored the index rule. | indexableOnly honoured on q= | Vova |
Order and payment services10 changes 2 a customer can notice
| Change | What it is | What moved | Built by |
|---|---|---|---|
| ps#729 | The photograph address was written into the code with no way to override it. | CDN base read from the environment | Vova |
| ps#726 | Workspace packages were relying on dependencies they never declared. | imports declared | Vova |
| ps#710 | Photographs, manual PDFs and links stored per machine, for the customer's own machines. Ships unused. | equipment attachments on the user service | Vova |
| ps#724 | An automation caller pinned to a superseded version. | github-script bumped to v8 | Vova |
| ps#722 | A build step used a floating version of a cache action. | actions/cache pinned | Vova |
| ps#721 | Root workspace dependencies were declared as if they shipped to production. | declared as devDependencies | Vova |
| ps#720 | A DNS infrastructure definition nothing had used since the provider changed. | dead terraform stack removed | Vova |
| ps#718 | Two services already absent from the servers still existed in the code. | media-service and documents-service deleted | Vova |
| ps#715 | A paid order that failed to record itself was marked as handled, so nothing retried it. Already live. | not marked processed without an order | Vova |
| ps#714 | The bug template referenced a label that does not exist. | template corrected | Vova |
What is live now, and what Friday would replace it with — the exact thing to go back to
The left of each pair was read off the running systems on Thursday 3 September. The right is what the promote would put there. Going back means going back to the left.
| Storefront | 28a3ec001 → 3a0e72f26 | Read off the live address rather than off the newest build, which are not always the same thing. The left already includes the three emergency repairs pushed out between 29 August and 1 September; all three are in this release properly, so nothing is lost by going back to it. Vercel keeps the previous build, so going back is one button. |
|---|---|---|
| Search | crop-search:97ac9eb4 → crop-search:1184c465 | Search is promoted by swapping the running image rather than by merging. This is the half that does not start until the missing setting is added — see the first decision. |
| Search rollback name | search-api-00026-zl2 | The version to send traffic back to. It is reachable by name until it is deleted, so the safe rollback does not touch images at all. |
| Services | a5bfb9b7 → 0c3a3f07 | Catalogue, user and delivery
services run the left-hand version. Payment runs 4e34a766, which is further ahead
because it carries the 29 August emergency repair; that repair is in this release too. |
| Test site | not cut this week | The test site still holds the 21 August cut. Nothing in this release has been through it — see the fifth decision. |
| Database | unchanged | No migration runs with this release. |
| The four index switches | unchanged | Indexing on, relaxed indexing off, priced-only on, diagram and equipment-tree pages held back. Read off the live store on Thursday. The promote does not alter any of them. |
| The three new switches | absent → absent | Neither the machines section, nor the hardware section, nor the chat widget has a setting on the live store, and the promote does not create one. That is what makes them switched off rather than merely unadvertised. |