feat(store,doctor): surface the hub's trust + exposure data (0.77.0)
Some checks failed
Security / Security check (push) Failing after 1s
Some checks failed
Security / Security check (push) Failing after 1s
The trust-gate dialog replaces its generic 'no per-entry status yet (alpha)' note with the hub's classified verification statement — pinned store key / trusted publishers (green), installs without signature checking (amber), install would be refused (red), bridge entry (neutral) — via one shared describeInstallVerification mapping. Against a pre-0.23 hub the field is empty and the old honest wording stays (pinned by test). Information architecture: policy-off is a GLOBAL fact, so it appears as ONE ChainInlineHelp notice above the store grid instead of a warning pill on every card (card noise); only 'blocked' — a genuine per-source anomaly — earns a card pill. Doctor's host services show the hub-classified network reach per endpoint (local only / private network / publicly reachable with a protect-it hint / reach unknown). Verified end-to-end against the live dev hub (guide harness): the wire field arrives, the store page shows exactly one policy notice and quiet cards; trust-gate variants captured via the dialog harness. Suite 123 green. Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
parent
87afa4dc05
commit
2f076ccf29
15 changed files with 732 additions and 13 deletions
|
|
@ -1189,6 +1189,12 @@
|
|||
}
|
||||
},
|
||||
"doctorSummaryDeclared": "deklariert",
|
||||
"svcExposureLoopback": "nur lokal",
|
||||
"svcExposurePrivate": "privates Netz",
|
||||
"svcExposurePublic": "öffentlich erreichbar",
|
||||
"svcExposureUnknown": "Reichweite unbekannt",
|
||||
"svcExposurePublicHint": "Dieser Dienst-Endpunkt liegt auf einer öffentlichen Adresse — prüfen Sie, ob er abgesichert ist (TLS, Auth, Firewall).",
|
||||
"svcExposureUnknownHint": "Hostname statt IP-Adresse — der Hub löst zur Einstufung bewusst keine Namen auf.",
|
||||
"doctorLinkStore": "Store öffnen",
|
||||
"doctorLinkApprovals": "Freigaben öffnen",
|
||||
"doctorLinkAudit": "Protokoll öffnen",
|
||||
|
|
@ -1622,6 +1628,19 @@
|
|||
"installConfirmNeedsCapabilities": "Benötigte Fähigkeiten",
|
||||
"installConfirmTrustTitle": "Vertrauen & Sicherheit",
|
||||
"installConfirmTrustBody": "Das Modul läuft in einer Sandbox: Es darf nur auf die Netzwerk-Endpunkte, Dateien und Umgebungsvariablen zugreifen, die es selbst deklariert — der Hub setzt diese Liste durch. Die vollständige Berechtigungsliste sehen Sie nach der Installation in den Modul-Details.",
|
||||
"storePolicyUnverifiedNotice": "Die Signaturpflicht ist in der Hub-Richtlinie ausgeschaltet — Installationen werden nicht kryptografisch geprüft. Der Installations-Dialog zeigt den Status je Modul; für geprüfte Installationen security.require_signatures aktivieren.",
|
||||
"verifPillUnverified": "unsigniert",
|
||||
"verifPillBlocked": "blockiert",
|
||||
"verifPinnedKey": "Signatur wird geprüft — hinterlegter Store-Schlüssel",
|
||||
"verifPinnedKeyBody": "Der Hub verifiziert das Paket beim Installieren gegen den fest hinterlegten Schlüssel dieser Quelle. Ein manipuliertes Paket wird abgelehnt.",
|
||||
"verifTrustedPublishers": "Signatur wird geprüft — vertrauenswürdige Herausgeber",
|
||||
"verifTrustedPublishersBody": "Der Hub verifiziert die Signatur beim Installieren gegen die Liste vertrauenswürdiger Herausgeber. Ein Paket ohne gültige Signatur wird abgelehnt.",
|
||||
"verifUnverified": "Wird ohne Signaturprüfung installiert",
|
||||
"verifUnverifiedBody": "Die Signaturpflicht ist in der Hub-Richtlinie ausgeschaltet — dieses Paket wird beim Installieren nicht kryptografisch geprüft. Für geprüfte Installationen security.require_signatures aktivieren.",
|
||||
"verifBlocked": "Installation würde abgelehnt",
|
||||
"verifBlockedBody": "Die Richtlinie verlangt Signaturen, aber für diese Quelle ist kein Schlüsselmaterial hinterlegt — der Hub würde die Installation verweigern.",
|
||||
"verifFederated": "Über Integration angebunden — keine Paket-Signatur",
|
||||
"verifFederatedBody": "Dieser Eintrag ist kein installierbares Paket, sondern läuft über eine konfigurierte Integration (z. B. MCP oder n8n). Eine Paket-Signatur gibt es hier nicht; es gilt das Vertrauen in die Integration.",
|
||||
"installConfirmSignatureNote": "Signaturen prüft der Hub beim Installieren, sofern die Signaturpflicht im Sicherheitsprofil aktiv ist. Einen Signaturstatus vorab zeigt der Store-Index derzeit noch nicht an (Alpha).",
|
||||
"settingsSidebarPinnedTitle": "Navigation immer ausgeklappt",
|
||||
"settingsSidebarPinnedBody": "Zeigt die Beschriftungen der Seitenleiste dauerhaft an, statt sie nur beim Überfahren mit der Maus einzublenden.",
|
||||
|
|
|
|||
|
|
@ -1213,6 +1213,12 @@
|
|||
}
|
||||
},
|
||||
"doctorSummaryDeclared": "declared",
|
||||
"svcExposureLoopback": "local only",
|
||||
"svcExposurePrivate": "private network",
|
||||
"svcExposurePublic": "publicly reachable",
|
||||
"svcExposureUnknown": "reach unknown",
|
||||
"svcExposurePublicHint": "This service endpoint sits on a public address — make sure it is protected (TLS, auth, firewall).",
|
||||
"svcExposureUnknownHint": "Hostname instead of an IP address — the hub deliberately does not resolve names to classify.",
|
||||
"doctorLinkStore": "Open the store",
|
||||
"doctorLinkApprovals": "Open approvals",
|
||||
"doctorLinkAudit": "Open the audit log",
|
||||
|
|
@ -1646,6 +1652,19 @@
|
|||
"installConfirmNeedsCapabilities": "Required capabilities",
|
||||
"installConfirmTrustTitle": "Trust & security",
|
||||
"installConfirmTrustBody": "The module runs in a sandbox: it may only touch the network endpoints, files, and environment variables it declares itself — the hub enforces that list. The full permission list is visible in the module details after installation.",
|
||||
"storePolicyUnverifiedNotice": "Signature enforcement is switched off in the hub policy — installs are not cryptographically verified. The install dialog shows the per-module status; enable security.require_signatures for verified installs.",
|
||||
"verifPillUnverified": "unsigned",
|
||||
"verifPillBlocked": "blocked",
|
||||
"verifPinnedKey": "Signature checked — pinned store key",
|
||||
"verifPinnedKeyBody": "The hub verifies the bundle at install time against this source's pinned key. A tampered bundle is refused.",
|
||||
"verifTrustedPublishers": "Signature checked — trusted publishers",
|
||||
"verifTrustedPublishersBody": "The hub verifies the signature at install time against the trusted-publisher list. A bundle without a valid signature is refused.",
|
||||
"verifUnverified": "Installs without signature checking",
|
||||
"verifUnverifiedBody": "Signature enforcement is switched off in the hub policy — this bundle is not cryptographically verified at install time. Enable security.require_signatures for verified installs.",
|
||||
"verifBlocked": "An install would be refused",
|
||||
"verifBlockedBody": "The policy requires signatures, but no key material applies to this source — the hub would refuse the install.",
|
||||
"verifFederated": "Connected via an integration — no bundle signature",
|
||||
"verifFederatedBody": "This entry is not an installable bundle; it runs through a configured integration (e.g. MCP or n8n). There is no bundle signature — trust follows the integration.",
|
||||
"installConfirmSignatureNote": "The hub verifies signatures at install time whenever the security profile requires them. The store index does not yet show a per-entry signature status up front (alpha).",
|
||||
"settingsSidebarPinnedTitle": "Keep the navigation expanded",
|
||||
"settingsSidebarPinnedBody": "Shows the sidebar labels permanently instead of only while hovering with the mouse.",
|
||||
|
|
|
|||
|
|
@ -3692,6 +3692,42 @@ abstract class AppLocalizations {
|
|||
/// **'declared'**
|
||||
String get doctorSummaryDeclared;
|
||||
|
||||
/// No description provided for @svcExposureLoopback.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'local only'**
|
||||
String get svcExposureLoopback;
|
||||
|
||||
/// No description provided for @svcExposurePrivate.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'private network'**
|
||||
String get svcExposurePrivate;
|
||||
|
||||
/// No description provided for @svcExposurePublic.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'publicly reachable'**
|
||||
String get svcExposurePublic;
|
||||
|
||||
/// No description provided for @svcExposureUnknown.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'reach unknown'**
|
||||
String get svcExposureUnknown;
|
||||
|
||||
/// No description provided for @svcExposurePublicHint.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'This service endpoint sits on a public address — make sure it is protected (TLS, auth, firewall).'**
|
||||
String get svcExposurePublicHint;
|
||||
|
||||
/// No description provided for @svcExposureUnknownHint.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Hostname instead of an IP address — the hub deliberately does not resolve names to classify.'**
|
||||
String get svcExposureUnknownHint;
|
||||
|
||||
/// No description provided for @doctorLinkStore.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
@ -4898,6 +4934,84 @@ abstract class AppLocalizations {
|
|||
/// **'The module runs in a sandbox: it may only touch the network endpoints, files, and environment variables it declares itself — the hub enforces that list. The full permission list is visible in the module details after installation.'**
|
||||
String get installConfirmTrustBody;
|
||||
|
||||
/// No description provided for @storePolicyUnverifiedNotice.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Signature enforcement is switched off in the hub policy — installs are not cryptographically verified. The install dialog shows the per-module status; enable security.require_signatures for verified installs.'**
|
||||
String get storePolicyUnverifiedNotice;
|
||||
|
||||
/// No description provided for @verifPillUnverified.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'unsigned'**
|
||||
String get verifPillUnverified;
|
||||
|
||||
/// No description provided for @verifPillBlocked.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'blocked'**
|
||||
String get verifPillBlocked;
|
||||
|
||||
/// No description provided for @verifPinnedKey.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Signature checked — pinned store key'**
|
||||
String get verifPinnedKey;
|
||||
|
||||
/// No description provided for @verifPinnedKeyBody.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'The hub verifies the bundle at install time against this source\'s pinned key. A tampered bundle is refused.'**
|
||||
String get verifPinnedKeyBody;
|
||||
|
||||
/// No description provided for @verifTrustedPublishers.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Signature checked — trusted publishers'**
|
||||
String get verifTrustedPublishers;
|
||||
|
||||
/// No description provided for @verifTrustedPublishersBody.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'The hub verifies the signature at install time against the trusted-publisher list. A bundle without a valid signature is refused.'**
|
||||
String get verifTrustedPublishersBody;
|
||||
|
||||
/// No description provided for @verifUnverified.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Installs without signature checking'**
|
||||
String get verifUnverified;
|
||||
|
||||
/// No description provided for @verifUnverifiedBody.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Signature enforcement is switched off in the hub policy — this bundle is not cryptographically verified at install time. Enable security.require_signatures for verified installs.'**
|
||||
String get verifUnverifiedBody;
|
||||
|
||||
/// No description provided for @verifBlocked.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'An install would be refused'**
|
||||
String get verifBlocked;
|
||||
|
||||
/// No description provided for @verifBlockedBody.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'The policy requires signatures, but no key material applies to this source — the hub would refuse the install.'**
|
||||
String get verifBlockedBody;
|
||||
|
||||
/// No description provided for @verifFederated.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Connected via an integration — no bundle signature'**
|
||||
String get verifFederated;
|
||||
|
||||
/// No description provided for @verifFederatedBody.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'This entry is not an installable bundle; it runs through a configured integration (e.g. MCP or n8n). There is no bundle signature — trust follows the integration.'**
|
||||
String get verifFederatedBody;
|
||||
|
||||
/// No description provided for @installConfirmSignatureNote.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
|
|||
|
|
@ -2149,6 +2149,26 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||
@override
|
||||
String get doctorSummaryDeclared => 'deklariert';
|
||||
|
||||
@override
|
||||
String get svcExposureLoopback => 'nur lokal';
|
||||
|
||||
@override
|
||||
String get svcExposurePrivate => 'privates Netz';
|
||||
|
||||
@override
|
||||
String get svcExposurePublic => 'öffentlich erreichbar';
|
||||
|
||||
@override
|
||||
String get svcExposureUnknown => 'Reichweite unbekannt';
|
||||
|
||||
@override
|
||||
String get svcExposurePublicHint =>
|
||||
'Dieser Dienst-Endpunkt liegt auf einer öffentlichen Adresse — prüfen Sie, ob er abgesichert ist (TLS, Auth, Firewall).';
|
||||
|
||||
@override
|
||||
String get svcExposureUnknownHint =>
|
||||
'Hostname statt IP-Adresse — der Hub löst zur Einstufung bewusst keine Namen auf.';
|
||||
|
||||
@override
|
||||
String get doctorLinkStore => 'Store öffnen';
|
||||
|
||||
|
|
@ -2886,6 +2906,54 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||
String get installConfirmTrustBody =>
|
||||
'Das Modul läuft in einer Sandbox: Es darf nur auf die Netzwerk-Endpunkte, Dateien und Umgebungsvariablen zugreifen, die es selbst deklariert — der Hub setzt diese Liste durch. Die vollständige Berechtigungsliste sehen Sie nach der Installation in den Modul-Details.';
|
||||
|
||||
@override
|
||||
String get storePolicyUnverifiedNotice =>
|
||||
'Die Signaturpflicht ist in der Hub-Richtlinie ausgeschaltet — Installationen werden nicht kryptografisch geprüft. Der Installations-Dialog zeigt den Status je Modul; für geprüfte Installationen security.require_signatures aktivieren.';
|
||||
|
||||
@override
|
||||
String get verifPillUnverified => 'unsigniert';
|
||||
|
||||
@override
|
||||
String get verifPillBlocked => 'blockiert';
|
||||
|
||||
@override
|
||||
String get verifPinnedKey =>
|
||||
'Signatur wird geprüft — hinterlegter Store-Schlüssel';
|
||||
|
||||
@override
|
||||
String get verifPinnedKeyBody =>
|
||||
'Der Hub verifiziert das Paket beim Installieren gegen den fest hinterlegten Schlüssel dieser Quelle. Ein manipuliertes Paket wird abgelehnt.';
|
||||
|
||||
@override
|
||||
String get verifTrustedPublishers =>
|
||||
'Signatur wird geprüft — vertrauenswürdige Herausgeber';
|
||||
|
||||
@override
|
||||
String get verifTrustedPublishersBody =>
|
||||
'Der Hub verifiziert die Signatur beim Installieren gegen die Liste vertrauenswürdiger Herausgeber. Ein Paket ohne gültige Signatur wird abgelehnt.';
|
||||
|
||||
@override
|
||||
String get verifUnverified => 'Wird ohne Signaturprüfung installiert';
|
||||
|
||||
@override
|
||||
String get verifUnverifiedBody =>
|
||||
'Die Signaturpflicht ist in der Hub-Richtlinie ausgeschaltet — dieses Paket wird beim Installieren nicht kryptografisch geprüft. Für geprüfte Installationen security.require_signatures aktivieren.';
|
||||
|
||||
@override
|
||||
String get verifBlocked => 'Installation würde abgelehnt';
|
||||
|
||||
@override
|
||||
String get verifBlockedBody =>
|
||||
'Die Richtlinie verlangt Signaturen, aber für diese Quelle ist kein Schlüsselmaterial hinterlegt — der Hub würde die Installation verweigern.';
|
||||
|
||||
@override
|
||||
String get verifFederated =>
|
||||
'Über Integration angebunden — keine Paket-Signatur';
|
||||
|
||||
@override
|
||||
String get verifFederatedBody =>
|
||||
'Dieser Eintrag ist kein installierbares Paket, sondern läuft über eine konfigurierte Integration (z. B. MCP oder n8n). Eine Paket-Signatur gibt es hier nicht; es gilt das Vertrauen in die Integration.';
|
||||
|
||||
@override
|
||||
String get installConfirmSignatureNote =>
|
||||
'Signaturen prüft der Hub beim Installieren, sofern die Signaturpflicht im Sicherheitsprofil aktiv ist. Einen Signaturstatus vorab zeigt der Store-Index derzeit noch nicht an (Alpha).';
|
||||
|
|
|
|||
|
|
@ -2153,6 +2153,26 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
@override
|
||||
String get doctorSummaryDeclared => 'declared';
|
||||
|
||||
@override
|
||||
String get svcExposureLoopback => 'local only';
|
||||
|
||||
@override
|
||||
String get svcExposurePrivate => 'private network';
|
||||
|
||||
@override
|
||||
String get svcExposurePublic => 'publicly reachable';
|
||||
|
||||
@override
|
||||
String get svcExposureUnknown => 'reach unknown';
|
||||
|
||||
@override
|
||||
String get svcExposurePublicHint =>
|
||||
'This service endpoint sits on a public address — make sure it is protected (TLS, auth, firewall).';
|
||||
|
||||
@override
|
||||
String get svcExposureUnknownHint =>
|
||||
'Hostname instead of an IP address — the hub deliberately does not resolve names to classify.';
|
||||
|
||||
@override
|
||||
String get doctorLinkStore => 'Open the store';
|
||||
|
||||
|
|
@ -2882,6 +2902,52 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
String get installConfirmTrustBody =>
|
||||
'The module runs in a sandbox: it may only touch the network endpoints, files, and environment variables it declares itself — the hub enforces that list. The full permission list is visible in the module details after installation.';
|
||||
|
||||
@override
|
||||
String get storePolicyUnverifiedNotice =>
|
||||
'Signature enforcement is switched off in the hub policy — installs are not cryptographically verified. The install dialog shows the per-module status; enable security.require_signatures for verified installs.';
|
||||
|
||||
@override
|
||||
String get verifPillUnverified => 'unsigned';
|
||||
|
||||
@override
|
||||
String get verifPillBlocked => 'blocked';
|
||||
|
||||
@override
|
||||
String get verifPinnedKey => 'Signature checked — pinned store key';
|
||||
|
||||
@override
|
||||
String get verifPinnedKeyBody =>
|
||||
'The hub verifies the bundle at install time against this source\'s pinned key. A tampered bundle is refused.';
|
||||
|
||||
@override
|
||||
String get verifTrustedPublishers => 'Signature checked — trusted publishers';
|
||||
|
||||
@override
|
||||
String get verifTrustedPublishersBody =>
|
||||
'The hub verifies the signature at install time against the trusted-publisher list. A bundle without a valid signature is refused.';
|
||||
|
||||
@override
|
||||
String get verifUnverified => 'Installs without signature checking';
|
||||
|
||||
@override
|
||||
String get verifUnverifiedBody =>
|
||||
'Signature enforcement is switched off in the hub policy — this bundle is not cryptographically verified at install time. Enable security.require_signatures for verified installs.';
|
||||
|
||||
@override
|
||||
String get verifBlocked => 'An install would be refused';
|
||||
|
||||
@override
|
||||
String get verifBlockedBody =>
|
||||
'The policy requires signatures, but no key material applies to this source — the hub would refuse the install.';
|
||||
|
||||
@override
|
||||
String get verifFederated =>
|
||||
'Connected via an integration — no bundle signature';
|
||||
|
||||
@override
|
||||
String get verifFederatedBody =>
|
||||
'This entry is not an installable bundle; it runs through a configured integration (e.g. MCP or n8n). There is no bundle signature — trust follows the integration.';
|
||||
|
||||
@override
|
||||
String get installConfirmSignatureNote =>
|
||||
'The hub verifies signatures at install time whenever the security profile requires them. The store index does not yet show a per-entry signature status up front (alpha).';
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue