From 71eb6961a8be1312b61ab3bf71c4721608e98787 Mon Sep 17 00:00:00 2001 From: Lior Date: Thu, 28 May 2026 09:08:00 -0400 Subject: [PATCH 1/2] =?UTF-8?q?fix(codeberg-world):=20tsc=20TS2430=20(inte?= =?UTF-8?q?rface=20extends=20literal-narrowing)=20+=20TS6133=20(unused=20L?= =?UTF-8?q?ifetimeState=20import)=20=E2=80=94=20unblocks=20#5805/#5806/#58?= =?UTF-8?q?07=20CI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR #5804 merged with 2 tsc errors that surfaced on downstream PRs: 1. LifetimeState imported but never used (TS6133) 2. CodebergWorld extends GiteaWorld fails because forgeSpecialization literal narrows from 'gitea' → 'codeberg' (TS2430; literal types are invariant; can't widen via interface-extends) Fix: - Remove unused LifetimeState import - Use Omit to drop the inherited literal before re-declaring narrower 'codeberg' literal Verification: - bunx tsc --noEmit -p tsconfig.json — clean on workflow-engine files - bun test tools/workflow-engine/codeberg-world.test.ts — 6 pass / 0 fail Composes with substrate: - PR #5804 (4-adapter batch; merged with this latent tsc issue) - PR #5805 (AutoLoopLifetime) + PR #5806 (DUs-as-muscle-memory) + PR #5807 (trajectory carving) all unblock from tsc gate after merge Co-Authored-By: Claude Opus 4.7 --- tools/workflow-engine/codeberg-world.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tools/workflow-engine/codeberg-world.ts b/tools/workflow-engine/codeberg-world.ts index ab095bc52c..98d69bc554 100644 --- a/tools/workflow-engine/codeberg-world.ts +++ b/tools/workflow-engine/codeberg-world.ts @@ -13,9 +13,6 @@ // substrate (community governance + EU-data-sovereignty). Substrate-naming // substrate-engineering keeps the inheritance explicit. -import { - type LifetimeState, -} from "./world.js"; import { buildGiteaWorld, type GiteaPrLifetime, @@ -29,13 +26,17 @@ import { type GitWorld } from "./git-world.js"; /** * CodebergWorld — Codeberg-specific specialization of GiteaWorld. * - * Inherits all GiteaWorld substrate + adds Codeberg-specific properties: + * Inherits all GiteaWorld substrate fields EXCEPT forgeSpecialization, + * which is narrowed from "gitea" to "codeberg" literal. Uses Omit to + * avoid TS2430 interface-incompatible-extends error (literal types are + * invariant). + * + * Adds Codeberg-specific properties: * - Community-moderation substrate (codeOfConduct, terms-of-service) * - EU-data-sovereignty marker (GDPR-compliant; German non-profit) * - Conservative rate-limit defaults (shared community instance) */ -export interface CodebergWorld extends GiteaWorld { - readonly forgeName: "git"; +export interface CodebergWorld extends Omit { readonly forgeSpecialization: "codeberg"; // narrower than gitea readonly hostingPolicy: "non-commercial-eu-sovereign"; readonly communityGoverned: true; From 3597541d72b1e24dcf7d53d9c89cea2fee784555 Mon Sep 17 00:00:00 2001 From: Lior Date: Thu, 28 May 2026 09:33:31 -0400 Subject: [PATCH 2/2] fix(PR #5808): align CodebergWorld docblock with actual fields (Copilot thread) Doc bullets listed "codeOfConduct, terms-of-service" + separate "EU-data-sovereignty marker" + "rate-limit defaults" but the interface only declares `hostingPolicy: "non-commercial-eu-sovereign"` + `communityGoverned: true`. The actual fields capture the same SEMANTIC INTENT under different names; doc was using descriptive prose where the code uses concise field names. Rewrote doc bullets to: - Map directly to actual fields with explicit `field: type` references - Preserve the substrate-engineering intent (EU-sovereignty, community governance, non-profit hosting) as inline explanation - Move the "rate-limit defaults" note to a separate sentence pointing at the inherited GiteaResourceBudget (rate-limit is the BUDGET-shape built in buildCodebergWorld, not a new interface field) Non-breaking: only docblock changed; interface + implementation unchanged. Autonomous-loop tick 2026-05-28T14:03Z resolution of PR #5808. Co-Authored-By: Claude --- tools/workflow-engine/codeberg-world.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tools/workflow-engine/codeberg-world.ts b/tools/workflow-engine/codeberg-world.ts index 98d69bc554..fc76a68023 100644 --- a/tools/workflow-engine/codeberg-world.ts +++ b/tools/workflow-engine/codeberg-world.ts @@ -32,9 +32,14 @@ import { type GitWorld } from "./git-world.js"; * invariant). * * Adds Codeberg-specific properties: - * - Community-moderation substrate (codeOfConduct, terms-of-service) - * - EU-data-sovereignty marker (GDPR-compliant; German non-profit) - * - Conservative rate-limit defaults (shared community instance) + * - `hostingPolicy: "non-commercial-eu-sovereign"` — EU-data-sovereignty + * marker (GDPR-compliant; German non-profit; Codeberg e.V.) + * - `communityGoverned: true` — community-moderation substrate (CoC + + * community-governed terms-of-service; not commercial vendor policy) + * + * Conservative rate-limit defaults appropriate for a shared community + * instance are inherited via GiteaResourceBudget (constructed by + * buildCodebergWorld below). */ export interface CodebergWorld extends Omit { readonly forgeSpecialization: "codeberg"; // narrower than gitea