feat: Phase 1 — extract the client (web SPA + desktop) to dtoro/oikos-web
Some checks failed
ci / build-test (push) Has been cancelled
ci / docker-build (push) Has been cancelled

Problem: the hexagonal refactor churns the backend tree for nine more
phases; the UI delivery stack (web/ SPA, cmd/desktop Wails wrapper,
compose/web image) must move to its own repo first so doc/layout
rewrites land once on a backend-only tree.

Change:
- New repo git.hubris.network/dtoro/oikos-web (v0.33.0): web/, desktop/
  (updateURL repointed to oikos-web releases), compose/, own CI (web +
  desktop jobs), own deploy script (CI-green gate, TOCTOU guard,
  version-tagged images, prune-to-3), own webhook receiver on :9798 +
  launchd unit, own compose project publishing the same 8091:80.
- Cutover executed on mac-mini in order: oikos stack's web service
  stopped+removed, oikos-web project brought up on 8091; outer Caddy
  untouched (targets the published port) — serving + Authentik flow +
  /wails 404 quirk verified post-cutover.
- Stripped from oikos: web/, cmd/desktop/, compose/web/, desktop CI
  workflow, ci.yml web job, Makefile ui/desktop/desktop-package/install
  targets, the compose web service, oikos-web from deploy.sh's fallback
  prune list; wails + go-keyring dropped from go.mod, vendor synced.
- README / CONTRIBUTING / AGENTS.md / .agents dev+operations docs now
  point at the new repo; mbse + mascot design docs carry a path note.

Risk: production SPA serving depends on the new pipeline now; rollback
is versioned-image re-up of the old web service from a pre-split
checkout (port 8091). Desktop builds installed before the split still
check dtoro/oikos releases — one manual reinstall, noted in the
oikos-web release notes.

Verification: go vet, make test (race), make generate-check, golangci
(no new findings; baseline down 400→365); post-cutover curls —
localhost:8091 200, /wails/runtime.js 404, outer Caddy 302 Authentik.
This commit is contained in:
2026-08-15 22:27:52 +02:00
parent e074f04bdf
commit d4d99a7473
18854 changed files with 2615729 additions and 173735 deletions

View File

@@ -0,0 +1 @@
import{a3 as M,U as N,a2 as z,x as D,W as m,s as A,R as S,t as w,e as x,C as L,a as u,c as p,Q as B,j as H,f as k,aM as P,p as R,aI as Q,ac as j,d as C,b as E,g,u as h,aL as y,ab as T,a8 as U}from"./index-B5w8gw75.js";var V=new Set(["$$slots","$$events","$$legacy"]);function W(s,e){let r=z(e,V);const t=[["path",{d:"M12 5v14"}],["path",{d:"m19 12-7 7-7-7"}]];M(s,N({name:"arrow-down"},()=>r,{get iconNode(){return t}}))}var q=new Set(["$$slots","$$events","$$legacy"]);function F(s,e){let r=z(e,q);const t=[["path",{d:"m21 16-4 4-4-4"}],["path",{d:"M17 20V4"}],["path",{d:"m3 8 4-4 4 4"}],["path",{d:"M7 4v16"}]];M(s,N({name:"arrow-up-down"},()=>r,{get iconNode(){return t}}))}var G=k('<button type="button" class="flex items-center gap-1 hover:text-foreground"> <!></button>');function Y(s,e){let r=m(e,"sorted",3,!1),t=m(e,"direction",3,"asc");var n=G(),d=p(n),o=A(d);{var f=l=>{var a=B(),i=H(a);{var _=c=>{P(c,{class:"size-3"})},b=c=>{W(c,{class:"size-3"})};S(i,c=>{t()==="asc"?c(_):c(b,-1)})}u(l,a)},v=l=>{F(l,{class:"size-3 text-muted-foreground/50"})};S(o,l=>{r()?l(f):l(v,-1)})}w(()=>x(d,`${e.label??""} `)),L("click",n,function(...l){var a;(a=e.onclick)==null||a.apply(this,l)}),u(s,n)}D(["click"]);var J=k("<tr><td> </td></tr>");function Z(s,e){R(e,!0);let r=m(e,"message",3,"No items."),t=m(e,"colspan",3,999);var n=J(),d=p(n),o=p(d);w(f=>{j(d,"colspan",t()),C(d,1,f),x(o,r())},[()=>Q(["py-8 text-center text-muted-foreground",e.class].filter(Boolean).join(" "))]),u(s,n),E()}var K=k('<span class="flex items-center gap-1.5 text-xs"><span></span> <span class="text-muted-foreground"> </span></span>'),O=k('<span class="text-xs text-muted-foreground">—</span>');function $(s,e){R(e,!0);const r={healthy:"bg-success",degraded:"bg-warning",down:"bg-destructive",stale:"bg-warning/50",unknown:"bg-muted-foreground/40"},t=h(()=>e.row.health),n=h(()=>e.row.last_check_at),d=h(()=>e.row.health?e.row.health==="stale"?`stale — last checked ${y(e.row.last_check_at)}`:`${e.row.health} — checked ${y(e.row.last_check_at)}`:"not monitored");var o=B(),f=H(o);{var v=a=>{var i=K(),_=p(i),b=A(_,2),c=p(b);w(I=>{j(i,"title",g(d)),C(_,1,`size-2 shrink-0 rounded-full ${r[e.row.health??""]??""??""}`),x(c,I)},[()=>y(g(n))]),u(a,i)},l=a=>{var i=O();u(a,i)};S(f,a=>{g(t)?a(v):a(l,-1)})}u(s,o),E()}function ee(s,e){let r=m(e,"kind",3,"default");const t=h(()=>String(e.value??"")),n={risk:{destructive:"destructive",config_mutation:"secondary",default:"default"},severity:{critical:"destructive",warning:"secondary",info:"default",default:"default"},execution:{failed:"destructive",denied:"destructive",revoked:"destructive",cancelled:"destructive",completed:"default",running:"secondary",approved:"secondary",default:"outline"},state:{active:"default",healthy:"default",default:"outline"},type:{runbook:"secondary",investigation:"default",default:"outline"},default:{default:"default"}},d=h(()=>{const o=n[r()]??n.default;return o[g(t)]??o.default});T(s,{get variant(){return g(d)},children:(o,f)=>{var v=U();w(()=>x(v,g(t))),u(o,v)},$$slots:{default:!0}})}export{Z as E,$ as H,Y as S,ee as a};