07 · Implementation roadmap

A sequence of gates, not a promise.

The implementation plan is unapproved. The 0.4.0 architecture baseline still stands. Local work is proposed at no recurring fee. Anything that bills waits for a pricing gate. This chapter does not approve a provider, a second source, or DJ-11.

Unapproved plan USD 50 ceiling

Local, before any subscription

ADR-007 proposes Hono on Node, local PostgreSQL with schemas resolver and product, files stored by checksum, and a fake model. The first slice runs the fictional Pantry & Pour feed, cap_pp_feed_1011, through those ports. Domain code talks to ports. Adapters are the local ones. Passing the slice does not prove a real source.

Figure

What runs locally before any recurring service is paid?

What runs locally before any recurring service is paid? The first slice is a fictional Pantry & Pour feed on a laptop: Hono on Node, local PostgreSQL, files by checksum, and a fake model. Domain ports stay stable. Adapters are the local ones. A fixture feed submits captures to the resolver process. ArtifactStore is a filesystem. JobTransport is PostgreSQL. The model port is a fake. resolver_app writes the resolver schema. product_app cannot. product_app writes projections. No hosted account is required for this stage. capture events call ports model bytes SQL STATE Fixture feed Pantry & Pour JSON SERVICE Resolver on Node Hono, proposed SERVICE Product on Node Same machine GATE Stable ports Domain code stays here MODEL ACTOR Fake model No paid call OBJECT STORE Filesystem artifacts By checksum DATABASE Local PostgreSQL Two schemas, two roles

Takeaway. The first slice is a fictional Pantry & Pour feed on a laptop: Hono on Node, local PostgreSQL, files by checksum, and a fake model. Domain ports stay stable. Adapters are the local ones.

Text equivalent

  1. A fixture feed submits captures to the resolver process.
  2. ArtifactStore is a filesystem. JobTransport is PostgreSQL. The model port is a fake.
  3. resolver_app writes the resolver schema. product_app cannot.
  4. product_app writes projections. No hosted account is required for this stage.

Status. Proposed stack (ADR-007). Not approved and not running. Pantry & Pour does not prove a real source.

Hosted, only if a spike allows it

The proposed hosted adapters are private R2, queues, Hyperdrive, and an optional metered model. The provider is not chosen. If SPK-01 fails, the recorded fallback is a Node container near the database. Ports stay. Spend is not authorized by this guide, and no account is created here. DJ-07 records that choice as open.

Those are infrastructure adapters: a bucket, a queue, a database connection, or the process that hosts the service. A parser adapter is a different use of the word. It is a versioned reader for one source shape, such as pa_shopfeed_json. The glossary defines each one: infrastructure adapter and parser adapter.

Figure

What is the proposed hosted arrangement, if a spike allows it?

What is the proposed hosted arrangement, if a spike allows it? Ports stay the same. Adapters change to private object storage, queues, Hyperdrive and an optional metered model. Hosted spend is not authorized by this guide. Collectors are proposed as Workers plus Cron, with a browser or regional host only if a source needs it. The resolver and product service are proposed as Hono on Workers. Evidence moves to a private R2 bucket. Jobs move to queues. PostgreSQL is reached through Hyperdrive. The model adapter is optional and metered. It is off until admission allows it. If the Worker spike fails, the domain packages stay and the process adapter changes. capture queue events call ports if admitted bytes SQL SERVICE Workers collector Cron, feed or API SERVICE Resolver worker Adapter may change SERVICE Product worker Separate deployable GATE Same ports Only adapters change EXTERNAL Model API Optional, metered OBJECT STORE Private R2 S3-compatible assumption DATABASE Hyperdrive + PostgreSQL Provider not chosen

Takeaway. Ports stay the same. Adapters change to private object storage, queues, Hyperdrive and an optional metered model. Hosted spend is not authorized by this guide.

Text equivalent

  1. Collectors are proposed as Workers plus Cron, with a browser or regional host only if a source needs it.
  2. The resolver and product service are proposed as Hono on Workers.
  3. Evidence moves to a private R2 bucket. Jobs move to queues. PostgreSQL is reached through Hyperdrive.
  4. The model adapter is optional and metered. It is off until admission allows it.
  5. If the Worker spike fails, the domain packages stay and the process adapter changes.

Status. Proposed (ADR-007, DJ-07). Open if SPK-01 fails: a Node container near the database is the recorded fallback. No account is created here.

Milestones and the decisions in front of them

M0 builds the skeleton: ports, schemas, and a ledger. M1 runs the fixture locally. Gate 2 asks whether real prices fit under USD 50. Until that gate passes, stay local. M2 may bill because SPK-01, SPK-02, and SPK-05 touch hosted services. M3 watches one real source in private, with no public release. M4 publishes only inside a policy Jonathan has approved. M5 is a decision to add, reduce, or defer a second source. DJ-11’s two-scraper launch is narrowed by this plan and still waits.

