Farther ShoreDocs
Go to Farther Shore
The fs.business() program
Meters & measures
Counted resources
Routes & access groups
Route groups & grants
Plans & pricing
The build output
What is in the artifactAuthenticity and validationDeterminism gateLocal build vs accepted contract
Team RBAC
Tenancy & identity
Frontend integrations
@farthershore/business
Add metered routes
Add a resource limit
Add team RBAC
@farthershore/business exports
@farthershore/business/codegen exports
Status
Docs/Build your product/The build output

The build output

Understand deterministic Manifest IR and what a local build proves.

farthershore build loads the business/ program, validates the declaration graph, and writes a canonical Manifest IR envelope.

bash
farthershore build
farthershore build --format json
farthershore build --entry business/ --out business-build.json

Normal folder discovery is preferred. Use --entry only when deliberately building another folder or file.

What is in the artifact

Manifest IR contains the normalized business contract: logical backends, routes and policies, meter attachments, plans, grants, limits, resources, frontend integrations, and permission-group declarations. The business-wide RBAC enablement flag is operating state. The artifact also carries SDK and IR versions plus a deterministic hash.

It does not contain arbitrary repository code, concrete backend origins, decrypted secrets, customer rows, active deployment state, or presentation metadata.

Authenticity and validation

Only an authentic fs.business() result from the loaded SDK instance compiles. Raw objects and schema-shaped JSON cannot impersonate a built program.

The build executes TypeScript through the SDK loader; it is not a TypeScript type checker. Run the business repository's separate typecheck command before the build (for example, its configured tsc --noEmit script). Neither gate replaces the other: a type-correct program can still violate runtime invariants, and an ill-typed program can execute successfully after TypeScript is transpiled.

The build validates runtime invariants: duplicate declarations, dangling refs, unmatched metering selectors, invalid plan combinations, unattached limited dimensions, conflicting route methods, and secret-bearing contract values.

Determinism gate

The loader compiles the program in isolated workers and compares hashes. An observed difference is rejected. Matching hashes are not proof of source purity: an environment variable, clock value, file, or network response could happen to return the same value in both runs. Do not depend on those external inputs in contract declarations, even if a particular build passes.

Computed constants and helper functions are fine when their result is purely a function of source-controlled inputs.

Local build vs accepted contract

A successful local build proves only that your checkout compiles. Push the source and wait for the repository validation/apply check. Core accepts the IR, computes the semantic release impact, and applies environment-specific state.

bash
git push
farthershore apply-timeline list <business>
farthershore business contract <business>

If the pushed apply fails, the previous accepted contract remains authoritative. Fix the source and push another commit rather than editing generated IR.

Do not commit build artifacts unless the business repository's own instructions explicitly require them. The TypeScript program is the reviewable source.

PreviousPlans & pricingNextTeam RBAC

On this page

What is in the artifactAuthenticity and validationDeterminism gateLocal build vs accepted contract