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

32
web/node_modules/eslint/conf/default-cli-options.js generated vendored Normal file
View File

@@ -0,0 +1,32 @@
/**
* @fileoverview Default CLIEngineOptions.
* @author Ian VanSchooten
*/
"use strict";
module.exports = {
configFile: null,
baseConfig: false,
rulePaths: [],
useEslintrc: true,
envs: [],
globals: [],
extensions: null,
ignore: true,
ignorePath: void 0,
cache: false,
/*
* in order to honor the cacheFile option if specified
* this option should not have a default value otherwise
* it will always be used
*/
cacheLocation: "",
cacheFile: ".eslintcache",
cacheStrategy: "metadata",
fix: false,
allowInlineConfig: true,
reportUnusedDisableDirectives: void 0,
globInputPaths: true,
};

16
web/node_modules/eslint/conf/ecma-version.js generated vendored Normal file
View File

@@ -0,0 +1,16 @@
/**
* @fileoverview Configuration related to ECMAScript versions
* @author Milos Djermanovic
*/
"use strict";
/**
* The latest ECMAScript version supported by ESLint.
* @type {number} year-based ECMAScript version
*/
const LATEST_ECMA_VERSION = 2026;
module.exports = {
LATEST_ECMA_VERSION,
};

169
web/node_modules/eslint/conf/globals.js generated vendored Normal file
View File

@@ -0,0 +1,169 @@
/**
* @fileoverview Globals for ecmaVersion/sourceType
* @author Nicholas C. Zakas
*/
"use strict";
//-----------------------------------------------------------------------------
// Globals
//-----------------------------------------------------------------------------
const commonjs = {
exports: true,
global: false,
module: false,
require: false,
};
const es3 = {
Array: false,
Boolean: false,
constructor: false,
Date: false,
decodeURI: false,
decodeURIComponent: false,
encodeURI: false,
encodeURIComponent: false,
Error: false,
escape: false,
eval: false,
EvalError: false,
Function: false,
hasOwnProperty: false,
Infinity: false,
isFinite: false,
isNaN: false,
isPrototypeOf: false,
Math: false,
NaN: false,
Number: false,
Object: false,
parseFloat: false,
parseInt: false,
propertyIsEnumerable: false,
RangeError: false,
ReferenceError: false,
RegExp: false,
String: false,
SyntaxError: false,
toLocaleString: false,
toString: false,
TypeError: false,
undefined: false,
unescape: false,
URIError: false,
valueOf: false,
};
const es5 = {
...es3,
JSON: false,
};
const es2015 = {
...es5,
ArrayBuffer: false,
DataView: false,
Float32Array: false,
Float64Array: false,
Int16Array: false,
Int32Array: false,
Int8Array: false,
Intl: false,
Map: false,
Promise: false,
Proxy: false,
Reflect: false,
Set: false,
Symbol: false,
Uint16Array: false,
Uint32Array: false,
Uint8Array: false,
Uint8ClampedArray: false,
WeakMap: false,
WeakSet: false,
};
// no new globals in ES2016
const es2016 = {
...es2015,
};
const es2017 = {
...es2016,
Atomics: false,
SharedArrayBuffer: false,
};
// no new globals in ES2018
const es2018 = {
...es2017,
};
// no new globals in ES2019
const es2019 = {
...es2018,
};
const es2020 = {
...es2019,
BigInt: false,
BigInt64Array: false,
BigUint64Array: false,
globalThis: false,
};
const es2021 = {
...es2020,
AggregateError: false,
FinalizationRegistry: false,
WeakRef: false,
};
const es2022 = {
...es2021,
};
const es2023 = {
...es2022,
};
const es2024 = {
...es2023,
};
const es2025 = {
...es2024,
Float16Array: false,
Iterator: false,
};
const es2026 = {
...es2025,
AsyncDisposableStack: false,
DisposableStack: false,
SuppressedError: false,
};
//-----------------------------------------------------------------------------
// Exports
//-----------------------------------------------------------------------------
module.exports = {
commonjs,
es3,
es5,
es2015,
es2016,
es2017,
es2018,
es2019,
es2020,
es2021,
es2022,
es2023,
es2024,
es2025,
es2026,
};

