unoverse 0.1.176 → 0.1.178
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/operator/lib/check.sh
CHANGED
|
@@ -138,7 +138,29 @@ cmd_check() {
|
|
|
138
138
|
fail "Canvas ${DIM}http://localhost:3001 → $canvas_code${NC}"
|
|
139
139
|
fi
|
|
140
140
|
|
|
141
|
-
# 6.
|
|
141
|
+
# 6. NO PUBLISHED ITEM IS AN ORPHAN OF A RENAME.
|
|
142
|
+
#
|
|
143
|
+
# Publishing is a pure per-item upsert and the publisher cannot read this universe's
|
|
144
|
+
# rows, so a RENAME is invisible to it: the new name lands as a create and the old row is
|
|
145
|
+
# never touched. A caller picking the old name then gets an older vintage of the same UI,
|
|
146
|
+
# and nothing anywhere goes red. That is a property of THIS universe's data, which is why
|
|
147
|
+
# it is asked here and not in the release gate — a stale row on one box must never stop
|
|
148
|
+
# anybody shipping code (server/tests/items/orphaned-rows.check.ts carries the history).
|
|
149
|
+
if [ -d "$ROOT/apps/unoverse" ] && [ -d "$ROOT/node_modules" ]; then
|
|
150
|
+
total=$((total + 1))
|
|
151
|
+
if (cd "$ROOT/apps/unoverse" && npm run --silent check:universe >/dev/null 2>&1); then
|
|
152
|
+
ok "No orphaned item rows ${DIM}(every published item is still authored)${NC}"
|
|
153
|
+
pass=$((pass + 1))
|
|
154
|
+
else
|
|
155
|
+
fail "Orphaned item rows ${DIM}(a rename left a stale row behind)${NC}"
|
|
156
|
+
(cd "$ROOT/apps/unoverse" && npm run --silent check:universe 2>&1) | grep -E '^\s+better-|^\s+[a-z0-9-]+/' | while read -r o; do
|
|
157
|
+
[ -n "$o" ] && echo -e " ${DIM}$o${NC}"
|
|
158
|
+
done
|
|
159
|
+
info " Retire each row: ${BOLD}POST /marketplace/uninstall {kind, name}${NC} — deleting the folder does nothing"
|
|
160
|
+
fi
|
|
161
|
+
fi
|
|
162
|
+
|
|
163
|
+
# 7. NOTHING BILLING THAT TERRAFORM HAS LOST SIGHT OF.
|
|
142
164
|
#
|
|
143
165
|
# Terraform records what it creates as it creates it, so an interrupted apply does not
|
|
144
166
|
# duplicate anything — the next run continues from state. Two cases break that, and both
|
package/package.json
CHANGED
|
@@ -705,18 +705,20 @@ for (const orgDir of [DS, ...orgDirs]) {
|
|
|
705
705
|
if (hookYaml && !Array.isArray(readDef(mf).allowedHosts))
|
|
706
706
|
report("error", mf, `${custom} makes requests, so this manifest must declare "allowedHosts". Deny by default: no list, no network`);
|
|
707
707
|
|
|
708
|
-
// A NAME
|
|
709
|
-
//
|
|
710
|
-
//
|
|
711
|
-
//
|
|
712
|
-
//
|
|
708
|
+
// A credential is a NAME (owner ruling 2026-08-26): it references a value that
|
|
709
|
+
// exists in the universe or does not, and shipping NEVER blocks on it — the gap is
|
|
710
|
+
// a WARNING here and a loud runtime warning when the hook runs without it
|
|
711
|
+
// (resolveCredentials says so on every keyless run). A missing DEFINITION only
|
|
712
|
+
// means no package offers a pre-built entry form; the value can still be provided.
|
|
713
|
+
// This was an org-blocking error until it stopped a yasisland deploy over a form
|
|
714
|
+
// nobody needed that day.
|
|
713
715
|
if (credentialDefs.size)
|
|
714
716
|
for (const cname of Array.isArray(readDef(mf).credentials) ? readDef(mf).credentials : [])
|
|
715
717
|
if (!credentialDefs.has(String(cname)))
|
|
716
718
|
report(
|
|
717
|
-
"
|
|
719
|
+
"warn",
|
|
718
720
|
mf,
|
|
719
|
-
`credential "${cname}" has no definition in any installed node package, so
|
|
721
|
+
`credential "${cname}" has no definition in any installed node package, so no pre-built form exists to enter it — the hook will run without it until a value is provided. Installed definitions: ${[...credentialDefs].sort().join(", ")}`,
|
|
720
722
|
);
|
|
721
723
|
|
|
722
724
|
}
|