Conversation
|
Note Gemini is unable to generate a summary for this pull request due to the file types involved not being currently supported. |
📝 WalkthroughWalkthroughAdded inclusion of the built UI distribution ( Changes
Sequence Diagram(s)(omitted — changes are minor and do not introduce a new multi-component control flow requiring visualization) Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
There was a problem hiding this comment.
Pull request overview
This PR fixes 503 errors on Deno Deploy by ensuring the UI build output directory (src/ui/dist) is included in deployment uploads.
Changes:
- Added
--include=src/ui/distflag to both staging and production Deno Deploy workflows
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
.github/workflows/deploy-staging.yml |
Added --include=src/ui/dist flag to deployctl command to ensure UI assets are uploaded |
.github/workflows/deploy-deno.yml |
Added --include=src/ui/dist flag to deployctl command to ensure UI assets are uploaded |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Actionable comments posted: 0
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
.github/workflows/deploy-deno.yml (1)
36-48: LGTM on the--includeflag syntax, but add environment protection for production deployments.The
--include=src/ui/distflag is valid and correctly ensures built UI artifacts are deployed, resolving the 503 errors.However, the workflow is missing the required
environment:configuration for production deployments. Add protection rules to thedeployjob:jobs: deploy: runs-on: ubuntu-latest environment: production permissions: contents: read id-token: writeThis enforces approval requirements for production deployments as required by the coding guidelines.
🧹 Nitpick comments (1)
.github/workflows/deploy-deno.yml (1)
9-14: Consider adding environment protection for production deployments.As per coding guidelines, production deployments should require environment approvals. This workflow deploys to production on every push to
mainwithout any approval gate.♻️ Suggested change to add environment protection
jobs: deploy: runs-on: ubuntu-latest + environment: production permissions: contents: read id-token: writeThen configure the
productionenvironment in GitHub repository settings with required reviewers or other protection rules.
Summary
Release Prep
Check each item or mark it N/A on the same line.
Testing
LM Studio - should have valid LMSTUDIO_BASE_URL format ... ok (0ms)
LM Studio - should have LMSTUDIO_API_KEY defined ... ok (0ms)
LM Studio - should have LMSTUDIO_MODEL defined ... ok (0ms)
LM Studio - should have valid temperature range ... ok (0ms)
LM Studio - should have valid max tokens range ... ok (0ms)
Evaluation - should have valid EVAL_REPLICATES ... ok (0ms)
Evaluation - should have valid EVAL_STD_LAMBDA ... ok (0ms)
Evaluation - should have valid EVAL_FAIL_PENALTY ... ok (0ms)
Optimization - should have valid OPT_ITERATIONS ... ok (0ms)
Optimization - should have valid OPT_PATCH_CANDIDATES ... ok (0ms)
Optimization - should have valid OPT_CONCURRENCY ... ok (0ms)
Optimization - should have valid OPT_PROMOTION_THRESHOLD ... ok (0ms)
FPF - should have valid POLL configuration ... ok (0ms)
FPF - should have valid phi penalties in descending order ... ok (0ms)
Pair Mining - should have valid similarity threshold ... ok (0ms)
Pair Mining - should have valid delta threshold ... ok (0ms)
Pair Mining - should have valid max pairs ... ok (0ms)
Schema - should coerce string numbers to numbers ... ok (0ms)
Schema - should handle boolean values ... ok (0ms)
Schema - should reject invalid values ... ok (0ms)
Schema - should reject out-of-range values ... ok (0ms)
Defaults - should have sensible defaults when env vars are missing ... ok (0ms)
running 8 tests from ./tests/connectivity.test.ts
LM Studio - should connect to models endpoint ... ignored (0ms)
LM Studio - should have at least one model loaded ... ignored (0ms)
LM Studio - should have the configured model available ... ignored (0ms)
LM Studio - should complete a simple chat completion ... ignored (0ms)
Backend - should connect to health endpoint ... ignored (0ms)
URL Config - should use consistent localhost format ... ok (0ms)
URL Config - should not have trailing slashes in base URLs ... ok (0ms)
URL Config - should use http for localhost ... ok (0ms)
running 10 tests from ./tests/env-consistency.test.ts
Naming - should use LMSTUDIO_ prefix consistently in config ... ok (0ms)
Ports - LM Studio should use port 1234 ... ok (0ms)
Ports - Backend server should use Deno.serve ... ok (0ms)
UI - Vite entry should exist ... ok (0ms)
Model - should have model configured ... ok (0ms)
Model - generator model should exist for judge fallback ... ok (0ms)
API - should have consistent API versioning ... ok (0ms)
Env Sync - .env and .env.example should have same variables ...
------- post-test output -------
⚠ Variables in .env.example but not in .env:
----- post-test output end -----
Env Sync - .env and .env.example should have same variables ... ok (0ms)
Readiness - should not have TODO comments in critical paths ... ok (0ms)
Readiness - should have orchestrator exports ... ok (0ms)
running 11 tests from ./tests/fpf/confidence-interval.test.ts
Statistical Utilities ...
mean ...
should calculate mean correctly ... ok (0ms)
should return 0 for empty array ... ok (0ms)
should handle single value ... ok (0ms)
mean ... ok (1ms)
stdDev ...
should calculate sample standard deviation ... ok (0ms)
should return 0 for single value ... ok (0ms)
should return 0 for empty array ... ok (0ms)
stdDev ... ok (0ms)
standardError ...
should calculate SE as SD/sqrt(n) ... ok (0ms)
standardError ... ok (0ms)
percentile ...
should calculate percentiles correctly ... ok (0ms)
should interpolate between values ... ok (1ms)
percentile ... ok (1ms)
Statistical Utilities ... ok (2ms)
Wilson Score Interval ...
should calculate interval for 50% success rate ... ok (0ms)
should handle 0% success rate ... ok (0ms)
should handle 100% success rate ... ok (0ms)
should handle empty sample ... ok (0ms)
should be asymmetric near boundaries ... ok (0ms)
Wilson Score Interval ... ok (0ms)
Bootstrap Interval ...
should calculate interval for normal-ish data ... ok (0ms)
should handle single value ... ok (0ms)
should handle empty array ... ok (0ms)
should narrow with more samples ... ok (1ms)
Bootstrap Interval ... ok (1ms)
T-Interval ...
should calculate interval for small samples ... ok (0ms)
should be wider than normal interval for small n ... ok (0ms)
should handle single value ... ok (0ms)
T-Interval ... ok (0ms)
Inter-Judge Interval ...
should calculate interval from judge scores ... ok (0ms)
should be wide for disagreeing judges ... ok (0ms)
should handle single judge ... ok (0ms)
Inter-Judge Interval ... ok (0ms)
Normal Interval ...
should calculate symmetric interval ... ok (0ms)
Normal Interval ... ok (0ms)
Auto Confidence Interval ...
should use Wilson for binary data ... ok (0ms)
should use bootstrap for very small samples ... ok (1ms)
should use t-interval for medium samples ... ok (0ms)
should use normal for large samples ... ok (0ms)
Auto Confidence Interval ... ok (0ms)
Score With Confidence ...
should create score with judge confidence ... ok (0ms)
Score With Confidence ... ok (0ms)
Formatting ...
should format confidence interval nicely ... ok (1ms)
Formatting ... ok (0ms)
Interval Comparison ...
should detect overlapping intervals ... ok (0ms)
should detect non-overlapping intervals ... ok (0ms)
should detect touching intervals as overlapping ... ok (0ms)
should calculate interval width ... ok (0ms)
Interval Comparison ... ok (0ms)
Bounds Clamping ...
should clamp lower bound to 0 ... ok (0ms)
should clamp upper bound to 1 ... ok (0ms)
Bounds Clamping ... ok (0ms)
running 21 tests from ./tests/fpf/creativity.test.ts
Novelty: No references = maximally novel (1.0) ... ok (0ms)
Novelty: Identical to reference = zero novelty ... ok (0ms)
Novelty: Different from references = high novelty ... ok (0ms)
Use-Value: Positive when better than baseline ... ok (0ms)
Use-Value: Negative when worse than baseline ... ok (0ms)
Use-Value: Zero when equal to baseline ... ok (0ms)
Surprise: Empty prompt = zero surprise ... ok (0ms)
Surprise: Varied text = higher surprise ... ok (0ms)
Constraint-Fit: Schema invalid = zero ... ok (0ms)
Constraint-Fit: Full pass rate with valid schema = 1.0 ... ok (0ms)
Constraint-Fit: Partial pass rate ... ok (0ms)
Diversity_P: Empty portfolio = max diversity ... ok (0ms)
Diversity_P: Identical to portfolio member = zero diversity ... ok (0ms)
Diversity_P: Different from portfolio = high diversity ... ok (0ms)
Gate: High novelty but failed constraints = ineligible ... ok (0ms)
Gate: Constraint-Fit = 1.0 = eligible (even with negative use-value) ... ok (0ms)
Gate: Positive use-value = eligible (even with partial constraint) ... ok (0ms)
Gate: Both gates pass = eligible with positive reason ... ok (0ms)
Comparison: Constraint-fit takes priority ... ok (0ms)
Comparison: Use-value decides when constraint-fit equal ... ok (0ms)
Comparison: Diversity_P is tie-breaker ... ok (0ms)
running 14 tests from ./tests/fpf/nqd-selector.test.ts
Eligibility: Constraint-Fit = 1.0 is eligible ... ok (0ms)
Eligibility: Partial pass rate with positive use-value is eligible ... ok (0ms)
Eligibility: Schema invalid with positive use-value is still eligible (CC-C17-M.2) ... ok (0ms)
Eligibility: Schema invalid with negative use-value is ineligible ... ok (0ms)
Eligibility: Partial pass rate with negative use-value is ineligible ... ok (0ms)
Pareto: Single candidate is on front ... ok (0ms)
Pareto: Dominated candidate is filtered ... ok (0ms)
Pareto: Non-dominated candidates form multi-point front ... ok (0ms)
Winner: Best candidate selected from front ... ok (0ms)
Winner: No winner when all ineligible ... ok (0ms)
Illumination: QD score is sum of objectives ... ok (0ms)
Illumination: Coverage reflects front size ... ok (0ms)
Stats: Counts are accurate ... ok (0ms)
Full pipeline: Realistic tournament scenario ... ok (0ms)
running 11 tests from ./tests/fpf/poll.test.ts
CL3 when judges agree closely (delta < 0.10) ... ok (0ms)
CL2 when moderate agreement (0.10 <= delta < 0.25) ... ok (0ms)
CL1 when weak agreement (0.25 <= delta < 0.40) ... ok (0ms)
CL0 when high disagreement (delta >= 0.40) ... ok (0ms)
WLNK: R_eff = min(R_i) when CL3 (no penalty) ... ok (0ms)
WLNK: R_eff penalized when CL0 (high disagreement) ... ok (0ms)
WLNK: R_eff cannot go below 0 ... ok (0ms)
PHI is monotone decreasing (higher CL = lower penalty) ... ok (0ms)
Formality uses min (ordinal), never average ... ok (0ms)
Full WLNK pipeline produces correct assurance tuple ... ok (0ms)
WLNK prevents trust inflation from high outliers ... ok (0ms)
running 7 tests from ./tests/meta-evolution/meta-evolution.test.ts
Meta-Evolution Types ...
should have valid default config ... ok (0ms)
Meta-Evolution Types ... ok (0ms)
Seed Mutation Prompts ...
should have all mutation types represented ... ok (1ms)
should create seed mutation prompts with unique IDs ... ok (0ms)
should initialize fitness scores to 0.5 ... ok (0ms)
should initialize usage counts to 0 ... ok (0ms)
should initialize success rates to 0.5 ... ok (0ms)
should set generation to 0 for seed prompts ... ok (0ms)
Seed Mutation Prompts ... ok (2ms)
getMutationsByType ...
should filter mutations by type ... ok (0ms)
should return empty array for missing type ... ok (0ms)
getMutationsByType ... ok (0ms)
Mutation Selection ...
should select mutations with fitness-proportionate probability ... ok (1ms)
should exclude specified IDs from selection ... ok (0ms)
should throw when all mutations are excluded ... ok (0ms)
should select elite mutations by fitness ... ok (0ms)
should handle requesting more elites than available ... ok (0ms)
should handle empty mutation list gracefully ... ok (0ms)
Mutation Selection ... ok (1ms)
MetaEvolutionEngine ...
should initialize with base prompt and config ... ok (0ms)
should initialize with seed mutation prompts ... ok (0ms)
should start with generation 0 ... ok (0ms)
should track best fitness and prompt ID ... ok (0ms)
should return best prompt correctly ... ok (0ms)
should accept partial config overrides ... ok (0ms)
MetaEvolutionEngine ... ok (0ms)
TaskPrompt structure ...
should have correct structure from engine initialization ... ok (0ms)
TaskPrompt structure ... ok (0ms)
Population structure ...
should contain all required fields ... ok (0ms)
Population structure ... ok (0ms)
running 10 tests from ./tests/orchestrator/nqd-tournament.test.ts
NQD Tournament: Single candidate returns as winner ... ok (0ms)
NQD Tournament: Empty candidates returns null winner ... ok (0ms)
NQD Tournament: Best objective wins when all eligible ... ok (1ms)
NQD Tournament: Ineligible candidates are filtered ... ok (0ms)
NQD Tournament: Archive contains illumination telemetry ... ok (0ms)
NQD Tournament: nqdChangedWinner is false when same as simple sort ... ok (0ms)
NQD Tournament: Pareto front contains non-dominated candidates ... ok (0ms)
selectNQDWinner: Returns winner directly ... ok (0ms)
enrichWithPrompts: Converts basic candidates ... ok (0ms)
NQD Tournament: Realistic optimization scenario ... ok (0ms)
running 9 tests from ./tests/orchestrator/optimization-progress.test.ts
OptimizationProgress: createOptimizationTask initializes correctly ... ok (0ms)
OptimizationProgress: updateTaskStep changes step correctly ... ok (0ms)
OptimizationProgress: updateTaskEvalProgress updates eval progress ... ok (0ms)
OptimizationProgress: updateTaskTournamentProgress updates tournament progress ... ok (0ms)
OptimizationProgress: toIterationSummary extracts correct fields ... ok (0ms)
OptimizationProgress: completeTaskIteration adds to history and updates state ... ok (0ms)
OptimizationProgress: completeTaskIteration keeps champion on no promotion ... ok (0ms)
OptimizationProgress: STEP_LABELS has all expected steps ... ok (0ms)
OptimizationProgress: Multiple iterations build history correctly ... ok (0ms)
running 13 tests from ./tests/orchestrator/tools/tools.test.ts
PairMiner: Finds contrastive pairs within same epic ... ok (0ms)
PairMiner: Does not pair different epics ... ok (0ms)
PairMiner: Tiered mining adds quality tier metadata ... ok (0ms)
PairMiner: hasPairs helper works correctly ... ok (0ms)
PairMiner: Formatted context includes pair information ... ok (0ms)
MetaPatcher: Returns result structure ...
------- post-test output -------
Error in agent stream {
error: TypeError: error sending request for url (http://127.0.0.1:1234/v1/chat/completions): client error (Connect): tcp connect error: Connection refused (os error 61)
at async mainFetch (ext:deno_fetch/26_fetch.js:192:12)
at async fetch (ext:deno_fetch/26_fetch.js:475:11)
at async postToApi (file:///Users/stas-studio/Developer/PromptAgent/node_modules/.deno/@AI-SDK+provider-utils@3.0.12/node_modules/@ai-sdk/provider-utils/dist/index.mjs:98:22)
at async OpenAICompatibleChatLanguageModel.doGenerate (file:///Users/stas-studio/Developer/PromptAgent/node_modules/.deno/@AI-SDK+openai-compatible@1.0.22/node_modules/@ai-sdk/openai-compatible/dist/index.mjs:222:9)
at async AISDKV5LanguageModel.doGenerate (file:///Users/stas-studio/Developer/PromptAgent/node_modules/.deno/@mastra+core@0.24.9/node_modules/@mastra/core/dist/chunk-72F4RGK7.js:41:20)
at async pRetry.default.retries (file:///Users/stas-studio/Developer/PromptAgent/node_modules/.deno/@mastra+core@0.24.9/node_modules/@mastra/core/dist/chunk-GSQD3QNR.js:76:33)
at async Module.pRetry (file:///Users/stas-studio/Developer/PromptAgent/node_modules/.deno/p-retry@7.1.1/node_modules/p-retry/index.js:197:19)
at async createStream (file:///Users/stas-studio/Developer/PromptAgent/node_modules/.deno/@mastra+core@0.24.9/node_modules/@mastra/core/dist/chunk-GSQD3QNR.js:76:33)
at async Object.start (file:///Users/stas-studio/Developer/PromptAgent/node_modules/.deno/@mastra+core@0.24.9/node_modules/@mastra/core/dist/chunk-GSQD3QNR.js:57:35),
runId: "6f5ed879-e40d-4b01-b6e1-463a3a835ed7"
}
----- post-test output end -----
MetaPatcher: Returns result structure ... ok (3s)
MetaPatcher: updateMutationFitness adjusts fitness on improvement ... ok (0ms)
MetaPatcher: updateMutationFitness handles regression ... ok (0ms)
MetaPatcher: runHypermutation creates derived mutations ... ok (0ms)
MetaPatcher: hasMetaPatches checks result correctly ...
------- post-test output -------
Error in agent stream {
error: TypeError: error sending request for url (http://127.0.0.1:1234/v1/chat/completions): client error (Connect): tcp connect error: Connection refused (os error 61)
at async mainFetch (ext:deno_fetch/26_fetch.js:192:12)
at async fetch (ext:deno_fetch/26_fetch.js:475:11)
at async postToApi (file:///Users/stas-studio/Developer/PromptAgent/node_modules/.deno/@AI-SDK+provider-utils@3.0.12/node_modules/@ai-sdk/provider-utils/dist/index.mjs:98:22)
at async OpenAICompatibleChatLanguageModel.doGenerate (file:///Users/stas-studio/Developer/PromptAgent/node_modules/.deno/@AI-SDK+openai-compatible@1.0.22/node_modules/@ai-sdk/openai-compatible/dist/index.mjs:222:9)
at async AISDKV5LanguageModel.doGenerate (file:///Users/stas-studio/Developer/PromptAgent/node_modules/.deno/@mastra+core@0.24.9/node_modules/@mastra/core/dist/chunk-72F4RGK7.js:41:20)
at async pRetry.default.retries (file:///Users/stas-studio/Developer/PromptAgent/node_modules/.deno/@mastra+core@0.24.9/node_modules/@mastra/core/dist/chunk-GSQD3QNR.js:76:33)
at async Module.pRetry (file:///Users/stas-studio/Developer/PromptAgent/node_modules/.deno/p-retry@7.1.1/node_modules/p-retry/index.js:197:19)
at async createStream (file:///Users/stas-studio/Developer/PromptAgent/node_modules/.deno/@mastra+core@0.24.9/node_modules/@mastra/core/dist/chunk-GSQD3QNR.js:76:33)
at async Object.start (file:///Users/stas-studio/Developer/PromptAgent/node_modules/.deno/@mastra+core@0.24.9/node_modules/@mastra/core/dist/chunk-GSQD3QNR.js:57:35),
runId: "2b9f7e16-7c36-40b0-8162-11f450904c4b"
}
----- post-test output end -----
MetaPatcher: hasMetaPatches checks result correctly ... ok (3s)
Tools: Include execution duration in results ... ok (0ms)
Tools: Propagate context with runId ... ok (0ms)
Tools: Context creates unique runIds ... ok (0ms)
running 21 tests from ./tests/pairMining.test.ts
mineContrastivePairs - returns empty array for empty input ... ok (0ms)
mineContrastivePairs - returns empty array for single run ... ok (0ms)
mineContrastivePairs - finds pairs within same epic ... ok (0ms)
mineContrastivePairs - does not pair different epics ... ok (0ms)
mineContrastivePairs - respects minDelta threshold ... ok (0ms)
mineContrastivePairs - respects maxPairs limit ... ok (0ms)
mineContrastivePairs - sorts by delta descending ... ok (0ms)
mineContrastivePairs - good/bad assignment is correct ... ok (0ms)
mineContrastivePairs - skips pairs where both outputs failed ... ok (0ms)
formatPairsForPrompt - returns message for empty pairs ... ok (0ms)
formatPairsForPrompt - formats pairs correctly ... ok (0ms)
formatPairsForPrompt - handles multiple pairs ... ok (0ms)
formatPairsForPrompt - includes JSON story pack ... ok (0ms)
mineTieredContrastivePairs - assigns HIGH tier for score >= 0.75 ... ok (0ms)
mineTieredContrastivePairs - assigns MEDIUM tier for score 0.50-0.75 ... ok (0ms)
mineTieredContrastivePairs - assigns LOW tier for score < 0.50 ... ok (0ms)
mineTieredContrastivePairs - identifies primary metric ... ok (0ms)
mineTieredContrastivePairs - generates error analysis ... ok (0ms)
mineTieredContrastivePairs - stratifies by tier ... ok (0ms)
formatPairsForPrompt - includes tier and primary metric ... ok (0ms)
formatTieredPairsForPrompt - includes summary section ... ok (0ms)
running 11 tests from ./tests/project-config.test.ts
Environment - should have .env.example file ... ok (0ms)
Environment - should have .env file for local development ... ok (0ms)
Environment - .env should not contain production secrets ... ok (0ms)
Environment - .env.example should document required variables ... ok (0ms)
Config Consistency - should use consistent variable naming ... ok (0ms)
Git - should have .gitignore ... ok (0ms)
Git - .gitignore should exclude .env ... ok (0ms)
Deno - should have deno.json ... ok (0ms)
Deno - should have test task defined ... ok (0ms)
Deno - should have @std imports ... ok (0ms)
UI - Vite app entry should exist ... ok (0ms)
running 11 tests from ./tests/schema.test.ts
epicSchema - validates minimal epic ... ok (0ms)
epicSchema - validates full epic with all optional fields ... ok (0ms)
epicSchema - rejects epic without required fields ... ok (0ms)
adoFieldsSchema - validates correct ADO fields ... ok (0ms)
adoFieldsSchema - rejects story points outside valid range ... ok (0ms)
adoFieldsSchema - rejects too short title ... ok (0ms)
userStorySchema - validates complete user story ... ok (0ms)
userStorySchema - rejects story with < 2 acceptance criteria ... ok (0ms)
storyPackSchema - validates complete story pack ... ok (0ms)
storyPackSchema - rejects empty user stories array ... ok (0ms)
storyPackSchema - provides defaults for optional arrays ... ok (0ms)
running 16 tests from ./tests/similarity.test.ts
hashVector - returns correct dimension ... ok (0ms)
hashVector - empty text returns zero vector ... ok (0ms)
hashVector - short tokens are filtered ... ok (0ms)
hashVector - case insensitive ... ok (5ms)
hashVector - deterministic ... ok (0ms)
cosine - identical vectors have similarity 1 ... ok (0ms)
cosine - orthogonal vectors have similarity 0 ... ok (0ms)
cosine - opposite vectors have similarity -1 ... ok (0ms)
cosine - zero vector returns 0 ... ok (0ms)
cosine - throws on dimension mismatch ... ok (0ms)
cosine - normalized result in range [-1, 1] ... ok (0ms)
textSimilarity - identical texts have high similarity ... ok (0ms)
textSimilarity - similar texts have high similarity ... ok (0ms)
textSimilarity - different texts have low similarity ... ok (0ms)
textSimilarity - empty texts have zero similarity ... ok (0ms)
textSimilarity - user story similarity detection ... ok (0ms)
ok | 190 passed (64 steps) | 0 failed | 5 ignored (7s) (not run)
Summary by CodeRabbit
Chores
Dependencies
✏️ Tip: You can customize this high-level summary in your review settings.