Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Desired-state schema for Forge. Declarative SQL diffed and applied with pg-schema-diff, so nobody hand-writes a migration.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗The Forge database project: a version-controlled tree of desired-state SQL scripts (one file per
object, dacpac-style) plus a C# harness that reconciles any live Postgres database to that desired
state — Postgres' answer to a SQL Server .dacpac + sqlpackage.
The harness orchestrates stripe/pg-schema-diff (MIT-licensed, no account/registration) for the actual diff/apply; it does not hand-roll schema diffing.
This repo owns the Forge schema. forge-api has no EF Core migrations — they were retired on
2026-06-17. EF Core there is a lean query-mapping layer, and the schema it maps onto is the
assembled output of this repo's schema/ tree, embedded in the API as
forge.data/Schema/forge-schema.sql. The API's SchemaBootstrapper applies that file only to a
fresh database and is a no-op on an existing one; a populated install is brought forward by the
forge-db reconcile step in the forge-deploy upgrade sequence.
Engine note: we initially built over Atlas, but its free tier gates
CREATE EXTENSION/FUNCTION/TRIGGERbehindatlas login("available to logged-in users only") — a non-starter for an open-source self-host stack. pg-schema-diff has no such gate and handles ourvectorcolumns, identity columns, functions, and triggers natively. The swap is contained to one file (PgSchemaDiffRunner).
| Path | Role |
|---|---|
schema/ | The desired state. One object per file: tables/, indexes/, functions/, triggers/, extensions/, views/. This is the source of truth. |
premigrate/ | Applied-once scripts that run before the reconcile — the escape hatch for changes a state diff cannot express (renames, which would otherwise plan as DROP + CREATE). See DESIGN.md §6.3. |
data/ | Ordered, explicitly-idempotent backfills coupled to a schema change (add nullable column → backfill → enforce NOT NULL). pg-schema-diff emits DDL, never data. §6.1 |
seed/ | Schema-adjacent reference rows the application assumes exist (priorities, UoM, carriers, currencies, the chart-of-accounts reference, …). |
scrub/ | Cleanup rules for the clean-rebuild workflow — where "garbage" is defined once instead of as someone's ad-hoc DELETE. §6.2 |
history/ | Apply receipts: the plan SQL captured before each apply. Output only — never edited, never replayed. §4.1 |
src/Forge.Db | The harness CLI. tests/Forge.Db.Tests covers it (unit + Postgres-backed). |
tools/apply-schema.sh | Turn-key plan → apply → verify against the local stack. |
Full rationale, decision table, and the squash post-mortem: docs/DESIGN.md.
Dockerfile bakes the harness, the schema/ tree, and the pg-schema-diff binary
into a single image published to ghcr.io/armoryworks/forge-db (multi-arch, amd64 + arm64).
forge-deploy runs it as a one-shot pre-update step — backup → schema reconcile → app swap →
health gate — with SCHEMA_IMAGE_TAG pinned in lockstep with the release. Destructive plans halt
and are enumerated for approval rather than applied.forge-api's schema-drift-check workflow re-assembles this repo's schema/ tree and
fails if the embedded forge.data/Schema/forge-schema.sql has drifted from it. Regenerate that
file with forge-db assemble whenever the schema changes.A self-hoster who only runs the Forge stack installs none of the tooling below — the reconcile arrives as a container image. The prerequisites are for working on the schema or running the harness by hand.
Prerequisites:
.NET 10 SDK.
stripe/pg-schema-diff — the diff engine (MIT, no account). It publishes no prebuilt binaries, so install via either:
go install github.com/stripe/pg-schema-diff/cmd/[email protected] (the pinned version), orbrew install pg-schema-diff.Make sure it's on PATH (e.g. $(go env GOPATH)/bin) or set PG_SCHEMA_DIFF_BIN.
A pgvector Postgres (the schema declares the vector type, and pg-schema-diff provisions its
own temp DB on the target server — the connecting user needs CREATEDB). The project targets
pgvector/pgvector:pg18.
Common commands:
# inspect the assembled desired-state SQL (also how forge-api's embedded copy is regenerated)
dotnet run --project src/Forge.Db -- assemble --out /tmp/desired.sql
# show what would change to reconcile a DB to schema/ (no mutation)
dotnet run --project src/Forge.Db -- plan --db "postgres://user:pw@host:5432/db?sslmode=disable"
# assert a DB matches schema/ — exit non-zero on drift. Runs the pg-schema-diff plan PLUS an
# explicit pg_extension / pg_proc / pg_trigger check, so a dropped trigger trips both layers.
dotnet run --project src/Forge.Db -- verify --db "postgres://user:pw@host:5432/db?sslmode=disable"
# reconcile behind the safety gates: pending premigrate/ scripts first, then the schema plan
# (captured to history/ before it runs), then pending data/ + seed/ scripts — each applied once
dotnet run --project src/Forge.Db -- apply --db "postgres://…/db" --env dev
# clean rebuild (docs/DESIGN.md §6.2): dump data out, provision fresh, import back minus garbage
dotnet run --project src/Forge.Db -- dump --db "postgres://…/old" --out ./dump
dotnet run --project src/Forge.Db -- import --db "postgres://…/fresh" --from ./dump --exclude 'audit_*,*_log'
# (one-time) re-seed schema/ from a canonical pg_dump --schema-only
dotnet run --project src/Forge.Db -- baseline --dump baseline.schema.sql
dotnet run --project src/Forge.Db -- version # harness + engine versions
dotnet test tests/Forge.Db.Tests
tools/apply-schema.sh)For the common "reconcile the running stack's DB to schema/" case there is a wrapper that resolves
the DB URL from the forge-deploy compose conventions (../forge-deploy/.env, falling back to
postgres/postgres@localhost:5432/forge), checks the diff engine is installed, always shows the
plan first, applies through the harness's DeployGates (dev targets auto-confirm; non-dev requires
--yes --backup-taken, destructive plans always require --allow-destructive), and finishes with a
verify round-trip:
tools/apply-schema.sh # plan → apply → verify against the local stack
tools/apply-schema.sh --plan-only # look, don't touch
tools/apply-schema.sh --env prod --yes --backup-taken # gated non-dev apply
This repository is a component of the Forge platform. To
deploy or update the full Forge application, use the
@armoryworks/forge-deploy installer — a thin
bootstrapper that fetches the current deploy tree from GitHub and hands off to setup:
sudo mkdir -p /opt/forge-deploy && sudo chown "$USER:$(id -gn)" /opt/forge-deploy
npx @armoryworks/forge-deploy /opt/forge-deploy # first install (pulls images from GHCR)
npx @armoryworks/forge-deploy upgrade # refresh the tree + run the gated upgrade
Re-running preserves your .env, compose overrides, and data volumes. See the
forge-deploy README for full deploy,
topology, and troubleshooting docs.