Standard Industries — Engineering Onboarding
Standard Industries · Engineering Onboarding

Welcome. Let's get you shipping by the end of the week.

This is your first-week map at Standard Industries — the team behind Fabric, "the connective tissue for industrial operations." Work top to bottom: request access, set up your machine, learn how we ship. Tick things off as you go — your progress saves in this browser.

Download the onboarding repostandard-industries-onboarding.zip · 48 KB

Start here — everything below assumes you've unzipped this.

Est. 2–3 hours, mostly waiting on installs & approvals Remote-first · Denver · Lisbon · Singapore Stuck? #new-threads on Slack
00

Your first 30 minutes

A short, ordered sequence to get oriented. Kick off the access requests first (step 3) so approvals process in the background while you set up your laptop.

  1. Download, unzip & verify — one line

    Grab the onboarding zip from the top of this page, then unzip it, step into the folder, and confirm the checkout is intact — all in a single command. If git fsck reports any errors, delete the folder and download it again before continuing.

    unzip standard-industries-onboarding.zip && cd standard-industries-onboarding && git fsck --full
  2. Skim the lay of the land

    Read this page end to end once so you know where everything lives. You are not expected to memorize it by Friday.

  3. Start your access requests early

    Some approvals take up to a business day. File them now so they clear while you set up. Jump to Request access.

  4. Copy the environment template

    Fill in the values your team lead sends you. Never commit .env — it's gitignored for a reason.

    cp .env.example .env
  5. Say hi

    Introduce yourself in #new-threads on Slack, and drop a line in your team channel.

01

Request access

Request these on day one — some take up to a business day and you'll be blocked without them. File through the IT portal (link in your welcome email) or #it-help. Your team lead approves role-specific access.

The #1 day-one blocker is the eng-staging VPN group. Request it first — everything that touches the staging cluster depends on it.

Identity & core 0/4

Source & build 0/4

Network & environments 0/3

Tools & observability 0/5

!
Least privilege, on purpose. You don't need prod or write-to-everything access to be productive in week one, and asking for less keeps our blast radius small. Request read access first; escalate only when a task actually requires it. Anything touching customer data or prod goes through your lead and, for sensitive scopes, Security.
02

Set up your machine

Budget two to three hours, mostly waiting on installs. We support macOS (Apple Silicon or Intel) and Ubuntu 22.04+. Windows engineers work inside WSL2 — talk to IT before day one to get it provisioned.

Our device pins

ToolchainVersionPinned in
Node20.14.0.nvmrc
Python3.12.4.python-version
Go1.22.xgo.mod

The setup script installs and pins all three via nvm, pyenv, and goenv.

Setup checklist 0/7

1 · Get the code and verify

Download the zip from the top of this page, then unzip, enter the folder, and verify integrity — all in one line. Once your GitHub access lands you can switch to cloning; same repo, either way.

unzip standard-industries-onboarding.zip && cd standard-industries-onboarding && git fsck --full

# …or, once you're in the GitHub org:
# git clone git@github.com:standard-industries/onboarding.git

2 · Install the toolchain

setup.sh installs Homebrew or refreshes apt, then nvm / pyenv / goenv with the pinned versions, Docker, the internal gi CLI, and the pre-commit hooks. It's safe to re-run — every step is idempotent.

./scripts/setup.sh

3 · Verify with doctor

Checks versions, Docker health, SSO login, and VPN reachability to staging. Here's what a healthy-enough local machine looks like — remote checks (SSO, VPN) can be red until your access clears:

./scripts/doctor.sh
Standard Industries :: machine doctor
------------------------------------
Toolchain:
   node 24.14.0 (want 20.14.0 — run 'nvm use')
   python not found
   go go1.26.1
   si CLI not found (check registry access)
Containers:
   docker daemon reachable
Git hygiene:
   pre-commit installed
   pre-commit hook registered
   .env present
Access (best-effort checks):
   no active AWS SSO session (run your SSO login)
   staging unreachable — are you on the eng-staging VPN?
------------------------------------
Result: 5 passed, 5 need attention

4 · Configure your environment

The variable names in .env.example are safe to read; the values are secrets your lead sends you. .env is gitignored — never commit it.

cp .env.example .env

5 · Bring up the local stack

We run a trimmed slice of production locally via Docker Compose.

si up            # Loom, Spindle, Selvage, Postgres, Redis, Kafka
si seed          # load demo tenants and sample device data
si open tapestry # opens the local customer app at http://localhost:3000

si up only starts the core path. Data-heavy services (Dye) and edge simulators (Weft, Bobbin) start on demand with si up --profile edge or --profile analytics.

