You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
echo "::error::$leaked contains $task — @openvtc/pnm-core/admin must not be reachable from any wallet surface (check for a root-barrel import, or a shared chunk)"
78
90
exit 1
79
91
fi
80
92
done
81
-
echo "OK: no admin task URIs in the extension bundle"
93
+
echo "OK: admin task URIs appear only in manager.js"
94
+
95
+
# A second, stricter guard — and the difference from the one above is the
96
+
# point.
97
+
#
98
+
# That guard is about *authority*: `admin/*` grants and revokes it, and
99
+
# the console is deliberately the one surface that holds it, so it names
100
+
# `manager.js` as an exception.
101
+
#
102
+
# These tasks are about *material*. `vta/seeds/export-mnemonic/1.0`
103
+
# returns a BIP-39 mnemonic — the seed every derived key in the agent
104
+
# comes from — and `list`/`rotate` are the rest of that family's surface.
105
+
# There is no browser context that should be able to ask for them, so this
106
+
# guard has **no exception**: not the console, not the wallet, nowhere in
107
+
# `dist/`.
108
+
#
109
+
# It exists because the alternative is an omission, and an omission is
110
+
# indistinguishable from not having got to it yet. Someone reasonable
111
+
# could add a seeds pane next year and no one would know it was refused on
112
+
# purpose. This is what says so.
113
+
#
114
+
# `vault/release/0.1` is deliberately NOT here: it releases a secret to a
115
+
# site the human just approved, which is the wallet's whole job.
116
+
- name: Assert no key-material surface ships at all
117
+
run: |
118
+
for task in 'vta/seeds/list/1.0' 'vta/seeds/rotate/1.0' 'vta/seeds/export-mnemonic/1.0'; do
echo "::error::$found contains $task — this family returns key material and must not ship in any extension bundle, the console included. See CLAUDE.md."
122
+
exit 1
123
+
fi
124
+
done
125
+
echo "OK: no key-material task URIs anywhere in dist/"
126
+
127
+
# The console's isolation rests on it being one self-contained file: the
128
+
# guard above names exactly one exception, so a second chunk would be a
129
+
# file nothing checks. Losing `codeSplitting: false` in a future upgrade
130
+
# is silent otherwise.
131
+
- name: Assert the console is a single self-contained bundle
132
+
run: |
133
+
bundle=packages/extension/dist/manager.js
134
+
test -f "$bundle" || { echo "::error::$bundle was not emitted — did the manager build run?"; exit 1; }
0 commit comments