Those gates are copied, still unchecked, onto the Broadwater pilot acceptance checklist. The checklist does not approve a pilot, a source, or a tenant.

Figure

What is the proposed order of build, measurement, and decision?

What is the proposed order of build, measurement, and decision? Local milestones spend no recurring service money. Hosted work starts only after prices fit the confirmed ceiling. A second source is a later decision, not a launch promise. Gate 1 asks for the decisions the plan names before code that assumes them. M0 and M1 build ports and the Pantry & Pour slice locally. Gate 2 is pricing. Until it passes, stay local. M2 runs platform spikes that may bill. M3 watches one real source in private. M4 publishes only inside an approved policy. M5 decides a second source with the SPK-09 fit rule. pass local priced? pass one source policy fit rule GATE Gate 1 Decisions before the slice SERVICE M0 skeleton Ports, schemas, ledger SERVICE M1 fixture slice Pantry & Pour, no fee GATE Gate 2 pricing Must fit USD 50 SERVICE M2 spikes May bill. SPK-01, 02, 05 SERVICE M3 shadow source Private. No public release. GATE M4 scoped release Only an approved policy CHOICE M5 second source? Add, reduce, or defer

Takeaway. Local milestones spend no recurring service money. Hosted work starts only after prices fit the confirmed ceiling. A second source is a later decision, not a launch promise.

Text equivalent

  1. Gate 1 asks for the decisions the plan names before code that assumes them.
  2. M0 and M1 build ports and the Pantry & Pour slice locally.
  3. Gate 2 is pricing. Until it passes, stay local.
  4. M2 runs platform spikes that may bill. M3 watches one real source in private.
  5. M4 publishes only inside an approved policy. M5 decides a second source with the SPK-09 fit rule.

Status. Unapproved plan. The 0.4.0 architecture baseline still stands. DJ-11’s two-scraper launch is narrowed by this plan and still awaits Jonathan.

What would have to be measured

Nothing in this section has been measured. SPK-07 would record database hours and storage against an assumption of 16 active hours a day. SPK-08 would record parser misses, model attempts including retries, and review minutes. SPK-09 would rerun the cost model. The proposed fit rule adds a second source only when the two-source forecast is at or under USD 35 and operating exposure is at or under USD 40, with USD 10 still reserved. A miss means reduce scope, drop browser dependence, or defer. It does not silently add the source. Unknowns stay unknown. They are not entered as zero.

Figure

Which measurements decide the second source?

Which measurements decide the second source? Unknowns stay unknown. They are not entered as zero. The proposed fit rule adds a second source only when the two-source forecast is at or under USD 35 and operating exposure stays at or under USD 40, with USD 10 still reserved. SPK-07 measures database active hours and storage growth against the assumed 16 hours a day. SPK-08 measures parser failure, model attempts including retries, and human review minutes. SPK-09 reruns the cost model with those measurements. A miss on the fit rule means reduce, drop browser dependence, or defer. It does not silently add the source. measure hours together memo SERVICE Shadow cycles One authorized real source STATE SPK-07 database Hours and storage growth STATE SPK-08 effort Parser, model, review time GATE SPK-09 fit rule Forecast ≤ 35 and ≤ 40 CHOICE Second source decision Add, reduce, or defer

Takeaway. Unknowns stay unknown. They are not entered as zero. The proposed fit rule adds a second source only when the two-source forecast is at or under USD 35 and operating exposure stays at or under USD 40, with USD 10 still reserved.

Text equivalent

  1. SPK-07 measures database active hours and storage growth against the assumed 16 hours a day.
  2. SPK-08 measures parser failure, model attempts including retries, and human review minutes.
  3. SPK-09 reruns the cost model with those measurements.
  4. A miss on the fit rule means reduce, drop browser dependence, or defer. It does not silently add the source.

Status. Proposed spikes SPK-07, SPK-08 and SPK-09. Nothing here has been measured.

Jonathan’s open decisions

Each row is still waiting. The recommendation in the record is not an acceptance. A checkmark in this browser is a reading mark only. It does not change the decision file, and it is not stored.

Storage alternatives for DJ-01 and DEC-01, and the open identity-provider choice, are gathered in the decision register under the guide annotation. That annotation does not select one. The source list is decisions-for-jonathan.md.

Spikes named by the plan

SpikeQuestionStatus
SPK-01Can Hyperdrive keep the AW-01 transaction?Not run
SPK-02Do duplicate and reordered events apply once?Not run
SPK-03Browser Run limits. The plan retargets this toward the DJ-06 source.Not run
SPK-04Is JSONB with GIN enough for the candidate query?Not run
SPK-05Can a cursor be rebuilt and a restore fenced?Not run
SPK-06D1, only if DEC-01 is still open.Conditional
SPK-07Database hours and storage growth.Not measured
SPK-08Parser, model, and review effort.Not measured
SPK-09Does a second source pass the fit rule?Not measured

Gate language and the decision list are copied in implementation-plan.md and decisions-for-jonathan.md. Read them before treating any row above as chosen.

Glossary