@runeditrun/rer 0.1.0 → 0.2.0
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/README.md +115 -2
- package/cli/README.md +28 -3
- package/cli/contract.mjs +4 -4
- package/cli/dev-identity.mjs +2 -1
- package/cli/door-mode.mjs +134 -0
- package/cli/door.mjs +263 -0
- package/cli/hosted-output.mjs +15 -5
- package/cli/hydration/browser.mjs +91 -0
- package/cli/hydration/cases.mjs +106 -0
- package/cli/hydration/check.mjs +105 -0
- package/cli/hydration/probe.mjs +164 -0
- package/cli/hydration/scripts.mjs +39 -0
- package/cli/hydration/verdict.mjs +85 -0
- package/cli/inspect.mjs +56 -9
- package/cli/lifecycle.mjs +36 -12
- package/cli/local.mjs +9 -3
- package/cli/main.mjs +2 -0
- package/cli/managed-server.mjs +52 -18
- package/cli/package-calls.mjs +81 -0
- package/cli/package-mode.mjs +46 -0
- package/cli/parse.mjs +14 -4
- package/cli/pnpm-runtime.mjs +96 -0
- package/cli/portability-worker.mjs +2 -2
- package/cli/runtime-front-door.mjs +4 -2
- package/cli/server-proxy.mjs +69 -5
- package/cli/server-registry.mjs +19 -11
- package/cli/settings.mjs +14 -0
- package/cli/site-check.mjs +96 -0
- package/cli/site-preview.mjs +53 -0
- package/cli/site-render.mjs +77 -0
- package/cli/site.mjs +109 -0
- package/global/CHANGELOG.md +63 -0
- package/global/README.md +115 -2
- package/global/checkout.mjs +24 -10
- package/global/cli/install.mjs +6 -2
- package/global/delegate.mjs +9 -7
- package/global/door/command.mjs +254 -0
- package/global/door/control.mjs +65 -0
- package/global/door/cookies.mjs +41 -0
- package/global/door/pages.mjs +49 -0
- package/global/door/policy.mjs +49 -0
- package/global/door/routes.mjs +45 -0
- package/global/door/server.mjs +255 -0
- package/global/door/sites.mjs +192 -0
- package/global/launch/dev.mjs +25 -23
- package/global/launch/door.mjs +36 -0
- package/global/launch/facts.mjs +3 -2
- package/global/launch/install-pinned.mjs +22 -0
- package/global/launch/prepare.mjs +41 -6
- package/global/launch/render.mjs +6 -1
- package/global/launch/state.mjs +10 -1
- package/global/launch/steps.mjs +24 -10
- package/global/launch/stop.mjs +89 -0
- package/global/launch/worker.mjs +30 -11
- package/global/list.mjs +6 -3
- package/global/main.mjs +37 -3
- package/global/version.mjs +8 -8
- package/modules/dependencies/protocol.mjs +2 -1
- package/modules/deploy-kit/README.md +34 -1
- package/modules/deploy-kit/artifact.mjs +10 -0
- package/modules/deploy-kit/owner.mjs +5 -4
- package/modules/deploy-kit/prepare.mjs +3 -2
- package/modules/deploy-kit/provider.mjs +6 -3
- package/modules/deploy-kit/site.mjs +135 -0
- package/modules/erasure/CONTRACT.md +6 -3
- package/modules/erasure/README.md +8 -1
- package/modules/erasure/audit.mjs +2 -2
- package/modules/erasure/cascade.mjs +52 -11
- package/modules/erasure/order.mjs +29 -22
- package/modules/erasure/plan.mjs +4 -2
- package/modules/erasure/queue.mjs +41 -0
- package/modules/erasure/scope.mjs +3 -3
- package/modules/erasure/verification.mjs +4 -2
- package/modules/mail/README.md +1 -1
- package/modules/mail/index.mjs +1 -1
- package/modules/mail/src/core/errors.mjs +9 -0
- package/modules/mail/src/development/index.d.mts +6 -0
- package/modules/mail/src/development/index.mjs +6 -3
- package/modules/mail/src/development/viewer-html.mjs +3 -3
- package/modules/mail/src/development/viewer.mjs +8 -1
- package/modules/operator-auth/dev/index.mjs +15 -5
- package/modules/operator-auth/http.mjs +2 -3
- package/modules/operator-auth/loopback.mjs +17 -0
- package/modules/owner-claim/verify.mjs +2 -1
- package/modules/portability/README.md +8 -0
- package/modules/portability/hash.mjs +6 -2
- package/modules/portability/import.mjs +1 -1
- package/modules/portability/legacy-files.mjs +4 -4
- package/modules/portability/legacy-safety.mjs +51 -10
- package/modules/portability/migration-history.mjs +15 -0
- package/modules/release/README.md +5 -3
- package/modules/release/produce.mjs +5 -2
- package/modules/release/source.mjs +15 -4
- package/onboarding/adapter-auth.mjs +4 -3
- package/onboarding/adapter-settings.mjs +21 -5
- package/onboarding/adapter.mjs +2 -1
- package/onboarding/app-fetch.mjs +79 -0
- package/onboarding/archive-output.d.mts +4 -2
- package/onboarding/archive-output.mjs +22 -10
- package/onboarding/dependency-approval.mjs +4 -3
- package/onboarding/local/environment.mjs +7 -2
- package/onboarding/operator-install.mjs +8 -2
- package/onboarding/operator-prerequisites.mjs +5 -2
- package/onboarding/queued-entry.mjs +9 -5
- package/operations/operations.mjs +11 -2
- package/package.json +75 -1
- package/scripts/publish-check/github_refs.py +28 -2
- package/scripts/publish-check/public_hygiene.py +35 -4
- package/scripts/publish-check/publication-config.json +14 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""Public-tree and message hygiene; findings never include matched values."""
|
|
2
2
|
from collections import Counter
|
|
3
3
|
import re
|
|
4
|
-
from github_refs import REPOSITORY_HOSTS,
|
|
4
|
+
from github_refs import REPOSITORY_HOSTS, reference_sets
|
|
5
5
|
from destination import RULE as PENDING_DESTINATION
|
|
6
6
|
from hygiene_text import decoded_text
|
|
7
7
|
from provenance import provenance_text
|
|
@@ -25,12 +25,35 @@ def private_emails(text, config):
|
|
|
25
25
|
# URL paths, queries and fragments remain visible to email inspection.
|
|
26
26
|
email_text = URI_AUTHORITY.sub(email_userinfo, without_required_notices(text))
|
|
27
27
|
email_text = re.sub(r'(?i)\b(?a:git@github\.com:)(?=[A-Za-z0-9])', '', email_text)
|
|
28
|
-
|
|
28
|
+
# A package manager's patch file is named name@version.patch.
|
|
29
|
+
version = r'(?:v?[0-9]+(?:\.[0-9]+)*(?:-[A-Za-z0-9-]+)?|[a-f0-9]{40})(?:\.patch)?(?![A-Za-z0-9_.-])'
|
|
29
30
|
email_text = re.sub(r'(?m)^\s*-?\s*uses:\s*[\"\']?[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+@[^\s\"\']+', '', email_text)
|
|
30
31
|
email_text = re.sub(r'(?<![A-Za-z0-9])(?:@[A-Za-z0-9_.-]+/)?[A-Za-z0-9_.-]+(?:/[A-Za-z0-9_.-]+)?@' + version, '', email_text)
|
|
31
32
|
return [match.group() for match in EMAIL.finditer(email_text) if not public_email(match.group(), config)]
|
|
32
33
|
|
|
33
34
|
|
|
35
|
+
# A stored host name is lower case, upper case or capitalised, label by label.
|
|
36
|
+
# Bytes that merely decode to text, such as compressed pixels, rarely are.
|
|
37
|
+
HOST_LABEL = re.compile(r'(?:[a-z0-9-]+|[A-Z0-9-]+|[A-Z][a-z0-9-]*)')
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
# Control bytes that no text encoding uses (tab, newline, form feed and carriage
|
|
41
|
+
# return are text). Legacy 8-bit text such as latin-1 or Windows-1252 has none,
|
|
42
|
+
# while compressed or packed data is about one byte in nine.
|
|
43
|
+
NON_TEXT = re.compile(rb'[\x01-\x08\x0b\x0e-\x1f\x7f]')
|
|
44
|
+
BINARY_SHARE = 0.05
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def binary(data):
|
|
48
|
+
# NULs are not counted: UTF-16 and UTF-32 text carries them between letters.
|
|
49
|
+
text = data.replace(b'\0', b'')
|
|
50
|
+
return bool(text) and len(NON_TEXT.findall(text)) / len(text) > BINARY_SHARE
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def stored_host(address):
|
|
54
|
+
return all(HOST_LABEL.fullmatch(label) for label in address.rsplit('@', 1)[1].split('.'))
|
|
55
|
+
|
|
56
|
+
|
|
34
57
|
def certificate_metadata(data, bundle, emails, config):
|
|
35
58
|
# Every match lies inside a verified trust-anchor subject value: none
|
|
36
59
|
# remains once those values are blanked, and each is one of theirs.
|
|
@@ -62,15 +85,23 @@ def inspect_text(data, path, config, resolver):
|
|
|
62
85
|
emails = private_emails(text, config)
|
|
63
86
|
bundle = config.get('trustBundles', {}).get(path)
|
|
64
87
|
if emails and not (bundle and certificate_metadata(data, bundle, emails, config)):
|
|
65
|
-
|
|
88
|
+
# Inside binary data a mailbox is judged by its own shape: a host
|
|
89
|
+
# name with mixed-case letters inside a label is not one.
|
|
90
|
+
if not binary(data) or any(stored_host(email) for email in emails):
|
|
91
|
+
rules.add('hygiene.email')
|
|
66
92
|
ref_text, provenance = provenance_text(text, path, config.get('declaredSources', frozenset()))
|
|
67
|
-
|
|
93
|
+
stated, ambiguous = reference_sets(ref_text, path, config.get('localPaths', frozenset()), config.get('projectIdentity'))
|
|
94
|
+
for repository in sorted(stated | ambiguous):
|
|
68
95
|
# A future source identity does not assert current GitHub visibility.
|
|
69
96
|
# Explicit release destinations still take the strict visibility path.
|
|
70
97
|
if (repository in config.get('intendedPublicRepositories', frozenset()) and
|
|
71
98
|
repository != config.get('pendingDestination')):
|
|
72
99
|
continue
|
|
73
100
|
state = resolver.resolve(repository)
|
|
101
|
+
# A bare word/word with no GitHub context names a repository only when
|
|
102
|
+
# one exists privately; that no repository answers to it proves nothing.
|
|
103
|
+
if state == 'missing' and repository in ambiguous and repository != config.get('pendingDestination'):
|
|
104
|
+
continue
|
|
74
105
|
if state == 'missing' and repository == config.get('pendingDestination'):
|
|
75
106
|
rules.add(PENDING_DESTINATION)
|
|
76
107
|
elif state in ('private', 'missing'):
|
|
@@ -7,6 +7,19 @@
|
|
|
7
7
|
{ "repository": "just-every/lamp", "reason": "Owner-declared public identity; created by clean-history export at the first public tag." },
|
|
8
8
|
{ "repository": "just-every/dial", "reason": "Owner-declared public identity; created by clean-history export at the first public tag." },
|
|
9
9
|
{ "repository": "just-every/orbit", "reason": "Owner-declared public identity; created by clean-history export at the first public tag." },
|
|
10
|
-
{ "repository": "just-every/uptime-monitor", "reason": "Owner-declared public identity; created by clean-history export at the first public tag." }
|
|
10
|
+
{ "repository": "just-every/uptime-monitor", "reason": "Owner-declared public identity; created by clean-history export at the first public tag." },
|
|
11
|
+
{ "repository": "just-every/run-slate", "reason": "Owner-proposed public name (13 Oct 2026), accepted ahead of the rename; created by clean-history export at the first public tag." },
|
|
12
|
+
{ "repository": "just-every/run-pencil", "reason": "Owner-proposed public name (13 Oct 2026), accepted ahead of the rename; created by clean-history export at the first public tag." },
|
|
13
|
+
{ "repository": "just-every/run-lamp", "reason": "Owner-proposed public name (13 Oct 2026), accepted ahead of the rename; created by clean-history export at the first public tag." },
|
|
14
|
+
{ "repository": "just-every/run-uptime", "reason": "Owner-proposed public name (13 Oct 2026), accepted ahead of the rename; created by clean-history export at the first public tag." },
|
|
15
|
+
{ "repository": "just-every/run-cradle", "reason": "Owner-proposed public name (13 Oct 2026), accepted ahead of the rename; created by clean-history export at the first public tag." },
|
|
16
|
+
{ "repository": "just-every/run-vector", "reason": "Owner-proposed public name (13 Oct 2026), accepted ahead of the rename; created by clean-history export at the first public tag." },
|
|
17
|
+
{ "repository": "just-every/run-mango", "reason": "Owner-proposed public name (13 Oct 2026), accepted ahead of the rename; created by clean-history export at the first public tag." },
|
|
18
|
+
{ "repository": "just-every/run-dial", "reason": "Owner-proposed public name (13 Oct 2026), accepted ahead of the rename; created by clean-history export at the first public tag." },
|
|
19
|
+
{ "repository": "just-every/run-penny", "reason": "Owner-proposed public name (13 Oct 2026), accepted ahead of the rename; created by clean-history export at the first public tag." },
|
|
20
|
+
{ "repository": "just-every/run-nook", "reason": "Owner-proposed public name (13 Oct 2026), accepted ahead of the rename; created by clean-history export at the first public tag." },
|
|
21
|
+
{ "repository": "just-every/run-orbit", "reason": "Owner-proposed public name (13 Oct 2026), accepted ahead of the rename; created by clean-history export at the first public tag." },
|
|
22
|
+
{ "repository": "just-every/run-oncall", "reason": "Owner-proposed public name (13 Oct 2026), accepted ahead of the rename; created by clean-history export at the first public tag." },
|
|
23
|
+
{ "repository": "just-every/run-spool", "reason": "Owner-proposed public name (13 Oct 2026), accepted ahead of the rename; created by clean-history export at the first public tag." }
|
|
11
24
|
]
|
|
12
25
|
}
|