6 · Run something end to end

The smoke flow creates a demo tenant, registers a fake device through Bobbin, pushes a reading through Weft → Warp → Selvage, and asserts a workflow fires.

si smoke

If si smoke passes, you have a working dev environment. Congrats.

7 · Make your first change

A good first task is a "docs or tests" PR — small, low-risk, and it walks you through the whole flow. Your onboarding buddy will suggest a starter issue tagged good-first-issue. Read How we ship before you open it.

?
Common first-day snags. VPN unreachable → you're probably not in the eng-staging group yet. Docker won't start on Apple Silicon → enable Rosetta in Docker Desktop (Kafka needs it). si seed hangs → Postgres isn't healthy yet; gi logs postgres and give it 30 seconds. Pre-commit rejected your commit → that's expected, it auto-formats; re-stage and commit again.
03

How we ship

The short version: small changes, clear descriptions, green CI, one approving reviewer. This applies across every service repo, not just onboarding.

Branching & commits

Cut branches from main, named <type>/GI-<ticket>-<short-slug>. Types: feat, fix, docs, chore, refactor, test, perf.

git switch -c feat/GI-1421-selvage-retry-backoff

We like Conventional Commits — keep the subject under ~72 chars and explain the why in the body.

feat(selvage): add exponential backoff to action retries

Workflows that call flaky external webhooks were hammering them on
failure. Backoff caps at 5 attempts. Closes GI-1421.

Pull requests

Keep them small
A tight, single-purpose PR is a "snip." A 2,000-line PR is a saga, and sagas sit unreviewed for days — split them.
Fill the template
Link the Jira thread. Add screenshots for UI changes.
Draft = WIP
Use a WIP: prefix or GitHub's draft state; mark ready when CI is green.
CI must pass
The lint gate blocks merge — run pre-commit run --all-files locally first.
pre-commit run --all-files

Review norms

  • One approval required — two for changes to Spindle (auth), Warp (event schemas), or anything touching tenant isolation.
  • Reviewers aim to respond within one business day. Blocked? A polite PTAL in the team channel.
  • Reviews are about the code, not the coder. Approve with LGTM; the author squash-merges after approval.
  • "Disagree and commit" is fine once a decision is made.

What needs an RFC

Write a short RFC in The Spool (Notion) before the code for: new services, new Warp event schemas, cross-team API changes, data-model changes, or anything that alters tenant isolation. Small stuff doesn't — use judgment, and ask your lead when unsure.

The non-negotiables. Never commit secrets or .env. Never reach into another service's database — use its API or a Warp event. Always scope by tenant_id; cross-tenant leaks are security incidents, full stop.
04

How Fabric fits together

Fabric ingests signals from customer factory equipment, moves them through an event backbone, runs them against customer-defined workflows, and surfaces results in dashboards and integrations. Every service name is textile-themed — blame the CTO.

fabric — the shape of the system
  Factory floor          Edge                Cloud (AWS / EKS)
 ┌────────────┐     ┌──────────────┐   ┌──────────────────────────────┐
  PLCs / MES │─────│ Bobbin agent │───│  Weft ─▶ Warp ─▶ Selvage   
  ERP / IoT  │ TLS │ (device mgmt)     ingest  events  workflows  
 └────────────┘     └──────────────┘   │            │          │        │
                                       │            ▼          ▼        │
                                        Dye       Shuttle 
                                       │        (analytics)  (notify)   │
                                       └──────┬──────────────┬──────────┘
                                        ┌────▼────┐    ┌────▼────┐
                                         Tapestry│    │  Reel   
                                        (cust app)│   │(admin)  
                                        └─────────┘    └─────────┘
 Everything public enters through Loom (gateway) and authns via Spindle.

Core services

ServicePurposeLangTeam
LoomAPI gateway / routing, rate limiting, TLS terminationGoPlatform
SpindleIdentity, auth, tenant / RBAC, API keysGoPlatform
WarpKafka event backbone — the spine everything publishes toGoPlatform
WeftIngestion — normalizes raw device readings into eventsPythonEdge
BobbinDevice registry + fleet management for on-prem agentsPythonEdge
SelvageThe workflow orchestration engine — the actual productGoOrchestration
DyeAnalytics, aggregation, reporting queriesPythonData & Analytics
ShuttleNotifications — email, webhook, SMS, in-appGoPlatform
TapestryCustomer-facing web appTS / Next.jsFrontend
ReelInternal admin + support consoleTS / Next.jsFrontend
SkeinShared design system / component libraryTSFrontend

