@cosmicdrift/kumiko-samples 0.353.0 → 0.354.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/packages/bundled-features/package.json +18 -2
- package/packages/bundled-features/src/agent-tools/agent-doc-lint.ts +66 -0
- package/packages/bundled-features/src/agent-tools/agent-manifest.ts +11 -5
- package/packages/bundled-features/src/agent-tools/feature.ts +13 -2
- package/packages/bundled-features/src/agent-tools/index.ts +6 -1
- package/packages/bundled-features/src/agent-tools/tool-dispatch.ts +1 -1
- package/packages/bundled-features/src/auth-email-password/changes.json +24 -0
- package/packages/bundled-features/src/auth-email-password/handlers/change-password.write.ts +1 -0
- package/packages/bundled-features/src/auth-email-password/handlers/invite-accept-with-login.write.ts +3 -2
- package/packages/bundled-features/src/auth-email-password/handlers/invite-accept.write.ts +3 -2
- package/packages/bundled-features/src/auth-email-password/handlers/invite-create.write.ts +21 -0
- package/packages/bundled-features/src/auth-email-password/handlers/invite-signup-complete.write.ts +4 -1
- package/packages/bundled-features/src/auth-email-password/handlers/login.write.ts +1 -0
- package/packages/bundled-features/src/auth-email-password/handlers/reset-password.write.ts +1 -0
- package/packages/bundled-features/src/auth-email-password/handlers/signup-confirm.write.ts +5 -0
- package/packages/bundled-features/src/auth-email-password/handlers/signup-request.write.ts +53 -96
- package/packages/bundled-features/src/auth-email-password/handlers/token-request-handler.ts +1 -0
- package/packages/bundled-features/src/auth-email-password/handlers/verify-email.write.ts +1 -0
- package/packages/bundled-features/src/auth-email-password/index.ts +12 -0
- package/packages/bundled-features/src/auth-email-password/seeding.ts +38 -7
- package/packages/bundled-features/src/auth-email-password/signup-activation.ts +83 -0
- package/packages/bundled-features/src/auth-email-password/signup-token-store.ts +9 -3
- package/packages/bundled-features/src/auth-email-password/web/auth-gate.tsx +7 -7
- package/packages/bundled-features/src/auth-email-password/web/auth-redirect.ts +15 -0
- package/packages/bundled-features/src/auth-email-password/web/login-screen.tsx +2 -2
- package/packages/bundled-features/src/auth-email-password/web/user-menu.tsx +1 -1
- package/packages/bundled-features/src/auth-mfa/changes.json +7 -0
- package/packages/bundled-features/src/auth-mfa/feature.ts +5 -0
- package/packages/bundled-features/src/auth-mfa/handlers/enable-confirm-preauth.write.ts +1 -0
- package/packages/bundled-features/src/auth-mfa/handlers/verify.write.ts +1 -0
- package/packages/bundled-features/src/auth-mfa/web/mfa-recovery-codes-reveal.tsx +6 -8
- package/packages/bundled-features/src/auth-mfa/web/mfa-setup-preauth-screen.tsx +18 -21
- package/packages/bundled-features/src/auth-mfa/web/mfa-verify-screen.tsx +2 -2
- package/packages/bundled-features/src/billing-foundation/billing-info-query.ts +4 -4
- package/packages/bundled-features/src/billing-foundation/changes.json +6 -0
- package/packages/bundled-features/src/channel-in-app/changes.json +8 -1
- package/packages/bundled-features/src/channel-in-app/in-app-channel.ts +1 -1
- package/packages/bundled-features/src/channel-in-app/tables.ts +18 -12
- package/packages/bundled-features/src/crypto-shredding/changes.json +12 -0
- package/packages/bundled-features/src/crypto-shredding/handlers/forget-subject.write.ts +154 -69
- package/packages/bundled-features/src/delivery/changes.json +6 -0
- package/packages/bundled-features/src/delivery/db/queries/address-opt-outs.ts +18 -12
- package/packages/bundled-features/src/delivery/delivery-service.ts +103 -16
- package/packages/bundled-features/src/delivery/unsubscribe.ts +81 -13
- package/packages/bundled-features/src/feature-toggles/feature.ts +2 -3
- package/packages/bundled-features/src/feature-toggles/toggle-runtime.ts +34 -5
- package/packages/bundled-features/src/feature-toggles/toggle-sync-signal.ts +31 -8
- package/packages/bundled-features/src/file-derivatives/handlers/public-variant.query.ts +10 -1
- package/packages/bundled-features/src/files/changes.json +24 -0
- package/packages/bundled-features/src/files-tenant-data/changes.json +5 -0
- package/packages/bundled-features/src/files-tenant-data/handlers/sweep-orphaned-derivatives.job.ts +4 -0
- package/packages/bundled-features/src/files-tenant-data/hooks.ts +72 -23
- package/packages/bundled-features/src/folders/changes.json +6 -0
- package/packages/bundled-features/src/folders/handlers/delete-folder.write.ts +41 -9
- package/packages/bundled-features/src/foundation-shared/index.ts +1 -0
- package/packages/bundled-features/src/foundation-shared/mail-host-policy.ts +16 -4
- package/packages/bundled-features/src/inbound-provider-imap/changes.json +6 -0
- package/packages/bundled-features/src/inbound-provider-imap/feature.ts +2 -0
- package/packages/bundled-features/src/inbound-provider-imap/imap-client.ts +3 -4
- package/packages/bundled-features/src/jobs/changes.json +30 -0
- package/packages/bundled-features/src/jobs/constants.ts +1 -0
- package/packages/bundled-features/src/jobs/db/queries/retention.ts +12 -0
- package/packages/bundled-features/src/jobs/db/queries/stale-run-sweep.ts +26 -2
- package/packages/bundled-features/src/jobs/feature.ts +7 -1
- package/packages/bundled-features/src/jobs/handlers/list.query.ts +1 -1
- package/packages/bundled-features/src/jobs/handlers/tenant-failures.query.ts +1 -1
- package/packages/bundled-features/src/jobs/handlers/tenant-runs.query.ts +94 -0
- package/packages/bundled-features/src/jobs/index.ts +2 -0
- package/packages/bundled-features/src/jobs/job-run-logger.ts +177 -10
- package/packages/bundled-features/src/jobs/tenant-job-failure-table.ts +27 -8
- package/packages/bundled-features/src/jobs/tenant-job-run-table.ts +55 -0
- package/packages/bundled-features/src/ledger/changes.json +23 -0
- package/packages/bundled-features/src/ledger/entity.ts +13 -5
- package/packages/bundled-features/src/ledger/feature.ts +3 -0
- package/packages/bundled-features/src/ledger/handlers/confirm-schedule-period.write.ts +15 -3
- package/packages/bundled-features/src/ledger/handlers/create-transaction.write.ts +1 -0
- package/packages/bundled-features/src/ledger/handlers/reverse-transaction.write.ts +1 -0
- package/packages/bundled-features/src/ledger/schedule-subject-pair.ts +27 -0
- package/packages/bundled-features/src/mail-transport-smtp/feature.ts +4 -15
- package/packages/bundled-features/src/notes-history/changes.json +13 -0
- package/packages/bundled-features/src/notes-history/entity.ts +4 -0
- package/packages/bundled-features/src/personal-access-tokens/handlers/create.write.ts +1 -0
- package/packages/bundled-features/src/sessions/feature.ts +21 -8
- package/packages/bundled-features/src/sessions/handlers/detail.query.ts +34 -33
- package/packages/bundled-features/src/sessions/handlers/list.query.ts +68 -65
- package/packages/bundled-features/src/sessions/screens.ts +10 -8
- package/packages/bundled-features/src/shared/encrypt-for-direct-write.ts +15 -8
- package/packages/bundled-features/src/shared/index.ts +2 -1
- package/packages/bundled-features/src/shared/parent-visibility.ts +31 -1
- package/packages/bundled-features/src/shared/row-bound-grant.ts +18 -2
- package/packages/bundled-features/src/shared/session-locale-field.ts +7 -0
- package/packages/bundled-features/src/template-resolver/api.ts +3 -3
- package/packages/bundled-features/src/template-resolver/changes.json +5 -0
- package/packages/bundled-features/src/template-resolver/handlers/list.query.ts +2 -2
- package/packages/bundled-features/src/tenant/changes.json +12 -0
- package/packages/bundled-features/src/tenant/feature.ts +8 -1
- package/packages/bundled-features/src/tenant/handlers/toggle-enabled.write.ts +2 -0
- package/packages/bundled-features/src/tenant/handlers/update-member-roles.write.ts +1 -0
- package/packages/bundled-features/src/tenant/invitation-table.ts +6 -0
- package/packages/bundled-features/src/tenant/invited-membership.ts +45 -12
- package/packages/bundled-features/src/tenant-handover/changes.json +6 -0
- package/packages/bundled-features/src/tenant-handover/transfer-graph.ts +14 -96
- package/packages/bundled-features/src/tenant-lifecycle/boot-checks.ts +16 -0
- package/packages/bundled-features/src/tenant-lifecycle/changes.json +22 -0
- package/packages/bundled-features/src/tenant-lifecycle/constants.ts +8 -0
- package/packages/bundled-features/src/tenant-lifecycle/events.ts +6 -0
- package/packages/bundled-features/src/tenant-lifecycle/feature.ts +13 -1
- package/packages/bundled-features/src/tenant-lifecycle/run-tenant-destroy.ts +100 -29
- package/packages/bundled-features/src/tenant-lifecycle/stages.ts +41 -9
- package/packages/bundled-features/src/tenant-lifecycle/testing.ts +58 -0
- package/packages/bundled-features/src/tier-engine/changes.json +5 -0
- package/packages/bundled-features/src/tier-engine/handlers/set-tenant-tier.write.ts +1 -0
- package/packages/bundled-features/src/user/changes.json +15 -0
- package/packages/bundled-features/src/user/handlers/detail.query.ts +1 -0
- package/packages/bundled-features/src/user/handlers/list.query.ts +3 -0
- package/packages/bundled-features/src/user/handlers/update.write.ts +1 -0
- package/packages/bundled-features/src/user/seeding.ts +34 -0
- package/packages/bundled-features/src/user-data-rights/changes.json +6 -0
- package/packages/bundled-features/src/user-data-rights/handlers/request-deletion.write.ts +1 -0
- package/packages/bundled-features/src/user-data-rights/index.ts +1 -0
- package/packages/bundled-features/src/user-data-rights/schema/download-attempt.ts +17 -9
- package/packages/bundled-features/src/user-profile/handlers/change-email.write.ts +8 -2
- package/packages/bundled-features/src/workflow-runner/event-trigger.ts +72 -14
- package/packages/bundled-features/src/workflow-runner/handlers/resume-run.write.ts +6 -1
- package/packages/bundled-features/src/workflow-runner/runner.ts +8 -2
- package/samples/apps/showcase/src/features/items/feature.ts +2 -1
- package/samples/apps/styleguide/src/features/widgets/feature.ts +83 -0
- package/samples/apps/styleguide/src/features/widgets/i18n.ts +12 -0
- package/samples/apps/styleguide/src/features/widgets/web/Widgets.tsx +4 -0
- package/samples/apps/ui-walkthrough/package.json +3 -0
- package/samples/apps/use-all-bundled/README.md +1 -2
- package/samples/apps/use-all-bundled/feature-manifest.json +1 -1
- package/samples/apps/user-data-rights-demo/README.md +1 -3
- package/samples/recipes/legal-pages/README.md +3 -4
- package/samples/recipes/managed-pages/README.md +2 -2
- package/samples/recipes/seed-migration/README.md +0 -2
|
@@ -15,6 +15,44 @@ const RESPONSE_POINTS = Array.from({ length: 48 }, (_, i) => ({
|
|
|
15
15
|
value: i === 20 ? null : 120 + Math.round(80 * Math.abs(Math.sin(i / 5))),
|
|
16
16
|
}));
|
|
17
17
|
|
|
18
|
+
const LOAN_START_MS = Date.UTC(2020, 0, 1);
|
|
19
|
+
const LOAN_TODAY_MS = Date.UTC(2026, 5, 15);
|
|
20
|
+
const LOAN_MONTHS = 240;
|
|
21
|
+
const LOAN_PRINCIPAL_MINOR = 25_000_000;
|
|
22
|
+
const LOAN_MONTHLY_RATE = 0.035 / 12;
|
|
23
|
+
|
|
24
|
+
const loanMonthMs = (monthIndex: number): number => Date.UTC(2020, monthIndex, 1);
|
|
25
|
+
|
|
26
|
+
// Annuity loan over 20 years: remaining principal falls, cumulative interest
|
|
27
|
+
// grows. "Today" is a fixed date, not the clock, so the window and the
|
|
28
|
+
// screenshots stay stable.
|
|
29
|
+
const growth = (1 + LOAN_MONTHLY_RATE) ** LOAN_MONTHS;
|
|
30
|
+
const annuityMinor = (LOAN_PRINCIPAL_MINOR * LOAN_MONTHLY_RATE * growth) / (growth - 1);
|
|
31
|
+
let balanceMinor: number = LOAN_PRINCIPAL_MINOR;
|
|
32
|
+
let interestPaidMinor = 0;
|
|
33
|
+
const LOAN_REMAINING_POINTS = [{ atMs: loanMonthMs(0), value: LOAN_PRINCIPAL_MINOR }];
|
|
34
|
+
const LOAN_INTEREST_POINTS = [{ atMs: loanMonthMs(0), value: 0 }];
|
|
35
|
+
for (let i = 1; i <= LOAN_MONTHS; i++) {
|
|
36
|
+
const interest = balanceMinor * LOAN_MONTHLY_RATE;
|
|
37
|
+
balanceMinor = Math.max(0, balanceMinor - (annuityMinor - interest));
|
|
38
|
+
interestPaidMinor += interest;
|
|
39
|
+
LOAN_REMAINING_POINTS.push({ atMs: loanMonthMs(i), value: Math.round(balanceMinor) });
|
|
40
|
+
LOAN_INTEREST_POINTS.push({ atMs: loanMonthMs(i), value: Math.round(interestPaidMinor) });
|
|
41
|
+
}
|
|
42
|
+
const LOAN_SERIES = [
|
|
43
|
+
{ key: "remaining", label: "widgets:dashboard:loan-remaining", points: LOAN_REMAINING_POINTS },
|
|
44
|
+
{ key: "interest", label: "widgets:dashboard:loan-interest", points: LOAN_INTEREST_POINTS },
|
|
45
|
+
];
|
|
46
|
+
const LOAN_MARKERS = [
|
|
47
|
+
{ atMs: loanMonthMs(84), label: { i18nKey: "widgets:dashboard:marker-extra-1" }, kind: "extra" },
|
|
48
|
+
{ atMs: loanMonthMs(150), label: { i18nKey: "widgets:dashboard:marker-extra-2" }, kind: "extra" },
|
|
49
|
+
{
|
|
50
|
+
atMs: loanMonthMs(LOAN_MONTHS),
|
|
51
|
+
label: { i18nKey: "widgets:dashboard:marker-payoff" },
|
|
52
|
+
kind: "payoff",
|
|
53
|
+
},
|
|
54
|
+
];
|
|
55
|
+
|
|
18
56
|
const SENDERS = ["William Smith", "Alice Smith", "Bob Johnson", "Emily Davis"] as const;
|
|
19
57
|
const SUBJECTS = ["Meeting Tomorrow", "Re: Project Update", "Weekend Plans", "Re: Budget"] as const;
|
|
20
58
|
|
|
@@ -104,6 +142,31 @@ export const widgetsFeature = defineFeature("widgets", (r) => {
|
|
|
104
142
|
chart: "timeseries",
|
|
105
143
|
query: "widgets:query:metrics:response-times",
|
|
106
144
|
},
|
|
145
|
+
{
|
|
146
|
+
kind: "chart",
|
|
147
|
+
id: "loan",
|
|
148
|
+
label: "widgets:dashboard:loan",
|
|
149
|
+
chart: "stacked-area",
|
|
150
|
+
query: "widgets:query:metrics:loan",
|
|
151
|
+
valueFormat: { kind: "currency", currency: "EUR", fractionDigits: 0 },
|
|
152
|
+
brush: true,
|
|
153
|
+
legendTotals: false,
|
|
154
|
+
initialWindow: "from-today",
|
|
155
|
+
markerLegend: "legend",
|
|
156
|
+
markerKinds: {
|
|
157
|
+
extra: { tone: "active", label: "widgets:dashboard:kind-extra" },
|
|
158
|
+
payoff: { tone: "positive", label: "widgets:dashboard:kind-payoff" },
|
|
159
|
+
},
|
|
160
|
+
ranges: {
|
|
161
|
+
default: "max",
|
|
162
|
+
options: [
|
|
163
|
+
{ value: "y1", label: "widgets:dashboard:range-y1", months: 12 },
|
|
164
|
+
{ value: "y3", label: "widgets:dashboard:range-y3", months: 36 },
|
|
165
|
+
{ value: "y5", label: "widgets:dashboard:range-y5", months: 60 },
|
|
166
|
+
{ value: "max", label: "widgets:dashboard:range-all" },
|
|
167
|
+
],
|
|
168
|
+
},
|
|
169
|
+
},
|
|
107
170
|
{
|
|
108
171
|
kind: "list",
|
|
109
172
|
id: "latest",
|
|
@@ -204,6 +267,26 @@ export const widgetsFeature = defineFeature("widgets", (r) => {
|
|
|
204
267
|
},
|
|
205
268
|
},
|
|
206
269
|
);
|
|
270
|
+
r.queryHandler(
|
|
271
|
+
"metrics:loan",
|
|
272
|
+
z.object({}),
|
|
273
|
+
async () => ({
|
|
274
|
+
series: LOAN_SERIES,
|
|
275
|
+
markers: LOAN_MARKERS,
|
|
276
|
+
windowStartMs: LOAN_START_MS,
|
|
277
|
+
windowEndMs: loanMonthMs(LOAN_MONTHS),
|
|
278
|
+
todayMs: LOAN_TODAY_MS,
|
|
279
|
+
}),
|
|
280
|
+
{
|
|
281
|
+
access: {
|
|
282
|
+
openToAll: {
|
|
283
|
+
reason:
|
|
284
|
+
"demo dashboard widget: returns static canned data with no per-user or " +
|
|
285
|
+
"tenant scoping; any signed-in user may query it",
|
|
286
|
+
},
|
|
287
|
+
},
|
|
288
|
+
},
|
|
289
|
+
);
|
|
207
290
|
r.queryHandler(
|
|
208
291
|
"metrics:latest-items",
|
|
209
292
|
z.object({}),
|
|
@@ -19,6 +19,18 @@ export const WIDGETS_I18N = {
|
|
|
19
19
|
"widgets:dashboard:net-worth-assets": { de: "Vermögen", en: "Assets" },
|
|
20
20
|
"widgets:dashboard:net-worth-debts": { de: "Schulden", en: "Debts" },
|
|
21
21
|
"widgets:dashboard:response-times": { de: "Antwortzeit", en: "Response time" },
|
|
22
|
+
"widgets:dashboard:loan": { de: "Kreditverlauf", en: "Loan balance" },
|
|
23
|
+
"widgets:dashboard:loan-remaining": { de: "Restschuld", en: "Remaining balance" },
|
|
24
|
+
"widgets:dashboard:loan-interest": { de: "Gezahlte Zinsen", en: "Interest paid" },
|
|
25
|
+
"widgets:dashboard:kind-extra": { de: "Sondertilgung", en: "Extra repayment" },
|
|
26
|
+
"widgets:dashboard:kind-payoff": { de: "Ablösung", en: "Payoff" },
|
|
27
|
+
"widgets:dashboard:marker-extra-1": { de: "Sondertilgung 2027", en: "Extra repayment 2027" },
|
|
28
|
+
"widgets:dashboard:marker-extra-2": { de: "Sondertilgung 2032", en: "Extra repayment 2032" },
|
|
29
|
+
"widgets:dashboard:marker-payoff": { de: "Kredit getilgt", en: "Loan repaid" },
|
|
30
|
+
"widgets:dashboard:range-y1": { de: "1 Jahr", en: "1 year" },
|
|
31
|
+
"widgets:dashboard:range-y3": { de: "3 Jahre", en: "3 years" },
|
|
32
|
+
"widgets:dashboard:range-y5": { de: "5 Jahre", en: "5 years" },
|
|
33
|
+
"widgets:dashboard:range-all": { de: "Alles", en: "All" },
|
|
22
34
|
"widgets:dashboard:latest": { de: "Neueste Ereignisse", en: "Latest events" },
|
|
23
35
|
"widgets:dashboard:col-name": { de: "Name", en: "Name" },
|
|
24
36
|
"widgets:dashboard:col-status": { de: "Status", en: "Status" },
|
|
@@ -146,6 +146,10 @@ export function Widgets(): ReactNode {
|
|
|
146
146
|
</div>
|
|
147
147
|
</SectionCard>
|
|
148
148
|
|
|
149
|
+
<div className="flex h-12 w-64 items-stretch" data-testid="progress-stretch-host">
|
|
150
|
+
<ProgressBar value={0.5} testId="progress-stretch-bar" />
|
|
151
|
+
</div>
|
|
152
|
+
|
|
149
153
|
<SectionCard
|
|
150
154
|
title={t("widgets:catalog:repayment-model")}
|
|
151
155
|
action={
|
|
@@ -6,8 +6,7 @@ Canonical smoke-sample. Mounts every bundled-feature so framework-CI catches fea
|
|
|
6
6
|
|
|
7
7
|
Sprint 9.8 found 12 framework bugs in a Studio deployment that all could have
|
|
8
8
|
been caught earlier: 27 of 30 bundled features had zero integration coverage
|
|
9
|
-
from any real app. This sample is the gate
|
|
10
|
-
belong to your private operations documentation.
|
|
9
|
+
from any real app. This sample is the gate.
|
|
11
10
|
|
|
12
11
|
## CI-Gate
|
|
13
12
|
|
|
@@ -1399,7 +1399,7 @@
|
|
|
1399
1399
|
},
|
|
1400
1400
|
{
|
|
1401
1401
|
"name": "jobs",
|
|
1402
|
-
"description": "Persistence and operator tooling for background jobs registered via `r.job(...)`. Every job execution writes directly into `store_job_runs` (current status + duration) and `store_job_run_logs` (per-line log rows) from the BullMQ callbacks — no event stream in between (#2243). A daily `retention-cleanup` job deletes runs (and their logs) older than `retentionDays`; an hourly `stale-run-sweep` job marks runs stuck at status `running` past `staleRunTimeoutHours` as `failed` (#2246 — a crashed worker never fires the completion callback, so nothing else ever revisits the row). Exposes `jobs:write:trigger` (manual run) and `jobs:write:retry` (operator retry of a failed run), plus `jobs:query:list`, `jobs:query:details`, and `jobs:query:catalog` (manual jobs) for the operator UI. A job that declares `tenantVisibleFailure` also records its last failed attempt per tenant and subject in `store_tenant_job_failures`, which the tenant itself reads through `jobs:query:failures` — a translation key only, never the provider's message (fw#3079).",
|
|
1402
|
+
"description": "Persistence and operator tooling for background jobs registered via `r.job(...)`. Every job execution writes directly into `store_job_runs` (current status + duration) and `store_job_run_logs` (per-line log rows) from the BullMQ callbacks — no event stream in between (#2243). A daily `retention-cleanup` job deletes runs (and their logs) older than `retentionDays`; an hourly `stale-run-sweep` job marks runs stuck at status `running` past `staleRunTimeoutHours` as `failed` (#2246 — a crashed worker never fires the completion callback, so nothing else ever revisits the row). Exposes `jobs:write:trigger` (manual run) and `jobs:write:retry` (operator retry of a failed run), plus `jobs:query:list`, `jobs:query:details`, and `jobs:query:catalog` (manual jobs) for the operator UI. A job that declares `tenantVisibleFailure` also records its last failed attempt per tenant and subject in `store_tenant_job_failures`, which the tenant itself reads through `jobs:query:failures` — a translation key only, never the provider's message (fw#3079). A job that declares `tenantVisibleRun` also keeps its run state per tenant and subject in `store_tenant_job_runs` (queued, running, plus the latest completed or failed run, no payload, error text or logs), which the tenant reads through `jobs:query:tenant-runs` (fw#3616); the stale-run sweep fails its stuck `running` rows and drops its stuck `queued` rows.",
|
|
1403
1403
|
"toggleableDefault": null,
|
|
1404
1404
|
"requires": [],
|
|
1405
1405
|
"optionalRequires": [],
|
|
@@ -115,9 +115,7 @@ then 500s). For a real deploy, swap to the persistent provider in
|
|
|
115
115
|
|
|
116
116
|
Then set `S3_BUCKET` / `S3_REGION` / `S3_ACCESS_KEY` / `S3_SECRET_KEY` (plus
|
|
117
117
|
optional `S3_ENDPOINT` for Hetzner/S3-compatible stores) and the app override
|
|
118
|
-
`file-foundation:config:provider = "s3-env"`.
|
|
119
|
-
verification, follow your deployment team's private operations documentation.
|
|
120
|
-
|
|
118
|
+
`file-foundation:config:provider = "s3-env"`.
|
|
121
119
|
## Adding your own domain
|
|
122
120
|
|
|
123
121
|
To add another DSGVO-compliant entity to the demo:
|
|
@@ -87,8 +87,8 @@ imprint" decision.
|
|
|
87
87
|
|
|
88
88
|
```bash
|
|
89
89
|
# In the app workspace:
|
|
90
|
-
bun kumiko
|
|
91
|
-
bun kumiko
|
|
90
|
+
bun kumiko-schema generate <name> # detects text-block entity → SQL migration
|
|
91
|
+
bun kumiko-schema apply # one-time (pre-deploy step in prod)
|
|
92
92
|
```
|
|
93
93
|
|
|
94
94
|
### 3. Initial seed of the required blocks
|
|
@@ -141,8 +141,7 @@ await seedTextBlock(db, {
|
|
|
141
141
|
```
|
|
142
142
|
|
|
143
143
|
→ Templates for full legally-sound texts: e-recht24.de
|
|
144
|
-
or datenschutz-generator.de by Dr. Schwenke.
|
|
145
|
-
private legal-template documentation for the approved source process.
|
|
144
|
+
or datenschutz-generator.de by Dr. Schwenke.
|
|
146
145
|
|
|
147
146
|
### 4. Visit the pages
|
|
148
147
|
|
|
@@ -81,8 +81,8 @@ the recipe lists `createConfigFeature()` explicitly (see `src/feature.ts`).
|
|
|
81
81
|
### 2. Create the table
|
|
82
82
|
|
|
83
83
|
```bash
|
|
84
|
-
bun kumiko
|
|
85
|
-
bun kumiko
|
|
84
|
+
bun kumiko-schema generate <name> # detects the `page` entity → SQL migration
|
|
85
|
+
bun kumiko-schema apply
|
|
86
86
|
```
|
|
87
87
|
|
|
88
88
|
### 3. Authoring + branding
|
|
@@ -88,6 +88,4 @@ Wenn eine kaputte Migration den Boot blockiert: setze `skippable: true` im seed-
|
|
|
88
88
|
|
|
89
89
|
## See also
|
|
90
90
|
|
|
91
|
-
- **Plan-Doc:** your deployment team's private operations documentation —
|
|
92
|
-
Phase-2+ Operations (projection-rebuild, event-replay, stream-migration, ...)
|
|
93
91
|
- **Driver-Use-Case:** `seeds/2026-02-01-fix-admin-roles.ts` in this recipe
|