26
web/node_modules/eslint/conf/replacements.json generated vendored Normal file
View File

@@ -0,0 +1,26 @@
{
"rules": {
"generator-star": ["generator-star-spacing"],
"global-strict": ["strict"],
"no-arrow-condition": ["no-confusing-arrow", "no-constant-condition"],
"no-comma-dangle": ["comma-dangle"],
"no-empty-class": ["no-empty-character-class"],
"no-empty-label": ["no-labels"],
"no-extra-strict": ["strict"],
"no-reserved-keys": ["quote-props"],
"no-space-before-semi": ["semi-spacing"],
"no-wrap-func": ["no-extra-parens"],
"space-after-function-name": ["space-before-function-paren"],
"space-after-keywords": ["keyword-spacing"],
"space-before-function-parentheses": ["space-before-function-paren"],
"space-before-keywords": ["keyword-spacing"],
"space-in-brackets": [
"object-curly-spacing",
"array-bracket-spacing",
"computed-property-spacing"
],
"space-return-throw-case": ["keyword-spacing"],
"space-unary-word-ops": ["space-unary-ops"],
"spaced-line-comment": ["spaced-comment"]
}
}

91
web/node_modules/eslint/conf/rule-type-list.json generated vendored Normal file
View File

@@ -0,0 +1,91 @@
{
"types": {
"problem": [],
"suggestion": [],
"layout": []
},
"deprecated": [],
"removed": [
{
"removed": "generator-star",
"replacedBy": [{ "rule": { "name": "generator-star-spacing" } }]
},
{
"removed": "global-strict",
"replacedBy": [{ "rule": { "name": "strict" } }]
},
{
"removed": "no-arrow-condition",
"replacedBy": [
{ "rule": { "name": "no-confusing-arrow" } },
{ "rule": { "name": "no-constant-condition" } }
]
},
{
"removed": "no-comma-dangle",
"replacedBy": [{ "rule": { "name": "comma-dangle" } }]
},
{
"removed": "no-empty-class",
"replacedBy": [{ "rule": { "name": "no-empty-character-class" } }]
},
{
"removed": "no-empty-label",
"replacedBy": [{ "rule": { "name": "no-labels" } }]
},
{
"removed": "no-extra-strict",
"replacedBy": [{ "rule": { "name": "strict" } }]
},
{
"removed": "no-reserved-keys",
"replacedBy": [{ "rule": { "name": "quote-props" } }]
},
{
"removed": "no-space-before-semi",
"replacedBy": [{ "rule": { "name": "semi-spacing" } }]
},
{
"removed": "no-wrap-func",
"replacedBy": [{ "rule": { "name": "no-extra-parens" } }]
},
{
"removed": "space-after-function-name",
"replacedBy": [{ "rule": { "name": "space-before-function-paren" } }]
},
{
"removed": "space-after-keywords",
"replacedBy": [{ "rule": { "name": "keyword-spacing" } }]
},
{
"removed": "space-before-function-parentheses",
"replacedBy": [{ "rule": { "name": "space-before-function-paren" } }]
},
{
"removed": "space-before-keywords",
"replacedBy": [{ "rule": { "name": "keyword-spacing" } }]
},
{
"removed": "space-in-brackets",
"replacedBy": [
{ "rule": { "name": "object-curly-spacing" } },
{ "rule": { "name": "array-bracket-spacing" } },
{ "rule": { "name": "computed-property-spacing" } }
]
},
{
"removed": "space-return-throw-case",
"replacedBy": [{ "rule": { "name": "keyword-spacing" } }]
},
{
"removed": "space-unary-word-ops",
"replacedBy": [{ "rule": { "name": "space-unary-ops" } }]
},
{
"removed": "spaced-line-comment",
"replacedBy": [{ "rule": { "name": "spaced-comment" } }]
},
{ "removed": "valid-jsdoc", "replacedBy": [] },
{ "removed": "require-jsdoc", "replacedBy": [] }
]
}