How a reading flows

  • A device on the factory floor emits a reading.
  • The Bobbin agent (running on-prem) batches and ships it over mTLS.
  • Weft validates and normalizes it into a canonical Fabric event.
  • The event lands on a Warp topic (fabric.<domain>.<event>).
  • Selvage evaluates the tenant's workflows and may emit actions.
  • Actions fan out — Shuttle notifies humans, Dye records for analytics, results surface in Tapestry.

Guardrails worth internalizing early

  • Service boundaries are sacred. Talk to other services through their API or Warp events — never their database.
  • Everything is multi-tenant. When in doubt, scope by tenant_id.
  • Warp is the spine. New events go through the schema registry — no ad-hoc topics.
  • Prod is boring on purpose. Big changes ship behind flags via Heddle.
05

Who to ask

Names are your fastest route to an answer — but always prefer the team's Slack channel over DMing a person, so answers stay searchable. (Everyone below is fictional.)

Engineering teams

TeamOwnsAsk them aboutChannel
PlatformLoom, Spindle, Warp, Shuttleauth, gateways, event schemas, rate limits#team-platform
EdgeWeft, Bobbindevice agents, mTLS, ingestion, floor protocols#team-edge
OrchestrationSelvageworkflow evaluation, the rules DSL, action fan-out#team-orchestration
Data & AnalyticsDye, ClickHousereporting queries, aggregations, data exports#team-data
FrontendTapestry, Reel, Skeinthe customer app, admin console, design system#team-frontend
SRE / Infraclusters, CI/CD, Heddle, on-calldeploys, environments, flags, incidents#team-sre
Securityprogram, threat model, IRtenant isolation, secrets, anything vuln-shaped#security-report

"Who owns this?" cheat sheet

If it's about…Ask
Login / can't authenticatePlatform · #team-platform
A device isn't reportingEdge · #team-edge
A workflow didn't fireOrchestration · #team-orchestration
A dashboard number looks wrongData & Analytics · #team-data
The UI is broken / uglyFrontend · #team-frontend
A deploy failed / prod is downSRE · #team-sre (or #incidents if live)
"Is this a security issue?"Security · #security-report
Laptop, accounts, hardware, WSLIT (Sam Okonkwo) · #it-help
Payroll, benefits, PTOPeople Ops · #people-ops
06

Glossary & channels

The jargon you'll hit in your first week. When a term nobody explains trips you up, it's probably here — and if it isn't, add it in a PR.

Concepts & jargon

TermMeaning
TenantA customer organization. Everything is scoped by tenant_id.
ReadingA single data point emitted by a device (temp, count, status…).
WorkflowA tenant-defined rule in Selvage: when X, do Y.
WeaveInternal verb for "connect a customer's system into Fabric."
The SpoolOur internal wiki (Notion). Deeper docs and RFCs live there.
ThreadA unit of work / ticket. Tracked in Jira.
SnipA small, self-contained PR. We like snips.
Lint gateThe CI check that blocks merge on style / format failures.
FrayedSlang for a flaky test. "That test is frayed again."
Golden pathThe supported, blessed way to do a common task via the gi CLI.

Acronyms you'll hear

AcronymMeaning
SIStandard Industries. Also our internal CLI (si).
PLC / MES / ERPFactory device / shop-floor software / back-office software we ingest from.
RBACRole-Based Access Control, enforced by Spindle.
mTLSMutual TLS — how Bobbin agents authenticate to the cloud.
DRIDirectly Responsible Individual — the one owner of a thing.
RFCRequest For Comments — how we propose non-trivial changes.
PTAL / LGTM / WIP"Please Take Another Look" / "Looks Good To Me" / "Work In Progress."

Slack channels to join

ChannelFor
#new-threadsNew hires — ask anything, no dumb questions
#eng-helpGeneral engineering questions
#dev-envBroken setup, doctor.sh failures, tooling
#incidentsLive incident coordination (read-only unless on-call)
#deploysAutomated deploy notifications
#watercoolerNot about work
07

When you're stuck

We'd rather you ask early than stay stuck. Nobody expects you to have this memorized by Friday.

  • Anything blocking you on day one — ping your onboarding buddy (assigned in your offer packet) or #new-threads.
  • "Who owns X?" — check Who to ask, then #eng-help.
  • Setup script broke — paste the output of ./scripts/doctor.sh into #dev-env.
  • An approval is stuck >1 business day — nudge in #it-help and CC your lead. Don't sit blocked silently — that's the one thing we ask you not to do.
When your setup checklist above hits 100% and si smoke passes, you're ready for local development, feature branches, and the code-review workflow. Welcome aboard.