From 4958dce2535ad8509d01ce72979ebc4ff78bd158 Mon Sep 17 00:00:00 2001 From: egg-orchestrator Date: Tue, 24 Feb 2026 07:18:32 +0000 Subject: [PATCH 01/16] Initialize SDLC contract for issue #897 --- .egg-state/contracts/897.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .egg-state/contracts/897.json diff --git a/.egg-state/contracts/897.json b/.egg-state/contracts/897.json new file mode 100644 index 00000000..fb14b310 --- /dev/null +++ b/.egg-state/contracts/897.json @@ -0,0 +1,24 @@ +{ + "schemaVersion": "1.0", + "issue": { + "number": 897, + "title": "Issue #897", + "url": "https://github.com/jwbron/egg/issues/897" + }, + "pipeline_id": null, + "current_phase": "refine", + "acceptance_criteria": [], + "phases": [], + "decisions": [], + "workflow_owner": null, + "audit_log": [], + "refine_review_cycles": 0, + "refine_review_feedback": "", + "plan_review_cycles": 0, + "plan_review_feedback": "", + "pr": null, + "feedback": null, + "phase_configs": null, + "agent_executions": [], + "multi_agent_config": null +} From 524ec12a481aaaa2622d4ec3ded636104c83d2df Mon Sep 17 00:00:00 2001 From: egg Date: Tue, 24 Feb 2026 07:24:47 +0000 Subject: [PATCH 02/16] Add analysis for issue #897: SDLC reviewer shallow analysis --- .egg-state/drafts/897-analysis.md | 203 ++++++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 .egg-state/drafts/897-analysis.md diff --git a/.egg-state/drafts/897-analysis.md b/.egg-state/drafts/897-analysis.md new file mode 100644 index 00000000..b2d2c368 --- /dev/null +++ b/.egg-state/drafts/897-analysis.md @@ -0,0 +1,203 @@ +# Analysis: SDLC Pipeline Reviewers Produce Shallow Analysis Compared to PR Reviewers + +> Issue: #897 | Phase: refine + +## Problem Statement + +The SDLC pipeline's internal review agents (code, contract, agent-design, refine, plan) produce significantly shallower analysis than the automated PR reviewers running on GitHub Actions, despite both systems consuming the same shared criteria files (`shared/prompts/code-review-criteria.md`, `shared/prompts/contract-review-criteria.md`, `shared/prompts/agent-design-criteria.md`). + +Evidence from PR #895 (issue #871) shows SDLC reviewers writing ~1-3 sentence verdicts with `"feedback": ""` even when scope creep and real issues were present, while PR reviewers on the same code produced 20-row task tables, identified 5 specific code issues (driving a follow-up commit), and gave substantive multi-round reviews. + +The desired outcome is SDLC reviewers producing at minimum the same depth of analysis as PR reviewers — with detailed file-by-file analysis, advisory suggestions on approved work, and actionable output rather than a pass/fail stamp. + +## Current Behavior + +### Verdict Schema Constrains Depth + +The `ReviewVerdict` model (`orchestrator/models.py:97-103`) has four fields: + +```python +class ReviewVerdict(BaseModel): + verdict: str # "approved" or "needs_revision" + summary: str # "Brief summary of review findings" + feedback: str # "Detailed feedback if needs_revision" + timestamp: str # ISO 8601 timestamp +``` + +The prompt at `orchestrator/routes/pipelines.py:1554-1570` instructs reviewers: + +```json +"feedback": "Detailed feedback if needs_revision, empty if approved" +``` + +This **explicitly tells reviewers to write empty feedback when approving**. There is no field for advisory suggestions, non-blocking observations, or detailed analysis that should always be populated. + +### Aggregation Ignores Approved Verdicts + +`_aggregate_review_verdicts()` at `orchestrator/routes/pipelines.py:1712-1738` only collects feedback from `needs_revision` verdicts. If a reviewer approves with observations in `summary`, those observations are silently discarded — they are never surfaced to the implementing agent or the human. + +### SDLC Prompt is Less Detailed Than PR Prompt + +**PR code reviewer** (`action/build-review-prompt.sh`) gets: +- "Comprehensive, thorough code review" framing +- "Critical infrastructure — last line of defense before production" +- 6 detailed procedural steps +- Review conventions from `action/review-conventions.md` (comprehensive, specific, direct, suggest fixes, provide context) +- `` marker for approvals with advisory feedback + +**SDLC code reviewer** (`orchestrator/routes/pipelines.py:1509-1526`) for non-draft reviews gets: +- 9 procedural steps (briefer than PR counterpart) +- Scope preamble with "Be thorough" and "Find ALL issues" (`pipelines.py:1014-1022`) +- **No review conventions** — `review-conventions.md` is not loaded +- No equivalent to `has-suggestions` — binary approved/needs_revision only + +**SDLC non-code reviewers** (refine, plan, contract, agent-design) for draft-based reviews get: +- 4 steps: read draft, evaluate against criteria, write verdict JSON, commit (`pipelines.py:1523-1526`) +- No thoroughness framing, no review conventions, no procedural guidance +- The criteria themselves are substantive (refine has 6 sections, plan has 7), but the prompt wrapping them gives no instructions on how deep the analysis should be + +### No "Approve with Suggestions" Concept in SDLC + +PR reviewers have the `` marker (`action/review-conventions.md:34`) which promotes an `approve` to `approve-with-suggestions`, triggering the `on-review-feedback.yml` workflow so suggestions get acted on. The SDLC pipeline has no equivalent — observations from an approving reviewer are structurally lost. + +## Constraints + +- **Backward compatibility**: The `ReviewVerdict` model is consumed by `_read_review_verdict()` (`pipelines.py:1589-1632`), `_aggregate_review_verdicts()` (`pipelines.py:1712-1738`), and all existing verdict JSON files stored in `.egg-state/reviews/`. Any model changes must handle both old and new format gracefully. +- **JSON output format**: SDLC reviewers write JSON to files that are programmatically parsed, unlike PR reviewers who write free-form markdown to PR comments. The JSON format creates a ceiling on expressiveness unless new fields are added. +- **Token budget**: Making reviewers produce more detailed output increases token consumption per review cycle. This matters because reviews run on Opus, and the SDLC pipeline can run 3 reviewers × up to 3 cycles. +- **Reviewer scope separation**: The SDLC pipeline deliberately separates reviewers by concern (code, contract, agent-design). Adding thoroughness requirements must respect these boundaries — e.g., the agent-design reviewer should not be pressured into writing detailed feedback when there are no agent-design issues. +- **Agent-design reviewer is intentionally brief**: The agent-design criteria explicitly says "Only comment if you find agent-mode design issues. If the PR has no agent-mode concerns, approve with a brief note" (`action/build-agent-mode-design-review-prompt.sh:126-127`). Forcing thoroughness here would be counterproductive. +- **Shared criteria files**: Both systems consume the same criteria files. Changes to shared criteria affect PR reviewers too. +- **Test coverage**: `_aggregate_review_verdicts()` has no direct unit tests — only mock usage in tier 3 tests. The `ReviewVerdict` model is tested in `orchestrator/tests/test_models.py`. Prompt building is tested in `orchestrator/tests/test_pipeline_prompts.py`. + +## Options Considered + +### Option A: Expand Verdict Schema + Align Prompts (Comprehensive Fix) + +**Approach**: Add `analysis` and `suggestions` fields to `ReviewVerdict` that are always populated regardless of verdict. Update the prompt builder to include review conventions and thoroughness instructions matching the PR reviewer. Update aggregation to surface suggestions from approved verdicts. + +**Schema change**: +```python +class ReviewVerdict(BaseModel): + verdict: str + summary: str + analysis: str = "" # NEW: detailed file-by-file or section-by-section analysis (always populated) + suggestions: str = "" # NEW: non-blocking suggestions (populated even on approve) + feedback: str = "" # existing: blocking feedback for needs_revision + timestamp: str = "" +``` + +**Prompt changes**: +- Update verdict format instructions to require `analysis` always +- Explicitly say: "Always provide detailed analysis regardless of verdict" +- Remove "empty if approved" language from `feedback` field +- Include review conventions content (from `review-conventions.md`) in SDLC prompts +- Add the "last line of defense" and "critical infrastructure" framing for code reviewers + +**Aggregation changes**: +- `_aggregate_review_verdicts()` collects `analysis` + `suggestions` from all verdicts, even approved ones +- Return value changes: `(overall_verdict, combined_feedback, combined_analysis)` or similar + +**Pros**: +- Directly addresses all three root causes identified in the issue +- Clear separation between blocking feedback, non-blocking suggestions, and analysis +- Backward compatible — new fields have defaults, old JSON files parse fine +- Aligns SDLC reviewers with the PR reviewer standard + +**Cons**: +- Larger scope of changes across model, prompt builder, and aggregation +- Increases token consumption per review (reviewers must always write analysis) +- May be over-structured — adding fields doesn't guarantee quality; the prompt is what really drives behavior + +### Option B: Prompt-Only Fix (Minimal Schema Change) + +**Approach**: Keep the verdict schema mostly as-is but rewrite the prompt instructions to demand thoroughness. Change "empty if approved" to require detailed feedback always. Load `review-conventions.md` content into SDLC prompts. The existing `summary` and `feedback` fields can carry richer content with better prompting. + +**Prompt changes**: +- Remove "empty if approved" instruction +- Replace with: "Always provide detailed analysis in the summary field. Provide non-blocking suggestions in the feedback field even when approving." +- Add review conventions (comprehensive, specific, direct, suggest fixes) +- Add "critical infrastructure" framing for code reviewers +- For non-code reviewers (refine, plan), add structured analysis expectations keyed to their criteria sections + +**Aggregation changes**: +- Update `_aggregate_review_verdicts()` to also collect `summary` and `feedback` from approved verdicts (not just needs_revision) + +**Pros**: +- Smaller scope — no model changes needed +- Addresses the key issue (prompt instructions drive behavior) +- Lower risk of breaking existing verdict parsing + +**Cons**: +- Overloads existing fields (`summary` for analysis, `feedback` for suggestions) — field semantics become ambiguous +- Harder for downstream code to distinguish blocking vs non-blocking feedback +- The "approved with empty feedback" pattern is reinforced by the field description in the model itself + +### Option C: Add "Approved with Suggestions" Verdict + Prompt Improvements + +**Approach**: Add a third verdict value (`approved_with_suggestions`) alongside the prompt improvements from Option B. When a reviewer approves but has suggestions, they use this verdict. The aggregation logic treats it as `approved` for overall verdict but surfaces the feedback for action. + +**Schema change**: Add `approved_with_suggestions` as a valid verdict value. No new fields. + +**Prompt changes**: Same as Option B, plus instructions about when to use each verdict. + +**Aggregation changes**: `approved_with_suggestions` → overall still `approved`, but feedback is collected and surfaced. + +**Pros**: +- Mirrors the PR reviewer's `has-suggestions` concept +- Clear semantic distinction without adding fields +- Moderate scope + +**Cons**: +- Three-way verdict adds complexity to all verdict-handling code paths +- Doesn't address the shallow analysis problem for clean approvals (an approve with no suggestions still has no analysis requirement) +- Requires updating every `if verdict == "approved"` check throughout the codebase + +## Recommended Approach + +**Option A: Expand Verdict Schema + Align Prompts**. This directly addresses all three root causes: + +1. **Schema constraint** → New `analysis` and `suggestions` fields that are always populated give reviewers structured space for depth. +2. **Prompt gap** → Including review conventions and thoroughness framing aligns SDLC prompts with PR prompts. +3. **No approve-with-suggestions** → The `suggestions` field serves this purpose without needing a third verdict value. + +The key insight from the issue is that **the verdict format structurally discourages thorough analysis**. Option B improves prompting but leaves the structural incentive intact — an agent told to write JSON with a field called `feedback` described as "empty if approved" will naturally minimize effort. Option A changes the structure to match the desired behavior. + +Backward compatibility is straightforward: new fields have empty-string defaults, so old JSON files parse without error. The aggregation function already handles `None` verdicts gracefully, and extending it to collect analysis/suggestions from all verdicts is a natural extension. + +The agent-design reviewer should be exempted from the "always populate analysis" requirement — its criteria explicitly says to approve briefly when there are no concerns. This aligns with its PR counterpart's behavior. + +## Open Questions + +### Design Decisions + +1. **Should the `analysis` field use a structured sub-format?** For code reviewers, should analysis be a list of per-file findings (like the PR reviewer's file-by-file approach), or free-form markdown? A structured format increases parsability but constrains the reviewer. The PR reviewer uses free-form markdown successfully. + +2. **How should approved-verdict suggestions be surfaced to the implementing agent?** Options: (a) include them in the next cycle's prompt as "advisory feedback", (b) write them to a separate file agents can optionally read, (c) only surface them to the human in the phase-completion comment. Option (a) risks agents treating non-blocking suggestions as blocking requirements. + +3. **Should the agent-design reviewer be exempt from the always-populate-analysis requirement?** Its PR counterpart explicitly says "approve with a brief note" when there are no agent-mode concerns. Forcing it to write detailed analysis seems counterproductive, but applying different rules per reviewer type adds complexity. + +4. **Should review conventions be loaded from `action/review-conventions.md` or duplicated into the orchestrator?** Loading from the file keeps them in sync with PR reviewers but creates a dependency across the action/orchestrator boundary. Duplicating risks drift. + +5. **Should the `feedback` field semantics change?** Currently "detailed feedback if needs_revision". Should it become "blocking feedback for needs_revision, non-blocking suggestions for approved"? Or should `suggestions` fully replace its role for non-blocking items, leaving `feedback` as blocking-only? + +### Scope Decisions + +6. **Should existing verdict files be migrated?** Old verdicts in `.egg-state/reviews/` lack `analysis` and `suggestions` fields. The default empty strings handle this, but should a one-time migration backfill them for consistency? + +7. **Should the aggregation function return analysis/suggestions separately from feedback?** The current return type is `tuple[str, str]` (verdict, feedback). Adding analysis/suggestions changes the return signature and all callers. Should it return a typed object instead? + +8. **How should the non-code reviewers' (refine, plan) prompts be improved?** The code reviewer has a clear model (the PR reviewer prompt) to align with. The refine and plan reviewers have no PR-side counterpart. How much additional prompting should they get? Their criteria are already substantive — is the gap mainly in the verdict format instructions and the "empty if approved" language? + +### Risk/Budget Decisions + +9. **What is the acceptable token budget increase?** Always-populate-analysis reviews will use more tokens per review. With 3 reviewers × potentially 3 cycles, this could meaningfully increase pipeline cost. Is there a per-review or per-cycle token budget to stay within? + +10. **Should there be a maximum length for the `analysis` field?** Without guidance, a reviewer might produce very long analysis. Should the prompt include length guidance (e.g., "provide a thorough but concise analysis, typically 200-500 words")? + +--- + +*Authored-by: egg* + +# metadata +complexity_tier: mid From c2b9f192743eb85024107365d1fa34d19039686a Mon Sep 17 00:00:00 2001 From: egg Date: Tue, 24 Feb 2026 07:26:22 +0000 Subject: [PATCH 03/16] Add agent-design review verdict for issue #897 refine phase --- .egg-state/reviews/897-refine-agent-design-review.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .egg-state/reviews/897-refine-agent-design-review.json diff --git a/.egg-state/reviews/897-refine-agent-design-review.json b/.egg-state/reviews/897-refine-agent-design-review.json new file mode 100644 index 00000000..92167232 --- /dev/null +++ b/.egg-state/reviews/897-refine-agent-design-review.json @@ -0,0 +1,7 @@ +{ + "reviewer": "agent-design", + "verdict": "approved", + "summary": "No agent-mode design anti-patterns found. The analysis correctly identifies that the ReviewVerdict JSON format serves a machine consumer (_aggregate_review_verdicts), making structured output appropriate. Proposed schema extensions (analysis, suggestions fields) are modest and backward-compatible. Prompt improvements focus on quality expectations (what) rather than rigid procedures (how). The analysis shows good judgment by explicitly exempting the agent-design reviewer from the always-populate-analysis requirement, consistent with its intentionally brief scope.", + "feedback": "", + "timestamp": "2026-02-24T12:00:00Z" +} From 789b546a4bf4d654881fd4595b710f87f428a1cc Mon Sep 17 00:00:00 2001 From: egg Date: Tue, 24 Feb 2026 07:27:38 +0000 Subject: [PATCH 04/16] Add refine review verdict for issue #897 refine phase Authored-by: egg --- .egg-state/reviews/897-refine-refine-review.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .egg-state/reviews/897-refine-refine-review.json diff --git a/.egg-state/reviews/897-refine-refine-review.json b/.egg-state/reviews/897-refine-refine-review.json new file mode 100644 index 00000000..d6f50333 --- /dev/null +++ b/.egg-state/reviews/897-refine-refine-review.json @@ -0,0 +1,7 @@ +{ + "reviewer": "refine", + "verdict": "approved", + "summary": "High-quality analysis with thorough, accurate codebase research and a well-justified recommendation. Problem understanding is precise — correctly identifies all three root causes (verdict schema constraining depth, prompt gap vs PR reviewers, no approve-with-suggestions concept) with specific evidence from PR #895. All major code references verified accurate (ReviewVerdict fields, aggregation logic, prompt instructions, line numbers). Three meaningfully different options with clearly articulated trade-offs. Recommendation of Option A (schema expansion + prompt alignment) is well-reasoned — the insight that structural incentives matter more than prompt wording alone is sound. One minor factual inaccuracy: the analysis states 'The ReviewVerdict model is tested in orchestrator/tests/test_models.py' but ReviewVerdict is not actually covered in that test file. This does not affect the recommendation. Open questions are mostly actionable, though some (#6 migration, #7 return type, #10 max length) are implementation details better deferred to the plan phase rather than requiring human input at this stage.", + "feedback": "", + "timestamp": "2026-02-24T12:30:00Z" +} From 075b816d5c4d3ceed37866a962cbc8e6682a9829 Mon Sep 17 00:00:00 2001 From: egg-orchestrator Date: Tue, 24 Feb 2026 07:27:59 +0000 Subject: [PATCH 05/16] Persist statefiles after refine phase --- .egg-state/contracts/897.json | 68 ++++++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/.egg-state/contracts/897.json b/.egg-state/contracts/897.json index fb14b310..4e62c102 100644 --- a/.egg-state/contracts/897.json +++ b/.egg-state/contracts/897.json @@ -19,6 +19,72 @@ "pr": null, "feedback": null, "phase_configs": null, - "agent_executions": [], + "agent_executions": [ + { + "role": "coder", + "phase_id": null, + "status": "pending", + "started_at": null, + "completed_at": null, + "commit": null, + "checkpoint_id": null, + "outputs": {}, + "error": null, + "retry_count": 0, + "conflicts": [] + }, + { + "role": "tester", + "phase_id": null, + "status": "pending", + "started_at": null, + "completed_at": null, + "commit": null, + "checkpoint_id": null, + "outputs": {}, + "error": null, + "retry_count": 0, + "conflicts": [] + }, + { + "role": "documenter", + "phase_id": null, + "status": "pending", + "started_at": null, + "completed_at": null, + "commit": null, + "checkpoint_id": null, + "outputs": {}, + "error": null, + "retry_count": 0, + "conflicts": [] + }, + { + "role": "integrator", + "phase_id": null, + "status": "pending", + "started_at": null, + "completed_at": null, + "commit": null, + "checkpoint_id": null, + "outputs": {}, + "error": null, + "retry_count": 0, + "conflicts": [] + }, + { + "role": "reviewer_agent_design", + "phase_id": null, + "status": "complete", + "started_at": null, + "completed_at": "2026-02-24T07:26:30.860483Z", + "commit": null, + "checkpoint_id": null, + "outputs": {}, + "error": null, + "retry_count": 0, + "conflicts": [] + } + ], "multi_agent_config": null } From d89c8cb64080202b7a4a58a5253417d69b03366c Mon Sep 17 00:00:00 2001 From: egg Date: Tue, 24 Feb 2026 07:42:41 +0000 Subject: [PATCH 06/16] Add architect analysis for issue #897: deepen SDLC review quality --- .../agent-outputs/897-architect-output.json | 496 ++++++++++++++++++ 1 file changed, 496 insertions(+) create mode 100644 .egg-state/agent-outputs/897-architect-output.json diff --git a/.egg-state/agent-outputs/897-architect-output.json b/.egg-state/agent-outputs/897-architect-output.json new file mode 100644 index 00000000..3434e7ce --- /dev/null +++ b/.egg-state/agent-outputs/897-architect-output.json @@ -0,0 +1,496 @@ +{ + "issue": 897, + "phase": "plan", + "agent": "architect", + "revision": 1, + "revision_reason": null, + "title": "Architecture analysis: Deepen SDLC review quality via verdict schema expansion and prompt alignment", + + "summary": "SDLC pipeline reviewers produce shallow analysis compared to PR reviewers due to three structural root causes: (1) the verdict JSON schema instructs reviewers to write empty feedback when approving, (2) the SDLC prompt lacks the thoroughness framing and review conventions that PR prompts include, and (3) there is no approve-with-suggestions concept. The recommended approach expands the ReviewVerdict model with always-populated `analysis` and `suggestions` fields, aligns the SDLC review prompt builder with PR reviewer standards, and updates aggregation to surface non-blocking suggestions from approved verdicts.", + + "problem_statement": { + "description": "SDLC pipeline reviewers write ~1-3 sentence verdicts with empty feedback even when real issues are present, while PR reviewers on the same code produce detailed multi-section reviews with specific findings. Evidence from PR #895 (issue #871) shows SDLC reviewers approving with empty feedback fields despite scope creep observations, while PR reviewers found 5 specific code issues driving a follow-up commit.", + "root_causes": [ + { + "id": "RC-1", + "title": "Verdict schema constrains depth", + "description": "The verdict format instruction at pipelines.py:1562 says 'Detailed feedback if needs_revision, empty if approved'. This explicitly tells reviewers not to provide feedback when approving. There is no field for detailed analysis or non-blocking suggestions.", + "location": "orchestrator/routes/pipelines.py:1554-1570" + }, + { + "id": "RC-2", + "title": "SDLC prompt is less detailed than PR prompt", + "description": "PR code reviewers get 'critical infrastructure — last line of defense' framing, 6 detailed procedural steps, and review conventions (comprehensive, specific, direct, suggest fixes). SDLC code reviewers get briefer steps and no review conventions. Non-code SDLC reviewers (refine, plan, contract) get only 4 generic steps with no thoroughness guidance.", + "locations": [ + "orchestrator/routes/pipelines.py:1509-1526 (SDLC prompt steps)", + "orchestrator/routes/pipelines.py:1004-1044 (scope preambles)", + "action/build-review-prompt.sh:140-163 (PR prompt)", + "action/review-conventions.md (PR conventions, not loaded by SDLC)" + ] + }, + { + "id": "RC-3", + "title": "No approve-with-suggestions concept", + "description": "PR reviewers use the marker to trigger the feedback-addressing workflow for non-blocking suggestions on approved PRs. SDLC reviewers have binary approved/needs_revision — observations from an approving reviewer are structurally lost because _aggregate_review_verdicts() only collects feedback from needs_revision verdicts.", + "locations": [ + "action/review-conventions.md:34 (has-suggestions marker)", + "orchestrator/routes/pipelines.py:1712-1738 (aggregation ignores approved)" + ] + } + ] + }, + + "current_architecture": { + "review_flow": "Reviewers are spawned in parallel per phase. Each writes a verdict JSON to .egg-state/reviews/. _read_review_verdict() parses the JSON into ReviewVerdict. _aggregate_review_verdicts() combines all verdicts: any needs_revision = overall needs_revision. Combined feedback is passed as prior_feedback to the next review cycle's prompt.", + "key_components": [ + { + "name": "ReviewVerdict model", + "file": "orchestrator/models.py", + "lines": "97-103", + "description": "Pydantic model with 4 fields: verdict, summary, feedback, timestamp. All string fields default to empty string except verdict (required)." + }, + { + "name": "_build_review_prompt()", + "file": "orchestrator/routes/pipelines.py", + "lines": "1452-1586", + "description": "Constructs the full reviewer prompt including scope preamble, task steps, criteria, delta review instructions, prior feedback, verdict format, and phase restrictions." + }, + { + "name": "_get_reviewer_scope_preamble()", + "file": "orchestrator/routes/pipelines.py", + "lines": "1004-1044", + "description": "Returns reviewer-type-specific scope text. Code reviewer gets 'Be thorough' and 'Find ALL issues'. Others get scope boundaries without thoroughness framing." + }, + { + "name": "_aggregate_review_verdicts()", + "file": "orchestrator/routes/pipelines.py", + "lines": "1712-1738", + "description": "Combines verdicts: overall = needs_revision if any is needs_revision. Only collects feedback/summary from needs_revision verdicts. Returns tuple[str, str] (verdict, combined_feedback)." + }, + { + "name": "_read_review_verdict()", + "file": "orchestrator/routes/pipelines.py", + "lines": "1589-1632", + "description": "Reads JSON from verdict file path, parses into ReviewVerdict. Returns None if file missing or malformed (treated as approved for graceful degradation). Uses Pydantic model validation via ReviewVerdict(**data)." + } + ], + "callers_of_aggregate": [ + { + "location": "orchestrator/routes/pipelines.py:3447", + "context": "Tier 3 per-phase review loop in _run_tier3_implement(). Uses combined_feedback as prior_feedback for retry or appended to tester_gap_summary." + }, + { + "location": "orchestrator/routes/pipelines.py:5396", + "context": "Main phase execution loop in _run_pipeline_phases(). Uses combined_feedback as review_feedback stored for next cycle." + } + ], + "test_coverage": [ + { + "file": "tests/workflows/test_multi_reviewer.py", + "description": "Tests aggregation logic (all_approved, any_needs_revision, etc.). Uses simplified string verdicts, not ReviewVerdict objects — may need updating." + }, + { + "file": "orchestrator/tests/test_tier3_execute.py", + "description": "Integration tests using mock ReviewVerdict objects. Tests verdict reading, aggregation in tier 3 flow. 15+ references to ReviewVerdict." + }, + { + "file": "integration_tests/sdlc/test_refine_plan_review_cycles.py", + "description": "Integration tests for review verdict file parsing in refine/plan phases." + } + ] + }, + + "approaches": [ + { + "id": "A", + "title": "Expand Verdict Schema + Align Prompts (Recommended)", + "description": "Add `analysis` and `suggestions` fields to ReviewVerdict that are always populated regardless of verdict. Update the prompt builder to include review conventions and thoroughness instructions. Update aggregation to surface suggestions from approved verdicts.", + "schema_changes": { + "model": "ReviewVerdict in orchestrator/models.py:97-103", + "new_fields": [ + { + "name": "analysis", + "type": "str", + "default": "", + "description": "Detailed file-by-file or section-by-section analysis. Always populated regardless of verdict. Free-form markdown." + }, + { + "name": "suggestions", + "type": "str", + "default": "", + "description": "Non-blocking suggestions for improvement. Populated even on approved verdicts. Serves the role of has-suggestions from PR reviews." + } + ], + "backward_compatibility": "New fields have empty-string defaults. Old JSON files without these fields will parse into ReviewVerdict with empty analysis and suggestions. No migration needed." + }, + "prompt_changes": { + "verdict_format_section": { + "location": "orchestrator/routes/pipelines.py:1554-1570", + "change": "Update JSON template to include analysis and suggestions fields. Replace 'empty if approved' instruction with 'Always provide detailed analysis regardless of verdict. Include non-blocking suggestions even when approving.'" + }, + "thoroughness_framing": { + "location": "orchestrator/routes/pipelines.py:1480-1527", + "change": "Add review conventions content after the criteria section. For code reviewers, add 'critical infrastructure' and 'last line of defense' framing. For all reviewers, add the 5 comment quality standards from review-conventions.md (comprehensive, specific, direct, suggest fixes, provide context)." + }, + "scope_preambles": { + "location": "orchestrator/routes/pipelines.py:1004-1044", + "change": "Add analysis depth expectations to each reviewer type's preamble. For code: file-by-file analysis expected. For contract: criterion-by-criterion verification table. For refine/plan: section-by-section evaluation. For agent-design: exempt from detailed analysis (approve briefly when no concerns)." + }, + "non_code_reviewer_steps": { + "location": "orchestrator/routes/pipelines.py:1523-1526", + "change": "Expand 4-step instructions for draft-based reviewers (refine, plan, contract) to include more procedural guidance: read thoroughly, cross-reference with criteria, provide specific file/section references in analysis." + } + }, + "aggregation_changes": { + "location": "orchestrator/routes/pipelines.py:1712-1738", + "change": "Collect analysis from all verdicts (not just needs_revision). Collect suggestions from all verdicts. Return an expanded result — either change return type to tuple[str, str, str] (verdict, blocking_feedback, advisory_content) or return a typed NamedTuple/dataclass.", + "downstream_callers": [ + "pipelines.py:3447 — Tier 3 loop: must handle new return value", + "pipelines.py:5396 — Main phase loop: must handle new return value" + ] + }, + "pros": [ + "Directly addresses all three root causes", + "Clear field semantics: analysis (always), suggestions (non-blocking), feedback (blocking)", + "Backward compatible — Pydantic defaults handle old files", + "Aligns SDLC reviewer behavior with proven PR reviewer standard", + "Structured separation makes it easy for downstream code to distinguish blocking vs advisory" + ], + "cons": [ + "Larger scope: model + prompt builder + aggregation + 2 callers + tests", + "Increases token consumption per review (always-populate-analysis)", + "Adding fields doesn't guarantee quality — prompt framing is the real driver" + ] + }, + { + "id": "B", + "title": "Prompt-Only Fix (Minimal Schema Change)", + "description": "Keep the verdict schema mostly as-is. Rewrite prompt instructions to demand thoroughness. Change 'empty if approved' to require detailed content in existing summary and feedback fields. Load review conventions into SDLC prompts.", + "schema_changes": { + "model": "No changes to ReviewVerdict fields", + "note": "Relies on existing summary and feedback fields carrying richer content via better prompting" + }, + "prompt_changes": { + "verdict_format_section": "Remove 'empty if approved'. Replace with 'Always provide detailed analysis in the summary field. Provide non-blocking suggestions in the feedback field even when approving.'", + "thoroughness_framing": "Same as Approach A — add review conventions and critical infrastructure framing", + "scope_preambles": "Same as Approach A — add depth expectations" + }, + "aggregation_changes": { + "change": "Update to collect summary and feedback from approved verdicts (currently only needs_revision)" + }, + "pros": [ + "Smallest scope — no model changes", + "Prompt instructions are the primary driver of behavior, so this may be sufficient", + "No risk of breaking existing verdict parsing" + ], + "cons": [ + "Overloads existing fields — summary becomes analysis, feedback becomes suggestions. Field semantics become ambiguous.", + "Downstream code cannot distinguish blocking vs non-blocking feedback", + "The model field description ('Detailed feedback if needs_revision') stays in code, creating disconnect with prompt instructions", + "If the field semantics are unclear, future agents writing/reading verdicts will be confused" + ] + }, + { + "id": "C", + "title": "Hybrid: New Analysis Field + Third Verdict State", + "description": "Add an `analysis` field (always populated) and an `approved_with_suggestions` verdict value. When a reviewer approves but has suggestions, they use this third verdict state. No separate `suggestions` field — suggestions go in `feedback` when verdict is `approved_with_suggestions`.", + "schema_changes": { + "model": "Add analysis field. Add approved_with_suggestions as valid verdict value.", + "note": "Three-way verdict: approved, approved_with_suggestions, needs_revision" + }, + "aggregation_changes": { + "change": "approved_with_suggestions treated as approved for overall verdict. Feedback from approved_with_suggestions verdicts is collected and surfaced." + }, + "pros": [ + "Mirrors PR reviewer's has-suggestions concept directly", + "Clear semantic intent per verdict value", + "Analysis field addresses the depth problem" + ], + "cons": [ + "Three-way verdict adds complexity to all verdict-handling code paths", + "Every `if verdict == 'approved'` check must be reviewed and potentially updated", + "Doesn't address the case of clean approval with analysis but no suggestions — still no data if the reviewer finds nothing", + "More error-prone: agents must choose the right verdict value from 3 options instead of always populating suggestions" + ] + } + ], + + "recommended_approach": { + "id": "A", + "title": "Expand Verdict Schema + Align Prompts", + "justification": "The refine analysis correctly identified that the verdict format structurally discourages thorough analysis. Approach A changes the structure to match the desired behavior by giving reviewers dedicated fields (analysis, suggestions) that are always expected to be populated. This is more robust than Approach B (which overloads existing fields with ambiguous semantics) and simpler than Approach C (which adds a third verdict state affecting all conditional logic). The Pydantic model's default empty strings provide effortless backward compatibility with old verdict files.", + "key_insight": "The primary driver of behavior is the prompt, not the schema. But the schema reinforces the prompt. When the prompt says 'always provide detailed analysis' and there's a dedicated `analysis` field for it, the agent has a clear target. When the prompt says 'use the summary field for analysis' but the field is named 'summary' and described as 'Brief summary', the instruction fights the structure." + }, + + "architecture_decisions": [ + { + "id": "AD-1", + "decision": "Use free-form markdown for the analysis field, not structured sub-format", + "rationale": "PR reviewers produce effective reviews in free-form markdown. A structured format (per-file JSON objects) would constrain expressiveness and add complexity to the schema. The prompt should suggest structure (e.g., 'provide file-by-file analysis for code reviews') but the field itself should accept free-form markdown." + }, + { + "id": "AD-2", + "decision": "Exempt agent-design reviewer from always-populate-analysis requirement", + "rationale": "The agent-design reviewer is intentionally brief when there are no concerns. Its PR counterpart (build-agent-mode-design-review-prompt.sh:126-127) explicitly says 'approve with a brief note'. The prompt should say 'provide analysis of any agent-mode design concerns found, or state briefly that none were identified' rather than requiring detailed analysis. The refine analysis and agent-design review verdict both flagged this as the right approach." + }, + { + "id": "AD-3", + "decision": "Return a typed NamedTuple from _aggregate_review_verdicts instead of expanding the tuple", + "rationale": "The current return type is tuple[str, str]. Adding a third string makes callers harder to read (what is result[2]?). A NamedTuple with named fields (verdict, blocking_feedback, advisory_content) is clearer and allows future extension without changing the return signature. The 2 callers (pipelines.py:3447, 5396) are straightforward to update." + }, + { + "id": "AD-4", + "decision": "Load review conventions from shared/prompts/ directory, not from action/review-conventions.md", + "rationale": "The action/ directory is for GitHub Actions. The orchestrator should not depend on action/ files. Instead, extract the relevant review conventions into a shared file (e.g., shared/prompts/review-conventions.md) that both systems can consume, or inline the key points (comprehensive, specific, direct, suggest fixes, provide context) into the prompt builder. Since the conventions are short (5 bullet points), inlining in the prompt builder is simpler and avoids file-loading complexity. Keep the shared criteria file approach for the substantive review criteria, which are already shared." + }, + { + "id": "AD-5", + "decision": "Do not surface approved-verdict suggestions to the implementing agent's retry prompt", + "rationale": "When a reviewer approves with suggestions, those suggestions should NOT be injected into the next cycle's prior_feedback (which is for blocking issues). Instead, they should be: (a) included in the phase-completion comment posted to the issue so the human sees them, and (b) available for the integrator to reference. Injecting non-blocking suggestions into the retry loop would cause agents to treat them as blocking requirements, potentially triggering unnecessary revision cycles." + }, + { + "id": "AD-6", + "decision": "Do not migrate existing verdict files", + "rationale": "Old verdict files in .egg-state/reviews/ lack analysis and suggestions fields. The Pydantic model defaults handle this gracefully — missing fields get empty strings. Migration would touch many files for no functional benefit since old verdicts are historical records, not actively consumed." + } + ], + + "implementation_plan": { + "phases": [ + { + "id": "phase-1", + "title": "Expand ReviewVerdict model", + "tasks": [ + { + "id": "task-1", + "description": "Add `analysis` and `suggestions` fields to ReviewVerdict in orchestrator/models.py with empty string defaults and descriptive Field() annotations", + "acceptance_criteria": [ + "ReviewVerdict has analysis: str field with default ''", + "ReviewVerdict has suggestions: str field with default ''", + "Field descriptions clarify always-populate semantics for analysis and non-blocking semantics for suggestions", + "Existing verdict JSON files without new fields parse correctly (backward compat)" + ] + } + ] + }, + { + "id": "phase-2", + "title": "Create AggregatedReviewResult NamedTuple and update aggregation", + "tasks": [ + { + "id": "task-2", + "description": "Define AggregatedReviewResult NamedTuple in orchestrator/models.py with fields: verdict, blocking_feedback, advisory_content. Update _aggregate_review_verdicts() to return this type and collect analysis+suggestions from all verdicts.", + "acceptance_criteria": [ + "AggregatedReviewResult NamedTuple defined with verdict, blocking_feedback, advisory_content fields", + "_aggregate_review_verdicts() returns AggregatedReviewResult", + "blocking_feedback collects feedback from needs_revision verdicts (existing behavior)", + "advisory_content collects analysis and suggestions from ALL verdicts including approved", + "Return value is backward compatible at callers (named fields accessible)" + ] + }, + { + "id": "task-3", + "description": "Update the 2 callers of _aggregate_review_verdicts() at pipelines.py:3447 and pipelines.py:5396 to destructure AggregatedReviewResult. Only pass blocking_feedback to prior_feedback for retry loops. Log or store advisory_content separately.", + "acceptance_criteria": [ + "Tier 3 caller (pipelines.py:3447) uses result.blocking_feedback for prior_feedback", + "Main loop caller (pipelines.py:5396) uses result.blocking_feedback for review_feedback", + "Advisory content from approved verdicts is NOT injected into retry prompt", + "Advisory content is logged for observability" + ] + } + ] + }, + { + "id": "phase-3", + "title": "Update prompt builder for thoroughness and new verdict format", + "tasks": [ + { + "id": "task-4", + "description": "Update the verdict format section in _build_review_prompt() (pipelines.py:1554-1570) to include analysis and suggestions fields. Replace 'empty if approved' with instructions to always populate analysis and provide non-blocking suggestions where applicable.", + "acceptance_criteria": [ + "Verdict JSON template includes analysis and suggestions fields", + "Instructions say 'Always provide detailed analysis regardless of verdict'", + "Instructions say 'Include non-blocking suggestions for improvement even when approving'", + "The 'empty if approved' language for the feedback field is removed", + "feedback field instruction clarifies it is for blocking issues only (needs_revision)" + ] + }, + { + "id": "task-5", + "description": "Add review conventions (quality standards) to _build_review_prompt(). Inline the 5 comment quality standards from review-conventions.md: comprehensive, specific, direct, suggest fixes, provide context. Add 'critical infrastructure' framing for code reviewers.", + "acceptance_criteria": [ + "A Review Conventions section is added to the SDLC review prompt", + "5 quality standards are included: comprehensive, specific, direct, suggest fixes, provide context", + "Code reviewer prompt includes 'critical infrastructure' and 'last line of defense' framing", + "Conventions are inlined in the prompt builder, not loaded from action/review-conventions.md" + ] + }, + { + "id": "task-6", + "description": "Update _get_reviewer_scope_preamble() to add analysis depth expectations per reviewer type. Code: file-by-file analysis. Contract: criterion-by-criterion verification. Refine/plan: section-by-section evaluation. Agent-design: exempt from detailed analysis.", + "acceptance_criteria": [ + "Code reviewer preamble mentions file-by-file analysis expectation", + "Contract reviewer preamble mentions criterion-by-criterion verification expectation", + "Refine reviewer preamble mentions section-by-section evaluation expectation", + "Plan reviewer preamble mentions section-by-section evaluation expectation", + "Agent-design reviewer preamble explicitly states brief approval is acceptable when no concerns found" + ] + }, + { + "id": "task-7", + "description": "Expand the procedural steps for draft-based (non-code) reviewers from 4 steps to include more thorough review guidance. Add instructions to cross-reference with criteria sections, provide specific references, and evaluate depth.", + "acceptance_criteria": [ + "Draft-based reviewer steps include instruction to read the draft thoroughly (not skim)", + "Steps include instruction to cross-reference each criteria section with the draft content", + "Steps include instruction to cite specific sections/evidence in the analysis field", + "Steps are expanded from 4 to 6-7 without being overly prescriptive" + ] + } + ] + }, + { + "id": "phase-4", + "title": "Update tests", + "tasks": [ + { + "id": "task-8", + "description": "Update tests/workflows/test_multi_reviewer.py to test aggregation with new ReviewVerdict fields (analysis, suggestions) and AggregatedReviewResult return type.", + "acceptance_criteria": [ + "Tests verify analysis is collected from approved verdicts", + "Tests verify suggestions is collected from approved verdicts", + "Tests verify AggregatedReviewResult fields are correctly populated", + "Tests verify backward compat: verdicts without analysis/suggestions fields still work" + ] + }, + { + "id": "task-9", + "description": "Update orchestrator/tests/test_tier3_execute.py mock ReviewVerdict objects to include new fields where appropriate. Ensure existing tests still pass.", + "acceptance_criteria": [ + "Existing mock ReviewVerdict() calls still work (new fields have defaults)", + "At least one test exercises ReviewVerdict with analysis and suggestions populated", + "TestReadReviewVerdict tests backward compatibility with old-format JSON" + ] + }, + { + "id": "task-10", + "description": "Add or update prompt builder tests to verify the new verdict format section, review conventions inclusion, and scope preamble changes.", + "acceptance_criteria": [ + "Test verifies verdict format JSON in prompt includes analysis and suggestions fields", + "Test verifies review conventions text appears in generated prompt", + "Test verifies 'empty if approved' language is NOT present in generated prompt", + "Test verifies agent-design reviewer preamble does NOT require detailed analysis" + ] + } + ] + } + ] + }, + + "files_modified": [ + { + "file": "orchestrator/models.py", + "lines": "97-103", + "change": "Add analysis and suggestions fields to ReviewVerdict. Add AggregatedReviewResult NamedTuple.", + "risk": "low" + }, + { + "file": "orchestrator/routes/pipelines.py", + "lines": "1004-1044", + "change": "Update _get_reviewer_scope_preamble() with analysis depth expectations per reviewer type.", + "risk": "low" + }, + { + "file": "orchestrator/routes/pipelines.py", + "lines": "1452-1586", + "change": "Update _build_review_prompt() verdict format section, add review conventions, expand draft reviewer steps.", + "risk": "low" + }, + { + "file": "orchestrator/routes/pipelines.py", + "lines": "1712-1738", + "change": "Update _aggregate_review_verdicts() to return AggregatedReviewResult and collect from all verdicts.", + "risk": "medium — return type change affects 2 callers" + }, + { + "file": "orchestrator/routes/pipelines.py", + "lines": "3447", + "change": "Update Tier 3 caller to destructure AggregatedReviewResult.", + "risk": "low" + }, + { + "file": "orchestrator/routes/pipelines.py", + "lines": "5396", + "change": "Update main phase loop caller to destructure AggregatedReviewResult.", + "risk": "low" + }, + { + "file": "tests/workflows/test_multi_reviewer.py", + "change": "Update aggregation tests for new return type and new fields.", + "risk": "low" + }, + { + "file": "orchestrator/tests/test_tier3_execute.py", + "change": "Update mock ReviewVerdict objects and add backward compat test.", + "risk": "low" + } + ], + + "risks": [ + { + "id": "R-1", + "title": "Token consumption increase", + "likelihood": "certain", + "impact": "low-medium", + "description": "Requiring always-populated analysis will increase token usage per review. With 3 reviewers x up to 3 cycles, this could increase pipeline review cost by 30-50%. However, the whole point is deeper analysis, so increased tokens are the intended outcome, not a side effect.", + "mitigation": "The prompt should include length guidance (e.g., 'thorough but concise analysis, typically 200-500 words') to prevent unbounded growth. The agent-design reviewer exemption limits waste on reviews with no findings." + }, + { + "id": "R-2", + "title": "Aggregation return type change breaks callers", + "likelihood": "low", + "impact": "high", + "description": "Changing _aggregate_review_verdicts() return from tuple[str, str] to AggregatedReviewResult requires updating 2 callers. If a caller is missed, it will fail at runtime.", + "mitigation": "NamedTuple is iterable, so existing `verdict, feedback = _aggregate_review_verdicts(...)` destructuring will still work if the NamedTuple has exactly those as its first 2 fields. However, this is fragile. Better to update all callers explicitly and add a type annotation to catch issues at lint time." + }, + { + "id": "R-3", + "title": "Prompt changes don't actually improve review quality", + "likelihood": "low-medium", + "impact": "medium", + "description": "The hypothesis is that schema + prompt changes will produce deeper reviews. If the underlying issue is model capability or context length rather than instructions, the changes may not help.", + "mitigation": "The PR reviewer evidence shows the same model (Opus) producing thorough reviews with better prompting, so the hypothesis is well-supported. After implementation, compare a few SDLC review verdicts pre/post to validate improvement." + }, + { + "id": "R-4", + "title": "Test file uses simplified verdict format", + "likelihood": "medium", + "impact": "low", + "description": "tests/workflows/test_multi_reviewer.py uses plain string verdicts in dicts rather than ReviewVerdict objects. The test may need to be rewritten to use ReviewVerdict objects and test the actual _aggregate_review_verdicts function.", + "mitigation": "Review the test during implementation and determine if it tests a local helper or the actual production function. Update accordingly." + } + ], + + "backward_compatibility": { + "verdict_files": "Old verdict JSON files (without analysis/suggestions) parse correctly due to Pydantic Field defaults. No migration needed.", + "aggregation_callers": "The AggregatedReviewResult NamedTuple change requires updating 2 explicit callers. No external API is affected.", + "prompt_output": "Reviewers will write richer JSON with analysis and suggestions fields. Old consumers that only read verdict/summary/feedback will ignore the new fields (standard JSON behavior).", + "model_validation": "_read_review_verdict() uses ReviewVerdict(**data) — extra fields in JSON are handled by Pydantic's default behavior (ignored unless model_config forbids extras)." + }, + + "acceptance_criteria": [ + "ReviewVerdict model has analysis (str, default='') and suggestions (str, default='') fields", + "AggregatedReviewResult NamedTuple defined with verdict, blocking_feedback, advisory_content fields", + "_aggregate_review_verdicts() returns AggregatedReviewResult collecting analysis/suggestions from ALL verdicts", + "Advisory content from approved verdicts is NOT injected into retry prompt prior_feedback", + "Verdict format in _build_review_prompt() includes analysis and suggestions fields with always-populate instructions", + "'empty if approved' language is removed from the prompt", + "Review conventions (5 quality standards) are included in SDLC review prompts", + "Code reviewer prompt includes 'critical infrastructure' framing", + "Scope preambles include analysis depth expectations per reviewer type", + "Agent-design reviewer is exempt from detailed analysis requirement", + "Draft-based reviewer (refine, plan, contract) steps expanded from 4 to 6-7", + "Old verdict JSON files without new fields parse correctly (backward compatibility)", + "All existing tests pass after changes", + "New tests cover aggregation with new fields and backward compatibility" + ] +} From e600e2a9aecececa994a64c5c2058513ab45c6d8 Mon Sep 17 00:00:00 2001 From: egg Date: Tue, 24 Feb 2026 07:43:10 +0000 Subject: [PATCH 07/16] WIP: auto-commit uncommitted work (architect) [issue-897] Container 9b1c05f58615245f7dd6774518c44fb90d3f811b8a1c539ada5df9eaba8d091f exited with uncommitted changes. This commit preserves the agent's work-in-progress. Authored-by: egg --- .egg-state/contracts/897.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.egg-state/contracts/897.json b/.egg-state/contracts/897.json index 4e62c102..9ff0f352 100644 --- a/.egg-state/contracts/897.json +++ b/.egg-state/contracts/897.json @@ -84,6 +84,19 @@ "error": null, "retry_count": 0, "conflicts": [] + }, + { + "role": "architect", + "phase_id": null, + "status": "complete", + "started_at": null, + "completed_at": "2026-02-24T07:43:09.779280Z", + "commit": null, + "checkpoint_id": null, + "outputs": {}, + "error": null, + "retry_count": 0, + "conflicts": [] } ], "multi_agent_config": null From 35eb1dd0ef9d81b8acb07f059e8342bc15da8877 Mon Sep 17 00:00:00 2001 From: egg Date: Tue, 24 Feb 2026 07:45:59 +0000 Subject: [PATCH 08/16] Add implementation plan for issue #897: deepen SDLC review quality --- .egg-state/drafts/897-plan.md | 189 ++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 .egg-state/drafts/897-plan.md diff --git a/.egg-state/drafts/897-plan.md b/.egg-state/drafts/897-plan.md new file mode 100644 index 00000000..07997241 --- /dev/null +++ b/.egg-state/drafts/897-plan.md @@ -0,0 +1,189 @@ +# Implementation Plan: Deepen SDLC Review Quality + +> Issue: #897 | Phase: plan | Pipeline: issue-897 + +## Summary + +SDLC pipeline reviewers produce shallow verdicts compared to PR reviewers because: +(1) the verdict JSON schema tells reviewers to write empty feedback when approving, +(2) the SDLC prompt lacks the thoroughness framing and review conventions that PR +prompts include, and (3) there is no way to surface non-blocking suggestions from +approved verdicts. + +This plan implements Approach A from the architecture analysis: expand the +`ReviewVerdict` model with `analysis` and `suggestions` fields, align the SDLC +review prompt builder with PR reviewer standards, and update aggregation to surface +non-blocking observations from all verdicts. + +## Approach + +**Single PR with three implementation phases** within one commit stream: + +1. **Model + aggregation** — Expand the data model and update the aggregation + function and its callers. This is the structural foundation. +2. **Prompt builder** — Update the verdict format instructions, add review + conventions, enhance scope preambles, and expand draft-reviewer procedural steps. +3. **Tests** — Update existing tests and add new coverage for the changed code. + +Each phase builds on the prior one. The model change is backward-compatible (new +fields default to empty strings), so existing verdict files continue to parse. + +## Key Design Decisions + +Per the architect's analysis (AD-1 through AD-6): + +- **Free-form markdown** for the `analysis` field (not structured JSON sub-objects). +- **Agent-design reviewer exempt** from always-populate-analysis — its criteria + explicitly allows brief approval when no concerns exist. +- **`AggregatedReviewResult` NamedTuple** replaces the `tuple[str, str]` return type + from `_aggregate_review_verdicts()` for clarity and extensibility. +- **Review conventions inlined** in the prompt builder — not loaded from + `action/review-conventions.md` (avoids cross-boundary dependency). +- **Advisory content NOT injected** into retry prompt `prior_feedback` — only + blocking feedback goes there. Advisory content is logged for observability. +- **No migration** of old verdict files — Pydantic defaults handle missing fields. + +## Risk Mitigation + +| Risk | Mitigation | +|------|------------| +| Token consumption increase | Prompt includes length guidance ("thorough but concise, 200-500 words"). Agent-design reviewer exempted. | +| Aggregation return type breaks callers | Only 2 callers exist (verified). Both updated in same phase. NamedTuple fields match old tuple positionally as fallback. | +| Prompt changes don't improve quality | PR reviewer evidence proves same model (Opus) produces thorough reviews with better prompting. Post-deploy comparison validates. | +| test_multi_reviewer.py uses local helpers | Test uses its own `aggregate_verdicts()` function, not production `_aggregate_review_verdicts()`. Update test to also exercise the production function or document the scope gap. | + +## Test Strategy + +1. **Unit tests** (`orchestrator/tests/test_tier3_execute.py`): + - `TestReadReviewVerdict`: Add backward-compat test — old JSON without + `analysis`/`suggestions` fields parses correctly. + - Add test exercising `ReviewVerdict` with all new fields populated. + - Update mock `ReviewVerdict()` calls to verify defaults work. + +2. **Unit tests** (`orchestrator/tests/test_pipeline_prompts.py`): + - Add `TestBuildReviewPrompt` class testing the generated prompt: + - Verdict format JSON includes `analysis` and `suggestions` fields. + - Review conventions text is present in generated prompt. + - `"empty if approved"` language is NOT present. + - Agent-design reviewer preamble does NOT require detailed analysis. + - Code reviewer preamble includes file-by-file analysis expectation. + +3. **Integration tests** (`tests/workflows/test_multi_reviewer.py`): + - Update `TestReviewVerdictAggregation` tests to use `ReviewVerdict` objects + (currently uses plain strings via a local helper). Or add parallel tests + that import and exercise `_aggregate_review_verdicts()` directly. + - Test that approved verdicts with `analysis`/`suggestions` are collected. + - Test `AggregatedReviewResult` fields. + +4. **Existing tests**: Run full test suite to verify no regressions from model and + aggregation changes. + +## File Impact + +| File | Change | Risk | +|------|--------|------| +| `orchestrator/models.py:97-103` | Add `analysis`, `suggestions` fields to `ReviewVerdict`. Add `AggregatedReviewResult` NamedTuple. | Low | +| `orchestrator/routes/pipelines.py:1004-1044` | Update `_get_reviewer_scope_preamble()` with per-type analysis depth expectations. | Low | +| `orchestrator/routes/pipelines.py:1452-1586` | Update `_build_review_prompt()`: verdict format, review conventions, draft-reviewer steps. | Low | +| `orchestrator/routes/pipelines.py:1712-1738` | Update `_aggregate_review_verdicts()`: return `AggregatedReviewResult`, collect from all verdicts. | Medium | +| `orchestrator/routes/pipelines.py:3447` | Update Tier 3 caller to use `AggregatedReviewResult`. | Low | +| `orchestrator/routes/pipelines.py:5396` | Update main phase loop caller to use `AggregatedReviewResult`. | Low | +| `orchestrator/tests/test_tier3_execute.py` | Update `TestReadReviewVerdict`, add backward-compat test, update mocks. | Low | +| `orchestrator/tests/test_pipeline_prompts.py` | Add `TestBuildReviewPrompt` class. | Low | +| `tests/workflows/test_multi_reviewer.py` | Add `_aggregate_review_verdicts()` tests with `ReviewVerdict` objects. | Low | + +--- + +```yaml +# yaml-tasks +pr: + title: "Deepen SDLC review quality with expanded verdict schema and aligned prompts" + description: | + SDLC pipeline reviewers produce shallow ~1-3 sentence verdicts with empty + feedback even when approving code with real issues, while PR reviewers on + the same code produce detailed multi-section reviews. This expands the + ReviewVerdict model with always-populated analysis and suggestions fields, + aligns SDLC review prompts with PR reviewer thoroughness standards, and + updates aggregation to surface non-blocking observations from all verdicts. +phases: + - id: 1 + name: Model and aggregation + goal: Expand the ReviewVerdict data model and update aggregation to collect analysis from all verdicts + tasks: + - id: TASK-1-1 + description: Add `analysis` (str, default="") and `suggestions` (str, default="") fields to ReviewVerdict in orchestrator/models.py with descriptive Field annotations + acceptance: ReviewVerdict has both new fields with empty-string defaults. Old verdict JSON without these fields parses correctly via Pydantic defaults. + files: + - orchestrator/models.py + - id: TASK-1-2 + description: Define AggregatedReviewResult NamedTuple in orchestrator/models.py with fields verdict, blocking_feedback, advisory_content + acceptance: AggregatedReviewResult is importable from models.py with the three named fields. + files: + - orchestrator/models.py + - id: TASK-1-3 + description: Update _aggregate_review_verdicts() to return AggregatedReviewResult. Collect feedback from needs_revision verdicts into blocking_feedback (existing behavior). Collect analysis and suggestions from ALL verdicts (including approved) into advisory_content. + acceptance: Function returns AggregatedReviewResult. blocking_feedback contains only needs_revision feedback. advisory_content contains analysis+suggestions from all verdicts. None verdicts are still skipped. + files: + - orchestrator/routes/pipelines.py + - id: TASK-1-4 + description: Update Tier 3 caller at pipelines.py:3447 to destructure AggregatedReviewResult. Use result.blocking_feedback for prior_feedback in retry loop. Log advisory_content. + acceptance: Tier 3 caller uses named fields from AggregatedReviewResult. Only blocking_feedback is passed to prior_feedback. Advisory content is not injected into retry prompts. + files: + - orchestrator/routes/pipelines.py + - id: TASK-1-5 + description: Update main phase loop caller at pipelines.py:5396 to destructure AggregatedReviewResult. Use result.blocking_feedback for review_feedback. Log advisory_content. + acceptance: Main loop caller uses named fields from AggregatedReviewResult. Only blocking_feedback is used for review_feedback. Advisory content is not injected into retry prompts. + files: + - orchestrator/routes/pipelines.py + - id: 2 + name: Prompt builder alignment + goal: Align SDLC review prompts with PR reviewer thoroughness standards + tasks: + - id: TASK-2-1 + description: Update the verdict format section in _build_review_prompt() (pipelines.py:1554-1570) to include analysis and suggestions fields in the JSON template. Replace "empty if approved" with instructions to always populate analysis and provide non-blocking suggestions. Clarify feedback field is for blocking issues only. + acceptance: Verdict JSON template has 5 fields (reviewer, verdict, summary, analysis, suggestions, feedback, timestamp — 7 total). Instructions say "Always provide detailed analysis regardless of verdict". The string "empty if approved" does not appear. feedback field described as blocking-only. + files: + - orchestrator/routes/pipelines.py + - id: TASK-2-2 + description: Add review conventions (5 comment quality standards) to _build_review_prompt() after the criteria section. Inline the standards from review-conventions.md — comprehensive, specific, direct, suggest fixes, provide context. Add "critical infrastructure" and "last line of defense" framing for code reviewers. + acceptance: Generated prompt contains a Review Conventions section with all 5 quality standards. Code reviewer prompt includes "critical infrastructure" framing. Conventions are inlined in the Python code, not loaded from action/review-conventions.md. + files: + - orchestrator/routes/pipelines.py + - id: TASK-2-3 + description: Update _get_reviewer_scope_preamble() to add analysis depth expectations per reviewer type. Code reviewer — file-by-file analysis. Contract reviewer — criterion-by-criterion verification table. Refine/plan reviewer — section-by-section evaluation. Agent-design reviewer — brief approval acceptable when no concerns. + acceptance: Each reviewer type's preamble includes its expected analysis format. Agent-design preamble explicitly states brief approval is acceptable. Code preamble mentions file-by-file. + files: + - orchestrator/routes/pipelines.py + - id: TASK-2-4 + description: Expand procedural steps for draft-based (non-code) reviewers from 4 steps to 6-7 steps. Add instructions to read thoroughly, cross-reference criteria sections, cite specific evidence in analysis, and evaluate completeness. + acceptance: Non-code reviewer steps are expanded from 4 to 6-7 steps. Steps include cross-referencing with criteria and citing specific sections. Steps are not overly prescriptive. + files: + - orchestrator/routes/pipelines.py + - id: 3 + name: Tests + goal: Update existing tests and add coverage for all changed code + tasks: + - id: TASK-3-1 + description: Update orchestrator/tests/test_tier3_execute.py — add backward-compat test for ReviewVerdict parsing old JSON (no analysis/suggestions fields). Add test with all new fields populated. Verify existing mock ReviewVerdict() calls still work with defaults. + acceptance: TestReadReviewVerdict has a test for old-format JSON without analysis/suggestions. At least one test creates ReviewVerdict with analysis and suggestions populated. All existing tests pass. + files: + - orchestrator/tests/test_tier3_execute.py + - id: TASK-3-2 + description: Add TestBuildReviewPrompt class to orchestrator/tests/test_pipeline_prompts.py. Test verdict format JSON includes analysis and suggestions. Test review conventions text appears. Test "empty if approved" is absent. Test agent-design preamble doesn't require detailed analysis. Test code reviewer preamble includes file-by-file expectation. + acceptance: TestBuildReviewPrompt has 4+ test methods covering verdict format, conventions presence, absence of "empty if approved", and per-reviewer preamble content. + files: + - orchestrator/tests/test_pipeline_prompts.py + - id: TASK-3-3 + description: Update tests/workflows/test_multi_reviewer.py to add tests exercising _aggregate_review_verdicts() with ReviewVerdict objects. Test approved verdicts with analysis/suggestions are collected in advisory_content. Test AggregatedReviewResult fields. Test backward compat (verdicts without new fields). + acceptance: New test class or methods import and exercise _aggregate_review_verdicts(). Tests verify advisory_content is populated from approved verdicts. Tests verify AggregatedReviewResult named fields. + files: + - tests/workflows/test_multi_reviewer.py + - id: TASK-3-4 + description: Run the full test suite (make test or equivalent) and verify no regressions from model and aggregation changes. + acceptance: All existing tests pass. No new test failures introduced. + files: [] +``` + +--- + +*Authored-by: egg* From 6d3beea72e80a27f3b032dfda74d1372d7dc8fde Mon Sep 17 00:00:00 2001 From: egg Date: Tue, 24 Feb 2026 08:11:18 +0000 Subject: [PATCH 09/16] Add gap tests for SDLC review depth improvements --- orchestrator/tests/test_pipeline_prompts.py | 271 ++++++++++++++++++++ tests/workflows/test_multi_reviewer.py | 228 +++++++++++++++- 2 files changed, 498 insertions(+), 1 deletion(-) diff --git a/orchestrator/tests/test_pipeline_prompts.py b/orchestrator/tests/test_pipeline_prompts.py index 2c7504a3..f0f1bc3d 100644 --- a/orchestrator/tests/test_pipeline_prompts.py +++ b/orchestrator/tests/test_pipeline_prompts.py @@ -21,11 +21,13 @@ _build_checker_prompt, _build_phase_prompt, _build_phase_scoped_prompt, + _build_review_prompt, _build_role_context, _extract_plan_overview, _get_agent_design_criteria, _get_code_review_criteria, _get_contract_review_criteria, + _get_reviewer_scope_preamble, _read_shared_criteria, _read_tester_gaps, _render_contract_tasks, @@ -2368,3 +2370,272 @@ def test_empty_outputs_produce_no_draft(self, tmp_path): draft_path = tmp_path / ".egg-state" / "drafts" / "871-plan.md" # No meaningful content → draft not written assert not draft_path.exists() + + +class TestBuildReviewPrompt: + """Tests for _build_review_prompt verdict format, conventions, and preambles.""" + + def test_verdict_format_includes_analysis_and_suggestions(self): + """Verdict JSON template includes analysis and suggestions fields.""" + prompt = _build_review_prompt( + phase="implement", + pipeline_id="test-pipe", + pipeline_mode="issue", + reviewer_type="code", + issue_number=100, + ) + assert '"analysis"' in prompt + assert '"suggestions"' in prompt + + def test_verdict_format_no_empty_if_approved(self): + """The old 'empty if approved' language is not present.""" + prompt = _build_review_prompt( + phase="implement", + pipeline_id="test-pipe", + pipeline_mode="issue", + reviewer_type="code", + issue_number=100, + ) + assert "empty if approved" not in prompt + + def test_review_conventions_present(self): + """Generated prompt contains a Review Conventions section with quality standards.""" + prompt = _build_review_prompt( + phase="implement", + pipeline_id="test-pipe", + pipeline_mode="issue", + reviewer_type="code", + issue_number=100, + ) + assert "## Review Conventions" in prompt + assert "Be comprehensive" in prompt + assert "Be specific" in prompt + assert "Be direct" in prompt + assert "Suggest fixes" in prompt + assert "Provide context" in prompt + + def test_code_reviewer_conventions_include_infrastructure_framing(self): + """Code reviewer prompt includes 'critical infrastructure' framing.""" + prompt = _build_review_prompt( + phase="implement", + pipeline_id="test-pipe", + pipeline_mode="issue", + reviewer_type="code", + issue_number=100, + ) + assert "critical" in prompt.lower() + assert "last line of defense" in prompt + + def test_agent_design_preamble_allows_brief_approval(self): + """Agent-design reviewer preamble does not require detailed analysis.""" + preamble = _get_reviewer_scope_preamble("agent-design", "implement") + assert "brief approval is acceptable" in preamble + + def test_code_preamble_includes_file_by_file(self): + """Code reviewer preamble includes file-by-file analysis expectation.""" + preamble = _get_reviewer_scope_preamble("code", "implement") + assert "file-by-file" in preamble + + def test_contract_preamble_includes_criterion_verification(self): + """Contract reviewer preamble includes criterion-by-criterion verification.""" + preamble = _get_reviewer_scope_preamble("contract", "implement") + assert "criterion-by-criterion" in preamble + + def test_refine_preamble_includes_section_evaluation(self): + """Refine reviewer preamble includes section-by-section evaluation.""" + preamble = _get_reviewer_scope_preamble("refine", "refine") + assert "section-by-section" in preamble + + def test_plan_preamble_includes_section_evaluation(self): + """Plan reviewer preamble includes section-by-section evaluation.""" + preamble = _get_reviewer_scope_preamble("plan", "plan") + assert "section-by-section" in preamble + + def test_analysis_field_guidelines(self): + """Prompt includes guidance to always provide analysis regardless of verdict.""" + prompt = _build_review_prompt( + phase="implement", + pipeline_id="test-pipe", + pipeline_mode="issue", + reviewer_type="code", + issue_number=100, + ) + assert "Always provide detailed analysis regardless of verdict" in prompt + + def test_draft_reviewer_has_expanded_steps(self): + """Draft-based reviewers get expanded procedural steps (6+).""" + prompt = _build_review_prompt( + phase="refine", + pipeline_id="test-pipe", + pipeline_mode="issue", + reviewer_type="refine", + issue_number=100, + ) + # Draft-based reviewer should have cross-reference and cite steps + assert "Cross-reference" in prompt + assert "Cite specific" in prompt + assert "completeness" in prompt.lower() + + def test_non_code_reviewer_generic_conventions_framing(self): + """Non-code reviewers get generic quality standards framing, not infrastructure framing.""" + prompt = _build_review_prompt( + phase="implement", + pipeline_id="test-pipe", + pipeline_mode="issue", + reviewer_type="contract", + issue_number=100, + ) + assert "## Review Conventions" in prompt + assert "Your review must meet these quality standards" in prompt + # Should NOT have the code-specific infrastructure framing + assert "last line of defense" not in prompt + + def test_contract_reviewer_phase_restrictions_include_contract_write(self): + """Contract reviewer gets extra permission to update contract files.""" + prompt = _build_review_prompt( + phase="implement", + pipeline_id="test-pipe", + pipeline_mode="issue", + reviewer_type="contract", + issue_number=100, + ) + assert "CAN update the contract" in prompt + + def test_code_reviewer_phase_restrictions_no_contract_write(self): + """Code reviewer does NOT get contract write permission.""" + prompt = _build_review_prompt( + phase="implement", + pipeline_id="test-pipe", + pipeline_mode="issue", + reviewer_type="code", + issue_number=100, + ) + assert "CAN update the contract" not in prompt + + def test_delta_review_directive(self): + """Re-review with last_reviewed_commit includes delta review section.""" + prompt = _build_review_prompt( + phase="implement", + pipeline_id="test-pipe", + pipeline_mode="issue", + reviewer_type="code", + issue_number=100, + review_cycle=2, + last_reviewed_commit="abc123", + ) + assert "## Delta Review" in prompt + assert "git diff abc123..HEAD" in prompt + assert "cycle 2" in prompt + + def test_first_review_no_delta_section(self): + """First review cycle does not include delta review section.""" + prompt = _build_review_prompt( + phase="implement", + pipeline_id="test-pipe", + pipeline_mode="issue", + reviewer_type="code", + issue_number=100, + review_cycle=1, + ) + assert "## Delta Review" not in prompt + + def test_prior_feedback_section(self): + """Re-review with prior feedback includes prior feedback section.""" + prompt = _build_review_prompt( + phase="implement", + pipeline_id="test-pipe", + pipeline_mode="issue", + reviewer_type="code", + issue_number=100, + review_cycle=2, + prior_feedback="Fix the SQL injection vulnerability in query.py", + ) + assert "## Prior Review Feedback" in prompt + assert "SQL injection vulnerability in query.py" in prompt + + def test_prior_feedback_not_shown_on_first_cycle(self): + """Prior feedback is not shown on first review cycle even if provided.""" + prompt = _build_review_prompt( + phase="implement", + pipeline_id="test-pipe", + pipeline_mode="issue", + reviewer_type="code", + issue_number=100, + review_cycle=1, + prior_feedback="Fix the bug", + ) + assert "## Prior Review Feedback" not in prompt + + def test_local_pipeline_mode_verdict_path(self): + """Local pipeline mode uses pipeline_id in verdict path instead of issue number.""" + prompt = _build_review_prompt( + phase="implement", + pipeline_id="local-abc12345", + pipeline_mode="local", + reviewer_type="code", + ) + assert "local-abc12345" in prompt + # Should not contain an issue number reference in the verdict path + assert "None-implement" not in prompt + + def test_non_code_non_draft_reviewer_short_steps(self): + """Non-code reviewer in implement phase (no draft) gets short procedural steps.""" + prompt = _build_review_prompt( + phase="implement", + pipeline_id="test-pipe", + pipeline_mode="issue", + reviewer_type="contract", + issue_number=100, + ) + # Contract reviewer in implement phase has no draft_path, so gets the short steps + # It should NOT have code reviewer's extended steps (like "Trace data flow") + assert "Trace data flow" not in prompt + # And not the draft-based expanded steps + assert "Cross-reference" not in prompt + # But should still have basic evaluation steps + assert "Evaluate it against the criteria below" in prompt + + def test_unknown_reviewer_type_raises_error(self): + """Unknown reviewer type raises ValueError in preamble.""" + try: + _get_reviewer_scope_preamble("unknown-type", "implement") + assert False, "Expected ValueError was not raised" + except ValueError as e: + assert "Unknown reviewer type" in str(e) + + def test_feedback_field_guideline_blocking_only(self): + """Feedback field guideline makes clear it's for blocking issues only.""" + prompt = _build_review_prompt( + phase="implement", + pipeline_id="test-pipe", + pipeline_mode="issue", + reviewer_type="code", + issue_number=100, + ) + assert "blocking issues only" in prompt.lower() + assert "Leave empty when approving" in prompt + + def test_suggestions_field_guideline_even_when_approving(self): + """Suggestions field guideline encourages providing them even when approving.""" + prompt = _build_review_prompt( + phase="implement", + pipeline_id="test-pipe", + pipeline_mode="issue", + reviewer_type="code", + issue_number=100, + ) + assert "even when approving" in prompt.lower() + + def test_code_reviewer_has_systematic_steps(self): + """Code reviewer in implement phase gets detailed systematic review steps.""" + prompt = _build_review_prompt( + phase="implement", + pipeline_id="test-pipe", + pipeline_mode="issue", + reviewer_type="code", + issue_number=100, + ) + assert "review every changed file systematically" in prompt + assert "Trace data flow" in prompt + assert "edge cases" in prompt.lower() + assert "Research when uncertain" in prompt diff --git a/tests/workflows/test_multi_reviewer.py b/tests/workflows/test_multi_reviewer.py index 19965120..e99c7ea2 100644 --- a/tests/workflows/test_multi_reviewer.py +++ b/tests/workflows/test_multi_reviewer.py @@ -6,13 +6,25 @@ - Per-reviewer feedback combination - Reviewer failure handling - Phase-based reviewer defaults +- Production _aggregate_review_verdicts() with ReviewVerdict objects """ import sys from pathlib import Path +from types import ModuleType +from unittest.mock import MagicMock -# Add shared to path for import +# Add shared and orchestrator to path for import sys.path.insert(0, str(Path(__file__).parent.parent.parent / "shared")) +sys.path.insert(0, str(Path(__file__).parent.parent.parent / "orchestrator")) + +# Mock heavy dependencies that pipelines.py imports at module level +_docker_mock = MagicMock() +sys.modules.setdefault("docker", _docker_mock) +sys.modules.setdefault("docker.errors", _docker_mock.errors) +sys.modules.setdefault("docker.types", _docker_mock.types) + +import pytest # noqa: E402 class TestReviewVerdictAggregation: @@ -292,3 +304,217 @@ def get_default_reviewers(phase: str) -> list: ] else: return [{"name": "code"}] + + +class TestProductionAggregateReviewVerdicts: + """Tests for the production _aggregate_review_verdicts() with ReviewVerdict objects.""" + + @pytest.fixture(autouse=True) + def setup(self): + """Import production functions.""" + try: + from models import AggregatedReviewResult, ReviewVerdict + from routes.pipelines import _aggregate_review_verdicts + + self._aggregate = _aggregate_review_verdicts + self.ReviewVerdict = ReviewVerdict + self.AggregatedReviewResult = AggregatedReviewResult + except ImportError: + pytest.skip("Cannot import orchestrator modules") + + def test_all_approved_returns_approved(self): + """All approved verdicts → overall approved.""" + verdicts = { + "code": self.ReviewVerdict(verdict="approved"), + "contract": self.ReviewVerdict(verdict="approved"), + } + result = self._aggregate(verdicts) + assert result.verdict == "approved" + assert result.blocking_feedback == "" + + def test_any_needs_revision_returns_needs_revision(self): + """Any needs_revision → overall needs_revision.""" + verdicts = { + "code": self.ReviewVerdict(verdict="approved"), + "contract": self.ReviewVerdict( + verdict="needs_revision", feedback="Missing tests" + ), + } + result = self._aggregate(verdicts) + assert result.verdict == "needs_revision" + assert "Missing tests" in result.blocking_feedback + + def test_none_verdicts_are_skipped(self): + """None verdicts are skipped entirely.""" + verdicts = { + "code": self.ReviewVerdict(verdict="approved"), + "agent-design": None, + } + result = self._aggregate(verdicts) + assert result.verdict == "approved" + + def test_approved_verdicts_with_analysis_collected_in_advisory(self): + """Analysis and suggestions from approved verdicts appear in advisory_content.""" + verdicts = { + "code": self.ReviewVerdict( + verdict="approved", + analysis="Reviewed all files. Logic is sound.", + suggestions="Consider adding a docstring.", + ), + "contract": self.ReviewVerdict( + verdict="approved", + analysis="All criteria met.", + ), + } + result = self._aggregate(verdicts) + assert result.verdict == "approved" + assert result.blocking_feedback == "" + assert "Reviewed all files" in result.advisory_content + assert "All criteria met" in result.advisory_content + assert "Consider adding a docstring" in result.advisory_content + + def test_needs_revision_with_analysis_in_both_fields(self): + """needs_revision verdicts contribute to both blocking_feedback and advisory_content.""" + verdicts = { + "code": self.ReviewVerdict( + verdict="needs_revision", + feedback="Fix the SQL injection", + analysis="Found a serious security issue in query builder.", + suggestions="Use parameterized queries.", + ), + } + result = self._aggregate(verdicts) + assert result.verdict == "needs_revision" + assert "Fix the SQL injection" in result.blocking_feedback + assert "serious security issue" in result.advisory_content + assert "parameterized queries" in result.advisory_content + + def test_result_is_named_tuple(self): + """Result is an AggregatedReviewResult with named fields.""" + verdicts = {"code": self.ReviewVerdict(verdict="approved")} + result = self._aggregate(verdicts) + assert isinstance(result, self.AggregatedReviewResult) + # Named fields accessible + assert hasattr(result, "verdict") + assert hasattr(result, "blocking_feedback") + assert hasattr(result, "advisory_content") + + def test_backward_compat_verdicts_without_new_fields(self): + """Verdicts without analysis/suggestions (old format) produce empty advisory.""" + verdicts = { + "code": self.ReviewVerdict(verdict="approved"), + "contract": self.ReviewVerdict(verdict="approved", summary="Looks good"), + } + result = self._aggregate(verdicts) + assert result.verdict == "approved" + assert result.advisory_content == "" + + def test_positional_access_backward_compat(self): + """AggregatedReviewResult can be accessed positionally (tuple compat).""" + verdicts = { + "code": self.ReviewVerdict( + verdict="needs_revision", + feedback="Bug found", + ), + } + result = self._aggregate(verdicts) + # Positional: [0]=verdict, [1]=blocking_feedback, [2]=advisory_content + assert result[0] == "needs_revision" + assert "Bug found" in result[1] + + def test_empty_verdicts_dict(self): + """Empty dict returns approved with empty strings.""" + result = self._aggregate({}) + assert result.verdict == "approved" + assert result.blocking_feedback == "" + assert result.advisory_content == "" + + def test_all_none_verdicts(self): + """All None verdicts returns approved with empty strings (all skipped).""" + verdicts = { + "code": None, + "contract": None, + "agent-design": None, + } + result = self._aggregate(verdicts) + assert result.verdict == "approved" + assert result.blocking_feedback == "" + assert result.advisory_content == "" + + def test_needs_revision_feedback_fallback_to_summary(self): + """When needs_revision has no feedback, blocking_feedback uses summary.""" + verdicts = { + "code": self.ReviewVerdict( + verdict="needs_revision", + summary="Type errors in module X", + feedback="", + ), + } + result = self._aggregate(verdicts) + assert result.verdict == "needs_revision" + assert "Type errors in module X" in result.blocking_feedback + + def test_needs_revision_no_feedback_no_summary(self): + """When needs_revision has neither feedback nor summary, section header is still present.""" + verdicts = { + "code": self.ReviewVerdict( + verdict="needs_revision", + ), + } + result = self._aggregate(verdicts) + assert result.verdict == "needs_revision" + # Should have a section header even without content + assert "code reviewer" in result.blocking_feedback + + def test_multiple_needs_revision_combined(self): + """Multiple needs_revision verdicts combine blocking_feedback from all.""" + verdicts = { + "code": self.ReviewVerdict( + verdict="needs_revision", + feedback="SQL injection in query builder", + ), + "contract": self.ReviewVerdict( + verdict="needs_revision", + feedback="Missing acceptance criterion ac-3", + ), + } + result = self._aggregate(verdicts) + assert result.verdict == "needs_revision" + assert "SQL injection" in result.blocking_feedback + assert "acceptance criterion ac-3" in result.blocking_feedback + assert "code reviewer" in result.blocking_feedback + assert "contract reviewer" in result.blocking_feedback + + def test_mixed_approved_and_revision_advisory_from_both(self): + """Advisory content is collected from both approved and needs_revision verdicts.""" + verdicts = { + "code": self.ReviewVerdict( + verdict="needs_revision", + feedback="Fix the bug", + analysis="Found a critical bug in authentication.", + ), + "contract": self.ReviewVerdict( + verdict="approved", + analysis="All criteria met, implementation is solid.", + suggestions="Consider adding integration tests.", + ), + } + result = self._aggregate(verdicts) + assert result.verdict == "needs_revision" + # Advisory should have content from BOTH reviewers + assert "critical bug in authentication" in result.advisory_content + assert "All criteria met" in result.advisory_content + assert "integration tests" in result.advisory_content + + def test_suggestions_prefixed_in_advisory(self): + """Suggestions in advisory_content are prefixed with '**Suggestions:**'.""" + verdicts = { + "code": self.ReviewVerdict( + verdict="approved", + analysis="Code is clean.", + suggestions="Add a type annotation to the return value.", + ), + } + result = self._aggregate(verdicts) + assert "**Suggestions:**" in result.advisory_content + assert "type annotation" in result.advisory_content From fa657ddd725093a96263c668753786b559007e00 Mon Sep 17 00:00:00 2001 From: egg Date: Tue, 24 Feb 2026 08:04:54 +0000 Subject: [PATCH 10/16] WIP: auto-commit uncommitted work (tester) [issue-897] Container 004a65f8ea27287f969ec30e7caf40ed62e070578cedaeb6461e6275eec2f497 exited with uncommitted changes. This commit preserves the agent's work-in-progress. Authored-by: egg --- .../897-risk_analyst-output.json | 311 ++++++++++++++++++ .hypothesis/constants/00f20e874979327c | 4 + .hypothesis/constants/00f53ea8b62388fa | 4 + .hypothesis/constants/01f74a9a59701f85 | 4 + .hypothesis/constants/0342181e1bd12790 | 4 + .hypothesis/constants/03dfa3896d216c97 | 4 + .hypothesis/constants/067bfc402fa23a6f | 4 + .hypothesis/constants/08d45f80e960849e | 4 + .hypothesis/constants/0900a684f3a3766d | 4 + .hypothesis/constants/0be7f0ac4f43628c | 4 + .hypothesis/constants/0ce7ab84fa072573 | 4 + .hypothesis/constants/0dfc0bb66b32e048 | 4 + .hypothesis/constants/0f53725329c26da4 | 4 + .hypothesis/constants/112e48bca6962912 | 4 + .hypothesis/constants/126e2a6fa864f5e4 | 4 + .hypothesis/constants/13504d673e8bb2e2 | 4 + .hypothesis/constants/16f423bdc8cd36d3 | 4 + .hypothesis/constants/18fcc08ef98fde6f | 4 + .hypothesis/constants/198b481f4da30c78 | 4 + .hypothesis/constants/1a75fb2c5a634e52 | 4 + .hypothesis/constants/1c9687cd1c8bb9e7 | 4 + .hypothesis/constants/1c972e08847d2a50 | 4 + .hypothesis/constants/1d14e802fcfa454f | 4 + .hypothesis/constants/1d2480d1c18e5ace | 4 + .hypothesis/constants/1d6e2398a096a201 | 4 + .hypothesis/constants/1db06484f014299a | 4 + .hypothesis/constants/1e9d89b39c0c8663 | 4 + .hypothesis/constants/1ecab4796e6213d0 | 4 + .hypothesis/constants/20370c1edfca5c1b | 4 + .hypothesis/constants/225008640bfd14aa | 4 + .hypothesis/constants/230788c05eba3bb3 | 4 + .hypothesis/constants/2319e79a710edf2f | 4 + .hypothesis/constants/24ba4f0a82b38d9b | 4 + .hypothesis/constants/251c8f8e27fdd983 | 4 + .hypothesis/constants/262b1a2b548b4813 | 4 + .hypothesis/constants/279fef10afa8a9d2 | 4 + .hypothesis/constants/286bf5f38a08a328 | 4 + .hypothesis/constants/28a2ad9660aea065 | 4 + .hypothesis/constants/2a376eba55014067 | 4 + .hypothesis/constants/2a4d6fdca7e32452 | 4 + .hypothesis/constants/2da316f7eb364ba2 | 4 + .hypothesis/constants/2fc8c18522ebb776 | 4 + .hypothesis/constants/2fcd3db891e6a004 | 4 + .hypothesis/constants/313e3c61e44b222b | 4 + .hypothesis/constants/3250de540824c309 | 4 + .hypothesis/constants/32e204518134dad2 | 4 + .hypothesis/constants/330d1d189f8eef40 | 4 + .hypothesis/constants/38228c703f8fb4b8 | 4 + .hypothesis/constants/392b89d1ef89a2c3 | 4 + .hypothesis/constants/39700f051169726b | 4 + .hypothesis/constants/3a2167e67605985c | 4 + .hypothesis/constants/3ae779cdb993c4c5 | 4 + .hypothesis/constants/3b45313687bba9b8 | 4 + .hypothesis/constants/3b67f7ddaeddce27 | 4 + .hypothesis/constants/3eb73e08628c2238 | 4 + .hypothesis/constants/421cf5837f2d699e | 4 + .hypothesis/constants/43e0facb839eb1b2 | 4 + .hypothesis/constants/45dd2e709899e84f | 4 + .hypothesis/constants/49745a28c00ed4a5 | 4 + .hypothesis/constants/4c96678797af7a13 | 4 + .hypothesis/constants/4c9d15d0279c51b7 | 4 + .hypothesis/constants/4cc3f46c3441ee36 | 4 + .hypothesis/constants/4cda8bf85938f7eb | 4 + .hypothesis/constants/4ece4d8313dbf605 | 4 + .hypothesis/constants/4ef32942a287beb4 | 4 + .hypothesis/constants/4f07a9c831c6f212 | 4 + .hypothesis/constants/509cdc89a791f856 | 4 + .hypothesis/constants/511355bf243f0d52 | 4 + .hypothesis/constants/5394883cdc8934f9 | 4 + .hypothesis/constants/55c5e3e37035e354 | 4 + .hypothesis/constants/562993fd4babc3d3 | 4 + .hypothesis/constants/5740801a1206fde7 | 4 + .hypothesis/constants/57ce45cbb8e07966 | 4 + .hypothesis/constants/58bb84fa70f4b5ca | 4 + .hypothesis/constants/59a3d024bea7437c | 4 + .hypothesis/constants/5b79f41a5acfe503 | 4 + .hypothesis/constants/5c7228b42a374c5d | 4 + .hypothesis/constants/600783293363fef8 | 4 + .hypothesis/constants/622fb2a377a78521 | 4 + .hypothesis/constants/62a4144dc85688ee | 4 + .hypothesis/constants/62e69e7297f63486 | 4 + .hypothesis/constants/633539afd6be13a5 | 4 + .hypothesis/constants/6a58dd6e8e66bb91 | 4 + .hypothesis/constants/6b092661788ac6b6 | 4 + .hypothesis/constants/6b8d78ec7fe1be7b | 4 + .hypothesis/constants/6c0c1bae1b8e1a01 | 4 + .hypothesis/constants/6c70e98185d05a7d | 4 + .hypothesis/constants/6d819355c6a09701 | 4 + .hypothesis/constants/6da25e32907e3ee9 | 4 + .hypothesis/constants/6f1cb59bdf4098e0 | 4 + .hypothesis/constants/71ba56e7bda2f6b9 | 4 + .hypothesis/constants/758c5ab2a582073b | 4 + .hypothesis/constants/75916ad048e366a8 | 4 + .hypothesis/constants/760953e97136a180 | 4 + .hypothesis/constants/78706754819d8764 | 4 + .hypothesis/constants/7c84dedefd1cbde2 | 4 + .hypothesis/constants/7cef6f25b014d2b7 | 4 + .hypothesis/constants/7f33c3e342224c87 | 4 + .hypothesis/constants/816c83f6532ca62b | 4 + .hypothesis/constants/82087d68c872a73d | 4 + .hypothesis/constants/8753fc38897693cb | 4 + .hypothesis/constants/88a78023637ebf61 | 4 + .hypothesis/constants/8a1fe30e1d2c71a3 | 4 + .hypothesis/constants/8f6bb4ae4c5a7912 | 4 + .hypothesis/constants/910a59d3760f2706 | 4 + .hypothesis/constants/92379c7302fe5878 | 4 + .hypothesis/constants/9248d1b4012edaf1 | 4 + .hypothesis/constants/92767bced458b94e | 4 + .hypothesis/constants/9381368efb8300ed | 4 + .hypothesis/constants/93ae11514a1bc1d2 | 4 + .hypothesis/constants/93be14cbbd917f67 | 4 + .hypothesis/constants/958656e82d859095 | 4 + .hypothesis/constants/96a978335752f060 | 4 + .hypothesis/constants/96b7f20f5a75f2c5 | 4 + .hypothesis/constants/9778d411732b77fa | 4 + .hypothesis/constants/97cd9c4555a2cca6 | 4 + .hypothesis/constants/99bca4ca0a2f7be2 | 4 + .hypothesis/constants/9a5f396af21c5e42 | 4 + .hypothesis/constants/9b2b931afce7a42d | 4 + .hypothesis/constants/9c2147cfef7abdd7 | 4 + .hypothesis/constants/9e13917238468a8c | 4 + .hypothesis/constants/a0b16f041155a749 | 4 + .hypothesis/constants/a1a6023fc279930a | 4 + .hypothesis/constants/a4136aca6b851514 | 4 + .hypothesis/constants/a60840b027177571 | 4 + .hypothesis/constants/a8bb40c47f8e3f9c | 4 + .hypothesis/constants/a96648b2a575bed7 | 4 + .hypothesis/constants/ab2f93aeba5066fd | 4 + .hypothesis/constants/ae2847ca771c9802 | 4 + .hypothesis/constants/aee4ac2202df1931 | 4 + .hypothesis/constants/af4ad0a4f088e1ed | 4 + .hypothesis/constants/afa6b25c640dfe11 | 4 + .hypothesis/constants/b217da0623d6567c | 4 + .hypothesis/constants/b348d24346d06451 | 4 + .hypothesis/constants/b386c19c164f1cc2 | 4 + .hypothesis/constants/b5a044487f4ce8b6 | 4 + .hypothesis/constants/b68d77d253ca9c8a | 4 + .hypothesis/constants/b6da3cb5ac559c77 | 4 + .hypothesis/constants/b9f25bf6c627771f | 4 + .hypothesis/constants/ba53e1ba85a588bb | 4 + .hypothesis/constants/bd83433c7b861b64 | 4 + .hypothesis/constants/bfceb5beccb60d21 | 4 + .hypothesis/constants/bff98697456ca806 | 4 + .hypothesis/constants/c00c73d5fb997fc6 | 4 + .hypothesis/constants/c1e7a48d1bb21be6 | 4 + .hypothesis/constants/c27b4e4056f739ca | 4 + .hypothesis/constants/c358d5cd358011ce | 4 + .hypothesis/constants/c46f66753ea9ec79 | 4 + .hypothesis/constants/c6884a9944304355 | 4 + .hypothesis/constants/c84a43811198b0bf | 4 + .hypothesis/constants/c94e24de598a26b3 | 4 + .hypothesis/constants/c9bfb1969437e49b | 4 + .hypothesis/constants/ca249cf989c67921 | 4 + .hypothesis/constants/cb11f830266a38f7 | 4 + .hypothesis/constants/cca227baa51e120d | 4 + .hypothesis/constants/cce6cb3ba1c3bee9 | 4 + .hypothesis/constants/ceabf82662cdbf75 | 4 + .hypothesis/constants/ceb1d0465029fa83 | 4 + .hypothesis/constants/cfc7811c74a0eda3 | 4 + .hypothesis/constants/d1ecdb01d128f44c | 4 + .hypothesis/constants/d5032ce2f0b72e56 | 4 + .hypothesis/constants/d623f9cc71eca74d | 4 + .hypothesis/constants/d6856b5679893fb8 | 4 + .hypothesis/constants/d7cd0820127015d3 | 4 + .hypothesis/constants/d92287877e17f245 | 4 + .hypothesis/constants/d955d6634e87422e | 4 + .hypothesis/constants/da39a3ee5e6b4b0d | 4 + .hypothesis/constants/dc6ef3a1b5234c93 | 4 + .hypothesis/constants/df3d09b7b1766bec | 4 + .hypothesis/constants/e0a34de3bcae4642 | 4 + .hypothesis/constants/e144e49beae6fb71 | 4 + .hypothesis/constants/e21b380f350d215d | 4 + .hypothesis/constants/e356ac1b688445f2 | 4 + .hypothesis/constants/e3de064c74e1a322 | 4 + .hypothesis/constants/e45a76d3dd8e05b7 | 4 + .hypothesis/constants/e5eddde6e2bcf446 | 4 + .hypothesis/constants/e69f65dbd8abef8f | 4 + .hypothesis/constants/e830b7334c7145d3 | 4 + .hypothesis/constants/e8bc63ad18787151 | 4 + .hypothesis/constants/e9088653e78957f6 | 4 + .hypothesis/constants/e92f346d8980eda2 | 4 + .hypothesis/constants/e978b4934ef42344 | 4 + .hypothesis/constants/eaa33e077b23b1ca | 4 + .hypothesis/constants/eb36230d1c6ec60a | 4 + .hypothesis/constants/f363992e8bc23fd2 | 4 + .hypothesis/constants/f50b0baa1a6bc055 | 4 + .hypothesis/constants/f5fba0c9590657ac | 4 + .hypothesis/constants/f804a60f84a904cf | 4 + .hypothesis/constants/f89f357f7bd4558b | 4 + .hypothesis/constants/f993ffbeb7ab7d83 | 4 + .hypothesis/constants/fb373b5e85396387 | 4 + .hypothesis/constants/fb5926a4d20d8d6c | 4 + .hypothesis/constants/fc6509cf8d2e7621 | 4 + .hypothesis/constants/fd1413b487818ede | 4 + .hypothesis/constants/fd23d3f57846831d | 4 + .hypothesis/constants/fe02ea75b037cc90 | 4 + .hypothesis/constants/ff9057633f31936b | 4 + .../unicode_data/14.0.0/charmap.json.gz | Bin 0 -> 21505 bytes .../unicode_data/14.0.0/codec-utf-8.json.gz | Bin 0 -> 60 bytes orchestrator/models.py | 27 +- orchestrator/routes/pipelines.py | 166 ++++++++-- orchestrator/tests/test_pipeline_prompts.py | 3 + orchestrator/tests/test_tier3_execute.py | 68 ++++ tests/workflows/test_multi_reviewer.py | 3 + 204 files changed, 1335 insertions(+), 27 deletions(-) create mode 100644 .egg-state/agent-outputs/897-risk_analyst-output.json create mode 100644 .hypothesis/constants/00f20e874979327c create mode 100644 .hypothesis/constants/00f53ea8b62388fa create mode 100644 .hypothesis/constants/01f74a9a59701f85 create mode 100644 .hypothesis/constants/0342181e1bd12790 create mode 100644 .hypothesis/constants/03dfa3896d216c97 create mode 100644 .hypothesis/constants/067bfc402fa23a6f create mode 100644 .hypothesis/constants/08d45f80e960849e create mode 100644 .hypothesis/constants/0900a684f3a3766d create mode 100644 .hypothesis/constants/0be7f0ac4f43628c create mode 100644 .hypothesis/constants/0ce7ab84fa072573 create mode 100644 .hypothesis/constants/0dfc0bb66b32e048 create mode 100644 .hypothesis/constants/0f53725329c26da4 create mode 100644 .hypothesis/constants/112e48bca6962912 create mode 100644 .hypothesis/constants/126e2a6fa864f5e4 create mode 100644 .hypothesis/constants/13504d673e8bb2e2 create mode 100644 .hypothesis/constants/16f423bdc8cd36d3 create mode 100644 .hypothesis/constants/18fcc08ef98fde6f create mode 100644 .hypothesis/constants/198b481f4da30c78 create mode 100644 .hypothesis/constants/1a75fb2c5a634e52 create mode 100644 .hypothesis/constants/1c9687cd1c8bb9e7 create mode 100644 .hypothesis/constants/1c972e08847d2a50 create mode 100644 .hypothesis/constants/1d14e802fcfa454f create mode 100644 .hypothesis/constants/1d2480d1c18e5ace create mode 100644 .hypothesis/constants/1d6e2398a096a201 create mode 100644 .hypothesis/constants/1db06484f014299a create mode 100644 .hypothesis/constants/1e9d89b39c0c8663 create mode 100644 .hypothesis/constants/1ecab4796e6213d0 create mode 100644 .hypothesis/constants/20370c1edfca5c1b create mode 100644 .hypothesis/constants/225008640bfd14aa create mode 100644 .hypothesis/constants/230788c05eba3bb3 create mode 100644 .hypothesis/constants/2319e79a710edf2f create mode 100644 .hypothesis/constants/24ba4f0a82b38d9b create mode 100644 .hypothesis/constants/251c8f8e27fdd983 create mode 100644 .hypothesis/constants/262b1a2b548b4813 create mode 100644 .hypothesis/constants/279fef10afa8a9d2 create mode 100644 .hypothesis/constants/286bf5f38a08a328 create mode 100644 .hypothesis/constants/28a2ad9660aea065 create mode 100644 .hypothesis/constants/2a376eba55014067 create mode 100644 .hypothesis/constants/2a4d6fdca7e32452 create mode 100644 .hypothesis/constants/2da316f7eb364ba2 create mode 100644 .hypothesis/constants/2fc8c18522ebb776 create mode 100644 .hypothesis/constants/2fcd3db891e6a004 create mode 100644 .hypothesis/constants/313e3c61e44b222b create mode 100644 .hypothesis/constants/3250de540824c309 create mode 100644 .hypothesis/constants/32e204518134dad2 create mode 100644 .hypothesis/constants/330d1d189f8eef40 create mode 100644 .hypothesis/constants/38228c703f8fb4b8 create mode 100644 .hypothesis/constants/392b89d1ef89a2c3 create mode 100644 .hypothesis/constants/39700f051169726b create mode 100644 .hypothesis/constants/3a2167e67605985c create mode 100644 .hypothesis/constants/3ae779cdb993c4c5 create mode 100644 .hypothesis/constants/3b45313687bba9b8 create mode 100644 .hypothesis/constants/3b67f7ddaeddce27 create mode 100644 .hypothesis/constants/3eb73e08628c2238 create mode 100644 .hypothesis/constants/421cf5837f2d699e create mode 100644 .hypothesis/constants/43e0facb839eb1b2 create mode 100644 .hypothesis/constants/45dd2e709899e84f create mode 100644 .hypothesis/constants/49745a28c00ed4a5 create mode 100644 .hypothesis/constants/4c96678797af7a13 create mode 100644 .hypothesis/constants/4c9d15d0279c51b7 create mode 100644 .hypothesis/constants/4cc3f46c3441ee36 create mode 100644 .hypothesis/constants/4cda8bf85938f7eb create mode 100644 .hypothesis/constants/4ece4d8313dbf605 create mode 100644 .hypothesis/constants/4ef32942a287beb4 create mode 100644 .hypothesis/constants/4f07a9c831c6f212 create mode 100644 .hypothesis/constants/509cdc89a791f856 create mode 100644 .hypothesis/constants/511355bf243f0d52 create mode 100644 .hypothesis/constants/5394883cdc8934f9 create mode 100644 .hypothesis/constants/55c5e3e37035e354 create mode 100644 .hypothesis/constants/562993fd4babc3d3 create mode 100644 .hypothesis/constants/5740801a1206fde7 create mode 100644 .hypothesis/constants/57ce45cbb8e07966 create mode 100644 .hypothesis/constants/58bb84fa70f4b5ca create mode 100644 .hypothesis/constants/59a3d024bea7437c create mode 100644 .hypothesis/constants/5b79f41a5acfe503 create mode 100644 .hypothesis/constants/5c7228b42a374c5d create mode 100644 .hypothesis/constants/600783293363fef8 create mode 100644 .hypothesis/constants/622fb2a377a78521 create mode 100644 .hypothesis/constants/62a4144dc85688ee create mode 100644 .hypothesis/constants/62e69e7297f63486 create mode 100644 .hypothesis/constants/633539afd6be13a5 create mode 100644 .hypothesis/constants/6a58dd6e8e66bb91 create mode 100644 .hypothesis/constants/6b092661788ac6b6 create mode 100644 .hypothesis/constants/6b8d78ec7fe1be7b create mode 100644 .hypothesis/constants/6c0c1bae1b8e1a01 create mode 100644 .hypothesis/constants/6c70e98185d05a7d create mode 100644 .hypothesis/constants/6d819355c6a09701 create mode 100644 .hypothesis/constants/6da25e32907e3ee9 create mode 100644 .hypothesis/constants/6f1cb59bdf4098e0 create mode 100644 .hypothesis/constants/71ba56e7bda2f6b9 create mode 100644 .hypothesis/constants/758c5ab2a582073b create mode 100644 .hypothesis/constants/75916ad048e366a8 create mode 100644 .hypothesis/constants/760953e97136a180 create mode 100644 .hypothesis/constants/78706754819d8764 create mode 100644 .hypothesis/constants/7c84dedefd1cbde2 create mode 100644 .hypothesis/constants/7cef6f25b014d2b7 create mode 100644 .hypothesis/constants/7f33c3e342224c87 create mode 100644 .hypothesis/constants/816c83f6532ca62b create mode 100644 .hypothesis/constants/82087d68c872a73d create mode 100644 .hypothesis/constants/8753fc38897693cb create mode 100644 .hypothesis/constants/88a78023637ebf61 create mode 100644 .hypothesis/constants/8a1fe30e1d2c71a3 create mode 100644 .hypothesis/constants/8f6bb4ae4c5a7912 create mode 100644 .hypothesis/constants/910a59d3760f2706 create mode 100644 .hypothesis/constants/92379c7302fe5878 create mode 100644 .hypothesis/constants/9248d1b4012edaf1 create mode 100644 .hypothesis/constants/92767bced458b94e create mode 100644 .hypothesis/constants/9381368efb8300ed create mode 100644 .hypothesis/constants/93ae11514a1bc1d2 create mode 100644 .hypothesis/constants/93be14cbbd917f67 create mode 100644 .hypothesis/constants/958656e82d859095 create mode 100644 .hypothesis/constants/96a978335752f060 create mode 100644 .hypothesis/constants/96b7f20f5a75f2c5 create mode 100644 .hypothesis/constants/9778d411732b77fa create mode 100644 .hypothesis/constants/97cd9c4555a2cca6 create mode 100644 .hypothesis/constants/99bca4ca0a2f7be2 create mode 100644 .hypothesis/constants/9a5f396af21c5e42 create mode 100644 .hypothesis/constants/9b2b931afce7a42d create mode 100644 .hypothesis/constants/9c2147cfef7abdd7 create mode 100644 .hypothesis/constants/9e13917238468a8c create mode 100644 .hypothesis/constants/a0b16f041155a749 create mode 100644 .hypothesis/constants/a1a6023fc279930a create mode 100644 .hypothesis/constants/a4136aca6b851514 create mode 100644 .hypothesis/constants/a60840b027177571 create mode 100644 .hypothesis/constants/a8bb40c47f8e3f9c create mode 100644 .hypothesis/constants/a96648b2a575bed7 create mode 100644 .hypothesis/constants/ab2f93aeba5066fd create mode 100644 .hypothesis/constants/ae2847ca771c9802 create mode 100644 .hypothesis/constants/aee4ac2202df1931 create mode 100644 .hypothesis/constants/af4ad0a4f088e1ed create mode 100644 .hypothesis/constants/afa6b25c640dfe11 create mode 100644 .hypothesis/constants/b217da0623d6567c create mode 100644 .hypothesis/constants/b348d24346d06451 create mode 100644 .hypothesis/constants/b386c19c164f1cc2 create mode 100644 .hypothesis/constants/b5a044487f4ce8b6 create mode 100644 .hypothesis/constants/b68d77d253ca9c8a create mode 100644 .hypothesis/constants/b6da3cb5ac559c77 create mode 100644 .hypothesis/constants/b9f25bf6c627771f create mode 100644 .hypothesis/constants/ba53e1ba85a588bb create mode 100644 .hypothesis/constants/bd83433c7b861b64 create mode 100644 .hypothesis/constants/bfceb5beccb60d21 create mode 100644 .hypothesis/constants/bff98697456ca806 create mode 100644 .hypothesis/constants/c00c73d5fb997fc6 create mode 100644 .hypothesis/constants/c1e7a48d1bb21be6 create mode 100644 .hypothesis/constants/c27b4e4056f739ca create mode 100644 .hypothesis/constants/c358d5cd358011ce create mode 100644 .hypothesis/constants/c46f66753ea9ec79 create mode 100644 .hypothesis/constants/c6884a9944304355 create mode 100644 .hypothesis/constants/c84a43811198b0bf create mode 100644 .hypothesis/constants/c94e24de598a26b3 create mode 100644 .hypothesis/constants/c9bfb1969437e49b create mode 100644 .hypothesis/constants/ca249cf989c67921 create mode 100644 .hypothesis/constants/cb11f830266a38f7 create mode 100644 .hypothesis/constants/cca227baa51e120d create mode 100644 .hypothesis/constants/cce6cb3ba1c3bee9 create mode 100644 .hypothesis/constants/ceabf82662cdbf75 create mode 100644 .hypothesis/constants/ceb1d0465029fa83 create mode 100644 .hypothesis/constants/cfc7811c74a0eda3 create mode 100644 .hypothesis/constants/d1ecdb01d128f44c create mode 100644 .hypothesis/constants/d5032ce2f0b72e56 create mode 100644 .hypothesis/constants/d623f9cc71eca74d create mode 100644 .hypothesis/constants/d6856b5679893fb8 create mode 100644 .hypothesis/constants/d7cd0820127015d3 create mode 100644 .hypothesis/constants/d92287877e17f245 create mode 100644 .hypothesis/constants/d955d6634e87422e create mode 100644 .hypothesis/constants/da39a3ee5e6b4b0d create mode 100644 .hypothesis/constants/dc6ef3a1b5234c93 create mode 100644 .hypothesis/constants/df3d09b7b1766bec create mode 100644 .hypothesis/constants/e0a34de3bcae4642 create mode 100644 .hypothesis/constants/e144e49beae6fb71 create mode 100644 .hypothesis/constants/e21b380f350d215d create mode 100644 .hypothesis/constants/e356ac1b688445f2 create mode 100644 .hypothesis/constants/e3de064c74e1a322 create mode 100644 .hypothesis/constants/e45a76d3dd8e05b7 create mode 100644 .hypothesis/constants/e5eddde6e2bcf446 create mode 100644 .hypothesis/constants/e69f65dbd8abef8f create mode 100644 .hypothesis/constants/e830b7334c7145d3 create mode 100644 .hypothesis/constants/e8bc63ad18787151 create mode 100644 .hypothesis/constants/e9088653e78957f6 create mode 100644 .hypothesis/constants/e92f346d8980eda2 create mode 100644 .hypothesis/constants/e978b4934ef42344 create mode 100644 .hypothesis/constants/eaa33e077b23b1ca create mode 100644 .hypothesis/constants/eb36230d1c6ec60a create mode 100644 .hypothesis/constants/f363992e8bc23fd2 create mode 100644 .hypothesis/constants/f50b0baa1a6bc055 create mode 100644 .hypothesis/constants/f5fba0c9590657ac create mode 100644 .hypothesis/constants/f804a60f84a904cf create mode 100644 .hypothesis/constants/f89f357f7bd4558b create mode 100644 .hypothesis/constants/f993ffbeb7ab7d83 create mode 100644 .hypothesis/constants/fb373b5e85396387 create mode 100644 .hypothesis/constants/fb5926a4d20d8d6c create mode 100644 .hypothesis/constants/fc6509cf8d2e7621 create mode 100644 .hypothesis/constants/fd1413b487818ede create mode 100644 .hypothesis/constants/fd23d3f57846831d create mode 100644 .hypothesis/constants/fe02ea75b037cc90 create mode 100644 .hypothesis/constants/ff9057633f31936b create mode 100644 .hypothesis/unicode_data/14.0.0/charmap.json.gz create mode 100644 .hypothesis/unicode_data/14.0.0/codec-utf-8.json.gz diff --git a/.egg-state/agent-outputs/897-risk_analyst-output.json b/.egg-state/agent-outputs/897-risk_analyst-output.json new file mode 100644 index 00000000..27f7bac8 --- /dev/null +++ b/.egg-state/agent-outputs/897-risk_analyst-output.json @@ -0,0 +1,311 @@ +{ + "issue": 897, + "phase": "plan", + "agent": "risk_analyst", + "revision": 1, + "revision_reason": null, + "title": "Risk assessment: Verdict schema expansion and prompt alignment for SDLC reviewers", + + "summary": "The architect's recommended approach (Option A: expand ReviewVerdict model + align prompts) is architecturally sound and addresses all three root causes identified in issue #897. The overall risk profile is LOW-MEDIUM. The most significant risks are: (1) the NamedTuple return type change requires atomic updates to all callers — the architect's mitigation claim about NamedTuple iterable unpacking is incorrect and this will cause runtime errors if any caller is missed, (2) the test suite has a critical gap — test_multi_reviewer.py tests a local stub function, not the production _aggregate_review_verdicts(), so aggregation behavior changes may pass tests while being broken, and (3) advisory content from approved verdicts has no defined consumer in the implementation plan, creating dead code. No risks warrant blocking the approach; all are mitigable with the strategies below.", + + "architect_approach_assessment": { + "recommended_approach": "A — Expand Verdict Schema + Align Prompts", + "assessment": "Sound. The approach correctly identifies that both the schema structure and prompt framing must change together to produce the desired behavioral shift. Adding dedicated `analysis` and `suggestions` fields with always-populate semantics is better than overloading existing fields (Option B) or adding a third verdict state (Option C). The Pydantic default mechanism provides clean backward compatibility.", + "agreement_with_architect": true, + "disagreements": [ + { + "topic": "NamedTuple unpacking backward compatibility", + "architect_claim": "R-2 mitigation says 'NamedTuple is iterable, so existing verdict, feedback = _aggregate_review_verdicts(...) destructuring will still work if the NamedTuple has exactly those as its first 2 fields'", + "correction": "This is incorrect. Python raises ValueError('too many values to unpack') when unpacking a 3-element iterable into 2 variables. A 3-field NamedTuple CANNOT be destructured into 2 variables. Both callers MUST be updated atomically with the return type change. This is not a graceful degradation scenario — it is a hard failure.", + "severity": "medium", + "recommendation": "Update the implementation plan to emphasize that the aggregation return type change and both caller updates (tasks 2 and 3) MUST be in the same commit. Add a test that explicitly validates the return type." + }, + { + "topic": "Advisory content has no consumer", + "architect_claim": "AD-5 says advisory content should be included in phase-completion comments and available for the integrator", + "correction": "The implementation plan (phases 1-4) has no task for surfacing advisory_content to phase-completion comments or the integrator. The aggregation will collect advisory content into advisory_content field, but no code will read or display it. Task-3 only says 'Log or store advisory_content separately' with no specific implementation. This creates dead code that produces the illusion of capturing suggestions without actually surfacing them.", + "severity": "medium", + "recommendation": "Add a task to surface advisory_content in the phase-completion issue comment. Without this, the approved-verdict suggestions are still structurally lost — just collected into a variable that goes nowhere instead of never being collected at all." + } + ] + }, + + "risks": [ + { + "id": "R-1", + "category": "correctness", + "title": "NamedTuple return type change breaks callers if not updated atomically", + "description": "Changing _aggregate_review_verdicts() from tuple[str, str] to a 3-field AggregatedReviewResult NamedTuple will cause ValueError at both call sites (pipelines.py:3447 and pipelines.py:5396) if they still use `a, b = _aggregate_review_verdicts(...)` destructuring. Python does not allow unpacking a 3-element iterable into 2 variables.", + "likelihood": "certain_if_not_mitigated", + "impact": "high", + "impact_detail": "Runtime crash in the review loop for all pipeline phases. Every pipeline run would fail at the verdict aggregation step. This is a P0 breakage since it affects all SDLC pipelines.", + "affected_files": [ + "orchestrator/routes/pipelines.py:3447 (Tier 3 caller)", + "orchestrator/routes/pipelines.py:5396 (main phase loop caller)" + ], + "mitigation": "Ensure tasks 2 and 3 from the architect's plan are implemented in the same commit. Add a unit test for _aggregate_review_verdicts() that validates the return type and field access patterns. Consider using a 2-field NamedTuple (verdict, feedback) plus a separate function to get advisory content, if atomic update proves difficult to guarantee.", + "rollback": "Revert the single commit. No data migration needed since old verdict files work with new or old model.", + "human_review_needed": false + }, + { + "id": "R-2", + "category": "test_coverage", + "title": "Production aggregation function has no direct unit tests", + "description": "tests/workflows/test_multi_reviewer.py defines a local `aggregate_verdicts(verdicts: dict) -> str` function (line 239) that takes plain string verdicts. It does NOT test the production `_aggregate_review_verdicts()` which takes `dict[str, ReviewVerdict | None]`. This means: (a) the production function's current behavior is unverified by unit tests, (b) changes to the production function will not be caught by this test file, and (c) the new AggregatedReviewResult return type will have no coverage from the tests the architect plans to update (task-8).", + "likelihood": "certain", + "impact": "medium", + "impact_detail": "Tests may pass while the production aggregation function is broken. The only coverage for the production function comes from integration mocks in test_tier3_execute.py, which mock the function rather than testing it directly.", + "affected_files": [ + "tests/workflows/test_multi_reviewer.py (tests wrong function)", + "orchestrator/tests/test_tier3_execute.py (mocks the function, doesn't test it)" + ], + "mitigation": "Task-8 should be revised to either: (a) replace the local `aggregate_verdicts()` stub with an import of the production `_aggregate_review_verdicts()`, or (b) add new tests that directly call the production function with ReviewVerdict objects. The existing local function can remain for testing the simplified aggregation logic, but new tests must cover the production function.", + "rollback": "N/A — this is a pre-existing gap that should be fixed as part of this change.", + "human_review_needed": false + }, + { + "id": "R-3", + "category": "behavioral", + "title": "Advisory content collected but never surfaced (dead code path)", + "description": "The architect's plan collects advisory_content in AggregatedReviewResult but the implementation plan has no task to surface it. AD-5 says it should appear in phase-completion comments and be available to the integrator, but no implementation task covers this. The advisory_content field will be populated, logged, and then discarded — meaning approved-verdict suggestions are still effectively lost.", + "likelihood": "certain", + "impact": "medium", + "impact_detail": "The core promise of issue #897 is that reviewer observations on approved work are actionable. If advisory content is collected but not surfaced, the user-visible behavior for 'approve with suggestions' is unchanged. The schema and prompt improvements will still produce deeper analysis in the verdict JSON files (readable by humans), but the pipeline automation doesn't act on them.", + "affected_files": [ + "orchestrator/routes/pipelines.py (phase-completion comment posting, location TBD)" + ], + "mitigation": "Add a task to the implementation plan that surfaces advisory_content in the phase-completion GitHub issue comment. This is where the human reviews pipeline results. Even a simple 'Advisory suggestions from reviewers:' section appended to the comment would close the loop. The integrator can read raw verdict files, so no additional integration work is needed there.", + "rollback": "N/A — gap in plan, not a regression.", + "human_review_needed": true, + "human_review_reason": "The scope of how/where advisory content is surfaced is a product decision. Options: (a) append to phase-completion comment, (b) write a separate summary file, (c) defer to a follow-up issue. Human should decide which approach to take." + }, + { + "id": "R-4", + "category": "cost", + "title": "Token consumption increase per review cycle", + "description": "Requiring always-populated analysis and encouraging non-blocking suggestions will increase output token usage per review verdict. Rough estimate: each reviewer produces ~300-500 additional words of analysis (~400-700 tokens). With 3 reviewers x up to 3 cycles = 9 reviewer invocations per pipeline, this adds ~3,600-6,300 output tokens per pipeline run. At Opus output pricing (~$75/M tokens), this is ~$0.27-$0.47 per pipeline run.", + "likelihood": "certain", + "impact": "low", + "impact_detail": "The increased cost is the intended outcome — deeper analysis requires more tokens. The per-pipeline increase (~$0.50 worst case) is small relative to total pipeline cost (typically $5-15 for a full SDLC run with multiple agents). The prompt input token increase from adding review conventions (~200 tokens) is negligible.", + "affected_files": [], + "mitigation": "Include length guidance in the prompt (e.g., 'thorough but concise analysis, typically 200-500 words') as the architect suggests. Monitor actual token usage in the first few pipeline runs after deployment. The agent-design reviewer exemption (AD-2) avoids wasted tokens on reviews with no findings.", + "rollback": "Revert prompt changes to restore previous token consumption levels.", + "human_review_needed": false + }, + { + "id": "R-5", + "category": "behavioral", + "title": "Prompt changes may cause over-reporting: fabricated or low-value findings", + "description": "Aggressive thoroughness framing ('critical infrastructure', 'last line of defense', 'find ALL issues', 'always provide detailed analysis') may cause reviewers to over-report. When an agent is pressured to always produce analysis, it may fabricate issues or flag trivial style concerns as substantive findings to fill the analysis field. This is particularly risky for the contract and refine/plan reviewers where clean work genuinely has little to critique.", + "likelihood": "low-medium", + "impact": "medium", + "impact_detail": "If reviewers start producing false positives in their analysis, it degrades trust in the review system. If false positives appear in the feedback field (even non-blocking suggestions), they could trigger unnecessary revision cycles or confuse implementing agents. This counterproductive behavior was observed in LLM reviewer research where forcing detailed output led to hallucinated concerns.", + "affected_files": [ + "orchestrator/routes/pipelines.py:1004-1044 (scope preambles)", + "orchestrator/routes/pipelines.py:1452-1586 (review prompt builder)" + ], + "mitigation": "The prompt should explicitly state: 'If the work genuinely has no issues in your review scope, say so briefly in the analysis field rather than inventing concerns. A short analysis confirming quality is better than a long analysis fabricating problems.' The agent-design reviewer exemption (AD-2) already handles this for that reviewer type. Apply similar guidance to contract and refine/plan reviewers: 'If all criteria are met, confirm each criterion is met with a brief evidence citation rather than searching for problems that don't exist.'", + "rollback": "Revert prompt changes to restore current behavior.", + "human_review_needed": false + }, + { + "id": "R-6", + "category": "maintenance", + "title": "Review conventions drift between PR and SDLC systems", + "description": "AD-4 chooses to inline review conventions into the prompt builder rather than loading from action/review-conventions.md. This creates two copies of the review quality standards: one in action/review-conventions.md (for PR reviewers) and one hard-coded in orchestrator/routes/pipelines.py (for SDLC reviewers). Future updates to conventions will need to be applied in both locations.", + "likelihood": "medium", + "impact": "low", + "impact_detail": "If conventions drift, PR and SDLC reviewers will apply different quality standards. This is the exact class of problem issue #897 is trying to fix — divergent behavior between the two reviewer systems. The drift would be gradual and hard to detect.", + "affected_files": [ + "action/review-conventions.md", + "orchestrator/routes/pipelines.py (_build_review_prompt)" + ], + "mitigation": "Two options: (a) Accept the inlining approach but add a code comment in both locations referencing the other, so editors know to update both. (b) Instead of inlining, create a shared/prompts/review-conventions.md file that both systems load. The architect rejected (b) due to cross-boundary dependency, but shared/prompts/ already contains shared criteria files (code-review-criteria.md, etc.), so this directory is already a shared dependency. Adding review-conventions.md there would be consistent with existing patterns.", + "rollback": "N/A — architectural choice, not a regression.", + "human_review_needed": true, + "human_review_reason": "Should review conventions be shared via shared/prompts/ (consistent with existing criteria sharing pattern) or inlined (as the architect recommends)? This is a maintainability tradeoff the human should decide." + }, + { + "id": "R-7", + "category": "compatibility", + "title": "Pydantic extra field handling is implicitly relied upon", + "description": "The verdict JSON template instructs agents to write a 'reviewer' field, but ReviewVerdict has no 'reviewer' field. This works because Pydantic v2 defaults to ignoring extra fields. The model has no explicit model_config. If someone later adds model_config with extra='forbid' (a common Pydantic best practice), _read_review_verdict() will start failing on all verdict files. Adding 2 new fields (analysis, suggestions) to the model increases the coupling to this implicit behavior — old verdict files will still have the 'reviewer' extra field.", + "likelihood": "low", + "impact": "medium", + "impact_detail": "Not an immediate risk. However, the implicit reliance on Pydantic's default extra-field handling is fragile. A future refactoring that adds extra='forbid' would break verdict parsing for all existing and new verdict files.", + "affected_files": [ + "orchestrator/models.py:97-103 (ReviewVerdict)", + "orchestrator/routes/pipelines.py:1621-1624 (_read_review_verdict parsing)" + ], + "mitigation": "Either: (a) add `reviewer` as an optional field to ReviewVerdict (since the prompt template includes it), or (b) add explicit `model_config = ConfigDict(extra='ignore')` to ReviewVerdict to document the intentional behavior and prevent accidental breakage from a future extra='forbid' change. Option (b) is lower risk and more explicit.", + "rollback": "N/A — pre-existing fragility.", + "human_review_needed": false + }, + { + "id": "R-8", + "category": "correctness", + "title": "Tier 3 test mocks may mask integration issues", + "description": "test_tier3_execute.py uses mock_read_verdict to return pre-built ReviewVerdict objects, bypassing the actual JSON parsing in _read_review_verdict(). With the new fields, mocks will use ReviewVerdict defaults (empty strings) which is correct, but the tests won't validate that agent-written JSON with the new fields actually parses correctly end-to-end.", + "likelihood": "low", + "impact": "low", + "impact_detail": "If an agent writes malformed JSON for the new fields (e.g., a list instead of a string for analysis), the mock-based tests won't catch it. Only real pipeline runs would reveal the issue.", + "affected_files": [ + "orchestrator/tests/test_tier3_execute.py" + ], + "mitigation": "Add a specific test in TestReadReviewVerdict (test_tier3_execute.py:682) that reads a JSON file containing the new fields and validates they parse into ReviewVerdict correctly. Also test with the 'reviewer' extra field present to confirm Pydantic ignores it.", + "rollback": "N/A — test improvement.", + "human_review_needed": false + }, + { + "id": "R-9", + "category": "deployment", + "title": "Active pipelines during deployment may see mixed behavior", + "description": "If the orchestrator is restarted to deploy the new code while a pipeline is in a review cycle, the following can happen: (a) reviews already written with old schema will be read by new aggregation code — this is safe due to Pydantic defaults. (b) New prompt will be served to reviewers mid-cycle — this is safe since each reviewer session is independent. (c) The review cycle may have some verdicts in old format and some in new format — the aggregation handles this via defaults.", + "likelihood": "low", + "impact": "low", + "impact_detail": "No data corruption or pipeline failure. Worst case: one review cycle produces mixed-depth verdicts (some old-style shallow, some new-style deep). The overall verdict logic is unaffected.", + "affected_files": [], + "mitigation": "No special deployment sequencing needed. The Pydantic defaults provide natural backward compatibility. For extra safety, deploy during low-pipeline-activity windows.", + "rollback": "Standard orchestrator restart with previous version.", + "human_review_needed": false + }, + { + "id": "R-10", + "category": "security", + "title": "No new attack surface introduced", + "description": "The changes modify internal prompt construction, JSON schema fields, and aggregation logic. No new external inputs, API endpoints, or authentication changes are introduced. The verdict JSON is written by sandboxed agents and read by the orchestrator — the trust boundary is unchanged.", + "likelihood": "negligible", + "impact": "negligible", + "impact_detail": "No security risk identified.", + "affected_files": [], + "mitigation": "None required.", + "rollback": "N/A", + "human_review_needed": false + } + ], + + "risk_matrix": { + "high_priority": [ + { + "risk_id": "R-1", + "title": "NamedTuple return type breaks callers", + "action": "Ensure atomic commit for aggregation + caller updates. Add unit test for return type." + } + ], + "medium_priority": [ + { + "risk_id": "R-2", + "title": "Production aggregation untested", + "action": "Add direct unit tests for _aggregate_review_verdicts() with ReviewVerdict objects." + }, + { + "risk_id": "R-3", + "title": "Advisory content has no consumer", + "action": "Add task to surface advisory_content in phase-completion comments. Human decision needed on approach." + }, + { + "risk_id": "R-5", + "title": "Over-reporting risk from aggressive prompting", + "action": "Add anti-hallucination guidance to prompts for all reviewer types." + } + ], + "low_priority": [ + { + "risk_id": "R-4", + "title": "Token cost increase", + "action": "Include length guidance in prompts. Monitor post-deployment." + }, + { + "risk_id": "R-6", + "title": "Review conventions drift", + "action": "Human decision: inline vs shared file. Either way, add cross-references." + }, + { + "risk_id": "R-7", + "title": "Pydantic extra field handling implicit", + "action": "Add explicit model_config or reviewer field to ReviewVerdict." + }, + { + "risk_id": "R-8", + "title": "Mock-based tests miss JSON parsing issues", + "action": "Add JSON round-trip test in TestReadReviewVerdict." + }, + { + "risk_id": "R-9", + "title": "Mixed behavior during deployment", + "action": "No action needed — Pydantic defaults provide compatibility." + } + ] + }, + + "areas_requiring_human_review": [ + { + "area": "Advisory content surfacing strategy", + "reason": "The implementation plan collects advisory_content but has no task to surface it. How and where should approved-verdict suggestions be shown to humans? Options: (a) append to phase-completion issue comment, (b) write separate summary file, (c) defer to follow-up issue.", + "risk_ids": ["R-3"], + "recommendation": "Option (a) — append to phase-completion comment. This is the natural place where humans review pipeline results and requires minimal additional code." + }, + { + "area": "Review conventions sharing strategy", + "reason": "The architect chose to inline conventions (AD-4) rather than share via shared/prompts/. This creates a maintenance burden since the same conventions would exist in two places. The shared/prompts/ directory already contains shared criteria files, so adding review-conventions.md there would be consistent.", + "risk_ids": ["R-6"], + "recommendation": "Use shared/prompts/review-conventions.md for consistency with existing shared criteria pattern. The cross-boundary dependency concern is already accepted for criteria files." + } + ], + + "rollback_plan": { + "strategy": "Single-commit revert", + "description": "All changes should be in a single PR (possibly multi-commit but squash-mergeable). Rollback is a git revert of the merge commit. No data migration is needed in either direction because: (a) old verdict files parse correctly with new model (Pydantic defaults), (b) new verdict files with extra fields parse correctly with old model (Pydantic ignores extras by default), (c) the aggregation function return type change is code-only with no persistent state.", + "steps": [ + "1. Revert the merge commit on main", + "2. Deploy the orchestrator with reverted code", + "3. No data cleanup needed — old and new verdict files are intercompatible", + "4. In-flight pipelines will continue normally with old behavior" + ], + "data_migration_needed": false, + "downtime_required": false + }, + + "implementation_plan_amendments": [ + { + "amendment": "Make tasks 2 and 3 atomic", + "reason": "The AggregatedReviewResult NamedTuple with 3 fields cannot be destructured into 2 variables. Both callers MUST be updated in the same commit as the return type change.", + "risk_id": "R-1", + "priority": "required" + }, + { + "amendment": "Add task: surface advisory_content in phase-completion comments", + "reason": "Without this, the advisory content collected by the new aggregation is dead code. The approved-verdict suggestions would still be lost at the pipeline level.", + "risk_id": "R-3", + "priority": "required" + }, + { + "amendment": "Revise task-8 to test the production _aggregate_review_verdicts function", + "reason": "test_multi_reviewer.py tests a local stub function, not the production function. New tests should import and test the actual production function.", + "risk_id": "R-2", + "priority": "required" + }, + { + "amendment": "Add anti-hallucination prompt guidance", + "reason": "Prevent reviewers from fabricating issues to fill the always-required analysis field.", + "risk_id": "R-5", + "priority": "recommended" + }, + { + "amendment": "Add explicit model_config = ConfigDict(extra='ignore') to ReviewVerdict", + "reason": "Document the intentional Pydantic behavior of ignoring extra fields like 'reviewer' in verdict JSON.", + "risk_id": "R-7", + "priority": "recommended" + }, + { + "amendment": "Add JSON round-trip test in TestReadReviewVerdict for new fields", + "reason": "Ensure agent-written JSON with analysis and suggestions fields parses correctly end-to-end.", + "risk_id": "R-8", + "priority": "recommended" + } + ], + + "overall_risk_level": "LOW-MEDIUM", + "overall_assessment": "The proposed approach is sound and the risks are manageable. The most critical finding is that the architect's R-2 mitigation regarding NamedTuple unpacking is factually incorrect — this will cause a hard runtime failure if callers are not updated atomically. The second finding is a plan gap: advisory content is collected but has no consumer, which means the 'approve with suggestions' feature is incomplete without an additional task. The third finding is a test coverage gap that predates this issue but should be fixed alongside the changes. All risks have straightforward mitigations. No risk warrants blocking the approach or choosing an alternative. The rollback path is clean due to Pydantic's backward-compatible field defaults.", + "blocking_risks": false +} diff --git a/.hypothesis/constants/00f20e874979327c b/.hypothesis/constants/00f20e874979327c new file mode 100644 index 00000000..deb7da28 --- /dev/null +++ b/.hypothesis/constants/00f20e874979327c @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/config/repo_config.py +# hypothesis_version: 6.151.9 + +['--access-level', '--check-readable', '--check-writable', '--default-reviewer', '--github-username', '--list-all', '--list-readable', '--list-writable', '--sync-all-prs', '.config', '=', 'EGG_REPO_CONFIG', 'GITHUB_TOKEN', 'REPO', '__main__', 'auth_mode', 'bot', 'bot_username', 'checkpoint_repo', 'checks', 'command', 'config', 'default_reviewer', 'disable_auto_fix', 'egg', 'false', 'git_email', 'git_name', 'github_sync', 'github_user', 'github_username', 'name', 'none', 'readable', 'readable_repos', 'repo_settings', 'repos', 'repositories.yaml', 'store_true', 'sync_all_prs', 'true', 'user', 'user_mode', 'writable', 'writable_repos'] \ No newline at end of file diff --git a/.hypothesis/constants/00f53ea8b62388fa b/.hypothesis/constants/00f53ea8b62388fa new file mode 100644 index 00000000..7d7d30af --- /dev/null +++ b/.hypothesis/constants/00f53ea8b62388fa @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/git_client.py +# hypothesis_version: 6.151.9 + +[448, '-', '--', '--3way', '--abbrev', '--abbrev-commit', '--abbrev-ref', '--abort', '--all', '--allow-empty', '--always', '--amend', '--annotate', '--author', '--base', '--branch', '--broken', '--cached', '--check', '--chmod', '--color', '--config', '--contains', '--continue', '--cover-letter', '--create', '--date', '--decorate', '--delete', '--deleted', '--depth', '--detach', '--diff-filter', '--directory', '--dirty', '--dry-run', '--edit', '--error-unmatch', '--exclude', '--exclude-standard', '--exec', '--exit-code', '--ff-only', '--first-parent', '--follow', '--force', '--force-create', '--force-with-lease', '--fork-point', '--format', '--full-name', '--full-tree', '--get', '--get-all', '--get-url', '--git-common-dir', '--git-dir', '--global', '--graph', '--grep', '--hard', '--heads', '--ignore-all-space', '--ignore-blank-lines', '--ignore-whitespace', '--ignored', '--include-untracked', '--incremental', '--independent', '--index', '--intent-to-add', '--interactive', '--is-ancestor', '--is-bare-repository', '--jobs', '--keep', '--keep-index', '--keep-non-patch', '--keep-subject', '--killed', '--line-porcelain', '--list', '--local', '--long', '--mainline', '--match', '--max-count', '--merge', '--merged', '--merges', '--message', '--message-id', '--mixed', '--modified', '--name-only', '--name-status', '--no-ahead-behind', '--no-color', '--no-commit', '--no-edit', '--no-ff', '--no-index', '--no-merged', '--no-merges', '--no-numbered', '--no-patch', '--no-progress', '--no-scissors', '--no-stat', '--no-tags', '--no-track', '--no-verify', '--notes', '--numbered', '--numstat', '--octopus', '--oneline', '--onto', '--orphan', '--others', '--ours', '--output-directory', '--patch', '--porcelain', '--pretty', '--progress', '--prune', '--quiet', '--quit', '--really-refresh', '--receive-pack', '--recurse-submodules', '--refresh', '--refs', '--reject', '--remotes', '--resolved', '--reverse', '--scissors', '--set-upstream', '--shallow-exclude', '--shallow-since', '--short', '--shortstat', '--show-current', '--show-email', '--show-name', '--show-number', '--show-stash', '--show-stats', '--show-toplevel', '--sign', '--signoff', '--since', '--skip', '--soft', '--sort', '--source', '--squash', '--stage', '--staged', '--start-number', '--stat', '--stdout', '--summary', '--symbolic-full-name', '--symref', '--tags', '--theirs', '--track', '--unidiff-zero', '--unified', '--unmerged', '--until', '--untracked-files', '--update', '--upload-pack', '--verbose', '--verify', '--whitespace', '--word-diff', '--worktree', '-3', '-A', '-B', '-C', '-L', '-N', '-R', '-S', '-U', '-W', '-X', '-a', '-b', '-c', '-d', '-e', '-f', '-i', '-j', '-k', '-l', '-m', '-n', '-o', '-p', '-q', '-r', '-s', '-sb', '-t', '-u', '-v', '-vv', '-w', '-x', '.sh', '/', '/home/egg/repos', '/home/egg/repos/', '/repos', '/repos/', '/usr/bin/git', '0', '=', 'GIT_ASKPASS', 'GIT_PASSWORD', 'GIT_TERMINAL_PROMPT', 'GIT_USERNAME', '^-\\d+$', 'add', 'allowed_flags', 'am', 'apply', 'blame', 'branch', 'checkout', 'cherry-pick', 'clean', 'commit', 'config', 'describe', 'diff', 'fetch', 'format-patch', 'gateway.git-client', 'get-url', 'git-askpass-', 'git@', 'https://', 'log', 'ls-files', 'ls-remote', 'ls-tree', 'merge', 'merge-base', 'mv', 'push', 'rebase', 'reflog', 'remote', 'reset', 'restore', 'rev-parse', 'rm', 'safe.directory=*', 'shared', 'show', 'ssh://', 'stash', 'status', 'switch', 'tag', 'update-index', 'user', 'worktree', 'x-access-token'] \ No newline at end of file diff --git a/.hypothesis/constants/01f74a9a59701f85 b/.hypothesis/constants/01f74a9a59701f85 new file mode 100644 index 00000000..49c0492b --- /dev/null +++ b/.hypothesis/constants/01f74a9a59701f85 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/worktree_manager.py +# hypothesis_version: 6.151.9 + +[0.1, 1000, '*/index.lock', '-', '--force', '--format', '--list', '--merged', '--porcelain', '--short', '--verify', '-D', '-R', '-b', '-d', '..', '.git', '/', '/home/egg/repos', 'Failed to chown', 'HEAD', 'Permission denied', 'Worktree created', 'Worktree removed', '[^a-zA-Z0-9-]', 'add', 'branch', 'chown', 'container_id', 'docker', 'failed', 'gitdir', 'gitdir:', 'gitdir: ', 'index.lock', 'name', 'origin/main', 'origin/master', 'path', 'ps', 'ref: refs/heads/', 'remove', 'repo_name', 'repos', 'rev-parse', 'shared', 'status', 'symbolic-ref', 'unknown error', 'worktree', 'worktrees', '{{.Names}}'] \ No newline at end of file diff --git a/.hypothesis/constants/0342181e1bd12790 b/.hypothesis/constants/0342181e1bd12790 new file mode 100644 index 00000000..816ce3c1 --- /dev/null +++ b/.hypothesis/constants/0342181e1bd12790 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/network_mode.py +# hypothesis_version: 6.151.9 + +['PRIVATE_MODE', 'false', 'private', 'private_mode', 'public', 'true', 'utf-8'] \ No newline at end of file diff --git a/.hypothesis/constants/03dfa3896d216c97 b/.hypothesis/constants/03dfa3896d216c97 new file mode 100644 index 00000000..66ededbe --- /dev/null +++ b/.hypothesis/constants/03dfa3896d216c97 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/self_improvement/collectors/gha.py +# hypothesis_version: 6.151.9 + +['+00:00', '--jq', '--json', '--log', '--paginate', '--repo', '-q', '.nameWithOwner', '.workflow_runs', 'Z', 'api', 'cancelled', 'conclusion', 'created_at', 'event', 'failure', 'gh', 'gha', 'head_branch', 'html_url', 'id', 'in_progress', 'name', 'nameWithOwner', 'path', 'queued', 'repo', 'run', 'run_number', 'running', 'status', 'success', 'unknown', 'updated_at', 'view', 'workflow', 'workflow_path'] \ No newline at end of file diff --git a/.hypothesis/constants/067bfc402fa23a6f b/.hypothesis/constants/067bfc402fa23a6f new file mode 100644 index 00000000..3aaf7acb --- /dev/null +++ b/.hypothesis/constants/067bfc402fa23a6f @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/.github/scripts/checks/check_fixer.py +# hypothesis_version: 6.151.9 + +[-2000, 300, '--porcelain', 'Auto-fix failed', 'Makefile', 'changes_made', 'check-fixer', 'command', 'fix', 'fix :', 'fix:', 'git', 'hint', 'make', 'make fix', 'status', 'stderr', 'stdout'] \ No newline at end of file diff --git a/.hypothesis/constants/08d45f80e960849e b/.hypothesis/constants/08d45f80e960849e new file mode 100644 index 00000000..608d14bf --- /dev/null +++ b/.hypothesis/constants/08d45f80e960849e @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_config/configs/gateway.py +# hypothesis_version: 6.151.9 + +[5.0, 384, 401, 500, 1000, 2000, 4000, '.config', '0.0.0.0', '127.0.0.1', 'Authorization', 'EGG_LAUNCHER_SECRET', 'GATEWAY_HOST', 'GATEWAY_PORT', 'GatewayConfig', '_secret_source', 'auto-generated', 'combined', 'egg', 'environment', 'gateway', 'gh_execute', 'gh_pr_close', 'gh_pr_comment', 'gh_pr_create', 'gh_pr_edit', 'git_push', 'host', 'launcher-secret', 'launcher-secret file', 'ok', 'port', 'rate_limits', 'secret', 'status', 'unknown'] \ No newline at end of file diff --git a/.hypothesis/constants/0900a684f3a3766d b/.hypothesis/constants/0900a684f3a3766d new file mode 100644 index 00000000..a85781f7 --- /dev/null +++ b/.hypothesis/constants/0900a684f3a3766d @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/transcript_buffer.py +# hypothesis_version: 6.151.9 + +[448, 1024, 2000, 5000, '...', '.jsonl.tmp', '/tmp/egg-transcripts', 'API turn captured', 'Buffer cleared', 'Failed to get stats', 'ab', 'api_turn', 'container_id', 'content', 'duration_ms', 'entries_dropped', 'error', 'function', 'max_size', 'max_tokens', 'messages', 'model', 'name', 'path', 'r+b', 'replace', 'request', 'response', 'role', 'shared', 'size_bytes', 'stop_reason', 'streaming', 'system', 'text', 'timestamp', 'tool_result', 'tool_use', 'tools', 'type', 'usage', 'utf-8', 'w'] \ No newline at end of file diff --git a/.hypothesis/constants/0be7f0ac4f43628c b/.hypothesis/constants/0be7f0ac4f43628c new file mode 100644 index 00000000..eae8cf4d --- /dev/null +++ b/.hypothesis/constants/0be7f0ac4f43628c @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/agent_roles.py +# hypothesis_version: 6.151.9 + +['**/*.go', '**/*.java', '**/*.js', '**/*.json', '**/*.jsx', '**/*.md', '**/*.py', '**/*.rb', '**/*.rs', '**/*.sh', '**/*.spec.js', '**/*.spec.jsx', '**/*.spec.ts', '**/*.spec.tsx', '**/*.test.js', '**/*.test.jsx', '**/*.test.ts', '**/*.test.tsx', '**/*.ts', '**/*.tsx', '**/*.yaml', '**/*.yml', '**/*_test.go', '**/*_test.py', '**/CHANGELOG.md', '**/README.md', '**/test/', '**/test_*.py', '**/tests/', './', '.egg-state/drafts/', '.egg-state/reviews/', '/', 'acceptance_criteria', 'action/', 'analysis_draft', 'architect', 'bin/', 'blocked', 'changed_files', 'coder', 'commits', 'complete', 'config/', 'coverage_report', 'doc_files', 'docs/', 'documenter', 'failed', 'gaps_found', 'gateway/', 'high', 'implement', 'integration_report', 'integration_tests/', 'integrator', 'lib/', 'mitigation_plan', 'orchestrator/', 'pending', 'plan', 'refine', 'refiner', 'review_verdict', 'reviewer_code', 'reviewer_contract', 'reviewer_plan', 'reviewer_refine', 'risk_analyst', 'risk_assessment', 'running', 'sandbox/', 'scripts/', 'shared/', 'skipped', 'src/', 'task_breakdown', 'task_planner', 'technical_decisions', 'test/', 'test_files', 'tester', 'tests/'] \ No newline at end of file diff --git a/.hypothesis/constants/0ce7ab84fa072573 b/.hypothesis/constants/0ce7ab84fa072573 new file mode 100644 index 00000000..570deb73 --- /dev/null +++ b/.hypothesis/constants/0ce7ab84fa072573 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/routes/__init__.py +# hypothesis_version: 6.151.9 + +['.git', '/', 'EGG_REPO_PATH', 'orchestrator.routes', 'repo', 'repo_path', 'shared'] \ No newline at end of file diff --git a/.hypothesis/constants/0dfc0bb66b32e048 b/.hypothesis/constants/0dfc0bb66b32e048 new file mode 100644 index 00000000..f466dc84 --- /dev/null +++ b/.hypothesis/constants/0dfc0bb66b32e048 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/backends/__init__.py +# hypothesis_version: 6.151.9 + +[] \ No newline at end of file diff --git a/.hypothesis/constants/0f53725329c26da4 b/.hypothesis/constants/0f53725329c26da4 new file mode 100644 index 00000000..61e5a6b7 --- /dev/null +++ b/.hypothesis/constants/0f53725329c26da4 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/deployment.py +# hypothesis_version: 6.151.9 + +[100, 120, 200, 599, 600, '..', '.egg', '/', '/app', 'GET', 'HTTP method', 'compose_file', 'container_mount_path', 'deployment.json', 'deployment.yml', 'docker-compose.yml', 'health_endpoints', 'source_dir', 'utf-8'] \ No newline at end of file diff --git a/.hypothesis/constants/112e48bca6962912 b/.hypothesis/constants/112e48bca6962912 new file mode 100644 index 00000000..ab037064 --- /dev/null +++ b/.hypothesis/constants/112e48bca6962912 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/llm/claude/runner.py +# hypothesis_version: 6.151.9 + +[b'\n', 5.0, 500, 1024, '(no content)', '--model', '--output-format', '--print', '--verbose', '--version', '1.0.0', '429', 'Model not available', 'Permission denied', 'Rate limited', 'assistant', 'authentication', 'claude', 'content', 'init', 'invalid_api_key', 'message', 'model', 'not found', 'opus', 'permission', 'rate_limit', 'result', 'stream-json', 'subtype', 'system', 'text', 'thinking', 'type'] \ No newline at end of file diff --git a/.hypothesis/constants/126e2a6fa864f5e4 b/.hypothesis/constants/126e2a6fa864f5e4 new file mode 100644 index 00000000..cc6f719a --- /dev/null +++ b/.hypothesis/constants/126e2a6fa864f5e4 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/jwt/api_jwk.py +# hypothesis_version: 6.151.9 + +['EC', 'ES256', 'ES256K', 'ES384', 'ES512', 'Ed25519', 'EdDSA', 'HS256', 'OKP', 'P-256', 'P-384', 'P-521', 'RS256', 'RSA', 'Unsupported crv: %s', 'Unsupported kty: %s', 'alg', 'crv', 'crv is not found: %s', 'keys', 'kid', 'kty', 'kty is not found: %s', 'oct', 'secp256k1', 'use'] \ No newline at end of file diff --git a/.hypothesis/constants/13504d673e8bb2e2 b/.hypothesis/constants/13504d673e8bb2e2 new file mode 100644 index 00000000..24ee2d0e --- /dev/null +++ b/.hypothesis/constants/13504d673e8bb2e2 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_logging/cli.py +# hypothesis_version: 6.151.9 + +['1', '__main__', 'claude', 'gh', 'git'] \ No newline at end of file diff --git a/.hypothesis/constants/16f423bdc8cd36d3 b/.hypothesis/constants/16f423bdc8cd36d3 new file mode 100644 index 00000000..3a4665e5 --- /dev/null +++ b/.hypothesis/constants/16f423bdc8cd36d3 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/container_monitor.py +# hypothesis_version: 6.151.9 + +['Container not found', 'Container removed', 'Event handler error', 'error', 'exit_code', 'exited', 'exited_at', 'failed', 'healthy', 'not_found', 'orchestrator.monitor', 'removed', 'running', 'shared', 'started', 'started_at', 'status', 'stopped', 'unhealthy'] \ No newline at end of file diff --git a/.hypothesis/constants/18fcc08ef98fde6f b/.hypothesis/constants/18fcc08ef98fde6f new file mode 100644 index 00000000..82aa1c33 --- /dev/null +++ b/.hypothesis/constants/18fcc08ef98fde6f @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/.github/scripts/checks/base.py +# hypothesis_version: 6.151.9 + +['json', 'shared'] \ No newline at end of file diff --git a/.hypothesis/constants/198b481f4da30c78 b/.hypothesis/constants/198b481f4da30c78 new file mode 100644 index 00000000..68e6e049 --- /dev/null +++ b/.hypothesis/constants/198b481f4da30c78 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/health_checks/__init__.py +# hypothesis_version: 6.151.9 + +['HealthAction', 'HealthCheck', 'HealthResult', 'HealthStatus', 'HealthTier', 'HealthTrigger'] \ No newline at end of file diff --git a/.hypothesis/constants/1a75fb2c5a634e52 b/.hypothesis/constants/1a75fb2c5a634e52 new file mode 100644 index 00000000..7aecdc54 --- /dev/null +++ b/.hypothesis/constants/1a75fb2c5a634e52 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/self_improvement/__init__.py +# hypothesis_version: 6.151.9 + +[] \ No newline at end of file diff --git a/.hypothesis/constants/1c9687cd1c8bb9e7 b/.hypothesis/constants/1c9687cd1c8bb9e7 new file mode 100644 index 00000000..a12ad69f --- /dev/null +++ b/.hypothesis/constants/1c9687cd1c8bb9e7 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_config/utils.py +# hypothesis_version: 6.151.9 + +['"', '#', "'", '0', '1', '=', 'false', 'no', 'off', 'on', 'true', 'yes'] \ No newline at end of file diff --git a/.hypothesis/constants/1c972e08847d2a50 b/.hypothesis/constants/1c972e08847d2a50 new file mode 100644 index 00000000..bdccc784 --- /dev/null +++ b/.hypothesis/constants/1c972e08847d2a50 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/sdlc_hitl.py +# hypothesis_version: 6.151.9 + +['\x1b[0m', '\x1b[1m', '\x1b[2m', '\x1b[31m', '\x1b[32m', '\x1b[33m', '\x1b[36m', ' > ', ',', '--show-toplevel', '.git', '/', '1', '2', '3', '4', '5', 'Approved', 'Decision required', 'EDITOR', 'EGG_REPOS', '\\banalysis\\b', '\\bimplement\\b', '\\bplan\\b', '\\bpr\\b', '\\brefine\\b', 'cancelled', 'claude', 'context', 'git', 'id', 'implement', 'issue', 'local', 'plan', 'pr', 'question', 'refine', 'repos', 'resolved', 'rev-parse', 'unknown', 'vim'] \ No newline at end of file diff --git a/.hypothesis/constants/1d14e802fcfa454f b/.hypothesis/constants/1d14e802fcfa454f new file mode 100644 index 00000000..708ba001 --- /dev/null +++ b/.hypothesis/constants/1d14e802fcfa454f @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/runtime.py +# hypothesis_version: 6.151.9 + +[',', '--format', '--rm', '-C', '-e', '-f', '-i', '-it', '-t', '-v', '.', '.git', '.md', '/', '/:', '0', '1', ':', 'ANTHROPIC_API_KEY', 'Docker build failed', 'EGG_AGENT_ROLE', 'EGG_ISSUE_NUMBER', 'EGG_MULTI_AGENT', 'EGG_PIPELINE_ID', 'EGG_PIPELINE_PHASE', 'EGG_PR_NUMBER', 'EGG_QUIET', 'EGG_REPOS', 'EGG_TASK_ID', 'EGG_THREAD_TS', 'EGG_TIMING', 'IPv4Address', 'Interrupted by user', 'PYTHONUNBUFFERED', 'Starting services...', 'api-key', 'api_key', 'build_docker_cmd', 'build_image', 'check_config', 'check_image', 'configure_mounts', 'docker', 'get-url', 'git', 'git@', 'github.com', 'inspect', 'kill', 'network', 'null', 'oauth', 'oauth-token', 'origin', 'prepare_container', 'private', 'public', 'remote', 'repositories.yaml', 'rm', 'start_gateway', '{{json .Containers}}'] \ No newline at end of file diff --git a/.hypothesis/constants/1d2480d1c18e5ace b/.hypothesis/constants/1d2480d1c18e5ace new file mode 100644 index 00000000..e47a4f78 --- /dev/null +++ b/.hypothesis/constants/1d2480d1c18e5ace @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/ciphers/algorithms.py +# hypothesis_version: 6.151.9 + +[128, 129, 160, 192, 256, 449, 512, '3DES', 'AES', 'Blowfish', 'CAST5', 'ChaCha20', 'IDEA', 'RC4', 'SEED', '_nonce', 'camellia', 'key', 'nonce'] \ No newline at end of file diff --git a/.hypothesis/constants/1d6e2398a096a201 b/.hypothesis/constants/1d6e2398a096a201 new file mode 100644 index 00000000..12a6b08e --- /dev/null +++ b/.hypothesis/constants/1d6e2398a096a201 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/__init__.py +# hypothesis_version: 6.151.9 + +[] \ No newline at end of file diff --git a/.hypothesis/constants/1db06484f014299a b/.hypothesis/constants/1db06484f014299a new file mode 100644 index 00000000..dd2a595f --- /dev/null +++ b/.hypothesis/constants/1db06484f014299a @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/container_spawner.py +# hypothesis_version: 6.151.9 + +[200, 1000, 9848, '...', '/', '/home/egg', '/home/egg/repos', '/shared/certs', '172.32.0.10', '172.32.0.2', '172.33.0.2', 'CLAUDE_CODE_VERSION', 'CONTAINER_ID', 'Container created', 'EGG_AGENT_ROLE', 'EGG_EXTERNAL_NETWORK', 'EGG_ISOLATED_NETWORK', 'EGG_ISSUE_NUMBER', 'EGG_PHASE', 'EGG_PIPELINE_ID', 'EGG_REPO_PATH', 'EGG_SANDBOX_IMAGE', 'HOST_GID', 'HOST_HOME', 'HOST_UID', 'IPAddress', 'NetworkSettings', 'Networks', 'bind', 'egg-external', 'egg-gateway', 'egg-isolated', 'egg.agent.role', 'egg.issue.number', 'egg.pipeline.id', 'egg:latest', 'local', 'orchestrator.spawner', 'private', 'public', 'shared', 'volume'] \ No newline at end of file diff --git a/.hypothesis/constants/1e9d89b39c0c8663 b/.hypothesis/constants/1e9d89b39c0c8663 new file mode 100644 index 00000000..e48d8d98 --- /dev/null +++ b/.hypothesis/constants/1e9d89b39c0c8663 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/auth.py +# hypothesis_version: 6.151.9 + +[401, 'Authorization', 'Bearer ', 'F', 'gateway.auth', 'gateway.rate_limiter', 'message', 'rate_limiter', 'session_manager', 'shared', 'success'] \ No newline at end of file diff --git a/.hypothesis/constants/1ecab4796e6213d0 b/.hypothesis/constants/1ecab4796e6213d0 new file mode 100644 index 00000000..ae4df17e --- /dev/null +++ b/.hypothesis/constants/1ecab4796e6213d0 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/health_checks/tier1/phase_output.py +# hypothesis_version: 6.151.9 + +['--count', '.egg-state', '/', 'agents_with_commits', 'architect', 'drafts', 'git', 'origin/main..HEAD', 'plan', 'rev-list', 'shared'] \ No newline at end of file diff --git a/.hypothesis/constants/20370c1edfca5c1b b/.hypothesis/constants/20370c1edfca5c1b new file mode 100644 index 00000000..e6d752a2 --- /dev/null +++ b/.hypothesis/constants/20370c1edfca5c1b @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/jwt/__init__.py +# hypothesis_version: 6.151.9 + +[' <', '2.3.0', '>', 'DecodeError', 'InvalidAudienceError', 'InvalidIssuedAtError', 'InvalidIssuerError', 'InvalidKeyError', 'InvalidTokenError', 'José Padilla', 'MIT', 'PyJWK', 'PyJWKClient', 'PyJWKClientError', 'PyJWKError', 'PyJWKSet', 'PyJWKSetError', 'PyJWS', 'PyJWT', 'PyJWTError', 'decode', 'encode', 'hello@jpadilla.com', 'register_algorithm', 'unregister_algorithm'] \ No newline at end of file diff --git a/.hypothesis/constants/225008640bfd14aa b/.hypothesis/constants/225008640bfd14aa new file mode 100644 index 00000000..4d178ee7 --- /dev/null +++ b/.hypothesis/constants/225008640bfd14aa @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/models.py +# hypothesis_version: 6.151.9 + +['1.0', 'Acceptance criteria', 'Action performed', 'Additional details', 'Audit trail', 'Available options', 'Check result status', 'Contract', 'Debounce expiration', 'Decision type', 'Files affected', 'Git commit SHA', 'GitHub issue number', 'HITL decisions', 'ISSUE_CHECKBOX', 'Implementation notes', 'Issue URL', 'Issue metadata', 'Issue title', 'New value', 'Option description', 'Option identifier', 'Option label', 'PR description/body', 'PR_REVIEW', 'Phase status', 'Previous value', 'Reason for change', 'Reviewer feedback', 'Role of the actor', 'Schema version', 'Selected resolution', 'Task description', 'Task status', 'Tasks in this phase', 'The agent role', 'The question text', 'Unique identifier', 'When agent completed', 'When agent started', 'When resolved', 'Whether escalated', 'Whether resolved', 'Who resolved', '^Q[0-9]+$', '^[0-9]+\\.[0-9]+$', '^[a-f0-9]{7,40}$', '^ac-[0-9]+$', '^check-[a-z0-9-]+$', '^decision-[0-9]+$', '^feedback-[0-9]+$', '^phase-[0-9]+$', 'after', 'architect', 'auto', 'before', 'blocked', 'coder', 'commit', 'complete', 'create', 'delete', 'documenter', 'fail', 'failed', 'hitl', 'human', 'implement', 'implementer', 'in_progress', 'incomplete', 'integrator', 'pass', 'pending', 'plan', 'pr', 'refine', 'refiner', 'reviewer', 'reviewer_code', 'reviewer_contract', 'reviewer_plan', 'reviewer_refine', 'risk_analyst', 'running', 'skip', 'skipped', 'system', 'task_planner', 'tester', 'transition', 'update'] \ No newline at end of file diff --git a/.hypothesis/constants/230788c05eba3bb3 b/.hypothesis/constants/230788c05eba3bb3 new file mode 100644 index 00000000..37258002 --- /dev/null +++ b/.hypothesis/constants/230788c05eba3bb3 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/loader.py +# hypothesis_version: 6.151.9 + +['*.json', '.egg-state/contracts', '.tmp', 'audit_log', 'git', 'json', 'show', 'w'] \ No newline at end of file diff --git a/.hypothesis/constants/2319e79a710edf2f b/.hypothesis/constants/2319e79a710edf2f new file mode 100644 index 00000000..a4613cb4 --- /dev/null +++ b/.hypothesis/constants/2319e79a710edf2f @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/redactor.py +# hypothesis_version: 6.151.9 + +[0.9, 100, '(--auth[=\\s]+)(\\S+)', '(--token[=\\s]+)(\\S+)', '.*_API_KEY$', '.*_CREDENTIAL.*', '.*_KEY$', '.*_PASSWORD$', '.*_SECRET$', '.*_TOKEN$', 'AKIA[A-Z0-9]{16}', '[REDACTED]', '\\.aws/credentials', '\\.env', '\\.env\\.[a-z]+', '\\.gnupg/', '\\.key$', '\\.netrc', '\\.pem$', '\\.ssh/', '\\1', '^ANTHROPIC_API_KEY$', '^API_KEY$', '^AUTH_TOKEN$', '^AWS_.*', '^AZURE_.*', '^DATABASE_URL$', '^GCP_.*', '^GITHUB_TOKEN$', '^MONGO.*_URI$', '^MYSQL_.*', '^OPENAI_API_KEY$', '^POSTGRES_.*', '^REDIS_URL$', '_-', 'credentials\\.json', 'gho_[a-zA-Z0-9]{36}', 'ghp_[a-zA-Z0-9]{36}', 'ghs_[a-zA-Z0-9]{36}', 'ghu_[a-zA-Z0-9]{36}', 'id_ed25519', 'id_rsa', 'secrets\\.json', 'sk-[a-zA-Z0-9]{20,}', 'ya29\\.[a-zA-Z0-9_-]+'] \ No newline at end of file diff --git a/.hypothesis/constants/24ba4f0a82b38d9b b/.hypothesis/constants/24ba4f0a82b38d9b new file mode 100644 index 00000000..dae00a3b --- /dev/null +++ b/.hypothesis/constants/24ba4f0a82b38d9b @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_orchestrator/detection.py +# hypothesis_version: 6.151.9 + +['distributed', 'get_agent_role', 'get_deployment_mode', 'get_orchestrator_url', 'get_pipeline_id', 'is_orchestrator_mode', 'remote-single'] \ No newline at end of file diff --git a/.hypothesis/constants/251c8f8e27fdd983 b/.hypothesis/constants/251c8f8e27fdd983 new file mode 100644 index 00000000..49c8ae83 --- /dev/null +++ b/.hypothesis/constants/251c8f8e27fdd983 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/health_checks/runner.py +# hypothesis_version: 6.151.9 + +['aggregate', 'aggregate_status', 'check_count', 'results', 'shared', 'trigger'] \ No newline at end of file diff --git a/.hypothesis/constants/262b1a2b548b4813 b/.hypothesis/constants/262b1a2b548b4813 new file mode 100644 index 00000000..2eb3c2b9 --- /dev/null +++ b/.hypothesis/constants/262b1a2b548b4813 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/ciphers/modes.py +# hypothesis_version: 6.151.9 + +[128, 256, 512, 'AES', 'CBC', 'CFB', 'CFB8', 'CTR', 'ECB', 'GCM', 'OFB', 'XTS', '_nonce', '_tag', '_tweak', 'nonce', 'tag', 'tweak'] \ No newline at end of file diff --git a/.hypothesis/constants/279fef10afa8a9d2 b/.hypothesis/constants/279fef10afa8a9d2 new file mode 100644 index 00000000..5b65de4a --- /dev/null +++ b/.hypothesis/constants/279fef10afa8a9d2 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/repo_visibility.py +# hypothesis_version: 6.151.9 + +[200, 403, 404, '2022-11-28', 'Accept', 'Authorization', 'GITHUB_USER_TOKEN', 'GitHub API timeout', 'X-GitHub-Api-Version', 'bot', 'internal', 'private', 'public', 'shared', 'user', 'visibility'] \ No newline at end of file diff --git a/.hypothesis/constants/286bf5f38a08a328 b/.hypothesis/constants/286bf5f38a08a328 new file mode 100644 index 00000000..74ccf59b --- /dev/null +++ b/.hypothesis/constants/286bf5f38a08a328 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/exceptions.py +# hypothesis_version: 6.151.9 + +[] \ No newline at end of file diff --git a/.hypothesis/constants/28a2ad9660aea065 b/.hypothesis/constants/28a2ad9660aea065 new file mode 100644 index 00000000..bac2377c --- /dev/null +++ b/.hypothesis/constants/28a2ad9660aea065 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/routes/health.py +# hypothesis_version: 6.151.9 + +[200, 404, 500, 503, '/api/v1', '/health', '/live', '/ready', 'EGG_REPO_PATH', 'GET', 'HEALTH_CHECK_RUNNER', 'Z', 'alive', 'components', 'degraded', 'docker', 'egg-orchestrator', 'error', 'failed', 'health', 'healthy', 'message', 'ok', 'pipeline_id', 'ready', 'results', 'service', 'shared', 'state_store', 'status', 'timestamp', 'unknown'] \ No newline at end of file diff --git a/.hypothesis/constants/2a376eba55014067 b/.hypothesis/constants/2a376eba55014067 new file mode 100644 index 00000000..8944d997 --- /dev/null +++ b/.hypothesis/constants/2a376eba55014067 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_config/configs/github.py +# hypothesis_version: 6.151.9 + +[5.0, 300, 401, 1000, '.config', '2022-11-28', 'Accept', 'Authorization', 'GITHUB_TOKEN', 'GITHUB_USER_TOKEN', 'GitHubConfig', 'Token not configured', 'User-Agent', 'X-GitHub-Api-Version', '_token_source', 'egg', 'egg-config/1.0', 'environment', 'github', 'github-token', 'github-token file', 'github_username', 'login', 'readonly_token', 'repositories.yaml', 'secrets.env', 'token', 'token_expires_at', 'unknown', 'user_mode_token', 'username'] \ No newline at end of file diff --git a/.hypothesis/constants/2a4d6fdca7e32452 b/.hypothesis/constants/2a4d6fdca7e32452 new file mode 100644 index 00000000..4dcb084d --- /dev/null +++ b/.hypothesis/constants/2a4d6fdca7e32452 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/__init__.py +# hypothesis_version: 6.151.9 + +['GitHubClient', 'PolicyEngine', 'app', 'get_github_client', 'get_policy_engine'] \ No newline at end of file diff --git a/.hypothesis/constants/2da316f7eb364ba2 b/.hypothesis/constants/2da316f7eb364ba2 new file mode 100644 index 00000000..3199af9a --- /dev/null +++ b/.hypothesis/constants/2da316f7eb364ba2 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/contract_cli.py +# hypothesis_version: 6.151.9 + +['*', '-', '--audit', '--commit', '--criterion', '--error', '--format', '--issue', '--json', '--notes', '--options', '--question', '--repo-path', '--role', '--task', '.egg-session-token', '?', 'Agent Executions:', 'Agent role to start', 'Authorization', 'Available commands', 'Content-Type', 'Decision question', 'EGG_ISSUE_NUMBER', 'EGG_REPO_PATH', 'EGG_SESSION_TOKEN', 'GATEWAY_URL', 'GET', 'Git commit SHA', 'Implementation notes', 'Include audit log', 'Invalid task ID', 'Link commit to task', 'Output as JSON', 'POST', 'Pending Decisions:', 'Phases:', 'Task ID', '^[0-9a-fA-F]{7,40}$', '^[a-z0-9-]+$', '__main__', 'ac-', 'actor', 'add-commit', 'add-decision', 'add-feedback', 'agent-complete', 'agent-fail', 'agent-next', 'agent-start', 'agent-status', 'agent_executions', 'agents', 'answer', 'append', 'application/json', 'blocked', 'coder', 'command', 'comment_id', 'commit', 'complete', 'current_phase', 'data', 'debounce_until', 'decisions', 'description', 'details', 'dispatch', 'documenter', 'egg', 'egg-contract', 'error', 'failed', 'failed_agents', 'feedback', 'field_path', 'format', 'hitl', 'id', 'in_progress', 'include_audit_log', 'incomplete', 'integrator', 'issue_number', 'json', 'label', 'markdown', 'message', 'multi_agent_config', 'must be >= 1', 'new_value', 'options', 'parallel', 'pending', 'pending_agents', 'phase', 'phases', 'question', 'questions', 'reason', 'repo_path', 'resolution', 'resolved', 'resolved_at', 'resolved_by', 'retry_count', 'role', 'running', 'running_agents', 'show', 'skipped', 'status', 'store_true', 'submitted', 'submitted_at', 'submitted_by', 'success', 'task-', 'tasks', 'tester', 'true', 'type', 'unknown', 'update-notes', 'verify-criterion', 'waiting', '⊘', '○', '●', '◐', '✗'] \ No newline at end of file diff --git a/.hypothesis/constants/2fc8c18522ebb776 b/.hypothesis/constants/2fc8c18522ebb776 new file mode 100644 index 00000000..bb6a649b --- /dev/null +++ b/.hypothesis/constants/2fc8c18522ebb776 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/jwt/jwks_client.py +# hypothesis_version: 6.151.9 + +['header', 'kid', 'sig', 'verify_signature'] \ No newline at end of file diff --git a/.hypothesis/constants/2fcd3db891e6a004 b/.hypothesis/constants/2fcd3db891e6a004 new file mode 100644 index 00000000..414b816b --- /dev/null +++ b/.hypothesis/constants/2fcd3db891e6a004 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_config/constants.py +# hypothesis_version: 6.151.9 + +[256, 300, 1234, 3129, 5678, 9848, 9849, '1.0', '172.32.0.0/24', '172.32.0.10', '172.32.0.2', '172.32.0.3', '172.33.0.0/24', '172.33.0.2', '172.33.0.3', '512m', 'DEVSERVER_CPU_LIMIT', 'DEVSERVER_PIDS_LIMIT', 'EGG_CONTAINER_IP', 'EGG_EXTERNAL_NETWORK', 'EGG_EXTERNAL_SUBNET', 'EGG_ISOLATED_NETWORK', 'EGG_ISOLATED_SUBNET', 'GATEWAY_EXTERNAL_IP', 'GATEWAY_IMAGE_NAME', 'GATEWAY_ISOLATED_IP', 'GATEWAY_PORT', 'GATEWAY_PROXY_PORT', 'ORCHESTRATOR_PORT', 'TEST_GATEWAY_PORT', 'egg-check', 'egg-external', 'egg-gateway', 'egg-isolated', 'egg-orchestrator'] \ No newline at end of file diff --git a/.hypothesis/constants/313e3c61e44b222b b/.hypothesis/constants/313e3c61e44b222b new file mode 100644 index 00000000..2dab212e --- /dev/null +++ b/.hypothesis/constants/313e3c61e44b222b @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_config/validators.py +# hypothesis_version: 6.151.9 + +[65535, '*', 'Email is empty', 'Invalid email format', 'URL is empty', 'URL missing host', '[EMPTY]', 'command', 'gho_', 'ghp_', 'ghs_', 'ghu_', 'github_pat_', 'http', 'https', 'name', 'sk-ant-'] \ No newline at end of file diff --git a/.hypothesis/constants/3250de540824c309 b/.hypothesis/constants/3250de540824c309 new file mode 100644 index 00000000..ebedcd5b --- /dev/null +++ b/.hypothesis/constants/3250de540824c309 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/self_improvement/collect.py +# hypothesis_version: 6.151.9 + +[500, 5000, 50000, '### Statistics', '--format', '--output', '--partition', '--repo', '--since-hours', '0', '', 'PARTITION_COUNT=0', '__main__', '```', 'branch', 'collected_at', 'completed_at', 'failed_runs', 'failure', 'head_branch', 'html_url', 'index', 'json', 'log_excerpt', 'logs_omitted', 'markdown', 'other_runs', 'partition', 'repository', 'run_id', 'run_number', 'runs_to_analyze', 'since', 'started_at', 'statistics', 'status', 'store_true', 'success', 'successful_runs', 'total', 'total_runs', 'trigger', 'unknown', 'url', 'workflow', 'workflow_path', 'workflows_analyzed', '{partition}', '✅', '❌'] \ No newline at end of file diff --git a/.hypothesis/constants/32e204518134dad2 b/.hypothesis/constants/32e204518134dad2 new file mode 100644 index 00000000..28a11ed3 --- /dev/null +++ b/.hypothesis/constants/32e204518134dad2 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/dh.py +# hypothesis_version: 6.151.9 + +[512, 'DHParameters', 'DHPrivateKey', 'DHPublicKey', '_g', '_p', '_parameter_numbers', '_public_numbers', '_q', '_x', '_y'] \ No newline at end of file diff --git a/.hypothesis/constants/330d1d189f8eef40 b/.hypothesis/constants/330d1d189f8eef40 new file mode 100644 index 00000000..84cc885c --- /dev/null +++ b/.hypothesis/constants/330d1d189f8eef40 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/transcript_extractor.py +# hypothesis_version: 6.151.9 + +[1.5, 15.0, 75.0, 100, 1000, 1500, 2500, 25000, 1000000, '+00:00', '..', '...', '/', '/tmp/egg-transcripts', 'Edit', 'Glob', 'Grep', 'Read', 'Write', 'Z', '\\', 'api_turn', 'content', 'file_path', 'id', 'input', 'input_parse_error', 'input_tokens', 'is_error', 'messages', 'model', 'name', 'output_tokens', 'path', 'raw_partial_input', 'request', 'response', 'role', 'text', 'timestamp', 'tool_result', 'tool_use', 'tool_use_id', 'type', 'unknown', 'usage', 'user'] \ No newline at end of file diff --git a/.hypothesis/constants/38228c703f8fb4b8 b/.hypothesis/constants/38228c703f8fb4b8 new file mode 100644 index 00000000..70298916 --- /dev/null +++ b/.hypothesis/constants/38228c703f8fb4b8 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/sse.py +# hypothesis_version: 6.151.9 + +[1000, 3600, 5000, 'EGG_REPO_PATH', 'SSE client connected', 'Z', 'already_terminal', 'cancelled', 'complete', 'completed', 'current_phase', 'dag', 'data', 'done', 'error', 'event', 'event_type', 'failed', 'orchestrator.sse', 'pending_decisions', 'pipeline_id', 'reason', 'refresh', 'shared', 'snapshot', 'status', 'timeout', 'timestamp', 'update', 'visualization'] \ No newline at end of file diff --git a/.hypothesis/constants/392b89d1ef89a2c3 b/.hypothesis/constants/392b89d1ef89a2c3 new file mode 100644 index 00000000..bc108644 --- /dev/null +++ b/.hypothesis/constants/392b89d1ef89a2c3 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/_asymmetric.py +# hypothesis_version: 6.151.9 + +[] \ No newline at end of file diff --git a/.hypothesis/constants/39700f051169726b b/.hypothesis/constants/39700f051169726b new file mode 100644 index 00000000..6f40f541 --- /dev/null +++ b/.hypothesis/constants/39700f051169726b @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/__init__.py +# hypothesis_version: 6.151.9 + +[] \ No newline at end of file diff --git a/.hypothesis/constants/3a2167e67605985c b/.hypothesis/constants/3a2167e67605985c new file mode 100644 index 00000000..9c276b43 --- /dev/null +++ b/.hypothesis/constants/3a2167e67605985c @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_orchestrator/types.py +# hypothesis_version: 6.151.9 + +[100, 'AgentRole', 'CompletionData', 'DeploymentMode', 'ErrorData', 'HeartbeatData', 'ProgressData', 'SignalPayload', 'SignalResponse', 'SignalType', 'agent_role', 'architect', 'checker', 'coder', 'commit', 'complete', 'container_id', 'current_task', 'data', 'distributed', 'documenter', 'error', 'files_changed', 'handoff_data', 'heartbeat', 'integrator', 'local', 'message', 'metrics', 'progress', 'progress_percent', 'recoverable', 'refiner', 'remote-single', 'reviewer', 'reviewer_code', 'reviewer_contract', 'reviewer_plan', 'reviewer_refine', 'risk_analyst', 'signal_type', 'success', 'task_planner', 'tester', 'traceback'] \ No newline at end of file diff --git a/.hypothesis/constants/3ae779cdb993c4c5 b/.hypothesis/constants/3ae779cdb993c4c5 new file mode 100644 index 00000000..32fac42f --- /dev/null +++ b/.hypothesis/constants/3ae779cdb993c4c5 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_logging/signatures.py +# hypothesis_version: 6.151.9 + +['_', 'trace_id', 'workflow_id', 'workflow_type'] \ No newline at end of file diff --git a/.hypothesis/constants/3b45313687bba9b8 b/.hypothesis/constants/3b45313687bba9b8 new file mode 100644 index 00000000..5c779573 --- /dev/null +++ b/.hypothesis/constants/3b45313687bba9b8 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/health_checks/types.py +# hypothesis_version: 6.151.9 + +['Z', 'action', 'alert', 'check_name', 'continue', 'degraded', 'details', 'fail_pipeline', 'failed', 'healthy', 'on_demand', 'phase_complete', 'reasoning', 'runtime_tick', 'startup', 'status', 'tier', 'tier1', 'tier2', 'timestamp', 'wave_complete'] \ No newline at end of file diff --git a/.hypothesis/constants/3b67f7ddaeddce27 b/.hypothesis/constants/3b67f7ddaeddce27 new file mode 100644 index 00000000..e70dbd59 --- /dev/null +++ b/.hypothesis/constants/3b67f7ddaeddce27 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/phase_filter.py +# hypothesis_version: 6.151.9 + +['*', '../', './', '.egg', '.egg-state/drafts/*', '.egg-state/reviews/*', '/', '; ', 'Add notes', 'All files allowed', 'Comment on issues', 'Create PRs', 'Edit PRs', 'Edit issues', 'Files allowed', 'Link commits', 'No files to check', 'Operation allowed', 'Push code', 'View contract state', 'add-commit *', 'add-decision *', 'allowed_operations', 'allowed_patterns', 'blocked_operations', 'blocked_patterns', 'blocked_reason', 'description', 'egg-contract', 'exit_requires', 'file_restrictions', 'gh', 'git', 'human', 'implement', 'implementer', 'issue comment *', 'issue edit *', 'pattern', 'phases', 'plan', 'pr', 'pr create*', 'pr edit *', 'push *', 'refine', 'reviewer', 'role', 'show *', 'type', 'unknown', 'update-notes *'] \ No newline at end of file diff --git a/.hypothesis/constants/3eb73e08628c2238 b/.hypothesis/constants/3eb73e08628c2238 new file mode 100644 index 00000000..d4991436 --- /dev/null +++ b/.hypothesis/constants/3eb73e08628c2238 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_orchestrator/client.py +# hypothesis_version: 6.151.9 + +['Content-Type', 'GET', 'OrchestratorClient', 'OrchestratorError', 'OrchestratorHealth', 'POST', 'agent_role', 'application/json', 'components', 'details', 'egg-orchestrator', 'healthy', 'message', 'service', 'signal_type', 'status', 'timestamp', 'unhealthy', 'unknown', 'unreachable'] \ No newline at end of file diff --git a/.hypothesis/constants/421cf5837f2d699e b/.hypothesis/constants/421cf5837f2d699e new file mode 100644 index 00000000..60a50ecf --- /dev/null +++ b/.hypothesis/constants/421cf5837f2d699e @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/state_store.py +# hypothesis_version: 6.151.9 + +[0.1, '*.json', '*/index.lock', '--cached', '--detach', '--no-verify', '--orphan', '--quiet', '--verify', '-C', '-c', '-m', '-rf', '.', '.egg-state/pipelines', '.git', '.git-ops.lock', '/', '/home/egg/.egg-state', 'EGG_STATE_DIR', 'HEAD', 'add', 'checkout', 'commit', 'diff', 'egg/pipeline-state', 'git', 'gitdir', 'index.lock', 'issue', 'local', 'local-', 'mode', 'pipeline-worktree', 'rev-parse', 'rm', 'w', 'worktree', 'worktrees'] \ No newline at end of file diff --git a/.hypothesis/constants/43e0facb839eb1b2 b/.hypothesis/constants/43e0facb839eb1b2 new file mode 100644 index 00000000..2ba833ef --- /dev/null +++ b/.hypothesis/constants/43e0facb839eb1b2 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/config.py +# hypothesis_version: 6.151.9 + +['\x1b[0;31m', '\x1b[0;32m', '\x1b[0;34m', '\x1b[0m', '\x1b[1;33m', '\x1b[1m', '.aws', '.cache', '.config', '.docker', '.gitconfig', '.gnupg', '.kube', '.netrc', '.ssh', 'Colors', 'Config', 'Dockerfile', 'EGG_CONTAINER_IP', 'EGG_EXTERNAL_NETWORK', 'EGG_EXTERNAL_SUBNET', 'EGG_ISOLATED_NETWORK', 'EGG_ISOLATED_SUBNET', 'GATEWAY_EXTERNAL_IP', 'GATEWAY_IMAGE_NAME', 'GATEWAY_ISOLATED_IP', 'GATEWAY_PORT', 'GATEWAY_PROXY_PORT', 'ORCHESTRATOR_PORT', 'XDG_CACHE_HOME', 'darwin', 'egg', 'gcloud', 'get_local_repos', 'get_platform', 'github-token', 'linux', 'local_repos', 'macos', 'paths', 'repositories.yaml', 'shared', 'unknown'] \ No newline at end of file diff --git a/.hypothesis/constants/45dd2e709899e84f b/.hypothesis/constants/45dd2e709899e84f new file mode 100644 index 00000000..dd72a562 --- /dev/null +++ b/.hypothesis/constants/45dd2e709899e84f @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/llm/claude/config.py +# hypothesis_version: 6.151.9 + +[7200] \ No newline at end of file diff --git a/.hypothesis/constants/49745a28c00ed4a5 b/.hypothesis/constants/49745a28c00ed4a5 new file mode 100644 index 00000000..07cc3ab6 --- /dev/null +++ b/.hypothesis/constants/49745a28c00ed4a5 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/routes/pipelines.py +# hypothesis_version: 6.151.9 + +[-2000, 100, 200, 297, 300, 400, 404, 409, 500, 1000, 1800, 2700, 3600, 9849, 32000, ' files:', ' - id: TASK-1-1', ' name: Phase Name', ' tasks:', ' "checks": [', ' - id: 1', ' --format markdown', ' ]', ' description: |', '#', '# ', '# metadata', '# yaml-tasks', '## Check Failures\n', '## Constraints\n', '## Context\n', '## Contract Tasks\n', '## Current Behavior\n', '## Delta Review\n', '## Fix ALL Failures\n', '## For More Context\n', '## HITL Decisions\n', '## Important\n', '## Instructions\n', '## Open Questions\n', '## Output Format', '## Output Format\n', '## Phase Completion\n', '## Plan Overview\n', '## Review Criteria\n', '## Review Feedback\n', '## Scope\n', '## Task Description\n', '## Verdict Format\n', '## Your Task\n', '### Check Commands\n', '### Fix Rules\n', '### Phase ', '### Push Recovery', '### Results File\n', '### Tasks\n', '### Workflow\n', '### phase-', '### tester findings', '**Cons**:', '**Pros**:', '*Authored-by: egg*', '-', '- You CAN run tests', '- [Advantage 1]\n', '- [Disadvantage 1]\n', '--', '---\n', '--cached', '--count', '--hard', '--left-right', '--max-turns', '--model', '--no-verify', '--output-format', '--print', '--quiet', '--show-current', '--verbose', '--verify', '-C', '-c', '-certs', '-m', '.', '...', '.egg', '.egg-state', '.egg-state/', '.git', '/', '/', '//start', '/api/v1/pipelines', '/app/prompts', '/stream', '1', '1. Run all checks', '100', '172.32.0.3', '172.33.0.3', '200', '50', 'Analysis', 'COMPOSE_PROJECT_NAME', 'Cache-Control', 'ContainerSpawner', 'DELETE', 'EGG_AGENT_ROLE', 'EGG_BRANCH', 'EGG_CERTS_VOLUME', 'EGG_HOST_REPO_MAP', 'EGG_MULTI_AGENT', 'EGG_ORCHESTRATOR_URL', 'EGG_PIPELINE_ID', 'EGG_PIPELINE_MODE', 'EGG_PIPELINE_PHASE', 'EGG_PIPELINE_PROMPT', 'EGG_PLAN_PHASE_ID', 'EGG_REPO', 'EGG_REPO_CHECKS', 'EGG_REPO_PATH', 'EventType', 'Executing phase wave', 'Focus on:', 'GET', 'Gap-finding focus:', 'HEAD', 'HOST_GID', 'HOST_UID', 'In this phase:', 'Integrator failed', 'Missing branch', 'Missing issue_number', 'Missing repo', 'Missing request body', 'PATCH', 'POST', 'Phase advanced', 'Phase failed', 'Phase: implement', 'Pipeline complete', 'Pipeline created', 'Pipeline deleted', 'Pipeline retrieved', 'Pipeline started', 'Pipeline stopped', 'Pipeline updated', 'Plan', 'Plan parse warning', 'Risk Assessment', 'Status retrieved', 'Steps:', 'Tester found gaps', 'Worktree error', 'X-Accel-Buffering', '_', '```', '```\n', '````', '```bash', '```json', '```markdown', '```yaml', 'acceptance_criteria', 'active_only', 'add', 'agent-design', 'agent-outputs', 'already exists', 'analysis', 'approve', 'approved', 'architect', 'ascii', 'autofixer-rules.md', 'branch', 'checker', 'checks', 'claude', 'code', 'coder', 'command', 'commit', 'compact', 'complete', 'complexity_tier', 'complexity_tier: low', 'complexity_tier: mid', 'config', 'content', 'context', 'contract', 'contract-rules.md', 'created_at', 'current_phase', 'data', 'decision.created', 'deficien', 'details', 'diff', 'distributed', 'documenter', 'egg', 'egg-certs', 'error', 'fail', 'failed', 'false', 'files_affected', 'format', 'full', 'full_dag', 'gap', 'gaps_found', 'git', 'high', 'id', 'implement', 'integrator', 'issue', 'issue_number', 'json', 'lgtm', 'local', 'low', 'message', 'mid', 'missing', 'mode', 'name', 'needs_revision', 'network_mode', 'no', 'no-cache', 'options', 'opus', 'output', 'parallel_phases', 'passed', 'pending_decision', 'pending_decisions', 'phase', 'phase.completed', 'phase.started', 'phases:', 'pipeline', 'pipeline.completed', 'pipeline.failed', 'pipeline_id', 'pipelines', 'plan', 'pr', 'pr:', 'private', 'progress', 'prompt', 'prompts', 'public', 'question', 'refine', 'refiner', 'repo', 'request changes', 'request_changes', 'reset', 'rev-list', 'rev-parse', 'review-rules.md', 'reviewer_', 'risk_analyst', 'running', 'shared', 'short_circuit: true', 'status', 'stream-json', 'success', 'summary', 'task_planner', 'tester', 'tester-output.json', 'tests_failed', 'text', 'text/event-stream', 'text/plain', 'true', 'unknown', 'updated_at', 'utf-8', 'x', 'yaml-tasks', 'yes', '{', '{}', '}'] \ No newline at end of file diff --git a/.hypothesis/constants/4c96678797af7a13 b/.hypothesis/constants/4c96678797af7a13 new file mode 100644 index 00000000..68ec5ae2 --- /dev/null +++ b/.hypothesis/constants/4c96678797af7a13 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/health_checks/tier1/__init__.py +# hypothesis_version: 6.151.9 + +['StartupStateCheck'] \ No newline at end of file diff --git a/.hypothesis/constants/4c9d15d0279c51b7 b/.hypothesis/constants/4c9d15d0279c51b7 new file mode 100644 index 00000000..f1d6db3a --- /dev/null +++ b/.hypothesis/constants/4c9d15d0279c51b7 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/repo_parser.py +# hypothesis_version: 6.151.9 + +[200, '-C', '-c', '..', '.git', '/', '//', '://', 'Git command failed', 'gateway.repo-parser', 'get-url', 'git', 'git@', 'github.com', 'http://', 'https://', 'origin', 'remote', 'safe.directory=*', 'shared', '~/.egg-worktrees'] \ No newline at end of file diff --git a/.hypothesis/constants/4cc3f46c3441ee36 b/.hypothesis/constants/4cc3f46c3441ee36 new file mode 100644 index 00000000..04f0bef4 --- /dev/null +++ b/.hypothesis/constants/4cc3f46c3441ee36 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/health_checks/tier2/agent_inspector.py +# hypothesis_version: 6.151.9 + +[500, 100000, 'DEGRADED', 'EGG_NETWORK_MODE', 'FAILED', 'HEALTHY', '```', 'acceptance_criteria', 'agent_executions', 'agent_inspector', 'agent_outputs', 'branch', 'contract_summary', 'current_phase', 'decisions', 'error', 'git_diff_stat', 'git_log', 'graceful_degradation', 'pipeline_id', 'public', 'python3', 'raw_response', 'reasoning', 'shared', 'status', 'trigger', 'unknown', '{'] \ No newline at end of file diff --git a/.hypothesis/constants/4cda8bf85938f7eb b/.hypothesis/constants/4cda8bf85938f7eb new file mode 100644 index 00000000..d7a02c9c --- /dev/null +++ b/.hypothesis/constants/4cda8bf85938f7eb @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/_types.py +# hypothesis_version: 6.151.9 + +[] \ No newline at end of file diff --git a/.hypothesis/constants/4ece4d8313dbf605 b/.hypothesis/constants/4ece4d8313dbf605 new file mode 100644 index 00000000..274c90e4 --- /dev/null +++ b/.hypothesis/constants/4ece4d8313dbf605 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_container/__init__.py +# hypothesis_version: 6.151.9 + +[',readonly', '--add-host', '--dns', '--ip', '--mount', '--name', '--network', '--security-opt', '-e', '.egg-readonly', '.egg-state', '.git', '/dev/null', '/home/egg/repos', '0.0.0.0', 'CONTAINER_ID', 'EGG_PRIVATE_MODE', 'EGG_SESSION_TOKEN', 'EndpointsConfig', 'GATEWAY_URL', 'HTTPS_PROXY', 'HTTP_PROXY', 'IPAMConfig', 'IPv4Address', 'NO_PROXY', 'PRIVATE_MODE', 'RUNTIME_GID', 'RUNTIME_UID', 'ReadOnly', 'Source', 'Target', 'Type', 'bind', 'command', 'contracts', 'dns', 'docker', 'drafts', 'environment', 'extra_hosts', 'false', 'http_proxy', 'https_proxy', 'image', 'implement', 'label=disable', 'labels', 'mounts', 'name', 'network', 'networking_config', 'no_proxy', 'pipelines', 'private', 'reviewer', 'reviews', 'run', 'security_opt', 'tmpfs', 'true', 'volume'] \ No newline at end of file diff --git a/.hypothesis/constants/4ef32942a287beb4 b/.hypothesis/constants/4ef32942a287beb4 new file mode 100644 index 00000000..f845262d --- /dev/null +++ b/.hypothesis/constants/4ef32942a287beb4 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_config/configs/__init__.py +# hypothesis_version: 6.151.9 + +['GatewayConfig', 'GitHubConfig', 'LLMConfig'] \ No newline at end of file diff --git a/.hypothesis/constants/4f07a9c831c6f212 b/.hypothesis/constants/4f07a9c831c6f212 new file mode 100644 index 00000000..aca3cc55 --- /dev/null +++ b/.hypothesis/constants/4f07a9c831c6f212 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/auth.py +# hypothesis_version: 6.151.9 + +['#', '--config-dir', '.venv', '=', 'ANTHROPIC_API_KEY', 'ANTHROPIC_API_KEY=', 'GITHUB_APP_ID', 'PROXY-INJECTED', 'anthropic-api-key', 'api_key', 'bin', 'config.yaml', 'ghp_', 'ghs_', 'github-app-token.py', 'github-app.pem', 'github_pat_', 'host-services', 'oauth', 'python', 'python3', 'secrets.env', 'tools'] \ No newline at end of file diff --git a/.hypothesis/constants/509cdc89a791f856 b/.hypothesis/constants/509cdc89a791f856 new file mode 100644 index 00000000..86c3dbbd --- /dev/null +++ b/.hypothesis/constants/509cdc89a791f856 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/ec.py +# hypothesis_version: 6.151.9 + +[b'\x04', 163, 192, 224, 233, 256, 283, 384, 409, 512, 521, 570, 571, '1.2.840.10045.3.1.1', '1.2.840.10045.3.1.7', '1.3.132.0.1', '1.3.132.0.10', '1.3.132.0.15', '1.3.132.0.16', '1.3.132.0.17', '1.3.132.0.26', '1.3.132.0.27', '1.3.132.0.33', '1.3.132.0.34', '1.3.132.0.35', '1.3.132.0.36', '1.3.132.0.37', '1.3.132.0.38', '1.3.132.0.39', '1.3.36.3.3.2.8.1.1.7', 'ECDH', '_algorithm', '_curve', '_private_value', '_public_numbers', '_x', '_y', 'big', 'brainpoolP256r1', 'brainpoolP384r1', 'brainpoolP512r1', 'data', 'prime192v1', 'prime256v1', 'secp192r1', 'secp224r1', 'secp256k1', 'secp256r1', 'secp384r1', 'secp521r1', 'sect163k1', 'sect163r2', 'sect233k1', 'sect233r1', 'sect283k1', 'sect283r1', 'sect409k1', 'sect409r1', 'sect571k1', 'sect571r1'] \ No newline at end of file diff --git a/.hypothesis/constants/511355bf243f0d52 b/.hypothesis/constants/511355bf243f0d52 new file mode 100644 index 00000000..3ab31904 --- /dev/null +++ b/.hypothesis/constants/511355bf243f0d52 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/health_checks/tier2/__init__.py +# hypothesis_version: 6.151.9 + +['AgentInspectorCheck'] \ No newline at end of file diff --git a/.hypothesis/constants/5394883cdc8934f9 b/.hypothesis/constants/5394883cdc8934f9 new file mode 100644 index 00000000..b8cefc37 --- /dev/null +++ b/.hypothesis/constants/5394883cdc8934f9 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/anthropic_credentials.py +# hypothesis_version: 6.151.9 + +['"', '#', "'", '...', '.config', '=', 'ANTHROPIC_API_KEY', 'Authorization', 'EGG_SECRETS_PATH', 'egg', 'secrets.env', 'shared', 'sk-ant-', 'x-api-key'] \ No newline at end of file diff --git a/.hypothesis/constants/55c5e3e37035e354 b/.hypothesis/constants/55c5e3e37035e354 new file mode 100644 index 00000000..11200ef5 --- /dev/null +++ b/.hypothesis/constants/55c5e3e37035e354 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/private_repo_policy.py +# hypothesis_version: 6.151.9 + +['/', '1', 'Missing session mode', 'PRIVATE_MODE', 'allowed', 'clone', 'decision', 'denied', 'details', 'error', 'event_type', 'false', 'fetch', 'gh_execute', 'global', 'hint', 'issue', 'mode_source', 'operation', 'policy', 'pr_comment', 'pr_create', 'private', 'private_mode', 'private_repo_policy', 'public', 'push', 'reason', 'repo', 'repo_path', 'repository', 'session', 'session_mode', 'shared', 'timestamp', 'true', 'unknown', 'url', 'visibility', 'visibility_unknown', 'yes'] \ No newline at end of file diff --git a/.hypothesis/constants/562993fd4babc3d3 b/.hypothesis/constants/562993fd4babc3d3 new file mode 100644 index 00000000..c9ef4601 --- /dev/null +++ b/.hypothesis/constants/562993fd4babc3d3 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/health_checks/tier1/startup_state.py +# hypothesis_version: 6.151.9 + +['shared', 'stale_agents', 'stale_containers', 'startup_state'] \ No newline at end of file diff --git a/.hypothesis/constants/5740801a1206fde7 b/.hypothesis/constants/5740801a1206fde7 new file mode 100644 index 00000000..f3e8d6e8 --- /dev/null +++ b/.hypothesis/constants/5740801a1206fde7 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/phase_api.py +# hypothesis_version: 6.151.9 + +[200, 400, 403, 404, 500, '.', '/advance', '/api/v1/phase', '/app', '/filter', '/home/egg/repos', '/permissions/', '1', 'EGG_AGENT_ROLE', 'GET', 'Missing command', 'Missing issue_number', 'Missing request body', 'POST', 'X-Egg-Role', 'actor', 'agent', 'agent_role', 'allowed', 'allowed_operations', 'blocked_operations', 'command', 'current_phase', 'data', 'description', 'details', 'exit_requires', 'from_phase', 'gateway.phase', 'hint', 'issue_number', 'message', 'next_phase', 'operation_type', 'pattern', 'phase', 'reason', 'repo_path', 'repos', 'role', 'session', 'shared', 'success', 'to_phase', 'transitioned_by', 'type', 'valid_phases', 'valid_types'] \ No newline at end of file diff --git a/.hypothesis/constants/57ce45cbb8e07966 b/.hypothesis/constants/57ce45cbb8e07966 new file mode 100644 index 00000000..9573135d --- /dev/null +++ b/.hypothesis/constants/57ce45cbb8e07966 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_config/configs/llm.py +# hypothesis_version: 6.151.9 + +[5.0, 400, 401, 1000, 7200, '2023-06-01', '7200', 'ANTHROPIC_API_KEY', 'ANTHROPIC_BASE_URL', 'LLMConfig', 'LLM_MODEL', 'LLM_TIMEOUT', 'POST', '[default]', '[provider default]', 'anthropic-version', 'anthropic_api_key', 'anthropic_base_url', 'api_key', 'application/json', 'claude-haiku-4-5', 'content', 'content-type', 'hi', 'llm', 'max_tokens', 'messages', 'model', 'oauth', 'role', 'timeout', 'user', 'x-api-key'] \ No newline at end of file diff --git a/.hypothesis/constants/58bb84fa70f4b5ca b/.hypothesis/constants/58bb84fa70f4b5ca new file mode 100644 index 00000000..09cda3d1 --- /dev/null +++ b/.hypothesis/constants/58bb84fa70f4b5ca @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/orchestration.py +# hypothesis_version: 6.151.9 + +['+00:00', 'Z'] \ No newline at end of file diff --git a/.hypothesis/constants/59a3d024bea7437c b/.hypothesis/constants/59a3d024bea7437c new file mode 100644 index 00000000..0248361c --- /dev/null +++ b/.hypothesis/constants/59a3d024bea7437c @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_logging/__init__.py +# hypothesis_version: 6.151.9 + +['0.2.0', 'BoundLogger', 'ConsoleFormatter', 'ContextScope', 'EggLogger', 'JsonFormatter', 'LogContext', 'context_from_env', 'get_current_context', 'get_logger', 'set_current_context'] \ No newline at end of file diff --git a/.hypothesis/constants/5b79f41a5acfe503 b/.hypothesis/constants/5b79f41a5acfe503 new file mode 100644 index 00000000..27b000ef --- /dev/null +++ b/.hypothesis/constants/5b79f41a5acfe503 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/health_checks/tier1/container_liveness.py +# hypothesis_version: 6.151.9 + +['container_liveness', 'shared'] \ No newline at end of file diff --git a/.hypothesis/constants/5c7228b42a374c5d b/.hypothesis/constants/5c7228b42a374c5d new file mode 100644 index 00000000..83c2c6dc --- /dev/null +++ b/.hypothesis/constants/5c7228b42a374c5d @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/config_validator.py +# hypothesis_version: 6.151.9 + +['#', '/secrets', '1', 'PRIVATE_MODE', '__main__', 'false', 'launcher-secret', 'true', 'yes'] \ No newline at end of file diff --git a/.hypothesis/constants/600783293363fef8 b/.hypothesis/constants/600783293363fef8 new file mode 100644 index 00000000..6e75d4b2 --- /dev/null +++ b/.hypothesis/constants/600783293363fef8 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_config/base.py +# hypothesis_version: 6.151.9 + +[5.0, 'BaseConfig', 'Config', 'ValidationResult', 'degraded', 'healthy', 'invalid', 'latency_ms', 'message', 'valid'] \ No newline at end of file diff --git a/.hypothesis/constants/622fb2a377a78521 b/.hypothesis/constants/622fb2a377a78521 new file mode 100644 index 00000000..c09ce4a7 --- /dev/null +++ b/.hypothesis/constants/622fb2a377a78521 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/_der.py +# hypothesis_version: 6.151.9 + +[127, 128, 'DERReader', 'big'] \ No newline at end of file diff --git a/.hypothesis/constants/62a4144dc85688ee b/.hypothesis/constants/62a4144dc85688ee new file mode 100644 index 00000000..8ccf9d5d --- /dev/null +++ b/.hypothesis/constants/62a4144dc85688ee @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_config/__init__.py +# hypothesis_version: 6.151.9 + +['BaseConfig', 'Config', 'ConfigRegistry', 'ConfigStatus', 'EGG_CONTAINER_IP', 'EGG_EXTERNAL_NETWORK', 'EGG_EXTERNAL_SUBNET', 'EGG_ISOLATED_NETWORK', 'EGG_ISOLATED_SUBNET', 'GATEWAY_EXTERNAL_IP', 'GATEWAY_IMAGE_NAME', 'GATEWAY_ISOLATED_IP', 'GATEWAY_PORT', 'GATEWAY_PROXY_PORT', 'GatewayConfig', 'GitHubConfig', 'HealthCheckResult', 'LLMConfig', 'ORCHESTRATOR_PORT', 'TEST_GATEWAY_PORT', 'ValidationResult', 'get_local_repos', 'get_registry', 'reset_registry'] \ No newline at end of file diff --git a/.hypothesis/constants/62e69e7297f63486 b/.hypothesis/constants/62e69e7297f63486 new file mode 100644 index 00000000..6c7534c9 --- /dev/null +++ b/.hypothesis/constants/62e69e7297f63486 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/phase_defaults.py +# hypothesis_version: 6.151.9 + +['Auto-fix Check', 'Draft Validation', 'Lint Check', 'Merge Conflict Check', 'Plan YAML Validation', 'Test Check', 'check-fixer', 'check-lint', 'check-merge-conflict', 'check-plan-yaml', 'check-test', 'check_fixer.py', 'lint_check.py', 'plan_yaml_check.py', 'test_check.py'] \ No newline at end of file diff --git a/.hypothesis/constants/633539afd6be13a5 b/.hypothesis/constants/633539afd6be13a5 new file mode 100644 index 00000000..2537f8e5 --- /dev/null +++ b/.hypothesis/constants/633539afd6be13a5 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/self_improvement/collectors/base.py +# hypothesis_version: 6.151.9 + +['cancelled', 'failure', 'gha', 'local', 'running', 'success'] \ No newline at end of file diff --git a/.hypothesis/constants/6a58dd6e8e66bb91 b/.hypothesis/constants/6a58dd6e8e66bb91 new file mode 100644 index 00000000..c46f2dbe --- /dev/null +++ b/.hypothesis/constants/6a58dd6e8e66bb91 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/docker.py +# hypothesis_version: 6.151.9 + +[b'.claude/hooks', b'shared', 0.1, 256, 493, 8192, ' sudo $(which egg)', '*', '--build-arg', '--driver', '--entrypoint', '--format', '--internal', '--label', '--no-cache', '--quiet', '--rm', '--subnet', '-aG', '-f', '-fsSL', '-o', '-t', '.', '.claude', '/opt/claude/VERSION', '/tmp/get-docker.sh', '', 'Claude commands', 'Claude rules', 'Docker build failed', 'Docker is required', 'Dockerfile', 'Installing Docker...', 'Shared modules', 'Solutions:', 'USER', '__pycache__', 'bin', 'bridge', 'build', 'build files changed', 'cat', 'claude-commands', 'claude-rules', 'create', 'curl', 'docker', 'docker-setup.py', 'egg_lib', 'entrypoint.py', 'hooks', 'image', 'image does not exist', 'inspect', 'llm', 'ls', 'macos', 'network', 'org.egg.build-hash', 'permission denied', 'ps', 'pyproject.toml', 'rb', 'rm', 'run', 'sandbox', 'scripts', 'sh', 'shared', 'sudo', 'temp_dir', 'tools', 'usermod', 'version', 'which', 'yes', '{{.ID}}'] \ No newline at end of file diff --git a/.hypothesis/constants/6b092661788ac6b6 b/.hypothesis/constants/6b092661788ac6b6 new file mode 100644 index 00000000..ffc0b637 --- /dev/null +++ b/.hypothesis/constants/6b092661788ac6b6 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/status_reporter.py +# hypothesis_version: 6.151.9 + +[100, '.tmp', '=', 'Agent completed', 'Agent failed', 'Agent started', 'Phase completed', 'Phase failed', 'Phase started', 'Pipeline cancelled', 'Pipeline created', 'Pipeline failed', 'Status handler error', 'Z', 'a', 'compact', 'current_phase', 'dag', 'data', 'event_type', 'message', 'phase', 'pipeline_id', 'progress', 'shared', 'status', 'status_update', 'timestamp', 'unknown', 'visualization'] \ No newline at end of file diff --git a/.hypothesis/constants/6b8d78ec7fe1be7b b/.hypothesis/constants/6b8d78ec7fe1be7b new file mode 100644 index 00000000..89501163 --- /dev/null +++ b/.hypothesis/constants/6b8d78ec7fe1be7b @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/jwt/algorithms.py +# hypothesis_version: 6.151.9 + +[b'ecdsa-sha2-', b'ssh-rsa', '-----BEGIN PRIVATE', '-----BEGIN PUBLIC', 'EC', 'ES256', 'ES256K', 'ES384', 'ES512', 'ES521', 'Ed25519', 'Ed448', 'EdDSA', 'HS256', 'HS384', 'HS512', 'Not an HMAC key', 'Not an RSA key', 'OKP', 'P-256', 'P-384', 'P-521', 'PS256', 'PS384', 'PS512', 'RS256', 'RS384', 'RS512', 'RSA', 'big', 'crv', 'd', 'dp', 'dq', 'e', 'k', 'key_ops', 'kty', 'n', 'none', 'oct', 'oth', 'p', 'private_numbers', 'q', 'qi', 'secp256k1', 'sign', 'ssh-', 'utf-8', 'verify', 'x', 'y'] \ No newline at end of file diff --git a/.hypothesis/constants/6c0c1bae1b8e1a01 b/.hypothesis/constants/6c0c1bae1b8e1a01 new file mode 100644 index 00000000..942d7c1b --- /dev/null +++ b/.hypothesis/constants/6c0c1bae1b8e1a01 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/timing.py +# hypothesis_version: 6.151.9 + +[100, 1000, '-', '=', 'PhaseContext', 'timings', 'total_time', '█'] \ No newline at end of file diff --git a/.hypothesis/constants/6c70e98185d05a7d b/.hypothesis/constants/6c70e98185d05a7d new file mode 100644 index 00000000..6af106b7 --- /dev/null +++ b/.hypothesis/constants/6c70e98185d05a7d @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/roles.py +# hypothesis_version: 6.151.9 + +['*', '.', '.*', 'can_modify', 'cannot_modify', 'current_phase', 'decisions.*', 'decisions.*.resolved', 'human', 'implementer', 'phases.*.status', 'reviewer', 'system'] \ No newline at end of file diff --git a/.hypothesis/constants/6d819355c6a09701 b/.hypothesis/constants/6d819355c6a09701 new file mode 100644 index 00000000..05cb9e45 --- /dev/null +++ b/.hypothesis/constants/6d819355c6a09701 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/utils.py +# hypothesis_version: 6.151.9 + +['_digest_size'] \ No newline at end of file diff --git a/.hypothesis/constants/6da25e32907e3ee9 b/.hypothesis/constants/6da25e32907e3ee9 new file mode 100644 index 00000000..d8cb2321 --- /dev/null +++ b/.hypothesis/constants/6da25e32907e3ee9 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/serialization/base.py +# hypothesis_version: 6.151.9 + +['dh.DHParameters'] \ No newline at end of file diff --git a/.hypothesis/constants/6f1cb59bdf4098e0 b/.hypothesis/constants/6f1cb59bdf4098e0 new file mode 100644 index 00000000..0ffd1d73 --- /dev/null +++ b/.hypothesis/constants/6f1cb59bdf4098e0 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/rate_limiter.py +# hypothesis_version: 6.151.9 + +[100, 3600, 'Rate limit exceeded', 'active_keys', 'allowed', 'any_limited', 'core', 'default', 'event_type', 'failed_lookup', 'gateway.rate-limiter', 'github_api', 'heartbeat', 'is_limited', 'last_updated', 'limit', 'max_requests', 'name', 'rate_limited', 'recent_events', 'remaining', 'reset_at', 'resource', 'resources', 'retry-after', 'retry_after_seconds', 'seconds_until_reset', 'session_heartbeat', 'shared', 'timestamp', 'used', 'window_seconds', 'x-ratelimit-limit', 'x-ratelimit-reset', 'x-ratelimit-used'] \ No newline at end of file diff --git a/.hypothesis/constants/71ba56e7bda2f6b9 b/.hypothesis/constants/71ba56e7bda2f6b9 new file mode 100644 index 00000000..7e971b4e --- /dev/null +++ b/.hypothesis/constants/71ba56e7bda2f6b9 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/padding.py +# hypothesis_version: 6.151.9 + +['EME-OAEP', 'EMSA-PKCS1-v1_5', 'EMSA-PSS', 'MGF1', 'rsa.RSAPrivateKey', 'rsa.RSAPublicKey'] \ No newline at end of file diff --git a/.hypothesis/constants/758c5ab2a582073b b/.hypothesis/constants/758c5ab2a582073b new file mode 100644 index 00000000..ceb590c8 --- /dev/null +++ b/.hypothesis/constants/758c5ab2a582073b @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/self_improvement/config.py +# hypothesis_version: 6.151.9 + +['EGG_BOT_EMAIL', 'EGG_BOT_USERNAME', 'egg', 'egg@localhost', 'metrics', 'on-check-failure.yml', 'on-pull-request.yml'] \ No newline at end of file diff --git a/.hypothesis/constants/75916ad048e366a8 b/.hypothesis/constants/75916ad048e366a8 new file mode 100644 index 00000000..a5a9f68a --- /dev/null +++ b/.hypothesis/constants/75916ad048e366a8 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/entrypoint.py +# hypothesis_version: 6.151.9 + +[0.0, 1.0, 2.0, 100, 128, 200, 384, 401, 403, 404, 420, 448, 500, 1000, 60000, '\n\n---\n\n', ' ✓ Responding', ' ✓ Working', '*.md', '-', '--', '--global', '-C', '-R', '-c', '-g', '-n', '-u', '.', '.bashrc', '.claude', '.claude.json', '.claude.json.', '.config', '.config/claude-code', '.git', '.local', '.tmp', '/', '/etc/hosts', '/home/egg', '/opt/claude-rules', '0', '1', '1000', '127.0.0.1', '172.32.0.', '172.32.0.2', '172.33.0.', '172.33.0.2', '2.0.69', '60', '=', 'ANTHROPIC_API_KEY', 'ANTHROPIC_BASE_URL', 'CLAUDE.md', 'CONTAINER:', 'DISABLE_AUTOUPDATER', 'DISABLE_TELEMETRY', 'DOCKER:', 'Diagnostic summary:', 'EGG_AGENT_ROLE', 'EGG_DEBUG', 'EGG_GATEWAY_TIMEOUT', 'EGG_HOST_LAUNCH_TIME', 'EGG_HOST_TIMING', 'EGG_LAUNCHER_SECRET', 'EGG_ORCHESTRATOR_URL', 'EGG_PIPELINE_ID', 'EGG_PRIVATE_MODE', 'EGG_QUIET', 'EGG_REPO_PATH', 'EGG_TIMING', 'GATEWAY_URL', 'GITHUB_TOKEN', 'GIT_EDITOR', 'Gateway ready!', 'HEAD', 'HOME', 'HOST:', 'HTTPS_PROXY', 'HTTP_PROXY', 'NODE_EXTRA_CA_CERTS', 'PATH', 'PYTHONPATH', 'PYTHONUNBUFFERED', 'PhaseContext', 'README.md', 'REQUESTS_CA_BUNDLE', 'RUNTIME_GID', 'RUNTIME_UID', 'SSL_CERT_FILE', 'USER', '__main__', 'a', 'addr', 'api_key', 'auth_configured', 'autoApproveEdits', 'autoUpdate', 'autoUpdates', 'bin', 'buffer', 'bypassPermissions', 'check_gateway', 'checkout', 'checkpoint.md', 'chown', 'claude', 'claude-code', 'code-standards.md', 'commands', 'complete', 'config', 'connected', 'contract.md', 'created', 'credential.helper', 'default', 'defaultModel', 'distributed', 'editorMode', 'egg', 'egg-external', 'egg-gateway', 'egg-isolated', 'egg@localhost', 'entrypoint_init', 'environment.md', 'error', 'false', 'git', 'github_token_valid', 'gosu', 'groupmod', 'healthy', 'http', 'http_proxy', 'https', 'https_proxy', 'inet', 'inet ', 'installMethod', 'ip', 'local', 'mission.md', 'normal', 'numStartups', 'oauth', 'opus', 'orchestrator.md', 'outputStyle', 'pr-descriptions.md', 'python3', 'remote-single', 'replace', 'repos', 'settings.json', 'setup_agent_rules', 'setup_anthropic_api', 'setup_bashrc', 'setup_claude', 'setup_egg_symlink', 'setup_environment', 'setup_gateway_ca', 'setup_git', 'setup_user', 'setup_worktrees', 'show', 'showResumeCommand', 'status', 'test-workflow.md', 'timeout', 'timings', 'total_time', 'true', 'unchanged', 'unknown', 'updated', 'user.email', 'user.name', 'usermod', 'w', 'wb', '█', '✓ Cleanup complete'] \ No newline at end of file diff --git a/.hypothesis/constants/760953e97136a180 b/.hypothesis/constants/760953e97136a180 new file mode 100644 index 00000000..52930857 --- /dev/null +++ b/.hypothesis/constants/760953e97136a180 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/jwt/api_jwt.py +# hypothesis_version: 6.151.9 + +[',', ':', 'HS256', 'Invalid audience', 'Invalid issuer', 'aud', 'exp', 'iat', 'iss', 'nbf', 'payload', 'require', 'utf-8', 'verify_aud', 'verify_exp', 'verify_iat', 'verify_iss', 'verify_nbf', 'verify_signature'] \ No newline at end of file diff --git a/.hypothesis/constants/78706754819d8764 b/.hypothesis/constants/78706754819d8764 new file mode 100644 index 00000000..5759e8a7 --- /dev/null +++ b/.hypothesis/constants/78706754819d8764 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/audit.py +# hypothesis_version: 6.151.9 + +['%Y-%m-%d %H:%M:%S', 'Audit Log:', 'current_phase'] \ No newline at end of file diff --git a/.hypothesis/constants/7c84dedefd1cbde2 b/.hypothesis/constants/7c84dedefd1cbde2 new file mode 100644 index 00000000..74789dc0 --- /dev/null +++ b/.hypothesis/constants/7c84dedefd1cbde2 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_config/registry.py +# hypothesis_version: 6.151.9 + +[5.0, 'ConfigRegistry', 'all_valid', 'degraded', 'errors', 'healthy', 'results', 'services', 'status', 'timestamp', 'unhealthy', 'warnings'] \ No newline at end of file diff --git a/.hypothesis/constants/7cef6f25b014d2b7 b/.hypothesis/constants/7cef6f25b014d2b7 new file mode 100644 index 00000000..67ff46a8 --- /dev/null +++ b/.hypothesis/constants/7cef6f25b014d2b7 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/agent_recovery.py +# hypothesis_version: 6.151.9 + +[2.0, 300, ', ', '--diff-filter=U', '--name-only', 'Retrying immediately', 'agents_involved', 'attempts', 'backoff', 'can_execute', 'can_retry', 'changed_files', 'closed', 'conflict_type', 'conflicting_files', 'detected_at', 'diff', 'edit', 'errors', 'failed_agents', 'failure_count', 'failure_threshold', 'git', 'half_open', 'immediate', 'last_failure', 'manual', 'merge', 'network', 'open', 'opened_at', 'rate_limit', 'resolution_hint', 'skip', 'state', 'success_count', 'timeout', 'transient'] \ No newline at end of file diff --git a/.hypothesis/constants/7f33c3e342224c87 b/.hypothesis/constants/7f33c3e342224c87 new file mode 100644 index 00000000..490e2269 --- /dev/null +++ b/.hypothesis/constants/7f33c3e342224c87 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/gateway_client.py +# hypothesis_version: 6.151.9 + +[2.0, 9848, '/api/v1/git/fetch', '/api/v1/git/push', '/api/v1/health', '127.0.0.1', '172.32.0.', 'Authorization', 'Content-Type', 'DELETE', 'EGG_LAUNCHER_SECRET', 'GATEWAY_HOST', 'GATEWAY_PORT', 'GET', 'Gateway is healthy', 'PATCH', 'POST', 'Waiting for gateway', 'agent_role', 'application/json', 'base_branch', 'branch', 'claude_code_version', 'complexity_tier', 'container_id', 'container_ip', 'created_at', 'data', 'deleted', 'details', 'egg-gateway', 'errors', 'expires_at', 'force', 'gid', 'healthy', 'issue_number', 'local', 'message', 'mode', 'origin', 'phase', 'pipeline_id', 'pr_number', 'public', 'refspec', 'remote', 'repo_path', 'repos', 'session_token', 'shared', 'status', 'success', 'uid', 'unhealthy', 'unknown', 'unreachable', 'uptime_seconds', 'valid', 'version', 'worktrees'] \ No newline at end of file diff --git a/.hypothesis/constants/816c83f6532ca62b b/.hypothesis/constants/816c83f6532ca62b new file mode 100644 index 00000000..e4942c47 --- /dev/null +++ b/.hypothesis/constants/816c83f6532ca62b @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/phase_transition.py +# hypothesis_version: 6.151.9 + +['action', 'actor', 'current_phase', 'field_path', 'from_phase', 'human', 'implementer', 'new_value', 'old_value', 'reason', 'reviewer', 'role', 'shared', 'timestamp', 'to_phase', 'transition', 'unknown'] \ No newline at end of file diff --git a/.hypothesis/constants/82087d68c872a73d b/.hypothesis/constants/82087d68c872a73d new file mode 100644 index 00000000..ad4eee75 --- /dev/null +++ b/.hypothesis/constants/82087d68c872a73d @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_orchestrator/constants.py +# hypothesis_version: 6.151.9 + +[9849, '/api/v1/health', '172.32.0.3', '172.33.0.3', 'EGG_AGENT_ROLE', 'EGG_ORCHESTRATOR_URL', 'EGG_PIPELINE_ID', 'ENV_AGENT_ROLE', 'ENV_ORCHESTRATOR_URL', 'ENV_PIPELINE_ID', 'ORCHESTRATOR_PORT', 'egg-orchestrator'] \ No newline at end of file diff --git a/.hypothesis/constants/8753fc38897693cb b/.hypothesis/constants/8753fc38897693cb new file mode 100644 index 00000000..f972a1c6 --- /dev/null +++ b/.hypothesis/constants/8753fc38897693cb @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_logging/formatters.py +# hypothesis_version: 6.151.9 + +[100, '\x1b[0m', '\x1b[31m', '\x1b[32m', '\x1b[33m', '\x1b[35m', '\x1b[36m', '%Y-%m-%d %H:%M:%S', '%Y-%m-%dT%H:%M:%S.', '.', 'CRITICAL', 'DEBUG', 'DEFAULT', 'ERROR', 'INFO', 'NO_COLOR', 'WARNING', '_', 'access_level', 'args', 'component', 'context', 'created', 'egg', 'environment', 'exc_info', 'exc_text', 'exception', 'extra', 'file', 'filename', 'funcName', 'function', 'isatty', 'levelname', 'levelno', 'line', 'lineno', 'logger', 'message', 'module', 'msecs', 'msg', 'name', 'pathname', 'pr_number', 'process', 'processName', 'relativeCreated', 'repository', 'service', 'severity', 'sourceLocation', 'spanId', 'span_id', 'stack_info', 'taskName', 'task_id', 'thread', 'threadName', 'timestamp', 'traceFlags', 'traceId', 'trace_flags', 'trace_id'] \ No newline at end of file diff --git a/.hypothesis/constants/88a78023637ebf61 b/.hypothesis/constants/88a78023637ebf61 new file mode 100644 index 00000000..11b0953b --- /dev/null +++ b/.hypothesis/constants/88a78023637ebf61 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/session_manager.py +# hypothesis_version: 6.151.9 + +[384, '.tmp', 'Session deleted', 'Session has expired', 'Session registered', 'agent_role', 'assigned_branch', 'auto_commit_sha', 'checkpoint_repo', 'claude_code_version', 'completed', 'complexity_tier', 'container_id', 'container_ip', 'created_at', 'error', 'expired', 'expires_at', 'issue_number', 'last_branch', 'last_repo_path', 'last_seen', 'local', 'mode', 'phase', 'pipeline_id', 'pr_number', 'private', 'public', 'saved_at', 'session_auth_failed', 'session_deleted', 'session_expired', 'session_ip_mismatch', 'session_registered', 'session_token_hash', 'sessions', 'sessions.json', 'shared', 'valid', 'version', 'w'] \ No newline at end of file diff --git a/.hypothesis/constants/8a1fe30e1d2c71a3 b/.hypothesis/constants/8a1fe30e1d2c71a3 new file mode 100644 index 00000000..f412d71a --- /dev/null +++ b/.hypothesis/constants/8a1fe30e1d2c71a3 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/ciphers/__init__.py +# hypothesis_version: 6.151.9 + +['AEADCipherContext', 'BlockCipherAlgorithm', 'Cipher', 'CipherAlgorithm', 'CipherContext'] \ No newline at end of file diff --git a/.hypothesis/constants/8f6bb4ae4c5a7912 b/.hypothesis/constants/8f6bb4ae4c5a7912 new file mode 100644 index 00000000..257af037 --- /dev/null +++ b/.hypothesis/constants/8f6bb4ae4c5a7912 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/routes/phases.py +# hypothesis_version: 6.151.9 + +[200, 400, 404, 409, '//phase', '/api/v1/pipelines', 'GET', 'HEALTH_CHECK_RUNNER', 'Missing target_phase', 'POST', 'Phase advanced', 'Phase completed', 'Phase failed', 'Phase retrieved', 'Phase started', 'artifacts', 'completed_at', 'current_phase', 'data', 'details', 'error', 'force', 'health_results', 'issue', 'local', 'message', 'mode', 'next_phase', 'orchestrator.phases', 'phase', 'phase_execution', 'phases', 'previous_phase', 'review_cycles', 'shared', 'started_at', 'status', 'success', 'target_phase', 'work_started_at'] \ No newline at end of file diff --git a/.hypothesis/constants/910a59d3760f2706 b/.hypothesis/constants/910a59d3760f2706 new file mode 100644 index 00000000..4dc3e1cc --- /dev/null +++ b/.hypothesis/constants/910a59d3760f2706 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/cli.py +# hypothesis_version: 6.151.9 + +[9849, '%(prog)s 0.1.0', '--branch', '--debug', '--help', '--host', '--issue', '--json', '--port', '--repo', '--repo-path', '--version', '0.0.0.0', 'Available commands', 'Check service health', 'Configuration', 'Create a pipeline', 'Delete a pipeline', 'EGG_HOST_REPO_MAP', 'EGG_REPO_PATH', 'Enable debug mode', 'Gateway operations', 'Get pipeline status', 'HEALTH_CHECK_RUNNER', 'Issue number', 'List pipelines', 'No pipelines found', 'ORCHESTRATOR_DEBUG', 'ORCHESTRATOR_HOST', 'ORCHESTRATOR_PORT', 'Output as JSON', 'Pipeline ID', 'Pipeline operations', 'Repository path', 'Start the API server', '__main__', 'command', 'create', 'delete', 'egg-orchestrator', 'error', 'exc_info', 'func', 'gateway', 'gateway_command', 'health', 'healthy', 'json', 'list', 'localhost', 'not set', 'orchestrator.cli', 'pipeline_id', 'pipelines', 'pipelines_command', 'running', 'serve', 'shared', 'status', 'store_true', 'true', 'uptime_seconds', 'version'] \ No newline at end of file diff --git a/.hypothesis/constants/92379c7302fe5878 b/.hypothesis/constants/92379c7302fe5878 new file mode 100644 index 00000000..07cc3ab6 --- /dev/null +++ b/.hypothesis/constants/92379c7302fe5878 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/routes/pipelines.py +# hypothesis_version: 6.151.9 + +[-2000, 100, 200, 297, 300, 400, 404, 409, 500, 1000, 1800, 2700, 3600, 9849, 32000, ' files:', ' - id: TASK-1-1', ' name: Phase Name', ' tasks:', ' "checks": [', ' - id: 1', ' --format markdown', ' ]', ' description: |', '#', '# ', '# metadata', '# yaml-tasks', '## Check Failures\n', '## Constraints\n', '## Context\n', '## Contract Tasks\n', '## Current Behavior\n', '## Delta Review\n', '## Fix ALL Failures\n', '## For More Context\n', '## HITL Decisions\n', '## Important\n', '## Instructions\n', '## Open Questions\n', '## Output Format', '## Output Format\n', '## Phase Completion\n', '## Plan Overview\n', '## Review Criteria\n', '## Review Feedback\n', '## Scope\n', '## Task Description\n', '## Verdict Format\n', '## Your Task\n', '### Check Commands\n', '### Fix Rules\n', '### Phase ', '### Push Recovery', '### Results File\n', '### Tasks\n', '### Workflow\n', '### phase-', '### tester findings', '**Cons**:', '**Pros**:', '*Authored-by: egg*', '-', '- You CAN run tests', '- [Advantage 1]\n', '- [Disadvantage 1]\n', '--', '---\n', '--cached', '--count', '--hard', '--left-right', '--max-turns', '--model', '--no-verify', '--output-format', '--print', '--quiet', '--show-current', '--verbose', '--verify', '-C', '-c', '-certs', '-m', '.', '...', '.egg', '.egg-state', '.egg-state/', '.git', '/', '/', '//start', '/api/v1/pipelines', '/app/prompts', '/stream', '1', '1. Run all checks', '100', '172.32.0.3', '172.33.0.3', '200', '50', 'Analysis', 'COMPOSE_PROJECT_NAME', 'Cache-Control', 'ContainerSpawner', 'DELETE', 'EGG_AGENT_ROLE', 'EGG_BRANCH', 'EGG_CERTS_VOLUME', 'EGG_HOST_REPO_MAP', 'EGG_MULTI_AGENT', 'EGG_ORCHESTRATOR_URL', 'EGG_PIPELINE_ID', 'EGG_PIPELINE_MODE', 'EGG_PIPELINE_PHASE', 'EGG_PIPELINE_PROMPT', 'EGG_PLAN_PHASE_ID', 'EGG_REPO', 'EGG_REPO_CHECKS', 'EGG_REPO_PATH', 'EventType', 'Executing phase wave', 'Focus on:', 'GET', 'Gap-finding focus:', 'HEAD', 'HOST_GID', 'HOST_UID', 'In this phase:', 'Integrator failed', 'Missing branch', 'Missing issue_number', 'Missing repo', 'Missing request body', 'PATCH', 'POST', 'Phase advanced', 'Phase failed', 'Phase: implement', 'Pipeline complete', 'Pipeline created', 'Pipeline deleted', 'Pipeline retrieved', 'Pipeline started', 'Pipeline stopped', 'Pipeline updated', 'Plan', 'Plan parse warning', 'Risk Assessment', 'Status retrieved', 'Steps:', 'Tester found gaps', 'Worktree error', 'X-Accel-Buffering', '_', '```', '```\n', '````', '```bash', '```json', '```markdown', '```yaml', 'acceptance_criteria', 'active_only', 'add', 'agent-design', 'agent-outputs', 'already exists', 'analysis', 'approve', 'approved', 'architect', 'ascii', 'autofixer-rules.md', 'branch', 'checker', 'checks', 'claude', 'code', 'coder', 'command', 'commit', 'compact', 'complete', 'complexity_tier', 'complexity_tier: low', 'complexity_tier: mid', 'config', 'content', 'context', 'contract', 'contract-rules.md', 'created_at', 'current_phase', 'data', 'decision.created', 'deficien', 'details', 'diff', 'distributed', 'documenter', 'egg', 'egg-certs', 'error', 'fail', 'failed', 'false', 'files_affected', 'format', 'full', 'full_dag', 'gap', 'gaps_found', 'git', 'high', 'id', 'implement', 'integrator', 'issue', 'issue_number', 'json', 'lgtm', 'local', 'low', 'message', 'mid', 'missing', 'mode', 'name', 'needs_revision', 'network_mode', 'no', 'no-cache', 'options', 'opus', 'output', 'parallel_phases', 'passed', 'pending_decision', 'pending_decisions', 'phase', 'phase.completed', 'phase.started', 'phases:', 'pipeline', 'pipeline.completed', 'pipeline.failed', 'pipeline_id', 'pipelines', 'plan', 'pr', 'pr:', 'private', 'progress', 'prompt', 'prompts', 'public', 'question', 'refine', 'refiner', 'repo', 'request changes', 'request_changes', 'reset', 'rev-list', 'rev-parse', 'review-rules.md', 'reviewer_', 'risk_analyst', 'running', 'shared', 'short_circuit: true', 'status', 'stream-json', 'success', 'summary', 'task_planner', 'tester', 'tester-output.json', 'tests_failed', 'text', 'text/event-stream', 'text/plain', 'true', 'unknown', 'updated_at', 'utf-8', 'x', 'yaml-tasks', 'yes', '{', '{}', '}'] \ No newline at end of file diff --git a/.hypothesis/constants/9248d1b4012edaf1 b/.hypothesis/constants/9248d1b4012edaf1 new file mode 100644 index 00000000..aabab3fb --- /dev/null +++ b/.hypothesis/constants/9248d1b4012edaf1 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/startup_reconciliation.py +# hypothesis_version: 6.151.9 + +['shared'] \ No newline at end of file diff --git a/.hypothesis/constants/92767bced458b94e b/.hypothesis/constants/92767bced458b94e new file mode 100644 index 00000000..c89e7f2b --- /dev/null +++ b/.hypothesis/constants/92767bced458b94e @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/jwt/exceptions.py +# hypothesis_version: 6.151.9 + +[] \ No newline at end of file diff --git a/.hypothesis/constants/9381368efb8300ed b/.hypothesis/constants/9381368efb8300ed new file mode 100644 index 00000000..7b3e24bc --- /dev/null +++ b/.hypothesis/constants/9381368efb8300ed @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/__about__.py +# hypothesis_version: 6.151.9 + +['3.4.8', '__author__', '__copyright__', '__email__', '__license__', '__summary__', '__title__', '__uri__', '__version__', 'cryptography'] \ No newline at end of file diff --git a/.hypothesis/constants/93ae11514a1bc1d2 b/.hypothesis/constants/93ae11514a1bc1d2 new file mode 100644 index 00000000..5b320335 --- /dev/null +++ b/.hypothesis/constants/93ae11514a1bc1d2 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/ed448.py +# hypothesis_version: 6.151.9 + +['Ed448PrivateKey', 'Ed448PublicKey'] \ No newline at end of file diff --git a/.hypothesis/constants/93be14cbbd917f67 b/.hypothesis/constants/93be14cbbd917f67 new file mode 100644 index 00000000..b686a300 --- /dev/null +++ b/.hypothesis/constants/93be14cbbd917f67 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/cli.py +# hypothesis_version: 6.151.9 + +['--auth', '--build', '--compose', '--down', '--exec', '--max-parallel', '--max-turns', '--model', '--multi-agent', '--output-format', '--print', '--private', '--public', '--rebuild', '--reset', '--setup', '--time', '--timeout', '--verbose', '-v', '200', '30', 'EGG_AGENT_ROLE', 'EGG_BOT_NAME', 'EGG_COMMIT_SHA', 'EGG_ISSUE_NUMBER', 'EGG_PIPELINE_ID', 'EGG_PR_NUMBER', 'INPUT_MODE', 'INPUT_MODEL', 'INPUT_PROMPT', 'INPUT_TIMEOUT', 'MINUTES', 'api-key', 'auto', 'claude', 'internal', 'multi_agent', 'oauth-token', 'opus', 'private', 'public', 'store_true', 'stream-json', 'yes'] \ No newline at end of file diff --git a/.hypothesis/constants/958656e82d859095 b/.hypothesis/constants/958656e82d859095 new file mode 100644 index 00000000..c190727e --- /dev/null +++ b/.hypothesis/constants/958656e82d859095 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/events.py +# hypothesis_version: 6.151.9 + +[1.0, 5.0, 100, 'Event handler error', 'Event published', 'Z', 'agent.completed', 'agent.failed', 'agent.started', 'agent.timeout', 'container.removed', 'container.spawned', 'container.stopped', 'data', 'decision.created', 'decision.resolved', 'event_type', 'orchestrator', 'orchestrator.events', 'phase.completed', 'phase.failed', 'phase.started', 'pipeline.cancelled', 'pipeline.completed', 'pipeline.created', 'pipeline.failed', 'pipeline.started', 'pipeline_id', 'shared', 'source', 'system.error', 'system.health_check', 'timestamp'] \ No newline at end of file diff --git a/.hypothesis/constants/96a978335752f060 b/.hypothesis/constants/96a978335752f060 new file mode 100644 index 00000000..07de819e --- /dev/null +++ b/.hypothesis/constants/96a978335752f060 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/fork_policy.py +# hypothesis_version: 6.151.9 + +['Fork will be private', 'allowed', 'decision', 'denied', 'details', 'error', 'event_type', 'fork', 'fork_from_public', 'fork_policy', 'fork_to_public', 'gateway.fork-policy', 'hint', 'make_private', 'personal', 'policy', 'private', 'private_mode', 'public', 'reason', 'shared', 'source_repository', 'source_visibility', 'target_organization', 'target_visibility', 'timestamp', 'visibility_unknown'] \ No newline at end of file diff --git a/.hypothesis/constants/96b7f20f5a75f2c5 b/.hypothesis/constants/96b7f20f5a75f2c5 new file mode 100644 index 00000000..f99201fd --- /dev/null +++ b/.hypothesis/constants/96b7f20f5a75f2c5 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/routes/checks.py +# hypothesis_version: 6.151.9 + +[200, 400, 404, 409, 422, 500, '/api/v1/pipelines', 'Devserver started', 'Devserver torn down', 'GET', 'POST', 'checks', 'message', 'shared', 'status', 'success'] \ No newline at end of file diff --git a/.hypothesis/constants/9778d411732b77fa b/.hypothesis/constants/9778d411732b77fa new file mode 100644 index 00000000..f123a251 --- /dev/null +++ b/.hypothesis/constants/9778d411732b77fa @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/.github/scripts/checks/lint_check.py +# hypothesis_version: 6.151.9 + +[-2000, 300, 'Linting failed', 'Linting passed', 'Makefile', 'check-lint', 'command', 'hint', 'lint', 'lint :', 'lint:', 'make', 'make lint', 'stderr', 'stdout'] \ No newline at end of file diff --git a/.hypothesis/constants/97cd9c4555a2cca6 b/.hypothesis/constants/97cd9c4555a2cca6 new file mode 100644 index 00000000..616d3ea6 --- /dev/null +++ b/.hypothesis/constants/97cd9c4555a2cca6 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/self_improvement/collectors/__init__.py +# hypothesis_version: 6.151.9 + +['LogCollector', 'RunLog'] \ No newline at end of file diff --git a/.hypothesis/constants/99bca4ca0a2f7be2 b/.hypothesis/constants/99bca4ca0a2f7be2 new file mode 100644 index 00000000..97077cb4 --- /dev/null +++ b/.hypothesis/constants/99bca4ca0a2f7be2 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_config/config.py +# hypothesis_version: 6.151.9 + +['.config', '__main__', 'egg', 'local_repos', 'paths', 'repositories.yaml'] \ No newline at end of file diff --git a/.hypothesis/constants/9a5f396af21c5e42 b/.hypothesis/constants/9a5f396af21c5e42 new file mode 100644 index 00000000..c10a55c7 --- /dev/null +++ b/.hypothesis/constants/9a5f396af21c5e42 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/checkpoint_handler.py +# hypothesis_version: 6.151.9 + +[120, 3000000, '(same repo)', '--detach', '--force', '--heads', '--no-verify', '--orphan', '-D', '-c', '-m', '-rf', '.', '.git', '/home/egg/repos', 'Bash', 'CHECKPOINT_ENABLED', 'Checkpoint captured', 'Checkpoint stored', 'EGG_ISSUE_NUMBER', 'EGG_PIPELINE_ID', 'EGG_PIPELINE_PHASE', 'EGG_PR_NUMBER', 'FETCH_HEAD', 'add', 'architect', 'branch', 'checker', 'checkout', 'checkpoint_', 'checkpoints', 'coder', 'command', 'commit', 'container_crash', 'content', 'documenter', 'egg/checkpoints/v2', 'fetch', 'get-url', 'git', 'index.json', 'integrator', 'ls-remote', 'messages', 'origin', 'parameters', 'push', 'refiner', 'remote', 'remove', 'result_summary', 'rev-parse', 'reviewer', 'reviewer_code', 'reviewer_contract', 'reviewer_plan', 'reviewer_refine', 'risk_analyst', 'rm', 'shared', 'show', 'task_planner', 'tester', 'true', 'truncated', 'truncation_reason', 'unknown', 'unknown commit', 'worktree'] \ No newline at end of file diff --git a/.hypothesis/constants/9b2b931afce7a42d b/.hypothesis/constants/9b2b931afce7a42d new file mode 100644 index 00000000..3cb9dba9 --- /dev/null +++ b/.hypothesis/constants/9b2b931afce7a42d @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/__init__.py +# hypothesis_version: 6.151.9 + +['1.0.0', 'egg_container', 'name', 'statusbar', 'yaml'] \ No newline at end of file diff --git a/.hypothesis/constants/9c2147cfef7abdd7 b/.hypothesis/constants/9c2147cfef7abdd7 new file mode 100644 index 00000000..c8e925ca --- /dev/null +++ b/.hypothesis/constants/9c2147cfef7abdd7 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/token_refresher.py +# hypothesis_version: 6.151.9 + +['#', '+00:00', '.config', '2022-11-28', '=', 'Accept', 'Authorization', 'EGG_CONFIG_DIR', 'GITHUB_APP_ID', 'REVIEWER_APP_ID', 'RS256', 'Token refresh failed', 'X-GitHub-Api-Version', 'Z', 'egg', 'exp', 'expires_at', 'github-app.pem', 'iat', 'iss', 'none', 'refresher', 'reviewer-app.pem', 'reviewer_refresher', 'secrets.env', 'shared', 'token'] \ No newline at end of file diff --git a/.hypothesis/constants/9e13917238468a8c b/.hypothesis/constants/9e13917238468a8c new file mode 100644 index 00000000..28ff92cc --- /dev/null +++ b/.hypothesis/constants/9e13917238468a8c @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/unified_sse.py +# hypothesis_version: 6.151.9 + +[1000, 5000, 'EGG_REPO_PATH', 'Z', 'branch', 'compact', 'current_phase', 'dag', 'data', 'done', 'error', 'event_type', 'is_terminal', 'pipeline_id', 'pipelines', 'progress', 'reason', 'repo', 'shared', 'snapshot', 'status', 'timeout', 'timestamp', 'update'] \ No newline at end of file diff --git a/.hypothesis/constants/a0b16f041155a749 b/.hypothesis/constants/a0b16f041155a749 new file mode 100644 index 00000000..562203f4 --- /dev/null +++ b/.hypothesis/constants/a0b16f041155a749 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/usage_loader.py +# hypothesis_version: 6.151.9 + +[0.1, 420, '.tmp', '.usage_', 'T', 'by-issue', 'by-pr', 'by-session', 'by-workflow', 'index.json', 'json', 'no-commit', 'true', 'usage', 'w'] \ No newline at end of file diff --git a/.hypothesis/constants/a1a6023fc279930a b/.hypothesis/constants/a1a6023fc279930a new file mode 100644 index 00000000..beec93ed --- /dev/null +++ b/.hypothesis/constants/a1a6023fc279930a @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/context.py +# hypothesis_version: 6.151.9 + +['1', 'CONFIG_DIR', 'EGG_', 'EPHEMERAL', 'EXTERNAL_NETWORK', 'EXTERNAL_SUBNET', 'GATEWAY_EXTERNAL_IP', 'GATEWAY_IMAGE', 'GATEWAY_ISOLATED_IP', 'GATEWAY_PORT', 'GATEWAY_PROXY_PORT', 'ISOLATED_NETWORK', 'ISOLATED_SUBNET', 'LAUNCHER_SECRET', 'ORCHESTRATOR_IMAGE', 'ORCHESTRATOR_PORT', 'SANDBOX_IMAGE', 'SKIP_BUILD', 'auto', 'true', 'yes'] \ No newline at end of file diff --git a/.hypothesis/constants/a4136aca6b851514 b/.hypothesis/constants/a4136aca6b851514 new file mode 100644 index 00000000..b8b8cab0 --- /dev/null +++ b/.hypothesis/constants/a4136aca6b851514 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/dependency_graph.py +# hypothesis_version: 6.151.9 + +[' [parallel]', ', ', 'dependencies'] \ No newline at end of file diff --git a/.hypothesis/constants/a60840b027177571 b/.hypothesis/constants/a60840b027177571 new file mode 100644 index 00000000..9ea6fa95 --- /dev/null +++ b/.hypothesis/constants/a60840b027177571 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_logging/context.py +# hypothesis_version: 6.151.9 + +['01', 'EGG_PR_NUMBER', 'EGG_REPOSITORY', 'EGG_SPAN_ID', 'EGG_TASK_ID', 'EGG_TRACE_ID', 'EGG_WORKFLOW_ID', 'EGG_WORKFLOW_TYPE', 'LogContext', 'LogContext | None', 'OTEL_SPAN_ID', 'OTEL_TRACE_ID', 'egg_log_context', 'pr_number', 'repository', 'spanId', 'task_id', 'traceFlags', 'traceId', 'workflow_id', 'workflow_type'] \ No newline at end of file diff --git a/.hypothesis/constants/a8bb40c47f8e3f9c b/.hypothesis/constants/a8bb40c47f8e3f9c new file mode 100644 index 00000000..db4ac4f3 --- /dev/null +++ b/.hypothesis/constants/a8bb40c47f8e3f9c @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/setup_flow.py +# hypothesis_version: 6.151.9 + +[384, ' 2. API Key', '#', '# Other', '***', '-v', '.egg-shared-certs', '.git', '.pem', '/', '2', '=', '=== Egg Setup ===', 'ANTHROPIC_API_KEY', 'API key saved', 'API key: ', 'Bot name: ', 'Directories created', 'Docker build failed', 'Egg setup complete!', 'GATEWAY_BOT_NAME', 'GITHUB_APP_ID', 'GITHUB_TOKEN', 'GITHUB_USER_TOKEN', 'GitHub App', 'GitHub App ID: ', 'GitHub PAT saved', 'GitHub Tokens', 'GitHub username: ', 'Installation ID: ', 'KEEP', 'Next steps:', 'No API key provided.', 'OAuth token saved', 'OAuth token: ', 'OPERATING MODEL:', 'Setup cancelled', 'WHAT EGG DOES:', 'YOUR_USERNAME', 'api_key', 'apt', 'bot_username', 'checks', 'command', 'config', 'config.yaml', 'default_reviewer', 'dnf', 'docker_setup', 'extra_packages', 'ghp_', 'github-app.pem', 'github_pat_', 'github_sync', 'github_username', 'launcher-secret', 'local_repos', 'name', 'oauth', 'packages', 'paths', 'readable_repos', 'repo_settings', 'repositories.yaml', 'secrets.env', 'sk-ant-', 'sk-ant-oat', 'sync_all_prs', 'user_mode', 'w', 'writable_repos', 'yes'] \ No newline at end of file diff --git a/.hypothesis/constants/a96648b2a575bed7 b/.hypothesis/constants/a96648b2a575bed7 new file mode 100644 index 00000000..6ca39d0e --- /dev/null +++ b/.hypothesis/constants/a96648b2a575bed7 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/post_agent_commit.py +# hypothesis_version: 6.151.9 + +[200, ' -> ', '--', '--abbrev-ref', '--author', '--no-verify', '--porcelain', '-c', '-m', '/usr/bin/git', 'Authorization', 'Auto-commit failed', 'Content-Type', 'HEAD', 'POST', 'add', 'application/json', 'checkout', 'commit', 'egg ', 'origin', 'post_agent_auto_push', 'refspec', 'remote', 'repo_path', 'rev-parse', 'safe.directory=*', 'shared', 'status'] \ No newline at end of file diff --git a/.hypothesis/constants/ab2f93aeba5066fd b/.hypothesis/constants/ab2f93aeba5066fd new file mode 100644 index 00000000..64e345ba --- /dev/null +++ b/.hypothesis/constants/ab2f93aeba5066fd @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/.github/scripts/checks/merge_conflict_check.py +# hypothesis_version: 6.151.9 + +['<<<<<<<', 'check-merge-conflict', 'files', 'git', 'ignore', 'ls-files', 'stderr'] \ No newline at end of file diff --git a/.hypothesis/constants/ae2847ca771c9802 b/.hypothesis/constants/ae2847ca771c9802 new file mode 100644 index 00000000..eb5e06df --- /dev/null +++ b/.hypothesis/constants/ae2847ca771c9802 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/gateway.py +# hypothesis_version: 6.151.9 + +[b'scripts', b'shared/pyproject.toml', 0.5, 200, 384, 401, 403, 493, 8192, '"', '#', "'", '*', '*.py', ',', '--format', '--ip', '--label', '--name', '--network', '--security-opt', '-d', '-e', '-f', '-p', '-t', '-v', '.', '.egg-local-objects', '.egg-shared-certs', '.egg-state', '.egg-worktrees', '.git', '.git-main', '/api/v1/sessions', '/home/egg', '5', '', '=', 'Authorization', 'Content-Type', 'DELETE', 'Dockerfile', 'GATEWAY_BOT_NAME', 'GET', 'GITHUB_USER_TOKEN', 'POST', 'Unknown error', 'User-Agent', 'agent_role', 'allowed_domains.txt', 'application/json', 'base_branch', 'build', 'connect', 'container', 'container_id', 'container_ip', 'data', 'deleted', 'docker', 'egg-gateway-check', 'egg_config', 'egg_logging', 'entrypoint.sh', 'error', 'errors', 'filtered_repos', 'force', 'gateway', 'gid', 'git_email', 'git_name', 'gitdir:', 'http', 'https', 'image', 'image does not exist', 'inspect', 'issue_number', 'label=disable', 'launcher-secret', 'local_repos', 'localhost', 'mode', 'network', 'paths', 'phase', 'pipeline_id', 'pr_number', 'pyproject.toml', 'rb', 'repos', 'repositories.yaml', 'rm', 'run', 'scripts', 'secrets.env', 'session_token', 'sessions', 'shared', 'squid-allow-all.conf', 'squid.conf', 'stop', 'success', 'test', 'tests', 'true', 'uid', 'user_mode', 'utf-8', 'visibilities', 'worktrees', '{{.State.Running}}'] \ No newline at end of file diff --git a/.hypothesis/constants/aee4ac2202df1931 b/.hypothesis/constants/aee4ac2202df1931 new file mode 100644 index 00000000..1ff7524c --- /dev/null +++ b/.hypothesis/constants/aee4ac2202df1931 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/checkpoints.py +# hypothesis_version: 6.151.9 + +['2.0', 'CheckpointSummaryV2', 'CheckpointV2', 'Git branch', 'Git commit SHA', 'GitHub PR number', 'GitHub issue number', 'Message content', 'Message role', 'Number of tool calls', 'Pipeline phase', 'Pipeline run ID', 'Schema version', 'Session metadata', 'Session/container ID', 'Total input tokens', 'Total output tokens', 'Total tokens used', 'Type of operation', 'When session ended', 'When session started', '^[0-9]+\\.[0-9]+$', '^[a-f0-9]{7,40}$', 'architect', 'assistant', 'before', 'checker', 'coder', 'commit', 'commit_sha', 'completed', 'create', 'delete', 'documenter', 'edit', 'expired', 'failed', 'glob', 'grep', 'implement', 'integrator', 'pipeline_phase', 'plan', 'pr', 'push_sha', 'read', 'refine', 'refiner', 'reviewer', 'risk_analyst', 'session_end', 'system', 'task_planner', 'tester', 'tool_result', 'unknown', 'user', 'write'] \ No newline at end of file diff --git a/.hypothesis/constants/af4ad0a4f088e1ed b/.hypothesis/constants/af4ad0a4f088e1ed new file mode 100644 index 00000000..14a8f3a1 --- /dev/null +++ b/.hypothesis/constants/af4ad0a4f088e1ed @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/proxy_monitor.py +# hypothesis_version: 6.151.9 + +[0.1, 400, 403, '\nStopped. Summary:', '0', '1', 'PROXY_LOG_VERBOSE', 'Z', '__main__', 'action', 'alert_type', 'allowed', 'allowed_requests', 'block_rate', 'blocked', 'blocked_requests', 'client_ip', 'destination', 'event_type', 'high_block_rate', 'message', 'method', 'reason', 'security_alert', 'source', 'squid_proxy', 'status', 'timestamp', 'unknown', 'url'] \ No newline at end of file diff --git a/.hypothesis/constants/afa6b25c640dfe11 b/.hypothesis/constants/afa6b25c640dfe11 new file mode 100644 index 00000000..3f17cd73 --- /dev/null +++ b/.hypothesis/constants/afa6b25c640dfe11 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/handoffs.py +# hypothesis_version: 6.151.9 + +['AgentOutput', 'HandoffData', 'by_role', 'commit', 'commits', 'data', 'error', 'failed', 'files_changed', 'handoff_data', 'logs', 'metrics', 'role', 'shared', 'source_role', 'status', 'successful', 'timestamp', 'total'] \ No newline at end of file diff --git a/.hypothesis/constants/b217da0623d6567c b/.hypothesis/constants/b217da0623d6567c new file mode 100644 index 00000000..f48ca9ba --- /dev/null +++ b/.hypothesis/constants/b217da0623d6567c @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/jwt/api_jws.py +# hypothesis_version: 6.151.9 + +[b'.', ',', ':', 'HS256', 'JWT', 'Not enough segments', 'alg', 'header', 'kid', 'none', 'payload', 'signature', 'typ', 'utf-8', 'verify_signature'] \ No newline at end of file diff --git a/.hypothesis/constants/b348d24346d06451 b/.hypothesis/constants/b348d24346d06451 new file mode 100644 index 00000000..1e5bb436 --- /dev/null +++ b/.hypothesis/constants/b348d24346d06451 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/.github/scripts/checks/draft_validation_check.py +# hypothesis_version: 6.151.9 + +[100, '.egg-state', 'Draft file is valid', '^#\\s+', 'drafts', 'expected_path', 'length', 'missing', 'path'] \ No newline at end of file diff --git a/.hypothesis/constants/b386c19c164f1cc2 b/.hypothesis/constants/b386c19c164f1cc2 new file mode 100644 index 00000000..97cca378 --- /dev/null +++ b/.hypothesis/constants/b386c19c164f1cc2 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_orchestrator/__init__.py +# hypothesis_version: 6.151.9 + +['0.1.0', 'CompletionData', 'DeploymentMode', 'ErrorData', 'HeartbeatData', 'ORCHESTRATOR_PORT', 'OrchestratorClient', 'OrchestratorError', 'OrchestratorHealth', 'ProgressData', 'SignalPayload', 'SignalResponse', 'SignalType', 'get_orchestrator_url', 'is_orchestrator_mode'] \ No newline at end of file diff --git a/.hypothesis/constants/b5a044487f4ce8b6 b/.hypothesis/constants/b5a044487f4ce8b6 new file mode 100644 index 00000000..e0ea1601 --- /dev/null +++ b/.hypothesis/constants/b5a044487f4ce8b6 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/container_logging.py +# hypothesis_version: 6.151.9 + +[-1000, 100, 1000, 1024, '\n=== STDERR ===\n', '%Y%m%d-%H%M%S', '(task-\\d{8}-\\d{6})', '--label', '--log-driver', '--log-opt', '.cache', '=', '=== STDOUT ===\n', 'a+', 'container-logs', 'container_id', 'docker', 'egg', 'entries', 'json-file', 'log-index.json', 'log_file', 'logs', 'max-file=5', 'max-size=10m', 'task_id', 'task_to_container', 'thread_to_task', 'thread_ts', 'timestamp', 'w'] \ No newline at end of file diff --git a/.hypothesis/constants/b68d77d253ca9c8a b/.hypothesis/constants/b68d77d253ca9c8a new file mode 100644 index 00000000..12b19df1 --- /dev/null +++ b/.hypothesis/constants/b68d77d253ca9c8a @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/validator.py +# hypothesis_version: 6.151.9 + +['.', 'Mutation allowed'] \ No newline at end of file diff --git a/.hypothesis/constants/b6da3cb5ac559c77 b/.hypothesis/constants/b6da3cb5ac559c77 new file mode 100644 index 00000000..94d60ff1 --- /dev/null +++ b/.hypothesis/constants/b6da3cb5ac559c77 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/sandbox_template.py +# hypothesis_version: 6.151.9 + +[2.0, 1000000000.0, 3129, 9848, 9849, '-', '/home/egg/repos', '0', '1', '172.32.0.2', '172.32.0.3', '4g', 'EGG_AGENT_ROLE', 'EGG_GATEWAY_URL', 'EGG_ISSUE_NUMBER', 'EGG_ORCHESTRATOR_URL', 'EGG_PIPELINE_ID', 'EGG_PRIVATE_MODE', 'EGG_PROMPT_FILE', 'EGG_SESSION_TOKEN', 'GATEWAY_URL', 'HTTPS_PROXY', 'HTTP_PROXY', 'NO_PROXY', 'ORCHESTRATOR_URL', 'bind', 'detach', 'egg-isolated', 'egg-orchestrator', 'egg.agent.role', 'egg.issue.number', 'egg.orchestrator', 'egg.pipeline.id', 'egg:latest', 'environment', 'host', 'http_proxy', 'https_proxy', 'image', 'labels', 'mem_limit', 'mode', 'name', 'nano_cpus', 'network', 'network_mode', 'no_proxy', 'rw', 'shared', 'true', 'volumes'] \ No newline at end of file diff --git a/.hypothesis/constants/b9f25bf6c627771f b/.hypothesis/constants/b9f25bf6c627771f new file mode 100644 index 00000000..930e1929 --- /dev/null +++ b/.hypothesis/constants/b9f25bf6c627771f @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/__init__.py +# hypothesis_version: 6.151.9 + +['0.1.0'] \ No newline at end of file diff --git a/.hypothesis/constants/ba53e1ba85a588bb b/.hypothesis/constants/ba53e1ba85a588bb new file mode 100644 index 00000000..1ee0bd02 --- /dev/null +++ b/.hypothesis/constants/ba53e1ba85a588bb @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/docker-setup.py +# hypothesis_version: 6.151.9 + +[' extra_packages:', ' docker_setup:', '--skip-unavailable', '-p', '-qq', '-y', '.config', '/bin/bash', '/etc/debian_version', '/etc/fedora-release', '/etc/lsb-release', '/etc/sysctl.conf', '=', 'EGG_REPO_CONFIG', 'Setup complete!', '__main__', 'a', 'apt', 'apt-get', 'build-essential', 'config', 'curl', 'dnf', 'docker_setup', 'egg', 'extra_packages', 'fedora', 'gcc', 'gcc-c++', 'git', 'htop', 'install', 'jq', 'lsof', 'make', 'packages', 'pkg-config', 'pkgconf', 'repos', 'repositories.yaml', 'sysctl', 'tree', 'ubuntu', 'unknown', 'unzip', 'update', 'vim', 'wget', 'yes'] \ No newline at end of file diff --git a/.hypothesis/constants/bd83433c7b861b64 b/.hypothesis/constants/bd83433c7b861b64 new file mode 100644 index 00000000..1489cc57 --- /dev/null +++ b/.hypothesis/constants/bd83433c7b861b64 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/error_messages.py +# hypothesis_version: 6.151.9 + +['1', 'PolicyViolation', 'VERBOSE_ERRORS', 'clone_public', 'default', 'error', 'fetch_public', 'fork', 'fork_blocked', 'fork_from_public', 'fork_to_public', 'gh_execute_public', 'hint', 'hints', 'issue_public', 'operation', 'policy', 'pr_comment_public', 'pr_create_public', 'private_mode', 'public', 'public_repo', 'push_public', 'reason', 'repo', 'repository', 'success', 'true', 'unknown', 'visibility', 'visibility_unknown', 'yes'] \ No newline at end of file diff --git a/.hypothesis/constants/bfceb5beccb60d21 b/.hypothesis/constants/bfceb5beccb60d21 new file mode 100644 index 00000000..5c3bb589 --- /dev/null +++ b/.hypothesis/constants/bfceb5beccb60d21 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/compose.py +# hypothesis_version: 6.151.9 + +[b'config/repo_config.py', b'docker-compose.yml', b'gateway', b'orchestrator', b'shared', 0.0, 200, 384, ' volumes:', ' gateway:', ' orchestrator:', ' "\'#$`\n\\', '"', '--build', '--format', '--remove-orphans', '-d', '-f', '.compose-build-hash', '.env', '172.32.0.2', '=', 'BOT_GITHUB_TOKEN', 'EGG_COMPOSE_FILE', 'EGG_CONFIG_DIR', 'EGG_HOST_REPO_MAP', 'EGG_LAUNCHER_SECRET', 'EGG_REPO_CHECKS', 'EGG_USER_GIT_EMAIL', 'EGG_USER_GIT_NAME', 'Egg stack stopped', 'GATEWAY_BOT_NAME', 'GITHUB_USER_TOKEN', 'Gateway', 'Gateway is healthy', 'HOST_GID', 'HOST_HOME', 'HOST_UID', 'Orchestrator', '[\\x00-\\x1f\\x7f]', '\\', '\\"', '\\\\', 'checks', 'compose', 'config', 'disconnect', 'docker', 'docker-compose.yml', 'down', 'egg', 'gateway', 'inspect', 'network', 'orchestrator', 'repo_config.py', 'repo_settings', 'repositories.yaml', 'rm', 'services:', 'shared', 'up', 'version', '{}'] \ No newline at end of file diff --git a/.hypothesis/constants/bff98697456ca806 b/.hypothesis/constants/bff98697456ca806 new file mode 100644 index 00000000..b08de7b6 --- /dev/null +++ b/.hypothesis/constants/bff98697456ca806 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/_cipheralgorithm.py +# hypothesis_version: 6.151.9 + +[] \ No newline at end of file diff --git a/.hypothesis/constants/c00c73d5fb997fc6 b/.hypothesis/constants/c00c73d5fb997fc6 new file mode 100644 index 00000000..f29d8626 --- /dev/null +++ b/.hypothesis/constants/c00c73d5fb997fc6 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/__init__.py +# hypothesis_version: 6.151.9 + +[] \ No newline at end of file diff --git a/.hypothesis/constants/c1e7a48d1bb21be6 b/.hypothesis/constants/c1e7a48d1bb21be6 new file mode 100644 index 00000000..eefc5ca2 --- /dev/null +++ b/.hypothesis/constants/c1e7a48d1bb21be6 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_logging/logger.py +# hypothesis_version: 6.151.9 + +[1024, '/.dockerenv', 'BoundLogger', 'EGG_CONTAINER', 'K_SERVICE', 'container', 'gcp', 'host', 'pr_number', 'repository', 'root', 'span_id', 'task_id', 'trace_flags', 'trace_id'] \ No newline at end of file diff --git a/.hypothesis/constants/c27b4e4056f739ca b/.hypothesis/constants/c27b4e4056f739ca new file mode 100644 index 00000000..23887762 --- /dev/null +++ b/.hypothesis/constants/c27b4e4056f739ca @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_config/cli.py +# hypothesis_version: 6.151.9 + +[5.0, '--json', '--service', '--timeout', '--verbose', '-j', '-s', '-t', '-v', 'Available commands', 'Run health checks', 'Show warnings', 'ValidationResult', '[?]', '[FAIL]', '[OK]', '[WARN]', '__main__', 'command', 'degraded', 'egg-config', 'health', 'healthy', 'show', 'store_true', 'timeout', 'unhealthy', 'validate', 'watch'] \ No newline at end of file diff --git a/.hypothesis/constants/c358d5cd358011ce b/.hypothesis/constants/c358d5cd358011ce new file mode 100644 index 00000000..bc53a73b --- /dev/null +++ b/.hypothesis/constants/c358d5cd358011ce @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/gateway.py +# hypothesis_version: 6.151.9 + +[0.0, 10.0, 120.0, 100, 120, 200, 256, 400, 401, 403, 404, 429, 500, 502, 503, 504, 1000, 1024, 9848, '(none)', ',', '--all', '--bare', '--base', '--body', '--cached', '--debug', '--force', '--head', '--host', '--name-only', '--no-verify', '--port', '--repo', '--show-current', '--title', '-c', '.egg-state/', '/', '/api/v1/checkpoints', '/api/v1/gh/execute', '/api/v1/gh/pr/close', '/api/v1/gh/pr/create', '/api/v1/gh/pr/edit', '/api/v1/git/execute', '/api/v1/git/fetch', '/api/v1/git/push', '/api/v1/health', '/api/v1/sessions', '/home/egg', '/home/egg/repos/', '/v1/messages', '0', '0.0.0.0', '1', 'Authorization', 'Bearer ', 'Command executed', 'Comment added', 'DELETE', 'EGG_LAUNCHER_SECRET', 'EGG_ORCHESTRATOR_URL', 'EGG_REPO_PATH', 'Enable debug mode', 'F', 'GATEWAY_HOST', 'GET', 'GIT_EDITOR', 'HEAD', 'HOST_HOME', 'Heartbeat recorded', 'Invalid session', 'Missing args', 'Missing body', 'Missing container_id', 'Missing container_ip', 'Missing head branch', 'Missing operation', 'Missing phase', 'Missing pr_number', 'Missing repo', 'Missing repo_path', 'Missing repos list', 'Missing request body', 'Missing title', 'No checkpoints found', 'No cost data', 'OK', 'PATCH', 'POST', 'PR closed', 'PR created', 'PR edited', 'Phase updated', 'Push successful', 'Push timed out', 'Session created', 'Session deleted', 'Session not found', 'Session updated', 'Sessions listed', 'Unknown error', 'User mode config', 'User mode push', 'Visibility queried', 'WebFetch', 'WebSearch', 'Worktrees created', 'Worktrees deleted', 'Worktrees listed', '[DONE]', '__main__', '_delta', 'active_sessions', 'agent', 'agent_role', 'agent_type', 'am', 'api', 'api_error', 'api_path', 'api_path_blocked', 'api_path_missing', 'args', 'assigned_branch', 'auth', 'auth_configured', 'auth_mode', 'authentication_error', 'authorization', 'base', 'base_branch', 'blocked_command', 'blocked_files', 'blocked_reason', 'body', 'bot', 'branch', 'breakdown', 'checkpoint', 'checkpoint_branch', 'checkpoint_count', 'checkpoint_repo', 'checkpoints', 'ckpt-', 'claude_code_version', 'client_ip', 'close', 'command', 'command_args', 'comment', 'commit', 'complexity_tier', 'config', 'configured', 'connection', 'container_id', 'container_ip', 'content', 'content-encoding', 'content-length', 'content-type', 'content_block', 'content_block_delta', 'content_block_start', 'cost', 'cost_usd', 'count', 'create', 'cwd', 'data', 'data: ', 'degraded', 'deleted', 'delta', 'diff', 'edit', 'egg/checkpoints/v2', 'error', 'errors', 'event_type', 'exempt_type', 'expires_at', 'false', 'fetch', 'fetch_blocked', 'filtered_repos', 'force', 'gateway', 'gateway_operation', 'gh_execute', 'gh_pr_close', 'gh_pr_comment', 'gh_pr_create', 'gh_pr_edit', 'gid', 'git', 'git_args', 'git_execute_blocked', 'git_execute_failed', 'git_execute_success', 'git_fetch', 'git_push', 'github_token_valid', 'head', 'healthy', 'hint', 'host', 'http.extraheader=', 'id', 'implement', 'index', 'init', 'input', 'input_json_delta', 'input_parse_error', 'input_tokens', 'internal', 'issue', 'issue_number', 'json', 'last_repo_path', 'limit', 'local', 'ls-remote', 'main', 'merge', 'message', 'message_delta', 'message_start', 'method', 'mode', 'model', 'name', 'not a git repository', 'objects', 'operation', 'orchestrator', 'origin', 'output', 'output_tokens', 'partial_input', 'partial_json', 'phase', 'pipeline', 'pipeline_id', 'pipeline_phase', 'plan', 'pr', 'pr checks', 'pr close', 'pr comment', 'pr create', 'pr diff', 'pr edit', 'pr list', 'pr status', 'pr view', 'pr_close', 'pr_close_denied', 'pr_closed', 'pr_comment', 'pr_comment_added', 'pr_comment_denied', 'pr_create', 'pr_create_blocked', 'pr_create_failed', 'pr_created', 'pr_edit', 'pr_edit_denied', 'pr_edited', 'pr_number', 'private', 'public', 'push', 'push_blocked', 'push_denied', 'push_failed', 'push_success', 'raw_partial_input', 'reachable', 'reason', 'refine', 'refspec', 'remote', 'replace', 'repo', 'repo_path', 'repos', 'restriction_message', 'returncode', 'rev-parse', 'review', 'reviewer', 'role', 'service', 'session', 'session_create', 'session_created', 'session_delete', 'session_deleted', 'session_id', 'session_mode', 'session_phase', 'session_status', 'session_token', 'session_update', 'session_update_phase', 'sessions', 'shared', 'source_ip', 'source_repo', 'status', 'status_code', 'stderr', 'stdout', 'stop_reason', 'store_true', 'stream', 'success', 'text', 'text/event-stream', 'text_delta', 'threading', 'timestamp', 'title', 'tool_use', 'tools', 'total_cost_usd', 'total_input_tokens', 'total_output_tokens', 'transfer-encoding', 'trigger', 'trigger_type', 'true', 'type', 'uid', 'unknown', 'url', 'usage', 'user', 'utf-8', 'valid', 'visibilities', 'visibility', 'warnings', 'web_fetch', 'web_search', 'worktree_count', 'worktree_create', 'worktree_delete', 'worktree_errors', 'worktrees', 'worktrees_created', 'worktrees_deleted', 'x-api-key', 'yes'] \ No newline at end of file diff --git a/.hypothesis/constants/c46f66753ea9ec79 b/.hypothesis/constants/c46f66753ea9ec79 new file mode 100644 index 00000000..2642345f --- /dev/null +++ b/.hypothesis/constants/c46f66753ea9ec79 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/dsa.py +# hypothesis_version: 6.151.9 + +[160, 224, 256, 1024, 2048, 3072, 4096, 'DSAParameterNumbers', 'DSAPrivateKey', 'DSAPrivateNumbers', 'DSAPublicKey', 'DSAPublicNumbers', '_g', '_p', '_parameter_numbers', '_public_numbers', '_q', '_x', '_y'] \ No newline at end of file diff --git a/.hypothesis/constants/c6884a9944304355 b/.hypothesis/constants/c6884a9944304355 new file mode 100644 index 00000000..b015a37d --- /dev/null +++ b/.hypothesis/constants/c6884a9944304355 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/github_client.py +# hypothesis_version: 6.151.9 + +[200, 500, '*', '-', '--cache', '--field', '--head', '--header', '--hostname', '--include', '--input', '--jq', '--json', '--method', '--method=', '--paginate', '--raw-field', '--repo', '--silent', '--slurp', '--state', '--template', '--verbose', '-F', '-H', '-R', '-X', '-X=', '-f', '-i', '-p', '-q', '-t', '.login', '/', '/user', '/usr/bin/gh', '/usr/bin:/bin', '3', '404', '=', '?', 'Executing gh command', 'GET', 'GH_TOKEN', 'GITHUB_USER_TOKEN', 'GIT_CONFIG_COUNT', 'GIT_CONFIG_KEY_0', 'GIT_CONFIG_KEY_1', 'GIT_CONFIG_KEY_2', 'GIT_CONFIG_VALUE_0', 'GIT_CONFIG_VALUE_1', 'GIT_CONFIG_VALUE_2', 'Not Found', 'PATCH', 'PATH', 'POST', '^repos/[^/]+/[^/]+$', '^user$', '^users/[^/]+$', 'api', 'archive', 'auth login', 'auth logout', 'auth status', 'bot', 'clone', 'config', 'config get', 'config set', 'credits', 'delete', 'deploy-key', 'edit', 'fork', 'gh command failed', 'gh command timed out', 'git@github.com:', 'github_user', 'issue list', 'issue status', 'issue view', 'list', 'open', 'origin', 'pr', 'pr checks', 'pr diff', 'pr list', 'pr merge', 'pr status', 'pr view', 'rate limit', 'release delete', 'release list', 'release view', 'rename', 'repo', 'repo archive', 'repo delete', 'repo list', 'repo view', 'repos/', 'returncode', 'reviewer', 'safe.directory', 'search', 'set-default', 'shared', 'stderr', 'stdout', 'success', 'sync', 'unknown error', 'user', 'view', '{', '{owner}', '{repo}'] \ No newline at end of file diff --git a/.hypothesis/constants/c84a43811198b0bf b/.hypothesis/constants/c84a43811198b0bf new file mode 100644 index 00000000..92f4e1e2 --- /dev/null +++ b/.hypothesis/constants/c84a43811198b0bf @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/ciphers/base.py +# hypothesis_version: 6.151.9 + +[] \ No newline at end of file diff --git a/.hypothesis/constants/c94e24de598a26b3 b/.hypothesis/constants/c94e24de598a26b3 new file mode 100644 index 00000000..53d154a7 --- /dev/null +++ b/.hypothesis/constants/c94e24de598a26b3 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/llm/claude/__init__.py +# hypothesis_version: 6.151.9 + +['AgentResult', 'ClaudeConfig', 'ClaudeResult', 'run_agent', 'run_agent_async'] \ No newline at end of file diff --git a/.hypothesis/constants/c9bfb1969437e49b b/.hypothesis/constants/c9bfb1969437e49b new file mode 100644 index 00000000..db94ed62 --- /dev/null +++ b/.hypothesis/constants/c9bfb1969437e49b @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/plan_parser.py +# hypothesis_version: 6.151.9 + +['### Parse Warnings', '(\\d+)', ',', '-', '---', 'Human verification', 'TASK-(\\d+)-(\\d+)', '\\*\\*Goal\\*\\*:\\s*(.+)', '\\[([^\\]]+)\\]', 'acceptance', 'dependencies', 'description', 'exit_criteria', 'files', 'goal', 'id', 'name', 'phase-', 'phase\\s*(\\d+)', 'phases', 'pr', 'pr_plan', 'tasks', 'title', 'utf-8'] \ No newline at end of file diff --git a/.hypothesis/constants/ca249cf989c67921 b/.hypothesis/constants/ca249cf989c67921 new file mode 100644 index 00000000..42d73b8a --- /dev/null +++ b/.hypothesis/constants/ca249cf989c67921 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/__init__.py +# hypothesis_version: 6.151.9 + +['AGENT_ROLES', 'ARCHITECT_ROLE', 'AcceptanceCriterion', 'AgentCircuitBreaker', 'AgentExecution', 'AgentExecutionModel', 'AgentExecutionStatus', 'AgentHandoff', 'AgentResult', 'AgentRetryConfig', 'AgentRetryManager', 'AgentRole', 'AgentRoleDefinition', 'AgentRoleType', 'AgentStatus', 'AuditAction', 'AuditEntry', 'AuditRole', 'CODER_ROLE', 'CheckDefinition', 'CheckResult', 'CheckStatus', 'CheckpointState', 'CircuitBreakerConfig', 'CircuitState', 'ConflictDetector', 'ConflictInfo', 'Contract', 'DOCUMENTER_ROLE', 'Decision', 'DecisionOption', 'DecisionType', 'DependencyGraph', 'DependencyNode', 'DeploymentConfig', 'DispatchDecision', 'ExecutionPlan', 'ExecutionWave', 'FIELD_OWNERSHIP', 'Feedback', 'FeedbackQuestion', 'FileAccessPattern', 'HitlCheckboxState', 'HitlDecisionCategory', 'HitlOption', 'HitlOptionId', 'HumanReviewMechanism', 'INTEGRATOR_ROLE', 'IssueInfo', 'MultiAgentConfig', 'MutationResult', 'OrchestrationState', 'Orchestrator', 'PRMetadata', 'ParseResult', 'ParseWarning', 'ParsedPhase', 'ParsedTask', 'Phase', 'PhaseAgentConfig', 'PhaseConfig', 'PhaseStatus', 'PipelinePhase', 'REVIEWER_CODE_ROLE', 'RISK_ANALYST_ROLE', 'RateLimitHandler', 'RateLimitInfo', 'RetryConfig', 'RetryDecision', 'RetryPolicy', 'RetryableError', 'ReviewFeedback', 'Role', 'ServiceMapping', 'TASK_PLANNER_ROLE', 'TESTER_ROLE', 'Task', 'TaskStatus', 'TimeoutCheckpoint', 'ValidationResult', 'ValidationTest', 'apply_mutation', 'can_agent_run', 'can_modify', 'can_run_in_parallel', 'collect_handoff_data', 'contract_exists', 'create_audit_entry', 'create_contract', 'create_orchestrator', 'create_retry_manager', 'create_update_entry', 'delete_contract', 'export_contract', 'format_audit_log', 'generate_feedback_id', 'get_all_roles', 'get_contract_path', 'get_field_owner', 'get_next_wave', 'get_parallel_groups', 'get_role_definition', 'get_role_permissions', 'get_roles_for_phase', 'get_runnable_agents', 'list_contracts', 'load_agent_output', 'load_contract', 'normalize_path', 'parse_checkbox_state', 'parse_plan', 'parse_plan_file', 'retry_with_backoff', 'save_agent_output', 'save_contract', 'start_debounce', 'validate_mutation'] \ No newline at end of file diff --git a/.hypothesis/constants/cb11f830266a38f7 b/.hypothesis/constants/cb11f830266a38f7 new file mode 100644 index 00000000..b3e0a5e1 --- /dev/null +++ b/.hypothesis/constants/cb11f830266a38f7 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/checkpoint_cli.py +# hypothesis_version: 6.151.9 + +[0.0, 100, 120, 500, 1000, 3600, 1000000, ' | ', '%Y-%m-%d %H:%M:%S', '(no phase)', '(none)', '+00:00', '--agent-type', '--branch', '--checkpoint-repo', '--files', '--heads', '--issue', '--json', '--limit', '--phase', '--pipeline', '--pr', '--repo', '--repo-path', '--session', '--status', '--trigger', '-c', '/api/v1/checkpoints', 'Accept', 'Authorization', 'Available commands', 'EGG_REPO_PATH', 'EGG_SESSION_TOKEN', 'FETCH_HEAD', 'Filter by PR number', 'Filter by agent type', 'Filter by session ID', 'GATEWAY_URL', 'GET', 'N/A', 'No checkpoints found', 'Output as JSON', 'Session:', 'Token Usage:', 'Transcript:', 'Z', '__main__', 'agent', 'agent_role', 'agent_type', 'all', 'application/json', 'branch', 'breakdown', 'browse', 'checkpoint', 'checkpoint_count', 'checkpoint_repo', 'checkpoints', 'ckpt-', 'command', 'commit', 'commit_sha', 'container_id', 'context', 'cost', 'cost_usd', 'count', 'created_at', 'data', 'duration_seconds', 'egg-checkpoint', 'egg/checkpoints/v2', 'ended_at', 'estimated_cost_usd', 'fetch', 'files', 'files_touched', 'files_touched_count', 'get-url', 'git', 'id', 'identifier', 'implement', 'index.json', 'input', 'input_tokens', 'issue', 'issue_number', 'json', 'limit', 'list', 'ls-remote', 'message', 'message_count', 'model', 'name', 'operation', 'origin', 'output', 'output_tokens', 'path', 'phase', 'pipeline', 'pipeline_id', 'pipeline_phase', 'plan', 'pr', 'pr_number', 'push_sha', 'refine', 'remote', 'repo', 'repo_path', 'rev-parse', 'session', 'session-end', 'session_end', 'session_ended_at', 'session_id', 'session_status', 'show', 'source_repo', 'status', 'store_true', 'success', 'token_usage', 'tool_call_count', 'tool_calls', 'total_cost_usd', 'total_input_tokens', 'total_output_tokens', 'total_tokens', 'transcript', 'trigger', 'trigger_type', 'truncated', 'unknown'] \ No newline at end of file diff --git a/.hypothesis/constants/cca227baa51e120d b/.hypothesis/constants/cca227baa51e120d new file mode 100644 index 00000000..93383cf6 --- /dev/null +++ b/.hypothesis/constants/cca227baa51e120d @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/multi_agent.py +# hypothesis_version: 6.151.9 + +[3600, 'Agent spawned', 'EGG_AGENT_ROLE', 'EGG_HANDOFF_DATA', 'EGG_WAVE_NUMBER', 'Unknown error', 'Wave completed', 'commit', 'complete', 'completed_waves', 'container_id', 'current_wave', 'dispatcher_status', 'error', 'failed', 'has_failures', 'is_complete', 'phase', 'pipeline_id', 'role', 'running', 'shared', 'status', 'success', 'wave', '{}'] \ No newline at end of file diff --git a/.hypothesis/constants/cce6cb3ba1c3bee9 b/.hypothesis/constants/cce6cb3ba1c3bee9 new file mode 100644 index 00000000..538704e1 --- /dev/null +++ b/.hypothesis/constants/cce6cb3ba1c3bee9 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/llm/result.py +# hypothesis_version: 6.151.9 + +[] \ No newline at end of file diff --git a/.hypothesis/constants/ceabf82662cdbf75 b/.hypothesis/constants/ceabf82662cdbf75 new file mode 100644 index 00000000..8a86ac39 --- /dev/null +++ b/.hypothesis/constants/ceabf82662cdbf75 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/policy.py +# hypothesis_version: 6.151.9 + +[120, 200, 300, 500, '+', ',', ':', 'GATEWAY_BOT_NAME', 'PR comment allowed', 'PR review allowed', 'action', 'allowed', 'auth_mode', 'author', 'bot', 'bot_pr', 'bot_prefix', 'branch', 'config', 'configured_user', 'configured_user_pr', 'details', 'expected', 'gateway.policy', 'github_user', 'headRefName', 'hint', 'login', 'main', 'master', 'new_branch', 'number', 'open', 'open_prs', 'pr_number', 'protected_branches', 'reason', 'refs/heads/', 'repo', 'reviewer', 'shared', 'state', 'trusted_user_pr', 'user'] \ No newline at end of file diff --git a/.hypothesis/constants/ceb1d0465029fa83 b/.hypothesis/constants/ceb1d0465029fa83 new file mode 100644 index 00000000..9f97de89 --- /dev/null +++ b/.hypothesis/constants/ceb1d0465029fa83 @@ -0,0 +1,4 @@ +# file: /usr/local/bin/pytest +# hypothesis_version: 6.151.9 + +['__main__'] \ No newline at end of file diff --git a/.hypothesis/constants/cfc7811c74a0eda3 b/.hypothesis/constants/cfc7811c74a0eda3 new file mode 100644 index 00000000..902ff4da --- /dev/null +++ b/.hypothesis/constants/cfc7811c74a0eda3 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/rsa.py +# hypothesis_version: 6.151.9 + +[512, 1000, 65537, 'RSAPrivateNumbers', 'RSAPublicKey', 'RSAPublicNumbers', '_d', '_dmp1', '_dmq1', '_e', '_iqmp', '_n', '_p', '_public_numbers', '_q', 'dmp1 must be odd.', 'dmq1 must be odd.', 'e must be odd.', 'n must be >= 3.', 'p must be < modulus.', 'q must be < modulus.'] \ No newline at end of file diff --git a/.hypothesis/constants/d1ecdb01d128f44c b/.hypothesis/constants/d1ecdb01d128f44c new file mode 100644 index 00000000..2b8771c1 --- /dev/null +++ b/.hypothesis/constants/d1ecdb01d128f44c @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/sdlc_cli.py +# hypothesis_version: 6.151.9 + +[1.0, 30.0, 409, '\x1b[0m', '\x1b[1m', '\x1b[2J\x1b[H', '\x1b[2m', '\x1b[31m', '\x1b[32m', '\x1b[33m', '\x1b[36m', '--issue', '--json', '--prompt', '--repo', '-i', '-p', '-q', '-r', '.nameWithOwner', '/', '1', ':', '?', 'EGG_PRIVATE_MODE', 'GitHub issue number', 'NAME', 'NUM', 'T', 'TEXT', 'Unknown error', 'Z', '__main__', 'already_terminal', 'awaiting approval', 'awaiting_human', 'cancelled', 'complete', 'completed', 'current_phase', 'dag', 'data: ', 'done', 'egg-sdlc', 'error', 'event: ', 'event_type', 'failed', 'gh', 'id', 'interrupted', 'issue', 'issue_number_pos', 'local', 'message', 'nameWithOwner', 'pending', 'pending_decisions', 'pipeline_id', 'private', 'raw', 'reason', 'replace', 'repo', 'repos', 'running', 'status', 'timeout', 'timestamp', 'true', 'unknown', 'utf-8', 'view', 'visualization', 'was cancelled'] \ No newline at end of file diff --git a/.hypothesis/constants/d5032ce2f0b72e56 b/.hypothesis/constants/d5032ce2f0b72e56 new file mode 100644 index 00000000..c9e78c2e --- /dev/null +++ b/.hypothesis/constants/d5032ce2f0b72e56 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/backends/interfaces.py +# hypothesis_version: 6.151.9 + +[] \ No newline at end of file diff --git a/.hypothesis/constants/d623f9cc71eca74d b/.hypothesis/constants/d623f9cc71eca74d new file mode 100644 index 00000000..d7612824 --- /dev/null +++ b/.hypothesis/constants/d623f9cc71eca74d @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/statusbar.py +# hypothesis_version: 6.151.9 + +[1.0, '\x1b[0m', '\x1b[32m', '-', '...', '/', '=', '\\', '\\033\\[[0-9;]*m', '|'] \ No newline at end of file diff --git a/.hypothesis/constants/d6856b5679893fb8 b/.hypothesis/constants/d6856b5679893fb8 new file mode 100644 index 00000000..47b60b24 --- /dev/null +++ b/.hypothesis/constants/d6856b5679893fb8 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/hashes.py +# hypothesis_version: 6.151.9 + +[128, 'Hash', 'HashContext', '_algorithm', '_digest_size', 'blake2b', 'blake2s', 'data', 'md5', 'sha1', 'sha224', 'sha256', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512', 'sha384', 'sha512', 'sha512-224', 'sha512-256', 'shake128', 'shake256'] \ No newline at end of file diff --git a/.hypothesis/constants/d7cd0820127015d3 b/.hypothesis/constants/d7cd0820127015d3 new file mode 100644 index 00000000..bf714e5d --- /dev/null +++ b/.hypothesis/constants/d7cd0820127015d3 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/self_improvement/collectors/local.py +# hypothesis_version: 6.151.9 + +['.cache', '^ERROR[:\\s]', '^Error:', '^Exception:', '^FAILED[:\\s]', '^FATAL[:\\s]', 'all tests passed', 'cancelled', 'container-logs', 'container_id', 'egg', 'entries', 'exec', 'failure', 'local', 'log-index.json', 'log_file', 'replace', 'running', 'success', 'task_id', 'thread_ts', 'timestamp'] \ No newline at end of file diff --git a/.hypothesis/constants/d92287877e17f245 b/.hypothesis/constants/d92287877e17f245 new file mode 100644 index 00000000..40bb87f7 --- /dev/null +++ b/.hypothesis/constants/d92287877e17f245 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/jwt/utils.py +# hypothesis_version: 6.151.9 + +[b'\x00', b')[- ]----\r?\n.+?\r?\n----[- ]END \\1[- ]----\r?\n?', b'----[- ]BEGIN (', b'-cert-v01@openssh.com', b'=', b'CERTIFICATE', b'CERTIFICATE REQUEST', b'DH PARAMETERS', b'DSA PRIVATE KEY', b'EC PRIVATE KEY', b'ENCRYPTED PRIVATE KEY', b'NEW CERTIFICATE REQUEST', b'OPENSSH PRIVATE KEY', b'PRIVATE KEY', b'PUBLIC KEY', b'RSA PRIVATE KEY', b'RSA PUBLIC KEY', b'SSH2 ENCRYPTED PRIVATE KEY', b'SSH2 PUBLIC KEY', b'TRUSTED CERTIFICATE', b'X509 CRL', b'\\A(\\S+)[ \\t]+(\\S+)', b'ecdsa-sha2-nistp256', b'ecdsa-sha2-nistp384', b'ecdsa-sha2-nistp521', b'ssh-dss', b'ssh-ed25519', b'ssh-rsa', b'|', '%0*x', 'Invalid signature', 'ascii', 'big', 'utf-8'] \ No newline at end of file diff --git a/.hypothesis/constants/d955d6634e87422e b/.hypothesis/constants/d955d6634e87422e new file mode 100644 index 00000000..e422337a --- /dev/null +++ b/.hypothesis/constants/d955d6634e87422e @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/health_checks/tier1/state_consistency.py +# hypothesis_version: 6.151.9 + +['contract', 'issues', 'pending', 'shared', 'state_consistency', 'status', 'tasks'] \ No newline at end of file diff --git a/.hypothesis/constants/da39a3ee5e6b4b0d b/.hypothesis/constants/da39a3ee5e6b4b0d new file mode 100644 index 00000000..3396e349 --- /dev/null +++ b/.hypothesis/constants/da39a3ee5e6b4b0d @@ -0,0 +1,4 @@ +# file: /usr/lib/python3.11/sitecustomize.py +# hypothesis_version: 6.151.9 + +[] \ No newline at end of file diff --git a/.hypothesis/constants/dc6ef3a1b5234c93 b/.hypothesis/constants/dc6ef3a1b5234c93 new file mode 100644 index 00000000..27008873 --- /dev/null +++ b/.hypothesis/constants/dc6ef3a1b5234c93 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/.github/scripts/checks/__init__.py +# hypothesis_version: 6.151.9 + +['CheckRunner'] \ No newline at end of file diff --git a/.hypothesis/constants/df3d09b7b1766bec b/.hypothesis/constants/df3d09b7b1766bec new file mode 100644 index 00000000..a96c36bd --- /dev/null +++ b/.hypothesis/constants/df3d09b7b1766bec @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/decision_queue.py +# hypothesis_version: 6.151.9 + +['Decision cancelled', 'Decision queued', 'Decision resolved', 'created_at', 'id', 'pending', 'pending_decisions', 'pipeline_id', 'question', 'resolved', 'shared', 'total_decisions'] \ No newline at end of file diff --git a/.hypothesis/constants/e0a34de3bcae4642 b/.hypothesis/constants/e0a34de3bcae4642 new file mode 100644 index 00000000..34ab5f30 --- /dev/null +++ b/.hypothesis/constants/e0a34de3bcae4642 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/dag_visualizer.py +# hypothesis_version: 6.151.9 + +[0.5, 3600, ' v', ' |', ' │', ' ▼', '#', '+', '-', '-->', '=', '>', '>>>', '?', 'Cycle Timings:', 'DAG Visualization:', 'Implement', 'PR', 'Plan', 'Refine', 'Status: Not started', 'Z', 'agents', 'awaiting approval', 'compact', 'containers', 'current_phase', 'cycle', 'cycles', 'dag', 'done', 'o', 'pending_decisions', 'phases', 'pipeline_id', 'plan_phase_id', 'progress', 'review_cycles', 'reviewer', 'role', 'running', 'shared', 'status', 'timestamp', 'updated_at', 'v', 'visualization', 'worker', 'x', '|', '||', '×', '→', '⊘', '⏸', '─', '│', '┌', '┐', '└', '┘', '┬', '┴', '┼', '═', '╔', '╗', '╚', '╝', '█', '░', '▶', '▼', '○', '✓', '✗'] \ No newline at end of file diff --git a/.hypothesis/constants/e144e49beae6fb71 b/.hypothesis/constants/e144e49beae6fb71 new file mode 100644 index 00000000..88f2592a --- /dev/null +++ b/.hypothesis/constants/e144e49beae6fb71 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/agent_restrictions.py +# hypothesis_version: 6.151.9 + +['*', '**', '**/*.go', '**/*.java', '**/*.js', '**/*.json', '**/*.jsx', '**/*.md', '**/*.py', '**/*.rb', '**/*.rs', '**/*.sh', '**/*.spec.js', '**/*.spec.jsx', '**/*.spec.ts', '**/*.spec.tsx', '**/*.test.js', '**/*.test.jsx', '**/*.test.ts', '**/*.test.tsx', '**/*.toml', '**/*.ts', '**/*.tsx', '**/*.yaml', '**/*.yml', '**/*_test.go', '**/*_test.py', '**/CHANGELOG.md', '**/README.md', '**/test/', '**/test_*.go', '**/test_*.py', '**/tests/', '..', './', '.egg-state/drafts/', '.egg-state/reviews/', '.github/', '/', 'Files allowed', 'No files to validate', 'action/', 'architect', 'bin/', 'coder', 'config/', 'docs/', 'documenter', 'gateway/', 'high', 'integration_tests/', 'integrator', 'lib/', 'orchestrator/', 'refiner', 'reviewer_code', 'reviewer_contract', 'reviewer_plan', 'reviewer_refine', 'risk_analyst', 'sandbox/', 'scripts/', 'shared/', 'src/', 'task_planner', 'test/', 'tester', 'tests/'] \ No newline at end of file diff --git a/.hypothesis/constants/e21b380f350d215d b/.hypothesis/constants/e21b380f350d215d new file mode 100644 index 00000000..a68aaf4a --- /dev/null +++ b/.hypothesis/constants/e21b380f350d215d @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/llm/runner.py +# hypothesis_version: 6.151.9 + +['--model', '1', '127.0.0.1', 'DISABLE_TELEMETRY', 'NO_PROXY', 'claude', 'opus'] \ No newline at end of file diff --git a/.hypothesis/constants/e356ac1b688445f2 b/.hypothesis/constants/e356ac1b688445f2 new file mode 100644 index 00000000..8c57a0c4 --- /dev/null +++ b/.hypothesis/constants/e356ac1b688445f2 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/docker_client.py +# hypothesis_version: 6.151.9 + +[100, 300, 3600, '+00:00', '0001-01-01T00:00:00Z', 'Config', 'Container created', 'Container removed', 'Container started', 'Container stopped', 'DOCKER_HOST', 'ExitCode', 'FinishedAt', 'Labels', 'StartedAt', 'State', 'Status', 'StatusCode', 'Z', 'created', 'egg-sandbox-', 'egg.agent.role', 'egg.container.name', 'egg.created_at', 'egg.orchestrator', 'egg:latest', 'exited', 'label', 'orchestrator.docker', 'replace', 'running', 'shared', 'true', 'unknown', 'utf-8'] \ No newline at end of file diff --git a/.hypothesis/constants/e3de064c74e1a322 b/.hypothesis/constants/e3de064c74e1a322 new file mode 100644 index 00000000..96d504b2 --- /dev/null +++ b/.hypothesis/constants/e3de064c74e1a322 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/feedback.py +# hypothesis_version: 6.151.9 + +['\n\n---\n\n', '###', '### Open Questions', '*Authored-by: egg*', '---', '>', '> _Your answer here_', '^Your answer here$', '^\\s*$', '^_Your answer here_$', 'feedback-(\\d+)', 'feedback-1', 'feedback_id', 'questions', 'submitted', 'x'] \ No newline at end of file diff --git a/.hypothesis/constants/e45a76d3dd8e05b7 b/.hypothesis/constants/e45a76d3dd8e05b7 new file mode 100644 index 00000000..b6be0d54 --- /dev/null +++ b/.hypothesis/constants/e45a76d3dd8e05b7 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/resilience.py +# hypothesis_version: 6.151.9 + +[0.5, 0.75, 1.0, 2.0, 30.0, 300, 360, 'T', 'data', 'elapsed_seconds', 'is_limited', 'job_start_time', 'limit', 'ratelimit-limit', 'ratelimit-remaining', 'ratelimit-reset', 'remaining', 'remaining_seconds', 'reset', 'reset_at', 'retry-after', 'retry_after', 'seconds_until_reset', 'timestamp', 'used', 'x-ratelimit-limit', 'x-ratelimit-reset', 'x-ratelimit-used'] \ No newline at end of file diff --git a/.hypothesis/constants/e5eddde6e2bcf446 b/.hypothesis/constants/e5eddde6e2bcf446 new file mode 100644 index 00000000..1d38d5b8 --- /dev/null +++ b/.hypothesis/constants/e5eddde6e2bcf446 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/serialization/ssh.py +# hypothesis_version: 6.151.9 + +[b'\n', b' ', b'(.*?)', b'-----BEGIN OPENSSH PRIVATE KEY-----', b'-----END OPENSSH PRIVATE KEY-----', b'-cert-v01@openssh.com', b'>I', b'>Q', b'\\A(\\S+)[ \\t]+(\\S+)', b'aes256-cbc', b'aes256-ctr', b'bcrypt', b'ecdsa-sha2-nistp256', b'ecdsa-sha2-nistp384', b'ecdsa-sha2-nistp521', b'nistp256', b'nistp384', b'nistp521', b'none', b'openssh-key-v1\x00', b'ssh-dss', b'ssh-ed25519', b'ssh-rsa', 127, 1024, 'Curve name mismatch', 'Invalid data', 'Invalid key format', 'Invalid line format', 'Need bcrypt module', 'Unsupported KDF: %r', 'Unsupported key type', 'big', 'data', 'password', 'secp256r1', 'secp384r1', 'secp521r1'] \ No newline at end of file diff --git a/.hypothesis/constants/e69f65dbd8abef8f b/.hypothesis/constants/e69f65dbd8abef8f new file mode 100644 index 00000000..c12aff58 --- /dev/null +++ b/.hypothesis/constants/e69f65dbd8abef8f @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/llm/__init__.py +# hypothesis_version: 6.151.9 + +['AgentResult', 'ClaudeConfig', 'ClaudeResult', 'run_agent', 'run_agent_async', 'run_interactive'] \ No newline at end of file diff --git a/.hypothesis/constants/e830b7334c7145d3 b/.hypothesis/constants/e830b7334c7145d3 new file mode 100644 index 00000000..54e49955 --- /dev/null +++ b/.hypothesis/constants/e830b7334c7145d3 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/usage.py +# hypothesis_version: 6.151.9 + +[0.0, '0.10', '0.30', '0.50', '1.0', '1.00', '1.25', '1000000', '15.00', '25.00', '3.00', '3.75', '5.00', '6.25', 'All PR numbers', 'All issue numbers', 'All session IDs', 'All workflow IDs', 'Associated PR number', 'GitHub PR number', 'GitHub issue number', 'Model used', 'PR base branch', 'PR head branch', 'Pipeline phases seen', 'Schema version', 'Session identifier', 'TokenCounts', 'Total PRs tracked', 'Total estimated cost', 'Total input tokens', 'Total issues tracked', 'Total output tokens', 'Workflow name', '^[0-9]+\\.[0-9]+$', 'cache_read', 'cache_write', 'haiku', 'input', 'opus', 'output', 'sonnet'] \ No newline at end of file diff --git a/.hypothesis/constants/e8bc63ad18787151 b/.hypothesis/constants/e8bc63ad18787151 new file mode 100644 index 00000000..2c2b9b11 --- /dev/null +++ b/.hypothesis/constants/e8bc63ad18787151 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/health_checks/context.py +# hypothesis_version: 6.151.9 + +[4000, 16000, '\n... [truncated]', '--oneline', '--stat', '-20', '.egg-state', '.json', '.md', '.yaml', '.yml', '/', 'agent-outputs', 'contracts', 'diff', 'drafts', 'git', 'log', 'origin/main...HEAD', 'replace'] \ No newline at end of file diff --git a/.hypothesis/constants/e9088653e78957f6 b/.hypothesis/constants/e9088653e78957f6 new file mode 100644 index 00000000..7b1d1e85 --- /dev/null +++ b/.hypothesis/constants/e9088653e78957f6 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/_serialization.py +# hypothesis_version: 6.151.9 + +['ANSI X9.62', 'DER', 'OpenSSH', 'PEM', 'PKCS3', 'PKCS8', 'Raw', 'Raw PKCS#1', 'S/MIME', 'TraditionalOpenSSL'] \ No newline at end of file diff --git a/.hypothesis/constants/e92f346d8980eda2 b/.hypothesis/constants/e92f346d8980eda2 new file mode 100644 index 00000000..7cc52c68 --- /dev/null +++ b/.hypothesis/constants/e92f346d8980eda2 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/output.py +# hypothesis_version: 6.151.9 + +['shared'] \ No newline at end of file diff --git a/.hypothesis/constants/e978b4934ef42344 b/.hypothesis/constants/e978b4934ef42344 new file mode 100644 index 00000000..5519fc09 --- /dev/null +++ b/.hypothesis/constants/e978b4934ef42344 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/metrics.py +# hypothesis_version: 6.151.9 + +[0.0, 0.1, 0.5, 1.0, 5.0, 10.0, 30.0, 60.0, 300, 600, 1800, 3600, 7200, 14400, ',', 'Metric: agent failed', 'buckets', 'count', 'counters', 'gauges', 'histograms', 'inf', 'labels', 'name', 'orchestrator.metrics', 'shared', 'sum', 'uptime_seconds', 'value'] \ No newline at end of file diff --git a/.hypothesis/constants/eaa33e077b23b1ca b/.hypothesis/constants/eaa33e077b23b1ca new file mode 100644 index 00000000..2425d0db --- /dev/null +++ b/.hypothesis/constants/eaa33e077b23b1ca @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/gateway/contract_api.py +# hypothesis_version: 6.151.9 + +[200, 400, 403, 404, 500, '/', '/api/v1/contract', '/mutate', '/validate', '1', 'Contract exists', 'Contract retrieved', 'EGG_AGENT_ROLE', 'GET', 'Missing field_path', 'Missing issue_number', 'Missing new_value', 'Missing request body', 'Mutation allowed', 'POST', 'X-Egg-Role', 'actor', 'agent', 'agent_role', 'contract', 'data', 'details', 'exists', 'false', 'field_path', 'gateway.contract', 'hint', 'include_audit_log', 'issue_number', 'message', 'new_value', 'reason', 'repo_path', 'required_role', 'role', 'session', 'shared', 'success', 'true'] \ No newline at end of file diff --git a/.hypothesis/constants/eb36230d1c6ec60a b/.hypothesis/constants/eb36230d1c6ec60a new file mode 100644 index 00000000..303244cc --- /dev/null +++ b/.hypothesis/constants/eb36230d1c6ec60a @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg_lib/orch_client.py +# hypothesis_version: 6.151.9 + +[120, 200, 400, 9849, '/.dockerenv', '/api/v1/health', '/api/v1/pipelines', '?pending_only=true', 'Accept', 'Cache-Control', 'Content-Type', 'DELETE', 'EGG_CONTAINER', 'EGG_ORCHESTRATOR_URL', 'GET', 'PATCH', 'POST', 'application/json', 'branch', 'cancelled', 'config', 'data', 'decisions', 'egg-orchestrator', 'healthy', 'issue', 'issue_number', 'message', 'mode', 'network_mode', 'no-cache', 'pipeline', 'prompt', 'raw', 'replace', 'repo', 'resolution', 'status', 'text/event-stream', 'utf-8'] \ No newline at end of file diff --git a/.hypothesis/constants/f363992e8bc23fd2 b/.hypothesis/constants/f363992e8bc23fd2 new file mode 100644 index 00000000..5892feb3 --- /dev/null +++ b/.hypothesis/constants/f363992e8bc23fd2 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/models.py +# hypothesis_version: 6.151.9 + +['Additional context', 'Agent if applicable', 'Agent role', 'Container exit code', 'Container name', 'Container status', 'Current phase', 'Decision status', 'Docker container ID', 'Error if failed', 'Event data', 'Event type', 'Execution status', 'GitHub issue number', 'HITL decisions', "Human's response", 'ISO 8601 timestamp', 'Last update time', 'Number of retries', 'Phase being executed', 'Phase if applicable', 'Phase status', 'Pipeline ID', 'Question for human', 'Unique decision ID', 'When completed', 'When created', 'When event occurred', 'When resolved', 'When started', 'Work branch name', 'agent-design', 'architect', 'awaiting_human', 'cancelled', 'checker', 'code', 'coder', 'complete', 'contract', 'creating', 'documenter', 'exited', 'failed', 'high', 'implement', 'inspector', 'integrator', 'issue', 'low', 'mid', 'pending', 'plan', 'pr', 'refine', 'refiner', 'removed', 'resolved', 'reviewer', 'reviewer_code', 'reviewer_contract', 'reviewer_plan', 'reviewer_refine', 'risk_analyst', 'running', 'task_planner', 'tester', 'timeout'] \ No newline at end of file diff --git a/.hypothesis/constants/f50b0baa1a6bc055 b/.hypothesis/constants/f50b0baa1a6bc055 new file mode 100644 index 00000000..5dfba801 --- /dev/null +++ b/.hypothesis/constants/f50b0baa1a6bc055 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/dispatch.py +# hypothesis_version: 6.151.9 + +['shared'] \ No newline at end of file diff --git a/.hypothesis/constants/f5fba0c9590657ac b/.hypothesis/constants/f5fba0c9590657ac new file mode 100644 index 00000000..d507c4ab --- /dev/null +++ b/.hypothesis/constants/f5fba0c9590657ac @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/_oid.py +# hypothesis_version: 6.151.9 + +['.', 'Unknown OID', '_dotted_string'] \ No newline at end of file diff --git a/.hypothesis/constants/f804a60f84a904cf b/.hypothesis/constants/f804a60f84a904cf new file mode 100644 index 00000000..22e87c38 --- /dev/null +++ b/.hypothesis/constants/f804a60f84a904cf @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/.github/scripts/checks/plan_yaml_check.py +# hypothesis_version: 6.151.9 + +['.egg-state', 'check-plan-yaml', 'drafts', 'errors', 'expected_path', 'has_pr_metadata', 'hint', 'id', 'phases', 'phases_count', 'pr', 'tasks', 'yaml_error'] \ No newline at end of file diff --git a/.hypothesis/constants/f89f357f7bd4558b b/.hypothesis/constants/f89f357f7bd4558b new file mode 100644 index 00000000..756a3b13 --- /dev/null +++ b/.hypothesis/constants/f89f357f7bd4558b @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/orchestrator/devserver.py +# hypothesis_version: 6.151.9 + +[200, '--name-only', '--no-build', '--project-name', '--remove-orphans', '--timeout', '--volumes', '-d', '-f', '-q', '/', '10', '=', 'ALL', 'Config', 'Credential check', 'ExposedPorts', 'GET', 'HEAD', 'HEAD~1', 'IPAddress', 'NetworkSettings', 'Networks', 'Pre-pulling image', 'Service healthy', 'bridge', 'cap_drop', 'compose', 'container_id', 'cpus', 'deploy', 'diff', 'docker', 'docker-compose.yml', 'down', 'egg.check-network', 'egg.pipeline-id', 'egg.service', 'environment', 'error', 'error_message', 'external', 'git', 'healthy', 'image', 'ip', 'limits', 'memory', 'name', 'network_id', 'networks', 'origin/main...HEAD', 'pids', 'port', 'privileged', 'ps', 'read_only', 'resources', 'security_opt', 'services', 'shared', 'show', 'starting', 'status', 'stopped', 'true', 'unhealthy', 'up', 'utf-8', 'volumes', 'warnings'] \ No newline at end of file diff --git a/.hypothesis/constants/f993ffbeb7ab7d83 b/.hypothesis/constants/f993ffbeb7ab7d83 new file mode 100644 index 00000000..1bd5be23 --- /dev/null +++ b/.hypothesis/constants/f993ffbeb7ab7d83 @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/__init__.py +# hypothesis_version: 6.151.9 + +['__author__', '__copyright__', '__email__', '__license__', '__summary__', '__title__', '__uri__', '__version__'] \ No newline at end of file diff --git a/.hypothesis/constants/fb373b5e85396387 b/.hypothesis/constants/fb373b5e85396387 new file mode 100644 index 00000000..73820234 --- /dev/null +++ b/.hypothesis/constants/fb373b5e85396387 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/egg +# hypothesis_version: 6.151.9 + +['Interrupted by user', '__main__', 'shared'] \ No newline at end of file diff --git a/.hypothesis/constants/fb5926a4d20d8d6c b/.hypothesis/constants/fb5926a4d20d8d6c new file mode 100644 index 00000000..db38fcc1 --- /dev/null +++ b/.hypothesis/constants/fb5926a4d20d8d6c @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/sandbox/tools/discover-tests.py +# hypothesis_version: 6.151.9 + +['## Makefile Targets', '## Notes', '*.spec.js', '*.spec.jsx', '*.spec.ts', '*.spec.tsx', '*.test.js', '*.test.jsx', '*.test.ts', '*.test.tsx', '*Spec.java', '*Test.java', '*Tests.java', '*_spec.rb', '*_test.go', '*_test.py', '*_test.rb', '*_test.rs', ',', '--files', '--json', '--run', '.', './gradlew test', '.git', '?', '@playwright/test', 'GNUmakefile', 'Makefile', 'Output as JSON', 'Run discovered tests', '[pytest]', '[tool.pytest', '__main__', '__tests__', 'bin', 'build', 'build.gradle', 'build.gradle.kts', 'conftest.py', 'dependencies', 'devDependencies', 'dist', 'e2e', 'eslint', 'frameworks', 'go', 'go test -cover ./...', 'go test ./...', 'go-test', 'go.mod', 'gradle', 'java', 'javascript', 'jest', 'jest --coverage', 'jest --watch', 'jest.config.js', 'jest.config.json', 'jest.config.mjs', 'jest.config.ts', 'lint', 'lint_command', 'make test', 'makefile', 'makefile_targets', 'maven', 'mocha', 'mocha --watch', 'mvn test', 'node_modules', 'notes', 'npm run lint', 'npm test', 'npx eslint .', 'npx playwright test', 'package.json', 'path', 'playwright', 'playwright.config.js', 'playwright.config.ts', 'pom.xml', 'project_root', 'pyproject.toml', 'pytest', 'pytest --cov', 'pytest-watch', 'pytest.ini', 'python', 'recommended_command', 'requirements-dev.txt', 'ruby', 'run-tests.sh', 'run_tests.sh', 'rust', 'scripts', 'setup.cfg', 'spec', 'specs', 'src/test/java', 'store_true', 'test', 'test-*.sh', 'test.sh', 'test_*', 'test_*.py', 'test_file_count', 'tests', 'tests.py', 'tools', 'unittest', 'vendor', 'vitest', 'vitest --coverage', 'vitest --watch', 'vitest.config.ts'] \ No newline at end of file diff --git a/.hypothesis/constants/fc6509cf8d2e7621 b/.hypothesis/constants/fc6509cf8d2e7621 new file mode 100644 index 00000000..593913bf --- /dev/null +++ b/.hypothesis/constants/fc6509cf8d2e7621 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/checkpoint_loader.py +# hypothesis_version: 6.151.9 + +[420, '.checkpoint_', '.index_', '.tmp', '00', 'json', 'w'] \ No newline at end of file diff --git a/.hypothesis/constants/fd1413b487818ede b/.hypothesis/constants/fd1413b487818ede new file mode 100644 index 00000000..873349a0 --- /dev/null +++ b/.hypothesis/constants/fd1413b487818ede @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/hitl.py +# hypothesis_version: 6.151.9 + +['-', '---', '> ', 'Option 2: Override', '[ ]', '[x]', '_', 'adjust', 'adjust_criteria', 'assign', 'break', 'break_into_subtasks', 'cancel', 'cancel_pipeline', 'category', 'checked', 'complete', 'complete_manually', 'context', 'criteria', 'debounce_until', 'guidance', 'has_changes', 'id', 'label', 'manual', 'manually', 'mark', 'mark_complete', 'options', 'override', 'provide_context', 'reassign', 'requirements', 'skip', 'skip_tasks', 'sub-task', 'subtask', 'x'] \ No newline at end of file diff --git a/.hypothesis/constants/fd23d3f57846831d b/.hypothesis/constants/fd23d3f57846831d new file mode 100644 index 00000000..c7a4bb5c --- /dev/null +++ b/.hypothesis/constants/fd23d3f57846831d @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/serialization/__init__.py +# hypothesis_version: 6.151.9 + +['Encoding', 'NoEncryption', 'ParameterFormat', 'PrivateFormat', 'PublicFormat', 'load_der_parameters', 'load_der_private_key', 'load_der_public_key', 'load_pem_parameters', 'load_pem_private_key', 'load_pem_public_key', 'load_ssh_private_key', 'load_ssh_public_key'] \ No newline at end of file diff --git a/.hypothesis/constants/fe02ea75b037cc90 b/.hypothesis/constants/fe02ea75b037cc90 new file mode 100644 index 00000000..7725fa17 --- /dev/null +++ b/.hypothesis/constants/fe02ea75b037cc90 @@ -0,0 +1,4 @@ +# file: /home/egg/repos/egg/shared/egg_contracts/orchestrator.py +# hypothesis_version: 6.151.9 + +['.egg-state', 'Unknown error', 'agent-outputs', 'agents', 'all_complete', 'any_failed', 'commit', 'complete', 'completed', 'error', 'executions', 'failed', 'parallel', 'pending', 'reason', 'running', 'status', 'total_agents', 'w', 'wave'] \ No newline at end of file diff --git a/.hypothesis/constants/ff9057633f31936b b/.hypothesis/constants/ff9057633f31936b new file mode 100644 index 00000000..90129a7c --- /dev/null +++ b/.hypothesis/constants/ff9057633f31936b @@ -0,0 +1,4 @@ +# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/ed25519.py +# hypothesis_version: 6.151.9 + +['Ed25519PrivateKey', 'Ed25519PublicKey'] \ No newline at end of file diff --git a/.hypothesis/unicode_data/14.0.0/charmap.json.gz b/.hypothesis/unicode_data/14.0.0/charmap.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..68a4579c7862aa0f16c7a91b5870fe617af45247 GIT binary patch literal 21505 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 PZbUHDMd`1Q1L^?)F@X}y literal 0 HcmV?d00001 diff --git a/orchestrator/models.py b/orchestrator/models.py index 78c8036c..6db6548b 100644 --- a/orchestrator/models.py +++ b/orchestrator/models.py @@ -7,7 +7,7 @@ from datetime import datetime from enum import StrEnum -from typing import Any +from typing import Any, NamedTuple from pydantic import BaseModel, Field @@ -99,10 +99,33 @@ class ReviewVerdict(BaseModel): verdict: str = Field(..., description="'approved' or 'needs_revision'") summary: str = Field(default="", description="Brief summary of review findings") - feedback: str = Field(default="", description="Detailed feedback if needs_revision") + analysis: str = Field( + default="", + description="Detailed analysis of the reviewed work, populated regardless of verdict", + ) + suggestions: str = Field( + default="", + description="Non-blocking suggestions for improvement, even when approving", + ) + feedback: str = Field(default="", description="Blocking feedback requiring revision") timestamp: str = Field(default="", description="ISO 8601 timestamp") +class AggregatedReviewResult(NamedTuple): + """Result of aggregating multiple review verdicts. + + Attributes: + verdict: Overall verdict — 'approved' or 'needs_revision'. + blocking_feedback: Combined feedback from needs_revision verdicts only. + advisory_content: Combined analysis and suggestions from ALL verdicts + (including approved), for observability and logging. + """ + + verdict: str + blocking_feedback: str + advisory_content: str + + class ContainerInfo(BaseModel): """Information about a sandbox container.""" diff --git a/orchestrator/routes/pipelines.py b/orchestrator/routes/pipelines.py index 6390ac2c..944f48c3 100644 --- a/orchestrator/routes/pipelines.py +++ b/orchestrator/routes/pipelines.py @@ -37,6 +37,7 @@ def get_logger(name: str, **kwargs) -> logging.Logger: # type: ignore[misc] from ..docker_client import ContainerNotFoundError, ContainerOperationError, DockerClientError from ..models import ( AgentRole, + AggregatedReviewResult, CycleTiming, Pipeline, PipelinePhase, @@ -62,6 +63,7 @@ def get_logger(name: str, **kwargs) -> logging.Logger: # type: ignore[misc] ) from models import ( # type: ignore AgentRole, + AggregatedReviewResult, ComplexityTier, CycleTiming, Pipeline, @@ -1009,7 +1011,8 @@ def _get_reviewer_scope_preamble(reviewer_type: str, phase: str) -> str: "agent-mode design principles. Do NOT review general code quality, " "security, or correctness — other reviewers handle those.\n\n" "**Only flag issues if you find clear agent-mode design anti-patterns.** " - "If the output has no agent-mode concerns, approve it." + "If the output has no agent-mode concerns, a brief approval is acceptable " + "— you do not need to produce a lengthy analysis when there are no concerns." ) elif reviewer_type == "code": return ( @@ -1018,27 +1021,37 @@ def _get_reviewer_scope_preamble(reviewer_type: str, phase: str) -> str: "**Be direct.** Do not soften feedback. State issues clearly and explain " "why they matter.\n\n" "**Be thorough.** Find ALL issues on the first pass. Do not stop after " - "identifying a few problems." + "identifying a few problems.\n\n" + "**Analysis format:** Provide file-by-file analysis covering each changed " + "file. For each file, note what changed, whether the change is correct, " + "and any issues or observations." ) elif reviewer_type == "contract": return ( "This is a **contract verification review**. Verify that the implementation " "matches the contract and all acceptance criteria are met. Do NOT review " - "general code quality or security — other reviewers handle those." + "general code quality or security — other reviewers handle those.\n\n" + "**Analysis format:** Provide a criterion-by-criterion verification — for each " + "acceptance criterion, state whether it is met and cite the specific evidence." ) elif reviewer_type == "refine": return ( "This is a **refine phase review**. Focus on the quality and completeness " "of the analysis produced during the refine phase. Evaluate problem " "understanding, codebase research, options analysis, and the recommended " - "approach. Agent-mode design alignment is handled by another reviewer." + "approach. Agent-mode design alignment is handled by another reviewer.\n\n" + "**Analysis format:** Provide section-by-section evaluation of the refine " + "output — assess each major section for depth, accuracy, and completeness." ) elif reviewer_type == "plan": return ( "This is a **plan phase review**. Focus on the quality and completeness " "of the implementation plan. Evaluate task breakdown, acceptance criteria, " "dependency ordering, risk assessment, and test strategy. Agent-mode " - "design alignment is handled by another reviewer." + "design alignment is handled by another reviewer.\n\n" + "**Analysis format:** Provide section-by-section evaluation of the plan — " + "assess task decomposition, acceptance criteria quality, dependency ordering, " + "and risk coverage." ) else: raise ValueError(f"Unknown reviewer type: {reviewer_type}") @@ -1520,6 +1533,19 @@ def _build_review_prompt( lines.append("7. Evaluate against the criteria below") lines.append(f"8. Write your verdict to `{verdict_path}` as JSON") lines.append("9. Commit the verdict file") + elif draft_path: + # Expanded procedural steps for draft-based (non-code) reviewers + lines.append("2. Read the draft thoroughly — do not skim") + lines.append( + "3. Cross-reference each section of the draft against the review criteria below" + ) + lines.append( + "4. Cite specific sections, quotes, or omissions as evidence in your analysis" + ) + lines.append("5. Evaluate completeness — identify any criteria not adequately addressed") + lines.append("6. Assess overall quality and coherence of the draft") + lines.append(f"7. Write your verdict to `{verdict_path}` as JSON") + lines.append("8. Commit the verdict file") else: lines.append("2. Evaluate it against the criteria below") lines.append(f"3. Write your verdict to `{verdict_path}` as JSON") @@ -1531,6 +1557,38 @@ def _build_review_prompt( lines.append(_get_review_criteria_for_type(reviewer_type, phase, repo_path=repo_path)) lines.append("") + # Review conventions — quality standards aligned with PR reviewer thoroughness + lines.append("## Review Conventions\n") + if reviewer_type == "code": + lines.append( + "You are a critical part of the engineering infrastructure — the last line " + "of defense before code reaches production. Your review must meet these " + "quality standards:\n" + ) + else: + lines.append("Your review must meet these quality standards:\n") + lines.append( + "1. **Be comprehensive.** Review the entire scope, not just the obvious parts. " + "Do not stop after finding the first few issues." + ) + lines.append( + "2. **Be specific.** Reference exact file paths, line numbers, function names, " + "and code snippets. Vague feedback is not actionable." + ) + lines.append( + "3. **Be direct.** State issues plainly without hedging or softening language. " + "\"This will fail when X\" not \"you might want to consider X\"." + ) + lines.append( + "4. **Suggest fixes.** When identifying a problem, include a concrete suggestion " + "for how to resolve it." + ) + lines.append( + "5. **Provide context.** Explain *why* something is an issue — the impact, " + "the risk, or the principle being violated." + ) + lines.append("") + # Delta review directive for re-reviews if is_delta_review: lines.append("## Delta Review\n") @@ -1558,15 +1616,31 @@ def _build_review_prompt( lines.append("{") lines.append(f' "reviewer": "{reviewer_type}",') lines.append(' "verdict": "approved" or "needs_revision",') - lines.append(' "summary": "Brief summary of findings",') - lines.append(' "feedback": "Detailed feedback if needs_revision, empty if approved",') + lines.append(' "summary": "Brief summary of findings (1-2 sentences)",') + lines.append(' "analysis": "Detailed analysis of the reviewed work (see below)",') + lines.append(' "suggestions": "Non-blocking suggestions for improvement",') + lines.append(' "feedback": "Blocking issues requiring revision before approval",') lines.append(' "timestamp": "ISO 8601 timestamp"') lines.append("}") lines.append("```\n") + lines.append("**Field guidelines:**\n") + lines.append( + "- **analysis**: Always provide detailed analysis regardless of verdict. " + "Describe what you reviewed, what you found, and your reasoning. " + "Be thorough but concise (200-500 words)." + ) lines.append( - "If the work meets all criteria, set verdict to `approved`. " + "- **suggestions**: Non-blocking observations and improvement ideas. " + "Include these even when approving — they help the team improve over time." + ) + lines.append( + "- **feedback**: Reserved for **blocking issues only** — problems that must " + "be fixed before the work can be approved. Leave empty when approving." + ) + lines.append( + "\nIf the work meets all criteria, set verdict to `approved`. " "If significant issues remain, set verdict to `needs_revision` " - "and provide actionable feedback." + "and provide actionable feedback in the `feedback` field." ) # Phase restrictions for reviewers @@ -1711,20 +1785,26 @@ def _read_tester_gaps( def _aggregate_review_verdicts( verdicts: dict[str, ReviewVerdict | None], -) -> tuple[str, str]: +) -> AggregatedReviewResult: """Aggregate multiple typed review verdicts into an overall result. Returns: - (overall_verdict, combined_feedback) where overall_verdict is - "approved" or "needs_revision". Any needs_revision → overall - needs_revision. Missing/None verdicts are treated as approved. + AggregatedReviewResult with: + - verdict: "approved" or "needs_revision" (any needs_revision → overall needs_revision) + - blocking_feedback: combined feedback from needs_revision verdicts only + - advisory_content: analysis and suggestions from ALL verdicts (including approved) + + Missing/None verdicts are skipped. """ overall = "approved" feedback_sections: list[str] = [] + advisory_sections: list[str] = [] for reviewer_type, verdict in verdicts.items(): if verdict is None: continue + + # Collect blocking feedback from needs_revision verdicts if verdict.verdict == "needs_revision": overall = "needs_revision" section = f"### {reviewer_type} reviewer\n" @@ -1734,8 +1814,24 @@ def _aggregate_review_verdicts( section += verdict.summary feedback_sections.append(section) - combined = "\n\n".join(feedback_sections) if feedback_sections else "" - return overall, combined + # Collect analysis and suggestions from ALL verdicts (including approved) + advisory_parts: list[str] = [] + if verdict.analysis: + advisory_parts.append(verdict.analysis) + if verdict.suggestions: + advisory_parts.append(f"**Suggestions:** {verdict.suggestions}") + if advisory_parts: + advisory_sections.append( + f"### {reviewer_type} reviewer\n" + "\n\n".join(advisory_parts) + ) + + blocking_feedback = "\n\n".join(feedback_sections) if feedback_sections else "" + advisory_content = "\n\n".join(advisory_sections) if advisory_sections else "" + return AggregatedReviewResult( + verdict=overall, + blocking_feedback=blocking_feedback, + advisory_content=advisory_content, + ) def _sync_worktree_with_remote( @@ -3444,9 +3540,17 @@ def _spawn_one_reviewer( # type: ignore[no-untyped-def] for rtype in reviewer_types } - overall_verdict, combined_feedback = _aggregate_review_verdicts(all_verdicts) + agg_result = _aggregate_review_verdicts(all_verdicts) - if overall_verdict == "approved": + if agg_result.advisory_content: + logger.info( + "Review advisory content (non-blocking)", + pipeline_id=pipeline_id, + phase_id=phase_id, + advisory_preview=agg_result.advisory_content[:500], + ) + + if agg_result.verdict == "approved": logger.info( "Phase approved by all reviewers", pipeline_id=pipeline_id, @@ -3461,12 +3565,14 @@ def _spawn_one_reviewer( # type: ignore[no-untyped-def] phase_id=phase_id, retry=retry, ) - if tester_gap_summary and combined_feedback: - prior_feedback = f"{combined_feedback}\n\n{tester_gap_summary}" + if tester_gap_summary and agg_result.blocking_feedback: + prior_feedback = ( + f"{agg_result.blocking_feedback}\n\n{tester_gap_summary}" + ) elif tester_gap_summary: prior_feedback = tester_gap_summary else: - prior_feedback = combined_feedback + prior_feedback = agg_result.blocking_feedback last_reviewed_commit = cycle_head continue else: @@ -5393,9 +5499,17 @@ def _spawn_reviewer( # type: ignore[no-untyped-def] pipeline_id=pipeline_id, ) - overall_verdict, combined_feedback = _aggregate_review_verdicts(all_verdicts) + agg_result = _aggregate_review_verdicts(all_verdicts) + + if agg_result.advisory_content: + logger.info( + "Review advisory content (non-blocking)", + pipeline_id=pipeline_id, + phase=current_phase.value, + advisory_preview=agg_result.advisory_content[:500], + ) - if overall_verdict == "approved": + if agg_result.verdict == "approved": logger.info( "All reviewers approved", pipeline_id=pipeline_id, @@ -5430,12 +5544,14 @@ def _spawn_reviewer( # type: ignore[no-untyped-def] # Store feedback and loop — merge tester gaps with reviewer # feedback so the coder sees both on the next cycle. - if tester_gap_summary and combined_feedback: - review_feedback = f"{combined_feedback}\n\n{tester_gap_summary}" + if tester_gap_summary and agg_result.blocking_feedback: + review_feedback = ( + f"{agg_result.blocking_feedback}\n\n{tester_gap_summary}" + ) elif tester_gap_summary: review_feedback = tester_gap_summary else: - review_feedback = combined_feedback + review_feedback = agg_result.blocking_feedback with get_pipeline_state_lock(pipeline_id): pipeline = store.load_pipeline(pipeline_id) phase_execution = pipeline.get_phase_execution(current_phase) diff --git a/orchestrator/tests/test_pipeline_prompts.py b/orchestrator/tests/test_pipeline_prompts.py index f0f1bc3d..52c41a5f 100644 --- a/orchestrator/tests/test_pipeline_prompts.py +++ b/orchestrator/tests/test_pipeline_prompts.py @@ -2475,6 +2475,7 @@ def test_draft_reviewer_has_expanded_steps(self): assert "Cross-reference" in prompt assert "Cite specific" in prompt assert "completeness" in prompt.lower() +<<<<<<< HEAD def test_non_code_reviewer_generic_conventions_framing(self): """Non-code reviewers get generic quality standards framing, not infrastructure framing.""" @@ -2639,3 +2640,5 @@ def test_code_reviewer_has_systematic_steps(self): assert "Trace data flow" in prompt assert "edge cases" in prompt.lower() assert "Research when uncertain" in prompt +======= +>>>>>>> d42035edc (Deepen SDLC review quality with expanded verdict schema and aligned prompts) diff --git a/orchestrator/tests/test_tier3_execute.py b/orchestrator/tests/test_tier3_execute.py index 9036acac..cc26d39d 100644 --- a/orchestrator/tests/test_tier3_execute.py +++ b/orchestrator/tests/test_tier3_execute.py @@ -713,6 +713,74 @@ def test_reads_valid_verdict(self, tmp_path: Path): if result is not None: assert result.verdict == "approved" + def test_backward_compat_old_json_without_new_fields(self, tmp_path: Path): + """Old verdict JSON without analysis/suggestions fields parses correctly.""" + reviews_dir = tmp_path / ".egg-state" / "reviews" + reviews_dir.mkdir(parents=True, exist_ok=True) + # Old format: no analysis or suggestions fields + verdict = { + "verdict": "needs_revision", + "summary": "Found issues", + "feedback": "Fix the bug", + "timestamp": "2024-01-01T00:00:00Z", + } + (reviews_dir / "42-implement-code-review.json").write_text( + json.dumps(verdict), encoding="utf-8" + ) + + result = self._read(tmp_path, "implement", "code", "issue", 42, "test-pipeline") + if result is not None: + assert result.verdict == "needs_revision" + assert result.feedback == "Fix the bug" + # New fields default to empty strings + assert result.analysis == "" + assert result.suggestions == "" + + def test_reads_verdict_with_all_fields(self, tmp_path: Path): + """Verdict JSON with all new fields is parsed correctly.""" + reviews_dir = tmp_path / ".egg-state" / "reviews" + reviews_dir.mkdir(parents=True, exist_ok=True) + verdict = { + "verdict": "approved", + "summary": "Code looks good", + "analysis": "Reviewed all changed files. Logic is sound.", + "suggestions": "Consider adding a docstring to the helper function.", + "feedback": "", + "timestamp": "2024-01-01T00:00:00Z", + } + (reviews_dir / "42-implement-code-review.json").write_text( + json.dumps(verdict), encoding="utf-8" + ) + + result = self._read(tmp_path, "implement", "code", "issue", 42, "test-pipeline") + if result is not None: + assert result.verdict == "approved" + assert result.analysis == "Reviewed all changed files. Logic is sound." + assert result.suggestions == "Consider adding a docstring to the helper function." + assert result.feedback == "" + + +class TestReviewVerdictDefaults: + """Tests that ReviewVerdict defaults work for existing usage patterns.""" + + def test_minimal_construction(self): + """ReviewVerdict with only verdict field uses empty defaults for new fields.""" + v = ReviewVerdict(verdict="approved") + assert v.verdict == "approved" + assert v.summary == "" + assert v.analysis == "" + assert v.suggestions == "" + assert v.feedback == "" + assert v.timestamp == "" + + def test_construction_with_feedback_only(self): + """ReviewVerdict with verdict and feedback (common mock pattern) works.""" + v = ReviewVerdict(verdict="needs_revision", feedback="Fix types") + assert v.verdict == "needs_revision" + assert v.feedback == "Fix types" + assert v.analysis == "" + assert v.suggestions == "" + class TestReadLastReviewFeedback: """Tests for _read_last_review_feedback helper.""" diff --git a/tests/workflows/test_multi_reviewer.py b/tests/workflows/test_multi_reviewer.py index e99c7ea2..cde992bf 100644 --- a/tests/workflows/test_multi_reviewer.py +++ b/tests/workflows/test_multi_reviewer.py @@ -421,6 +421,7 @@ def test_positional_access_backward_compat(self): # Positional: [0]=verdict, [1]=blocking_feedback, [2]=advisory_content assert result[0] == "needs_revision" assert "Bug found" in result[1] +<<<<<<< HEAD def test_empty_verdicts_dict(self): """Empty dict returns approved with empty strings.""" @@ -518,3 +519,5 @@ def test_suggestions_prefixed_in_advisory(self): result = self._aggregate(verdicts) assert "**Suggestions:**" in result.advisory_content assert "type annotation" in result.advisory_content +======= +>>>>>>> d42035edc (Deepen SDLC review quality with expanded verdict schema and aligned prompts) From 020c12209daaa6dac98a4b7fdb790a695718251f Mon Sep 17 00:00:00 2001 From: egg Date: Tue, 24 Feb 2026 08:13:18 +0000 Subject: [PATCH 11/16] docs: Update review verdict schema, aggregation, and conventions for deeper SDLC reviews --- docs/guides/sdlc-pipeline.md | 26 +++++++++++++++++++++++--- orchestrator/README.md | 2 +- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/docs/guides/sdlc-pipeline.md b/docs/guides/sdlc-pipeline.md index df3c9986..346c4b89 100644 --- a/docs/guides/sdlc-pipeline.md +++ b/docs/guides/sdlc-pipeline.md @@ -320,7 +320,8 @@ The orchestrator runs multiple specialized reviewers in parallel, with phase-spe **Verdict Aggregation:** - All reviewers run in parallel - Any `needs_revision` from any reviewer → aggregate `needs_revision` -- Feedback is combined with per-reviewer section headers +- Blocking feedback (from `needs_revision` verdicts) is combined with per-reviewer section headers and passed to the next revision cycle +- Analysis and suggestions from **all** verdicts (including `approved`) are collected as advisory content and logged for observability - Failed reviewers are tracked separately and trigger escalation **Per-Reviewer State Tracking:** @@ -447,12 +448,31 @@ The refine and plan phases include an automated internal review step before huma { "reviewer": "refine" | "plan" | "agent-design" | "contract" | "code", "verdict": "approved" | "needs_revision", - "summary": "Brief summary of findings", - "feedback": "Detailed feedback (empty if approved)", + "summary": "Brief summary of findings (1-2 sentences)", + "analysis": "Detailed analysis of the reviewed work (always populated)", + "suggestions": "Non-blocking suggestions for improvement (even when approving)", + "feedback": "Blocking issues requiring revision (empty when approving)", "timestamp": "ISO 8601 timestamp" } ``` +**Field guidelines:** +- **analysis**: Always populated regardless of verdict. Describes what was reviewed, what was found, and reasoning. Code reviewers provide file-by-file analysis; contract reviewers provide criterion-by-criterion verification; plan/refine reviewers provide section-by-section evaluation. +- **suggestions**: Non-blocking observations and improvement ideas, included even when approving. These are surfaced as advisory content for observability. +- **feedback**: Reserved for blocking issues only — problems that must be fixed before approval. Empty when the verdict is `approved`. + +**Review Conventions:** + +All SDLC reviewers follow quality standards aligned with the PR reviewer workflow: + +1. **Be comprehensive** — Review the entire scope, not just the obvious parts +2. **Be specific** — Reference exact file paths, line numbers, function names, and code snippets +3. **Be direct** — State issues plainly without hedging or softening language +4. **Suggest fixes** — When identifying a problem, include a concrete suggestion for resolution +5. **Provide context** — Explain *why* something is an issue (impact, risk, or principle violated) + +Code reviewers additionally receive "last line of defense" framing and must provide file-by-file analysis of all changed files. Draft-based reviewers (refine, plan) follow expanded procedural steps that require cross-referencing each section against criteria and citing specific evidence. + **Review Criteria for Refine:** - Does the analysis address the issue description? - Are options meaningfully different and well-reasoned? diff --git a/orchestrator/README.md b/orchestrator/README.md index ecf355a1..9a72d6d2 100644 --- a/orchestrator/README.md +++ b/orchestrator/README.md @@ -169,7 +169,7 @@ See [Architecture: Deployment Modes](../docs/architecture/orchestrator.md#deploy orchestrator/ ├── api.py # Flask REST API server with blueprint registration ├── cli.py # CLI interface (serve, health, pipelines commands) -├── models.py # Pydantic models (Pipeline, AgentExecution, ContainerInfo, etc.) +├── models.py # Pydantic models (Pipeline, AgentExecution, ReviewVerdict, AggregatedReviewResult, etc.) ├── state_store.py # Git-backed persistent state storage ├── container_spawner.py # Container spawning with gateway session integration ├── container_monitor.py # Container state monitoring and lifecycle tracking From 224a06c29e908d87deeed73a6d8256aedadcadb3 Mon Sep 17 00:00:00 2001 From: egg Date: Tue, 24 Feb 2026 08:19:56 +0000 Subject: [PATCH 12/16] Fix merge conflicts and lint issues in test files --- orchestrator/tests/test_pipeline_prompts.py | 10 +++------- tests/workflows/test_multi_reviewer.py | 8 +------- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/orchestrator/tests/test_pipeline_prompts.py b/orchestrator/tests/test_pipeline_prompts.py index 52c41a5f..e80d03b3 100644 --- a/orchestrator/tests/test_pipeline_prompts.py +++ b/orchestrator/tests/test_pipeline_prompts.py @@ -8,6 +8,8 @@ from pathlib import Path from unittest.mock import MagicMock, patch +import pytest + # Mock heavy dependencies that pipelines.py imports at module level _docker_mock = MagicMock() sys.modules.setdefault("docker", _docker_mock) @@ -2475,7 +2477,6 @@ def test_draft_reviewer_has_expanded_steps(self): assert "Cross-reference" in prompt assert "Cite specific" in prompt assert "completeness" in prompt.lower() -<<<<<<< HEAD def test_non_code_reviewer_generic_conventions_framing(self): """Non-code reviewers get generic quality standards framing, not infrastructure framing.""" @@ -2598,11 +2599,8 @@ def test_non_code_non_draft_reviewer_short_steps(self): def test_unknown_reviewer_type_raises_error(self): """Unknown reviewer type raises ValueError in preamble.""" - try: + with pytest.raises(ValueError, match="Unknown reviewer type"): _get_reviewer_scope_preamble("unknown-type", "implement") - assert False, "Expected ValueError was not raised" - except ValueError as e: - assert "Unknown reviewer type" in str(e) def test_feedback_field_guideline_blocking_only(self): """Feedback field guideline makes clear it's for blocking issues only.""" @@ -2640,5 +2638,3 @@ def test_code_reviewer_has_systematic_steps(self): assert "Trace data flow" in prompt assert "edge cases" in prompt.lower() assert "Research when uncertain" in prompt -======= ->>>>>>> d42035edc (Deepen SDLC review quality with expanded verdict schema and aligned prompts) diff --git a/tests/workflows/test_multi_reviewer.py b/tests/workflows/test_multi_reviewer.py index cde992bf..93a02ee2 100644 --- a/tests/workflows/test_multi_reviewer.py +++ b/tests/workflows/test_multi_reviewer.py @@ -11,7 +11,6 @@ import sys from pathlib import Path -from types import ModuleType from unittest.mock import MagicMock # Add shared and orchestrator to path for import @@ -336,9 +335,7 @@ def test_any_needs_revision_returns_needs_revision(self): """Any needs_revision → overall needs_revision.""" verdicts = { "code": self.ReviewVerdict(verdict="approved"), - "contract": self.ReviewVerdict( - verdict="needs_revision", feedback="Missing tests" - ), + "contract": self.ReviewVerdict(verdict="needs_revision", feedback="Missing tests"), } result = self._aggregate(verdicts) assert result.verdict == "needs_revision" @@ -421,7 +418,6 @@ def test_positional_access_backward_compat(self): # Positional: [0]=verdict, [1]=blocking_feedback, [2]=advisory_content assert result[0] == "needs_revision" assert "Bug found" in result[1] -<<<<<<< HEAD def test_empty_verdicts_dict(self): """Empty dict returns approved with empty strings.""" @@ -519,5 +515,3 @@ def test_suggestions_prefixed_in_advisory(self): result = self._aggregate(verdicts) assert "**Suggestions:**" in result.advisory_content assert "type annotation" in result.advisory_content -======= ->>>>>>> d42035edc (Deepen SDLC review quality with expanded verdict schema and aligned prompts) From 2e73345ebea1167be7e07fa96a8d1be5f9473320 Mon Sep 17 00:00:00 2001 From: egg Date: Tue, 24 Feb 2026 08:31:22 +0000 Subject: [PATCH 13/16] Fix docker mock exception classes in orchestrator test conftest When the docker SDK is not installed, other test files inject MagicMock into sys.modules["docker"], causing docker_client.py's `from docker.errors import NotFound, DockerException` to bind MagicMock objects instead of real exception classes. This breaks `except NotFound` clauses at runtime (TypeError: catching classes that do not inherit from BaseException). The conftest now creates proper exception class stubs matching the docker SDK hierarchy and registers them in sys.modules before test collection, so that both the source module and tests use real exception classes. Fixes 2 failing tests: - TestDockerClientConnection.test_is_connected_false - TestContainerOperations.test_start_container_not_found --- .egg-state/checks/897-implement-results.json | 20 ++++++++++++ orchestrator/tests/conftest.py | 34 +++++++++++++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 .egg-state/checks/897-implement-results.json diff --git a/.egg-state/checks/897-implement-results.json b/.egg-state/checks/897-implement-results.json new file mode 100644 index 00000000..2f76049a --- /dev/null +++ b/.egg-state/checks/897-implement-results.json @@ -0,0 +1,20 @@ +{ + "all_passed": true, + "checks": [ + { + "name": "lint", + "passed": true, + "output": "==> Ruff check...\nAll checks passed!\n==> Ruff format check...\n431 files already formatted\n==> Mypy...\nSuccess: no issues found in 118 source files\n==> Shellcheck...\n==> Yamllint...\nSKIP: yamllint not installed\n==> Hadolint...\nSKIP: hadolint not installed\n==> Actionlint...\nSKIP: actionlint not installed\n==> Custom checks...\n bin-symlinks...\nOK: All 2 bin/ symlinks are valid\n claude-imports...\nWarning: host-services directory not found\n container-host-boundary...\nOK: No forbidden host-services imports found in sandbox\n container-paths...\nOK: No problematic sys.path patterns found\n docker-and-claude-invocations...\nOK: No docker/claude invocation violations found\n gh-cli-usage...\nWarning: host-services directory not found\n hardcoded-ports...\nOK: No hardcoded port numbers found\n llm-api-calls...\nOK: No direct LLM API usage found outside sandbox\n model-versions...\nOK: No non-alias Claude model references found\n reviewer-job-names...\nOK: All reviewer jobs use the required naming prefix\n workflow-secrets...\nOK: No untrusted script execution with secrets found in workflows" + }, + { + "name": "test", + "passed": true, + "output": "6767 passed, 85 skipped, 4 warnings in 73.51s (0:01:13)" + }, + { + "name": "security", + "passed": true, + "output": "==> Running security scan...\nSKIP: bandit not installed" + } + ] +} diff --git a/orchestrator/tests/conftest.py b/orchestrator/tests/conftest.py index 0b90b532..9b9fadc7 100644 --- a/orchestrator/tests/conftest.py +++ b/orchestrator/tests/conftest.py @@ -6,7 +6,9 @@ """ import sys +import types from pathlib import Path +from unittest.mock import MagicMock # Project root _project_root = Path(__file__).parent.parent.parent @@ -25,4 +27,34 @@ try: import docker # noqa: F401 except ImportError: - pass + # docker SDK is not installed — create a mock module with real + # exception classes so that ``except NotFound`` works correctly. + class _DockerException(Exception): + """Mock DockerException matching docker SDK hierarchy.""" + + class _APIError(_DockerException): + """Mock APIError.""" + + class _NotFound(_APIError): + """Mock NotFound.""" + + class _ImageNotFound(_APIError): + """Mock ImageNotFound.""" + + _errors_mod = types.ModuleType("docker.errors") + _errors_mod.DockerException = _DockerException # type: ignore[attr-defined] + _errors_mod.APIError = _APIError # type: ignore[attr-defined] + _errors_mod.NotFound = _NotFound # type: ignore[attr-defined] + _errors_mod.ImageNotFound = _ImageNotFound # type: ignore[attr-defined] + + _docker_mod = MagicMock() + _docker_mod.errors = _errors_mod + # Also expose on the MagicMock directly so attribute access works + _docker_mod.errors.DockerException = _DockerException + _docker_mod.errors.APIError = _APIError + _docker_mod.errors.NotFound = _NotFound + _docker_mod.errors.ImageNotFound = _ImageNotFound + + sys.modules.setdefault("docker", _docker_mod) + sys.modules.setdefault("docker.errors", _errors_mod) + sys.modules.setdefault("docker.types", MagicMock()) From 2172dda3723cc2d15c6cbcb2def6c66a10a8eabb Mon Sep 17 00:00:00 2001 From: egg-orchestrator Date: Tue, 24 Feb 2026 08:37:33 +0000 Subject: [PATCH 14/16] Persist statefiles after implement phase --- .../agent-outputs/897-integrator-output.json | 67 +++++++++++++++++++ .egg-state/contracts/897.json | 32 ++++----- .../reviews/897-implement-code-review.json | 9 +++ .../897-implement-contract-review.json | 9 +++ .egg-state/reviews/897-plan-plan-review.json | 9 +++ 5 files changed, 110 insertions(+), 16 deletions(-) create mode 100644 .egg-state/agent-outputs/897-integrator-output.json create mode 100644 .egg-state/reviews/897-implement-code-review.json create mode 100644 .egg-state/reviews/897-implement-contract-review.json create mode 100644 .egg-state/reviews/897-plan-plan-review.json diff --git a/.egg-state/agent-outputs/897-integrator-output.json b/.egg-state/agent-outputs/897-integrator-output.json new file mode 100644 index 00000000..b2d3da37 --- /dev/null +++ b/.egg-state/agent-outputs/897-integrator-output.json @@ -0,0 +1,67 @@ +{ + "issue": 897, + "pipeline_id": "issue-897", + "phase": "implement", + "agent": "integrator", + "status": "pass", + "summary": "Integration verified. Resolved 2 merge conflicts in test files, fixed 2 lint issues, all 252 relevant tests pass, full suite passes (6765 pass, 2 pre-existing Docker env failures unrelated to this issue).", + "integration_checks": { + "merge_conflicts_resolved": { + "status": "fixed", + "details": "Found and resolved merge conflict markers in orchestrator/tests/test_pipeline_prompts.py and tests/workflows/test_multi_reviewer.py. Both conflicts were caused by tester WIP auto-commit colliding with coder's commit; resolution kept all tester tests (HEAD side) and removed empty counterparts." + }, + "lint_issues_fixed": { + "status": "fixed", + "details": "Fixed B011 (assert False) in test_pipeline_prompts.py by replacing with pytest.raises(). Removed unused import (types.ModuleType) in test_multi_reviewer.py. Ran ruff format on 2 files." + }, + "test_suite": { + "status": "pass", + "total_tests": 6852, + "passed": 6765, + "failed": 2, + "skipped": 85, + "pre_existing_failures": [ + "orchestrator/tests/test_docker_client.py::TestDockerClientConnection::test_is_connected_false", + "orchestrator/tests/test_docker_client.py::TestContainerOperations::test_start_container_not_found" + ], + "pre_existing_failure_reason": "Docker client tests fail in sandbox environment (Docker is connected when test expects disconnected; mock type mismatch). Not related to issue #897 changes." + }, + "relevant_tests": { + "status": "pass", + "count": 252, + "files": [ + "orchestrator/tests/test_pipeline_prompts.py", + "orchestrator/tests/test_tier3_execute.py", + "tests/workflows/test_multi_reviewer.py" + ] + }, + "lint": { + "status": "pass", + "details": "All ruff check and format rules pass. All custom lint checks pass." + }, + "backward_compatibility": { + "status": "verified", + "details": "ReviewVerdict model uses default empty strings for new fields (analysis, suggestions), so old JSON without these fields parses correctly. AggregatedReviewResult is a NamedTuple supporting both named and positional access. Tests explicitly verify both backward-compat scenarios." + } + }, + "changes_summary": { + "coder_changes": { + "orchestrator/models.py": "Added analysis and suggestions fields to ReviewVerdict. Added AggregatedReviewResult NamedTuple replacing the old (str, str) return type.", + "orchestrator/routes/pipelines.py": "Updated _get_reviewer_scope_preamble with analysis format instructions for each reviewer type. Added expanded procedural steps for draft-based reviewers. Added Review Conventions section to all prompts. Updated verdict JSON template with analysis/suggestions fields and guidelines. Refactored _aggregate_review_verdicts to return AggregatedReviewResult with advisory_content. Updated both call sites in _run_tier3_implement and _run_pipeline. Added advisory content logging.", + "docs/guides/sdlc-pipeline.md": "Updated verdict schema documentation with new fields, field guidelines, and review conventions.", + "orchestrator/README.md": "Updated models.py description to mention ReviewVerdict and AggregatedReviewResult." + }, + "tester_changes": { + "orchestrator/tests/test_pipeline_prompts.py": "24 new tests in TestBuildReviewPrompt class covering verdict format, review conventions, preambles, field guidelines, procedural steps, delta review, prior feedback, phase restrictions, and error handling.", + "orchestrator/tests/test_tier3_execute.py": "5 new tests: backward compat for old JSON, full-field parsing, ReviewVerdict minimal construction, and feedback-only construction.", + "tests/workflows/test_multi_reviewer.py": "16 new tests in TestProductionAggregateReviewVerdicts class covering all approved, needs_revision, None verdicts, advisory content collection, blocking feedback, backward compat, positional access, empty dicts, feedback fallback to summary, multiple needs_revision, mixed verdicts, and suggestions prefix formatting." + }, + "integrator_fixes": { + "orchestrator/tests/test_pipeline_prompts.py": "Resolved merge conflict markers, added pytest import, replaced assert False with pytest.raises.", + "tests/workflows/test_multi_reviewer.py": "Resolved merge conflict markers, removed unused ModuleType import, ran ruff format." + } + }, + "commit": "224a06c29", + "regressions": "none", + "risk_assessment": "low — changes are additive (new fields with defaults), all existing behavior preserved, comprehensive test coverage added" +} diff --git a/.egg-state/contracts/897.json b/.egg-state/contracts/897.json index 9ff0f352..4145db9a 100644 --- a/.egg-state/contracts/897.json +++ b/.egg-state/contracts/897.json @@ -23,9 +23,9 @@ { "role": "coder", "phase_id": null, - "status": "pending", - "started_at": null, - "completed_at": null, + "status": "complete", + "started_at": "2026-02-24T07:54:30.454529Z", + "completed_at": "2026-02-24T08:06:09.760873Z", "commit": null, "checkpoint_id": null, "outputs": {}, @@ -36,9 +36,9 @@ { "role": "tester", "phase_id": null, - "status": "pending", - "started_at": null, - "completed_at": null, + "status": "complete", + "started_at": "2026-02-24T08:06:09.765457Z", + "completed_at": "2026-02-24T08:12:24.333816Z", "commit": null, "checkpoint_id": null, "outputs": {}, @@ -49,9 +49,9 @@ { "role": "documenter", "phase_id": null, - "status": "pending", - "started_at": null, - "completed_at": null, + "status": "complete", + "started_at": "2026-02-24T08:06:09.766204Z", + "completed_at": "2026-02-24T08:14:28.086147Z", "commit": null, "checkpoint_id": null, "outputs": {}, @@ -62,9 +62,9 @@ { "role": "integrator", "phase_id": null, - "status": "pending", - "started_at": null, - "completed_at": null, + "status": "complete", + "started_at": "2026-02-24T08:14:28.090646Z", + "completed_at": "2026-02-24T08:22:37.308664Z", "commit": null, "checkpoint_id": null, "outputs": {}, @@ -73,11 +73,11 @@ "conflicts": [] }, { - "role": "reviewer_agent_design", + "role": "reviewer_contract", "phase_id": null, "status": "complete", "started_at": null, - "completed_at": "2026-02-24T07:26:30.860483Z", + "completed_at": "2026-02-24T08:35:28.827301Z", "commit": null, "checkpoint_id": null, "outputs": {}, @@ -86,11 +86,11 @@ "conflicts": [] }, { - "role": "architect", + "role": "reviewer_code", "phase_id": null, "status": "complete", "started_at": null, - "completed_at": "2026-02-24T07:43:09.779280Z", + "completed_at": "2026-02-24T08:37:24.767396Z", "commit": null, "checkpoint_id": null, "outputs": {}, diff --git a/.egg-state/reviews/897-implement-code-review.json b/.egg-state/reviews/897-implement-code-review.json new file mode 100644 index 00000000..7dd7a86b --- /dev/null +++ b/.egg-state/reviews/897-implement-code-review.json @@ -0,0 +1,9 @@ +{ + "reviewer": "code", + "verdict": "approved", + "summary": "Clean, backward-compatible expansion of review verdict schema with proper aggregation, comprehensive test coverage, and consistent migration across all call sites.", + "analysis": "Reviewed all 8 changed source/test/doc files systematically. The implementation adds `analysis` and `suggestions` fields to ReviewVerdict (Pydantic model with empty-string defaults preserving backward compat), introduces AggregatedReviewResult NamedTuple replacing the previous 2-tuple return, and updates both call sites in _run_tier3_implement and _run_pipeline. The _build_review_prompt function now emits structured field guidelines, review conventions, and reviewer-type-specific analysis format instructions. All old tuple-unpacking references (`overall_verdict, combined_feedback`) are fully removed — verified via grep. The conftest.py docker mock fix correctly creates real exception classes instead of MagicMock objects, preventing TypeError in `except NotFound:` clauses. Advisory content is logged (500-char preview) but not persisted, which aligns with the stated observability purpose. Tests cover backward compat (old JSON without new fields), full-field parsing, ReviewVerdict construction defaults, aggregation edge cases (empty dict, all-None, mixed verdicts, feedback-fallback-to-summary), and all prompt generation paths. 252 tests pass across all three test suites.", + "suggestions": "Minor inconsistency: tests/workflows/test_multi_reviewer.py uses bare MagicMock() for docker module mocking while orchestrator/tests/conftest.py creates proper exception classes. Since test_multi_reviewer.py only exercises _aggregate_review_verdicts (which never catches docker exceptions), this is not a practical problem, but aligning the mock strategy would prevent subtle breakage if future tests in that file exercise docker exception paths. Consider extracting the docker mock setup into a shared test utility.", + "feedback": "", + "timestamp": "2026-02-24T08:45:00Z" +} diff --git a/.egg-state/reviews/897-implement-contract-review.json b/.egg-state/reviews/897-implement-contract-review.json new file mode 100644 index 00000000..beec7263 --- /dev/null +++ b/.egg-state/reviews/897-implement-contract-review.json @@ -0,0 +1,9 @@ +{ + "reviewer": "contract", + "verdict": "approved", + "summary": "All 13 tasks from the implementation plan are fully implemented, tests pass (6767 passed), and documentation is updated.", + "analysis": "### Contract Structure Note\n\nThe formal contract (897.json) has empty `acceptance_criteria` and `phases` arrays — the contract was never populated with structured tasks during pipeline setup. However, the plan file (897-plan.md) defines 13 tasks across 3 phases with clear acceptance criteria in yaml-tasks format. This review verifies the implementation against those plan-defined criteria.\n\n### Phase 1: Model and Aggregation — All 5 tasks verified\n\n**TASK-1-1** (ReviewVerdict fields): `analysis` and `suggestions` fields added to `orchestrator/models.py:101-108` with `default=\"\"` and descriptive Field annotations. Backward compatibility confirmed — old JSON without these fields parses via Pydantic defaults (tested in `test_backward_compat_old_json_without_new_fields`).\n\n**TASK-1-2** (AggregatedReviewResult): NamedTuple defined at `orchestrator/models.py:113-125` with three fields: `verdict`, `blocking_feedback`, `advisory_content`. Importable from models.py (verified via test imports).\n\n**TASK-1-3** (Aggregation update): `_aggregate_review_verdicts()` at `pipelines.py:1787` returns `AggregatedReviewResult`. Blocking feedback collected only from `needs_revision` verdicts. Advisory content collected from ALL verdicts (including approved). None verdicts skipped.\n\n**TASK-1-4** (Tier 3 caller): Updated at `pipelines.py:3540` to use `agg_result` named fields. Only `blocking_feedback` passed to `prior_feedback`. Advisory content logged with 500-char preview.\n\n**TASK-1-5** (Main loop caller): Updated at `pipelines.py:5499` to use `agg_result` named fields. Only `blocking_feedback` used for `review_feedback`. Advisory content logged with 500-char preview.\n\n### Phase 2: Prompt Builder Alignment — All 4 tasks verified\n\n**TASK-2-1** (Verdict format): JSON template at `pipelines.py:1616-1625` includes all 7 fields (reviewer, verdict, summary, analysis, suggestions, feedback, timestamp). Field guidelines section instructs \"Always provide detailed analysis regardless of verdict\". The string \"empty if approved\" does not appear anywhere in pipelines.py. Feedback field described as \"blocking issues only\".\n\n**TASK-2-2** (Review conventions): Review Conventions section added at `pipelines.py:1557-1590` with all 5 quality standards (comprehensive, specific, direct, suggest fixes, provide context). Code reviewer gets \"critical infrastructure\" and \"last line of defense\" framing. Conventions are inlined in Python code, not loaded from `action/review-conventions.md`.\n\n**TASK-2-3** (Scope preambles): Updated at `pipelines.py:1011-1060`. Code reviewer: \"file-by-file analysis\". Contract reviewer: \"criterion-by-criterion verification\". Refine reviewer: \"section-by-section evaluation\". Plan reviewer: \"section-by-section evaluation\". Agent-design reviewer: \"brief approval is acceptable\".\n\n**TASK-2-4** (Draft reviewer steps): Expanded procedural steps added at `pipelines.py:1536-1546` for draft-based reviewers (7 steps). Includes: read thoroughly, cross-reference against criteria, cite specific evidence, evaluate completeness, assess quality.\n\n### Phase 3: Tests — All 4 tasks verified\n\n**TASK-3-1** (test_tier3_execute.py): Backward-compat test for old JSON added (`test_backward_compat_old_json_without_new_fields`). Test with all fields populated added (`test_reads_verdict_with_all_fields`). `TestReviewVerdictDefaults` class added for mock patterns. All existing tests pass.\n\n**TASK-3-2** (test_pipeline_prompts.py): `TestBuildReviewPrompt` class added with 20+ test methods covering: verdict format fields, conventions presence, absence of \"empty if approved\", agent-design brief approval, code file-by-file, contract criterion-by-criterion, refine/plan section-by-section, analysis/suggestions/feedback field guidelines, delta review, prior feedback, code reviewer systematic steps, and phase restrictions.\n\n**TASK-3-3** (test_multi_reviewer.py): `TestProductionAggregateReviewVerdicts` class added with 15 test methods importing and exercising `_aggregate_review_verdicts()` with `ReviewVerdict` objects. Tests verify: advisory_content from approved verdicts, AggregatedReviewResult named fields, backward compat, positional access, empty dict, all-None verdicts, multiple needs_revision combination, mixed verdicts, suggestions prefix formatting.\n\n**TASK-3-4** (Full test suite): All checks passed — 6767 tests passed, 85 skipped, 4 warnings. Lint clean (ruff, mypy). No regressions.\n\n### Additional Changes\n\n- `docs/guides/sdlc-pipeline.md`: Updated verdict schema documentation with new fields, field guidelines, and review conventions section.\n- `orchestrator/README.md`: Updated to mention AggregatedReviewResult in directory listing.\n- `orchestrator/tests/conftest.py`: Fixed Docker mock exception classes (proper class hierarchy instead of MagicMock stubs).", + "suggestions": "1. The formal contract file (897.json) has empty acceptance_criteria and phases — this appears to be a pipeline setup issue where the yaml-tasks from the plan were not parsed into the contract structure. Future pipelines should ensure contract population.\n2. The plan reviewer noted a typo in TASK-2-1 acceptance criteria (\"5 fields\" vs 7) — the implementation correctly uses 7 fields, so this was handled correctly despite the typo.\n3. Advisory content is logged but not surfaced in phase-completion issue comments — the plan reviewer noted this as a potential follow-up enhancement.", + "feedback": "", + "timestamp": "2026-02-24T08:30:00Z" +} diff --git a/.egg-state/reviews/897-plan-plan-review.json b/.egg-state/reviews/897-plan-plan-review.json new file mode 100644 index 00000000..c2c5a4d6 --- /dev/null +++ b/.egg-state/reviews/897-plan-plan-review.json @@ -0,0 +1,9 @@ +{ + "reviewer": "plan", + "verdict": "approved", + "summary": "The plan is well-structured, aligns with the analysis's recommended Option A, addresses all design decisions (AD-1 through AD-6), and provides good task granularity with testable acceptance criteria. Tasks are properly scoped and dependency ordering is correct. Three observations for the implementer are noted below but none are blocking.", + "analysis": "### 1. Alignment with Analysis\n\nThe plan faithfully implements Option A (Expand Verdict Schema + Align Prompts) as recommended by the analysis. All three root causes are addressed: (1) schema constraint via new `analysis` and `suggestions` fields, (2) prompt gap via review conventions and thoroughness framing, (3) missing approve-with-suggestions via the `suggestions` field. The six design decisions from the architecture analysis (AD-1 through AD-6) are all reflected in the Key Design Decisions section.\n\n### 2. Task Breakdown\n\nThe 13 tasks across 3 phases are discrete, well-scoped, and properly ordered. Each task targets specific code locations with clear boundaries. Phase 1 (model + aggregation) provides the structural foundation, Phase 2 (prompt builder) builds on it, Phase 3 (tests) validates everything. No overlapping responsibilities between tasks.\n\n### 3. Acceptance Criteria\n\nAcceptance criteria are specific and testable for all tasks. Minor inconsistency in TASK-2-1: the acceptance text says \"Verdict JSON template has 5 fields\" but then lists 7 fields (reviewer, verdict, summary, analysis, suggestions, feedback, timestamp). This is clearly a typo — the parenthetical \"7 total\" is correct. Not blocking but the implementer should note the actual count is 7.\n\n### 4. Dependency Ordering\n\nCorrect. Within Phase 1, the ordering is sound: model fields first (TASK-1-1, 1-2), aggregation function (TASK-1-3), then callers (TASK-1-4, 1-5). The risk analyst's R-1 concern about atomic updates is addressed by placing all five tasks in the same phase. However, the plan's risk table claims \"NamedTuple fields match old tuple positionally as fallback\" — this is incorrect. A 3-field NamedTuple raises `ValueError: too many values to unpack` when destructured into 2 variables. The mitigation works in practice (both callers updated in the same phase), but the stated rationale is wrong. The implementer should ensure TASK-1-3, 1-4, and 1-5 are committed together.\n\n### 5. Risk Assessment\n\nThe plan's risk table covers 4 risks with reasonable mitigations. The token consumption and test_multi_reviewer.py risks are well-handled. Two risks from the risk analyst's assessment that are worth noting:\n\n- **Over-reporting (R-5)**: The plan doesn't include anti-hallucination guidance for reviewers pressured to always produce analysis. The implementer should add a line like \"If the work genuinely has no issues in your scope, confirm that briefly rather than inventing concerns\" to the prompt.\n- **Review conventions drift (R-6)**: Inlining conventions means two copies exist (action/review-conventions.md and the Python code). Adding cross-reference comments in both locations would help future maintainers.\n\n### 6. Test Strategy\n\nComprehensive. The backward-compatibility test for old JSON, the TestBuildReviewPrompt class for prompt validation, and the plan to exercise the production `_aggregate_review_verdicts()` (not just the local stub in test_multi_reviewer.py) are all appropriate. The full regression run in TASK-3-4 is the right final step.\n\n### 7. Completeness\n\nThe plan covers model changes, prompt alignment, aggregation updates, and tests — all necessary for the requested improvement. One gap worth noting: advisory_content is collected and logged (TASK-1-4, 1-5) but not surfaced in phase-completion issue comments. The raw verdict JSON files in `.egg-state/reviews/` will contain the detailed analysis (which is directly readable), so the primary surfacing mechanism works. Aggregated surfacing to phase-completion comments could be a follow-up enhancement but is not required for the core value delivery of this issue.", + "suggestions": "1. **Fix the field count typo in TASK-2-1 acceptance criteria**: Change \"5 fields\" to \"7 fields\" for consistency with the parenthetical list.\n2. **Remove the incorrect NamedTuple positional fallback claim** from the risk table. The actual mitigation (updating callers in the same phase) is sound; the fallback claim is not.\n3. **Consider adding anti-hallucination guidance** to TASK-2-2 or TASK-2-3 prompt changes — a single sentence telling reviewers that confirming quality briefly is preferable to fabricating concerns.\n4. **Add cross-reference comments** when inlining review conventions (TASK-2-2): a comment in the Python code noting the conventions also exist in `action/review-conventions.md`, and vice versa.", + "feedback": "", + "timestamp": "2026-02-24T07:55:00Z" +} From e8b3c89de293b2b789da6e7ac9343281d824a16d Mon Sep 17 00:00:00 2001 From: egg Date: Tue, 24 Feb 2026 08:38:37 +0000 Subject: [PATCH 15/16] Fix minor formatting in pipelines.py --- orchestrator/routes/pipelines.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/orchestrator/routes/pipelines.py b/orchestrator/routes/pipelines.py index 944f48c3..96179ccc 100644 --- a/orchestrator/routes/pipelines.py +++ b/orchestrator/routes/pipelines.py @@ -1539,9 +1539,7 @@ def _build_review_prompt( lines.append( "3. Cross-reference each section of the draft against the review criteria below" ) - lines.append( - "4. Cite specific sections, quotes, or omissions as evidence in your analysis" - ) + lines.append("4. Cite specific sections, quotes, or omissions as evidence in your analysis") lines.append("5. Evaluate completeness — identify any criteria not adequately addressed") lines.append("6. Assess overall quality and coherence of the draft") lines.append(f"7. Write your verdict to `{verdict_path}` as JSON") @@ -1577,7 +1575,7 @@ def _build_review_prompt( ) lines.append( "3. **Be direct.** State issues plainly without hedging or softening language. " - "\"This will fail when X\" not \"you might want to consider X\"." + '"This will fail when X" not "you might want to consider X".' ) lines.append( "4. **Suggest fixes.** When identifying a problem, include a concrete suggestion " @@ -3566,9 +3564,7 @@ def _spawn_one_reviewer( # type: ignore[no-untyped-def] retry=retry, ) if tester_gap_summary and agg_result.blocking_feedback: - prior_feedback = ( - f"{agg_result.blocking_feedback}\n\n{tester_gap_summary}" - ) + prior_feedback = f"{agg_result.blocking_feedback}\n\n{tester_gap_summary}" elif tester_gap_summary: prior_feedback = tester_gap_summary else: @@ -5545,9 +5541,7 @@ def _spawn_reviewer( # type: ignore[no-untyped-def] # Store feedback and loop — merge tester gaps with reviewer # feedback so the coder sees both on the next cycle. if tester_gap_summary and agg_result.blocking_feedback: - review_feedback = ( - f"{agg_result.blocking_feedback}\n\n{tester_gap_summary}" - ) + review_feedback = f"{agg_result.blocking_feedback}\n\n{tester_gap_summary}" elif tester_gap_summary: review_feedback = tester_gap_summary else: From b5f3493ed8ae43ea468198a733f208b45dd253b9 Mon Sep 17 00:00:00 2001 From: "james-in-a-box[bot]" <246424927+james-in-a-box[bot]@users.noreply.github.com> Date: Tue, 24 Feb 2026 08:51:53 +0000 Subject: [PATCH 16/16] Remove .hypothesis cache files and add to .gitignore These are Hypothesis testing framework cache/database files that are machine-specific and non-deterministic. They should not be tracked. --- .gitignore | 1 + .hypothesis/constants/00f20e874979327c | 4 ---- .hypothesis/constants/00f53ea8b62388fa | 4 ---- .hypothesis/constants/01f74a9a59701f85 | 4 ---- .hypothesis/constants/0342181e1bd12790 | 4 ---- .hypothesis/constants/03dfa3896d216c97 | 4 ---- .hypothesis/constants/067bfc402fa23a6f | 4 ---- .hypothesis/constants/08d45f80e960849e | 4 ---- .hypothesis/constants/0900a684f3a3766d | 4 ---- .hypothesis/constants/0be7f0ac4f43628c | 4 ---- .hypothesis/constants/0ce7ab84fa072573 | 4 ---- .hypothesis/constants/0dfc0bb66b32e048 | 4 ---- .hypothesis/constants/0f53725329c26da4 | 4 ---- .hypothesis/constants/112e48bca6962912 | 4 ---- .hypothesis/constants/126e2a6fa864f5e4 | 4 ---- .hypothesis/constants/13504d673e8bb2e2 | 4 ---- .hypothesis/constants/16f423bdc8cd36d3 | 4 ---- .hypothesis/constants/18fcc08ef98fde6f | 4 ---- .hypothesis/constants/198b481f4da30c78 | 4 ---- .hypothesis/constants/1a75fb2c5a634e52 | 4 ---- .hypothesis/constants/1c9687cd1c8bb9e7 | 4 ---- .hypothesis/constants/1c972e08847d2a50 | 4 ---- .hypothesis/constants/1d14e802fcfa454f | 4 ---- .hypothesis/constants/1d2480d1c18e5ace | 4 ---- .hypothesis/constants/1d6e2398a096a201 | 4 ---- .hypothesis/constants/1db06484f014299a | 4 ---- .hypothesis/constants/1e9d89b39c0c8663 | 4 ---- .hypothesis/constants/1ecab4796e6213d0 | 4 ---- .hypothesis/constants/20370c1edfca5c1b | 4 ---- .hypothesis/constants/225008640bfd14aa | 4 ---- .hypothesis/constants/230788c05eba3bb3 | 4 ---- .hypothesis/constants/2319e79a710edf2f | 4 ---- .hypothesis/constants/24ba4f0a82b38d9b | 4 ---- .hypothesis/constants/251c8f8e27fdd983 | 4 ---- .hypothesis/constants/262b1a2b548b4813 | 4 ---- .hypothesis/constants/279fef10afa8a9d2 | 4 ---- .hypothesis/constants/286bf5f38a08a328 | 4 ---- .hypothesis/constants/28a2ad9660aea065 | 4 ---- .hypothesis/constants/2a376eba55014067 | 4 ---- .hypothesis/constants/2a4d6fdca7e32452 | 4 ---- .hypothesis/constants/2da316f7eb364ba2 | 4 ---- .hypothesis/constants/2fc8c18522ebb776 | 4 ---- .hypothesis/constants/2fcd3db891e6a004 | 4 ---- .hypothesis/constants/313e3c61e44b222b | 4 ---- .hypothesis/constants/3250de540824c309 | 4 ---- .hypothesis/constants/32e204518134dad2 | 4 ---- .hypothesis/constants/330d1d189f8eef40 | 4 ---- .hypothesis/constants/38228c703f8fb4b8 | 4 ---- .hypothesis/constants/392b89d1ef89a2c3 | 4 ---- .hypothesis/constants/39700f051169726b | 4 ---- .hypothesis/constants/3a2167e67605985c | 4 ---- .hypothesis/constants/3ae779cdb993c4c5 | 4 ---- .hypothesis/constants/3b45313687bba9b8 | 4 ---- .hypothesis/constants/3b67f7ddaeddce27 | 4 ---- .hypothesis/constants/3eb73e08628c2238 | 4 ---- .hypothesis/constants/421cf5837f2d699e | 4 ---- .hypothesis/constants/43e0facb839eb1b2 | 4 ---- .hypothesis/constants/45dd2e709899e84f | 4 ---- .hypothesis/constants/49745a28c00ed4a5 | 4 ---- .hypothesis/constants/4c96678797af7a13 | 4 ---- .hypothesis/constants/4c9d15d0279c51b7 | 4 ---- .hypothesis/constants/4cc3f46c3441ee36 | 4 ---- .hypothesis/constants/4cda8bf85938f7eb | 4 ---- .hypothesis/constants/4ece4d8313dbf605 | 4 ---- .hypothesis/constants/4ef32942a287beb4 | 4 ---- .hypothesis/constants/4f07a9c831c6f212 | 4 ---- .hypothesis/constants/509cdc89a791f856 | 4 ---- .hypothesis/constants/511355bf243f0d52 | 4 ---- .hypothesis/constants/5394883cdc8934f9 | 4 ---- .hypothesis/constants/55c5e3e37035e354 | 4 ---- .hypothesis/constants/562993fd4babc3d3 | 4 ---- .hypothesis/constants/5740801a1206fde7 | 4 ---- .hypothesis/constants/57ce45cbb8e07966 | 4 ---- .hypothesis/constants/58bb84fa70f4b5ca | 4 ---- .hypothesis/constants/59a3d024bea7437c | 4 ---- .hypothesis/constants/5b79f41a5acfe503 | 4 ---- .hypothesis/constants/5c7228b42a374c5d | 4 ---- .hypothesis/constants/600783293363fef8 | 4 ---- .hypothesis/constants/622fb2a377a78521 | 4 ---- .hypothesis/constants/62a4144dc85688ee | 4 ---- .hypothesis/constants/62e69e7297f63486 | 4 ---- .hypothesis/constants/633539afd6be13a5 | 4 ---- .hypothesis/constants/6a58dd6e8e66bb91 | 4 ---- .hypothesis/constants/6b092661788ac6b6 | 4 ---- .hypothesis/constants/6b8d78ec7fe1be7b | 4 ---- .hypothesis/constants/6c0c1bae1b8e1a01 | 4 ---- .hypothesis/constants/6c70e98185d05a7d | 4 ---- .hypothesis/constants/6d819355c6a09701 | 4 ---- .hypothesis/constants/6da25e32907e3ee9 | 4 ---- .hypothesis/constants/6f1cb59bdf4098e0 | 4 ---- .hypothesis/constants/71ba56e7bda2f6b9 | 4 ---- .hypothesis/constants/758c5ab2a582073b | 4 ---- .hypothesis/constants/75916ad048e366a8 | 4 ---- .hypothesis/constants/760953e97136a180 | 4 ---- .hypothesis/constants/78706754819d8764 | 4 ---- .hypothesis/constants/7c84dedefd1cbde2 | 4 ---- .hypothesis/constants/7cef6f25b014d2b7 | 4 ---- .hypothesis/constants/7f33c3e342224c87 | 4 ---- .hypothesis/constants/816c83f6532ca62b | 4 ---- .hypothesis/constants/82087d68c872a73d | 4 ---- .hypothesis/constants/8753fc38897693cb | 4 ---- .hypothesis/constants/88a78023637ebf61 | 4 ---- .hypothesis/constants/8a1fe30e1d2c71a3 | 4 ---- .hypothesis/constants/8f6bb4ae4c5a7912 | 4 ---- .hypothesis/constants/910a59d3760f2706 | 4 ---- .hypothesis/constants/92379c7302fe5878 | 4 ---- .hypothesis/constants/9248d1b4012edaf1 | 4 ---- .hypothesis/constants/92767bced458b94e | 4 ---- .hypothesis/constants/9381368efb8300ed | 4 ---- .hypothesis/constants/93ae11514a1bc1d2 | 4 ---- .hypothesis/constants/93be14cbbd917f67 | 4 ---- .hypothesis/constants/958656e82d859095 | 4 ---- .hypothesis/constants/96a978335752f060 | 4 ---- .hypothesis/constants/96b7f20f5a75f2c5 | 4 ---- .hypothesis/constants/9778d411732b77fa | 4 ---- .hypothesis/constants/97cd9c4555a2cca6 | 4 ---- .hypothesis/constants/99bca4ca0a2f7be2 | 4 ---- .hypothesis/constants/9a5f396af21c5e42 | 4 ---- .hypothesis/constants/9b2b931afce7a42d | 4 ---- .hypothesis/constants/9c2147cfef7abdd7 | 4 ---- .hypothesis/constants/9e13917238468a8c | 4 ---- .hypothesis/constants/a0b16f041155a749 | 4 ---- .hypothesis/constants/a1a6023fc279930a | 4 ---- .hypothesis/constants/a4136aca6b851514 | 4 ---- .hypothesis/constants/a60840b027177571 | 4 ---- .hypothesis/constants/a8bb40c47f8e3f9c | 4 ---- .hypothesis/constants/a96648b2a575bed7 | 4 ---- .hypothesis/constants/ab2f93aeba5066fd | 4 ---- .hypothesis/constants/ae2847ca771c9802 | 4 ---- .hypothesis/constants/aee4ac2202df1931 | 4 ---- .hypothesis/constants/af4ad0a4f088e1ed | 4 ---- .hypothesis/constants/afa6b25c640dfe11 | 4 ---- .hypothesis/constants/b217da0623d6567c | 4 ---- .hypothesis/constants/b348d24346d06451 | 4 ---- .hypothesis/constants/b386c19c164f1cc2 | 4 ---- .hypothesis/constants/b5a044487f4ce8b6 | 4 ---- .hypothesis/constants/b68d77d253ca9c8a | 4 ---- .hypothesis/constants/b6da3cb5ac559c77 | 4 ---- .hypothesis/constants/b9f25bf6c627771f | 4 ---- .hypothesis/constants/ba53e1ba85a588bb | 4 ---- .hypothesis/constants/bd83433c7b861b64 | 4 ---- .hypothesis/constants/bfceb5beccb60d21 | 4 ---- .hypothesis/constants/bff98697456ca806 | 4 ---- .hypothesis/constants/c00c73d5fb997fc6 | 4 ---- .hypothesis/constants/c1e7a48d1bb21be6 | 4 ---- .hypothesis/constants/c27b4e4056f739ca | 4 ---- .hypothesis/constants/c358d5cd358011ce | 4 ---- .hypothesis/constants/c46f66753ea9ec79 | 4 ---- .hypothesis/constants/c6884a9944304355 | 4 ---- .hypothesis/constants/c84a43811198b0bf | 4 ---- .hypothesis/constants/c94e24de598a26b3 | 4 ---- .hypothesis/constants/c9bfb1969437e49b | 4 ---- .hypothesis/constants/ca249cf989c67921 | 4 ---- .hypothesis/constants/cb11f830266a38f7 | 4 ---- .hypothesis/constants/cca227baa51e120d | 4 ---- .hypothesis/constants/cce6cb3ba1c3bee9 | 4 ---- .hypothesis/constants/ceabf82662cdbf75 | 4 ---- .hypothesis/constants/ceb1d0465029fa83 | 4 ---- .hypothesis/constants/cfc7811c74a0eda3 | 4 ---- .hypothesis/constants/d1ecdb01d128f44c | 4 ---- .hypothesis/constants/d5032ce2f0b72e56 | 4 ---- .hypothesis/constants/d623f9cc71eca74d | 4 ---- .hypothesis/constants/d6856b5679893fb8 | 4 ---- .hypothesis/constants/d7cd0820127015d3 | 4 ---- .hypothesis/constants/d92287877e17f245 | 4 ---- .hypothesis/constants/d955d6634e87422e | 4 ---- .hypothesis/constants/da39a3ee5e6b4b0d | 4 ---- .hypothesis/constants/dc6ef3a1b5234c93 | 4 ---- .hypothesis/constants/df3d09b7b1766bec | 4 ---- .hypothesis/constants/e0a34de3bcae4642 | 4 ---- .hypothesis/constants/e144e49beae6fb71 | 4 ---- .hypothesis/constants/e21b380f350d215d | 4 ---- .hypothesis/constants/e356ac1b688445f2 | 4 ---- .hypothesis/constants/e3de064c74e1a322 | 4 ---- .hypothesis/constants/e45a76d3dd8e05b7 | 4 ---- .hypothesis/constants/e5eddde6e2bcf446 | 4 ---- .hypothesis/constants/e69f65dbd8abef8f | 4 ---- .hypothesis/constants/e830b7334c7145d3 | 4 ---- .hypothesis/constants/e8bc63ad18787151 | 4 ---- .hypothesis/constants/e9088653e78957f6 | 4 ---- .hypothesis/constants/e92f346d8980eda2 | 4 ---- .hypothesis/constants/e978b4934ef42344 | 4 ---- .hypothesis/constants/eaa33e077b23b1ca | 4 ---- .hypothesis/constants/eb36230d1c6ec60a | 4 ---- .hypothesis/constants/f363992e8bc23fd2 | 4 ---- .hypothesis/constants/f50b0baa1a6bc055 | 4 ---- .hypothesis/constants/f5fba0c9590657ac | 4 ---- .hypothesis/constants/f804a60f84a904cf | 4 ---- .hypothesis/constants/f89f357f7bd4558b | 4 ---- .hypothesis/constants/f993ffbeb7ab7d83 | 4 ---- .hypothesis/constants/fb373b5e85396387 | 4 ---- .hypothesis/constants/fb5926a4d20d8d6c | 4 ---- .hypothesis/constants/fc6509cf8d2e7621 | 4 ---- .hypothesis/constants/fd1413b487818ede | 4 ---- .hypothesis/constants/fd23d3f57846831d | 4 ---- .hypothesis/constants/fe02ea75b037cc90 | 4 ---- .hypothesis/constants/ff9057633f31936b | 4 ---- .hypothesis/unicode_data/14.0.0/charmap.json.gz | Bin 21505 -> 0 bytes .../unicode_data/14.0.0/codec-utf-8.json.gz | Bin 60 -> 0 bytes 199 files changed, 1 insertion(+), 784 deletions(-) delete mode 100644 .hypothesis/constants/00f20e874979327c delete mode 100644 .hypothesis/constants/00f53ea8b62388fa delete mode 100644 .hypothesis/constants/01f74a9a59701f85 delete mode 100644 .hypothesis/constants/0342181e1bd12790 delete mode 100644 .hypothesis/constants/03dfa3896d216c97 delete mode 100644 .hypothesis/constants/067bfc402fa23a6f delete mode 100644 .hypothesis/constants/08d45f80e960849e delete mode 100644 .hypothesis/constants/0900a684f3a3766d delete mode 100644 .hypothesis/constants/0be7f0ac4f43628c delete mode 100644 .hypothesis/constants/0ce7ab84fa072573 delete mode 100644 .hypothesis/constants/0dfc0bb66b32e048 delete mode 100644 .hypothesis/constants/0f53725329c26da4 delete mode 100644 .hypothesis/constants/112e48bca6962912 delete mode 100644 .hypothesis/constants/126e2a6fa864f5e4 delete mode 100644 .hypothesis/constants/13504d673e8bb2e2 delete mode 100644 .hypothesis/constants/16f423bdc8cd36d3 delete mode 100644 .hypothesis/constants/18fcc08ef98fde6f delete mode 100644 .hypothesis/constants/198b481f4da30c78 delete mode 100644 .hypothesis/constants/1a75fb2c5a634e52 delete mode 100644 .hypothesis/constants/1c9687cd1c8bb9e7 delete mode 100644 .hypothesis/constants/1c972e08847d2a50 delete mode 100644 .hypothesis/constants/1d14e802fcfa454f delete mode 100644 .hypothesis/constants/1d2480d1c18e5ace delete mode 100644 .hypothesis/constants/1d6e2398a096a201 delete mode 100644 .hypothesis/constants/1db06484f014299a delete mode 100644 .hypothesis/constants/1e9d89b39c0c8663 delete mode 100644 .hypothesis/constants/1ecab4796e6213d0 delete mode 100644 .hypothesis/constants/20370c1edfca5c1b delete mode 100644 .hypothesis/constants/225008640bfd14aa delete mode 100644 .hypothesis/constants/230788c05eba3bb3 delete mode 100644 .hypothesis/constants/2319e79a710edf2f delete mode 100644 .hypothesis/constants/24ba4f0a82b38d9b delete mode 100644 .hypothesis/constants/251c8f8e27fdd983 delete mode 100644 .hypothesis/constants/262b1a2b548b4813 delete mode 100644 .hypothesis/constants/279fef10afa8a9d2 delete mode 100644 .hypothesis/constants/286bf5f38a08a328 delete mode 100644 .hypothesis/constants/28a2ad9660aea065 delete mode 100644 .hypothesis/constants/2a376eba55014067 delete mode 100644 .hypothesis/constants/2a4d6fdca7e32452 delete mode 100644 .hypothesis/constants/2da316f7eb364ba2 delete mode 100644 .hypothesis/constants/2fc8c18522ebb776 delete mode 100644 .hypothesis/constants/2fcd3db891e6a004 delete mode 100644 .hypothesis/constants/313e3c61e44b222b delete mode 100644 .hypothesis/constants/3250de540824c309 delete mode 100644 .hypothesis/constants/32e204518134dad2 delete mode 100644 .hypothesis/constants/330d1d189f8eef40 delete mode 100644 .hypothesis/constants/38228c703f8fb4b8 delete mode 100644 .hypothesis/constants/392b89d1ef89a2c3 delete mode 100644 .hypothesis/constants/39700f051169726b delete mode 100644 .hypothesis/constants/3a2167e67605985c delete mode 100644 .hypothesis/constants/3ae779cdb993c4c5 delete mode 100644 .hypothesis/constants/3b45313687bba9b8 delete mode 100644 .hypothesis/constants/3b67f7ddaeddce27 delete mode 100644 .hypothesis/constants/3eb73e08628c2238 delete mode 100644 .hypothesis/constants/421cf5837f2d699e delete mode 100644 .hypothesis/constants/43e0facb839eb1b2 delete mode 100644 .hypothesis/constants/45dd2e709899e84f delete mode 100644 .hypothesis/constants/49745a28c00ed4a5 delete mode 100644 .hypothesis/constants/4c96678797af7a13 delete mode 100644 .hypothesis/constants/4c9d15d0279c51b7 delete mode 100644 .hypothesis/constants/4cc3f46c3441ee36 delete mode 100644 .hypothesis/constants/4cda8bf85938f7eb delete mode 100644 .hypothesis/constants/4ece4d8313dbf605 delete mode 100644 .hypothesis/constants/4ef32942a287beb4 delete mode 100644 .hypothesis/constants/4f07a9c831c6f212 delete mode 100644 .hypothesis/constants/509cdc89a791f856 delete mode 100644 .hypothesis/constants/511355bf243f0d52 delete mode 100644 .hypothesis/constants/5394883cdc8934f9 delete mode 100644 .hypothesis/constants/55c5e3e37035e354 delete mode 100644 .hypothesis/constants/562993fd4babc3d3 delete mode 100644 .hypothesis/constants/5740801a1206fde7 delete mode 100644 .hypothesis/constants/57ce45cbb8e07966 delete mode 100644 .hypothesis/constants/58bb84fa70f4b5ca delete mode 100644 .hypothesis/constants/59a3d024bea7437c delete mode 100644 .hypothesis/constants/5b79f41a5acfe503 delete mode 100644 .hypothesis/constants/5c7228b42a374c5d delete mode 100644 .hypothesis/constants/600783293363fef8 delete mode 100644 .hypothesis/constants/622fb2a377a78521 delete mode 100644 .hypothesis/constants/62a4144dc85688ee delete mode 100644 .hypothesis/constants/62e69e7297f63486 delete mode 100644 .hypothesis/constants/633539afd6be13a5 delete mode 100644 .hypothesis/constants/6a58dd6e8e66bb91 delete mode 100644 .hypothesis/constants/6b092661788ac6b6 delete mode 100644 .hypothesis/constants/6b8d78ec7fe1be7b delete mode 100644 .hypothesis/constants/6c0c1bae1b8e1a01 delete mode 100644 .hypothesis/constants/6c70e98185d05a7d delete mode 100644 .hypothesis/constants/6d819355c6a09701 delete mode 100644 .hypothesis/constants/6da25e32907e3ee9 delete mode 100644 .hypothesis/constants/6f1cb59bdf4098e0 delete mode 100644 .hypothesis/constants/71ba56e7bda2f6b9 delete mode 100644 .hypothesis/constants/758c5ab2a582073b delete mode 100644 .hypothesis/constants/75916ad048e366a8 delete mode 100644 .hypothesis/constants/760953e97136a180 delete mode 100644 .hypothesis/constants/78706754819d8764 delete mode 100644 .hypothesis/constants/7c84dedefd1cbde2 delete mode 100644 .hypothesis/constants/7cef6f25b014d2b7 delete mode 100644 .hypothesis/constants/7f33c3e342224c87 delete mode 100644 .hypothesis/constants/816c83f6532ca62b delete mode 100644 .hypothesis/constants/82087d68c872a73d delete mode 100644 .hypothesis/constants/8753fc38897693cb delete mode 100644 .hypothesis/constants/88a78023637ebf61 delete mode 100644 .hypothesis/constants/8a1fe30e1d2c71a3 delete mode 100644 .hypothesis/constants/8f6bb4ae4c5a7912 delete mode 100644 .hypothesis/constants/910a59d3760f2706 delete mode 100644 .hypothesis/constants/92379c7302fe5878 delete mode 100644 .hypothesis/constants/9248d1b4012edaf1 delete mode 100644 .hypothesis/constants/92767bced458b94e delete mode 100644 .hypothesis/constants/9381368efb8300ed delete mode 100644 .hypothesis/constants/93ae11514a1bc1d2 delete mode 100644 .hypothesis/constants/93be14cbbd917f67 delete mode 100644 .hypothesis/constants/958656e82d859095 delete mode 100644 .hypothesis/constants/96a978335752f060 delete mode 100644 .hypothesis/constants/96b7f20f5a75f2c5 delete mode 100644 .hypothesis/constants/9778d411732b77fa delete mode 100644 .hypothesis/constants/97cd9c4555a2cca6 delete mode 100644 .hypothesis/constants/99bca4ca0a2f7be2 delete mode 100644 .hypothesis/constants/9a5f396af21c5e42 delete mode 100644 .hypothesis/constants/9b2b931afce7a42d delete mode 100644 .hypothesis/constants/9c2147cfef7abdd7 delete mode 100644 .hypothesis/constants/9e13917238468a8c delete mode 100644 .hypothesis/constants/a0b16f041155a749 delete mode 100644 .hypothesis/constants/a1a6023fc279930a delete mode 100644 .hypothesis/constants/a4136aca6b851514 delete mode 100644 .hypothesis/constants/a60840b027177571 delete mode 100644 .hypothesis/constants/a8bb40c47f8e3f9c delete mode 100644 .hypothesis/constants/a96648b2a575bed7 delete mode 100644 .hypothesis/constants/ab2f93aeba5066fd delete mode 100644 .hypothesis/constants/ae2847ca771c9802 delete mode 100644 .hypothesis/constants/aee4ac2202df1931 delete mode 100644 .hypothesis/constants/af4ad0a4f088e1ed delete mode 100644 .hypothesis/constants/afa6b25c640dfe11 delete mode 100644 .hypothesis/constants/b217da0623d6567c delete mode 100644 .hypothesis/constants/b348d24346d06451 delete mode 100644 .hypothesis/constants/b386c19c164f1cc2 delete mode 100644 .hypothesis/constants/b5a044487f4ce8b6 delete mode 100644 .hypothesis/constants/b68d77d253ca9c8a delete mode 100644 .hypothesis/constants/b6da3cb5ac559c77 delete mode 100644 .hypothesis/constants/b9f25bf6c627771f delete mode 100644 .hypothesis/constants/ba53e1ba85a588bb delete mode 100644 .hypothesis/constants/bd83433c7b861b64 delete mode 100644 .hypothesis/constants/bfceb5beccb60d21 delete mode 100644 .hypothesis/constants/bff98697456ca806 delete mode 100644 .hypothesis/constants/c00c73d5fb997fc6 delete mode 100644 .hypothesis/constants/c1e7a48d1bb21be6 delete mode 100644 .hypothesis/constants/c27b4e4056f739ca delete mode 100644 .hypothesis/constants/c358d5cd358011ce delete mode 100644 .hypothesis/constants/c46f66753ea9ec79 delete mode 100644 .hypothesis/constants/c6884a9944304355 delete mode 100644 .hypothesis/constants/c84a43811198b0bf delete mode 100644 .hypothesis/constants/c94e24de598a26b3 delete mode 100644 .hypothesis/constants/c9bfb1969437e49b delete mode 100644 .hypothesis/constants/ca249cf989c67921 delete mode 100644 .hypothesis/constants/cb11f830266a38f7 delete mode 100644 .hypothesis/constants/cca227baa51e120d delete mode 100644 .hypothesis/constants/cce6cb3ba1c3bee9 delete mode 100644 .hypothesis/constants/ceabf82662cdbf75 delete mode 100644 .hypothesis/constants/ceb1d0465029fa83 delete mode 100644 .hypothesis/constants/cfc7811c74a0eda3 delete mode 100644 .hypothesis/constants/d1ecdb01d128f44c delete mode 100644 .hypothesis/constants/d5032ce2f0b72e56 delete mode 100644 .hypothesis/constants/d623f9cc71eca74d delete mode 100644 .hypothesis/constants/d6856b5679893fb8 delete mode 100644 .hypothesis/constants/d7cd0820127015d3 delete mode 100644 .hypothesis/constants/d92287877e17f245 delete mode 100644 .hypothesis/constants/d955d6634e87422e delete mode 100644 .hypothesis/constants/da39a3ee5e6b4b0d delete mode 100644 .hypothesis/constants/dc6ef3a1b5234c93 delete mode 100644 .hypothesis/constants/df3d09b7b1766bec delete mode 100644 .hypothesis/constants/e0a34de3bcae4642 delete mode 100644 .hypothesis/constants/e144e49beae6fb71 delete mode 100644 .hypothesis/constants/e21b380f350d215d delete mode 100644 .hypothesis/constants/e356ac1b688445f2 delete mode 100644 .hypothesis/constants/e3de064c74e1a322 delete mode 100644 .hypothesis/constants/e45a76d3dd8e05b7 delete mode 100644 .hypothesis/constants/e5eddde6e2bcf446 delete mode 100644 .hypothesis/constants/e69f65dbd8abef8f delete mode 100644 .hypothesis/constants/e830b7334c7145d3 delete mode 100644 .hypothesis/constants/e8bc63ad18787151 delete mode 100644 .hypothesis/constants/e9088653e78957f6 delete mode 100644 .hypothesis/constants/e92f346d8980eda2 delete mode 100644 .hypothesis/constants/e978b4934ef42344 delete mode 100644 .hypothesis/constants/eaa33e077b23b1ca delete mode 100644 .hypothesis/constants/eb36230d1c6ec60a delete mode 100644 .hypothesis/constants/f363992e8bc23fd2 delete mode 100644 .hypothesis/constants/f50b0baa1a6bc055 delete mode 100644 .hypothesis/constants/f5fba0c9590657ac delete mode 100644 .hypothesis/constants/f804a60f84a904cf delete mode 100644 .hypothesis/constants/f89f357f7bd4558b delete mode 100644 .hypothesis/constants/f993ffbeb7ab7d83 delete mode 100644 .hypothesis/constants/fb373b5e85396387 delete mode 100644 .hypothesis/constants/fb5926a4d20d8d6c delete mode 100644 .hypothesis/constants/fc6509cf8d2e7621 delete mode 100644 .hypothesis/constants/fd1413b487818ede delete mode 100644 .hypothesis/constants/fd23d3f57846831d delete mode 100644 .hypothesis/constants/fe02ea75b037cc90 delete mode 100644 .hypothesis/constants/ff9057633f31936b delete mode 100644 .hypothesis/unicode_data/14.0.0/charmap.json.gz delete mode 100644 .hypothesis/unicode_data/14.0.0/codec-utf-8.json.gz diff --git a/.gitignore b/.gitignore index 2db69fb5..4905c6b4 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ __pycache__/ .coverage htmlcov/ .mypy_cache/ +.hypothesis/ integration_tests/findings/ # Linting diff --git a/.hypothesis/constants/00f20e874979327c b/.hypothesis/constants/00f20e874979327c deleted file mode 100644 index deb7da28..00000000 --- a/.hypothesis/constants/00f20e874979327c +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/config/repo_config.py -# hypothesis_version: 6.151.9 - -['--access-level', '--check-readable', '--check-writable', '--default-reviewer', '--github-username', '--list-all', '--list-readable', '--list-writable', '--sync-all-prs', '.config', '=', 'EGG_REPO_CONFIG', 'GITHUB_TOKEN', 'REPO', '__main__', 'auth_mode', 'bot', 'bot_username', 'checkpoint_repo', 'checks', 'command', 'config', 'default_reviewer', 'disable_auto_fix', 'egg', 'false', 'git_email', 'git_name', 'github_sync', 'github_user', 'github_username', 'name', 'none', 'readable', 'readable_repos', 'repo_settings', 'repos', 'repositories.yaml', 'store_true', 'sync_all_prs', 'true', 'user', 'user_mode', 'writable', 'writable_repos'] \ No newline at end of file diff --git a/.hypothesis/constants/00f53ea8b62388fa b/.hypothesis/constants/00f53ea8b62388fa deleted file mode 100644 index 7d7d30af..00000000 --- a/.hypothesis/constants/00f53ea8b62388fa +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/git_client.py -# hypothesis_version: 6.151.9 - -[448, '-', '--', '--3way', '--abbrev', '--abbrev-commit', '--abbrev-ref', '--abort', '--all', '--allow-empty', '--always', '--amend', '--annotate', '--author', '--base', '--branch', '--broken', '--cached', '--check', '--chmod', '--color', '--config', '--contains', '--continue', '--cover-letter', '--create', '--date', '--decorate', '--delete', '--deleted', '--depth', '--detach', '--diff-filter', '--directory', '--dirty', '--dry-run', '--edit', '--error-unmatch', '--exclude', '--exclude-standard', '--exec', '--exit-code', '--ff-only', '--first-parent', '--follow', '--force', '--force-create', '--force-with-lease', '--fork-point', '--format', '--full-name', '--full-tree', '--get', '--get-all', '--get-url', '--git-common-dir', '--git-dir', '--global', '--graph', '--grep', '--hard', '--heads', '--ignore-all-space', '--ignore-blank-lines', '--ignore-whitespace', '--ignored', '--include-untracked', '--incremental', '--independent', '--index', '--intent-to-add', '--interactive', '--is-ancestor', '--is-bare-repository', '--jobs', '--keep', '--keep-index', '--keep-non-patch', '--keep-subject', '--killed', '--line-porcelain', '--list', '--local', '--long', '--mainline', '--match', '--max-count', '--merge', '--merged', '--merges', '--message', '--message-id', '--mixed', '--modified', '--name-only', '--name-status', '--no-ahead-behind', '--no-color', '--no-commit', '--no-edit', '--no-ff', '--no-index', '--no-merged', '--no-merges', '--no-numbered', '--no-patch', '--no-progress', '--no-scissors', '--no-stat', '--no-tags', '--no-track', '--no-verify', '--notes', '--numbered', '--numstat', '--octopus', '--oneline', '--onto', '--orphan', '--others', '--ours', '--output-directory', '--patch', '--porcelain', '--pretty', '--progress', '--prune', '--quiet', '--quit', '--really-refresh', '--receive-pack', '--recurse-submodules', '--refresh', '--refs', '--reject', '--remotes', '--resolved', '--reverse', '--scissors', '--set-upstream', '--shallow-exclude', '--shallow-since', '--short', '--shortstat', '--show-current', '--show-email', '--show-name', '--show-number', '--show-stash', '--show-stats', '--show-toplevel', '--sign', '--signoff', '--since', '--skip', '--soft', '--sort', '--source', '--squash', '--stage', '--staged', '--start-number', '--stat', '--stdout', '--summary', '--symbolic-full-name', '--symref', '--tags', '--theirs', '--track', '--unidiff-zero', '--unified', '--unmerged', '--until', '--untracked-files', '--update', '--upload-pack', '--verbose', '--verify', '--whitespace', '--word-diff', '--worktree', '-3', '-A', '-B', '-C', '-L', '-N', '-R', '-S', '-U', '-W', '-X', '-a', '-b', '-c', '-d', '-e', '-f', '-i', '-j', '-k', '-l', '-m', '-n', '-o', '-p', '-q', '-r', '-s', '-sb', '-t', '-u', '-v', '-vv', '-w', '-x', '.sh', '/', '/home/egg/repos', '/home/egg/repos/', '/repos', '/repos/', '/usr/bin/git', '0', '=', 'GIT_ASKPASS', 'GIT_PASSWORD', 'GIT_TERMINAL_PROMPT', 'GIT_USERNAME', '^-\\d+$', 'add', 'allowed_flags', 'am', 'apply', 'blame', 'branch', 'checkout', 'cherry-pick', 'clean', 'commit', 'config', 'describe', 'diff', 'fetch', 'format-patch', 'gateway.git-client', 'get-url', 'git-askpass-', 'git@', 'https://', 'log', 'ls-files', 'ls-remote', 'ls-tree', 'merge', 'merge-base', 'mv', 'push', 'rebase', 'reflog', 'remote', 'reset', 'restore', 'rev-parse', 'rm', 'safe.directory=*', 'shared', 'show', 'ssh://', 'stash', 'status', 'switch', 'tag', 'update-index', 'user', 'worktree', 'x-access-token'] \ No newline at end of file diff --git a/.hypothesis/constants/01f74a9a59701f85 b/.hypothesis/constants/01f74a9a59701f85 deleted file mode 100644 index 49c0492b..00000000 --- a/.hypothesis/constants/01f74a9a59701f85 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/worktree_manager.py -# hypothesis_version: 6.151.9 - -[0.1, 1000, '*/index.lock', '-', '--force', '--format', '--list', '--merged', '--porcelain', '--short', '--verify', '-D', '-R', '-b', '-d', '..', '.git', '/', '/home/egg/repos', 'Failed to chown', 'HEAD', 'Permission denied', 'Worktree created', 'Worktree removed', '[^a-zA-Z0-9-]', 'add', 'branch', 'chown', 'container_id', 'docker', 'failed', 'gitdir', 'gitdir:', 'gitdir: ', 'index.lock', 'name', 'origin/main', 'origin/master', 'path', 'ps', 'ref: refs/heads/', 'remove', 'repo_name', 'repos', 'rev-parse', 'shared', 'status', 'symbolic-ref', 'unknown error', 'worktree', 'worktrees', '{{.Names}}'] \ No newline at end of file diff --git a/.hypothesis/constants/0342181e1bd12790 b/.hypothesis/constants/0342181e1bd12790 deleted file mode 100644 index 816ce3c1..00000000 --- a/.hypothesis/constants/0342181e1bd12790 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/network_mode.py -# hypothesis_version: 6.151.9 - -['PRIVATE_MODE', 'false', 'private', 'private_mode', 'public', 'true', 'utf-8'] \ No newline at end of file diff --git a/.hypothesis/constants/03dfa3896d216c97 b/.hypothesis/constants/03dfa3896d216c97 deleted file mode 100644 index 66ededbe..00000000 --- a/.hypothesis/constants/03dfa3896d216c97 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/self_improvement/collectors/gha.py -# hypothesis_version: 6.151.9 - -['+00:00', '--jq', '--json', '--log', '--paginate', '--repo', '-q', '.nameWithOwner', '.workflow_runs', 'Z', 'api', 'cancelled', 'conclusion', 'created_at', 'event', 'failure', 'gh', 'gha', 'head_branch', 'html_url', 'id', 'in_progress', 'name', 'nameWithOwner', 'path', 'queued', 'repo', 'run', 'run_number', 'running', 'status', 'success', 'unknown', 'updated_at', 'view', 'workflow', 'workflow_path'] \ No newline at end of file diff --git a/.hypothesis/constants/067bfc402fa23a6f b/.hypothesis/constants/067bfc402fa23a6f deleted file mode 100644 index 3aaf7acb..00000000 --- a/.hypothesis/constants/067bfc402fa23a6f +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/.github/scripts/checks/check_fixer.py -# hypothesis_version: 6.151.9 - -[-2000, 300, '--porcelain', 'Auto-fix failed', 'Makefile', 'changes_made', 'check-fixer', 'command', 'fix', 'fix :', 'fix:', 'git', 'hint', 'make', 'make fix', 'status', 'stderr', 'stdout'] \ No newline at end of file diff --git a/.hypothesis/constants/08d45f80e960849e b/.hypothesis/constants/08d45f80e960849e deleted file mode 100644 index 608d14bf..00000000 --- a/.hypothesis/constants/08d45f80e960849e +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_config/configs/gateway.py -# hypothesis_version: 6.151.9 - -[5.0, 384, 401, 500, 1000, 2000, 4000, '.config', '0.0.0.0', '127.0.0.1', 'Authorization', 'EGG_LAUNCHER_SECRET', 'GATEWAY_HOST', 'GATEWAY_PORT', 'GatewayConfig', '_secret_source', 'auto-generated', 'combined', 'egg', 'environment', 'gateway', 'gh_execute', 'gh_pr_close', 'gh_pr_comment', 'gh_pr_create', 'gh_pr_edit', 'git_push', 'host', 'launcher-secret', 'launcher-secret file', 'ok', 'port', 'rate_limits', 'secret', 'status', 'unknown'] \ No newline at end of file diff --git a/.hypothesis/constants/0900a684f3a3766d b/.hypothesis/constants/0900a684f3a3766d deleted file mode 100644 index a85781f7..00000000 --- a/.hypothesis/constants/0900a684f3a3766d +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/transcript_buffer.py -# hypothesis_version: 6.151.9 - -[448, 1024, 2000, 5000, '...', '.jsonl.tmp', '/tmp/egg-transcripts', 'API turn captured', 'Buffer cleared', 'Failed to get stats', 'ab', 'api_turn', 'container_id', 'content', 'duration_ms', 'entries_dropped', 'error', 'function', 'max_size', 'max_tokens', 'messages', 'model', 'name', 'path', 'r+b', 'replace', 'request', 'response', 'role', 'shared', 'size_bytes', 'stop_reason', 'streaming', 'system', 'text', 'timestamp', 'tool_result', 'tool_use', 'tools', 'type', 'usage', 'utf-8', 'w'] \ No newline at end of file diff --git a/.hypothesis/constants/0be7f0ac4f43628c b/.hypothesis/constants/0be7f0ac4f43628c deleted file mode 100644 index eae8cf4d..00000000 --- a/.hypothesis/constants/0be7f0ac4f43628c +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/agent_roles.py -# hypothesis_version: 6.151.9 - -['**/*.go', '**/*.java', '**/*.js', '**/*.json', '**/*.jsx', '**/*.md', '**/*.py', '**/*.rb', '**/*.rs', '**/*.sh', '**/*.spec.js', '**/*.spec.jsx', '**/*.spec.ts', '**/*.spec.tsx', '**/*.test.js', '**/*.test.jsx', '**/*.test.ts', '**/*.test.tsx', '**/*.ts', '**/*.tsx', '**/*.yaml', '**/*.yml', '**/*_test.go', '**/*_test.py', '**/CHANGELOG.md', '**/README.md', '**/test/', '**/test_*.py', '**/tests/', './', '.egg-state/drafts/', '.egg-state/reviews/', '/', 'acceptance_criteria', 'action/', 'analysis_draft', 'architect', 'bin/', 'blocked', 'changed_files', 'coder', 'commits', 'complete', 'config/', 'coverage_report', 'doc_files', 'docs/', 'documenter', 'failed', 'gaps_found', 'gateway/', 'high', 'implement', 'integration_report', 'integration_tests/', 'integrator', 'lib/', 'mitigation_plan', 'orchestrator/', 'pending', 'plan', 'refine', 'refiner', 'review_verdict', 'reviewer_code', 'reviewer_contract', 'reviewer_plan', 'reviewer_refine', 'risk_analyst', 'risk_assessment', 'running', 'sandbox/', 'scripts/', 'shared/', 'skipped', 'src/', 'task_breakdown', 'task_planner', 'technical_decisions', 'test/', 'test_files', 'tester', 'tests/'] \ No newline at end of file diff --git a/.hypothesis/constants/0ce7ab84fa072573 b/.hypothesis/constants/0ce7ab84fa072573 deleted file mode 100644 index 570deb73..00000000 --- a/.hypothesis/constants/0ce7ab84fa072573 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/routes/__init__.py -# hypothesis_version: 6.151.9 - -['.git', '/', 'EGG_REPO_PATH', 'orchestrator.routes', 'repo', 'repo_path', 'shared'] \ No newline at end of file diff --git a/.hypothesis/constants/0dfc0bb66b32e048 b/.hypothesis/constants/0dfc0bb66b32e048 deleted file mode 100644 index f466dc84..00000000 --- a/.hypothesis/constants/0dfc0bb66b32e048 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/backends/__init__.py -# hypothesis_version: 6.151.9 - -[] \ No newline at end of file diff --git a/.hypothesis/constants/0f53725329c26da4 b/.hypothesis/constants/0f53725329c26da4 deleted file mode 100644 index 61e5a6b7..00000000 --- a/.hypothesis/constants/0f53725329c26da4 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/deployment.py -# hypothesis_version: 6.151.9 - -[100, 120, 200, 599, 600, '..', '.egg', '/', '/app', 'GET', 'HTTP method', 'compose_file', 'container_mount_path', 'deployment.json', 'deployment.yml', 'docker-compose.yml', 'health_endpoints', 'source_dir', 'utf-8'] \ No newline at end of file diff --git a/.hypothesis/constants/112e48bca6962912 b/.hypothesis/constants/112e48bca6962912 deleted file mode 100644 index ab037064..00000000 --- a/.hypothesis/constants/112e48bca6962912 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/llm/claude/runner.py -# hypothesis_version: 6.151.9 - -[b'\n', 5.0, 500, 1024, '(no content)', '--model', '--output-format', '--print', '--verbose', '--version', '1.0.0', '429', 'Model not available', 'Permission denied', 'Rate limited', 'assistant', 'authentication', 'claude', 'content', 'init', 'invalid_api_key', 'message', 'model', 'not found', 'opus', 'permission', 'rate_limit', 'result', 'stream-json', 'subtype', 'system', 'text', 'thinking', 'type'] \ No newline at end of file diff --git a/.hypothesis/constants/126e2a6fa864f5e4 b/.hypothesis/constants/126e2a6fa864f5e4 deleted file mode 100644 index cc6f719a..00000000 --- a/.hypothesis/constants/126e2a6fa864f5e4 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/jwt/api_jwk.py -# hypothesis_version: 6.151.9 - -['EC', 'ES256', 'ES256K', 'ES384', 'ES512', 'Ed25519', 'EdDSA', 'HS256', 'OKP', 'P-256', 'P-384', 'P-521', 'RS256', 'RSA', 'Unsupported crv: %s', 'Unsupported kty: %s', 'alg', 'crv', 'crv is not found: %s', 'keys', 'kid', 'kty', 'kty is not found: %s', 'oct', 'secp256k1', 'use'] \ No newline at end of file diff --git a/.hypothesis/constants/13504d673e8bb2e2 b/.hypothesis/constants/13504d673e8bb2e2 deleted file mode 100644 index 24ee2d0e..00000000 --- a/.hypothesis/constants/13504d673e8bb2e2 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_logging/cli.py -# hypothesis_version: 6.151.9 - -['1', '__main__', 'claude', 'gh', 'git'] \ No newline at end of file diff --git a/.hypothesis/constants/16f423bdc8cd36d3 b/.hypothesis/constants/16f423bdc8cd36d3 deleted file mode 100644 index 3a4665e5..00000000 --- a/.hypothesis/constants/16f423bdc8cd36d3 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/container_monitor.py -# hypothesis_version: 6.151.9 - -['Container not found', 'Container removed', 'Event handler error', 'error', 'exit_code', 'exited', 'exited_at', 'failed', 'healthy', 'not_found', 'orchestrator.monitor', 'removed', 'running', 'shared', 'started', 'started_at', 'status', 'stopped', 'unhealthy'] \ No newline at end of file diff --git a/.hypothesis/constants/18fcc08ef98fde6f b/.hypothesis/constants/18fcc08ef98fde6f deleted file mode 100644 index 82aa1c33..00000000 --- a/.hypothesis/constants/18fcc08ef98fde6f +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/.github/scripts/checks/base.py -# hypothesis_version: 6.151.9 - -['json', 'shared'] \ No newline at end of file diff --git a/.hypothesis/constants/198b481f4da30c78 b/.hypothesis/constants/198b481f4da30c78 deleted file mode 100644 index 68e6e049..00000000 --- a/.hypothesis/constants/198b481f4da30c78 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/health_checks/__init__.py -# hypothesis_version: 6.151.9 - -['HealthAction', 'HealthCheck', 'HealthResult', 'HealthStatus', 'HealthTier', 'HealthTrigger'] \ No newline at end of file diff --git a/.hypothesis/constants/1a75fb2c5a634e52 b/.hypothesis/constants/1a75fb2c5a634e52 deleted file mode 100644 index 7aecdc54..00000000 --- a/.hypothesis/constants/1a75fb2c5a634e52 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/self_improvement/__init__.py -# hypothesis_version: 6.151.9 - -[] \ No newline at end of file diff --git a/.hypothesis/constants/1c9687cd1c8bb9e7 b/.hypothesis/constants/1c9687cd1c8bb9e7 deleted file mode 100644 index a12ad69f..00000000 --- a/.hypothesis/constants/1c9687cd1c8bb9e7 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_config/utils.py -# hypothesis_version: 6.151.9 - -['"', '#', "'", '0', '1', '=', 'false', 'no', 'off', 'on', 'true', 'yes'] \ No newline at end of file diff --git a/.hypothesis/constants/1c972e08847d2a50 b/.hypothesis/constants/1c972e08847d2a50 deleted file mode 100644 index bdccc784..00000000 --- a/.hypothesis/constants/1c972e08847d2a50 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/sdlc_hitl.py -# hypothesis_version: 6.151.9 - -['\x1b[0m', '\x1b[1m', '\x1b[2m', '\x1b[31m', '\x1b[32m', '\x1b[33m', '\x1b[36m', ' > ', ',', '--show-toplevel', '.git', '/', '1', '2', '3', '4', '5', 'Approved', 'Decision required', 'EDITOR', 'EGG_REPOS', '\\banalysis\\b', '\\bimplement\\b', '\\bplan\\b', '\\bpr\\b', '\\brefine\\b', 'cancelled', 'claude', 'context', 'git', 'id', 'implement', 'issue', 'local', 'plan', 'pr', 'question', 'refine', 'repos', 'resolved', 'rev-parse', 'unknown', 'vim'] \ No newline at end of file diff --git a/.hypothesis/constants/1d14e802fcfa454f b/.hypothesis/constants/1d14e802fcfa454f deleted file mode 100644 index 708ba001..00000000 --- a/.hypothesis/constants/1d14e802fcfa454f +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/runtime.py -# hypothesis_version: 6.151.9 - -[',', '--format', '--rm', '-C', '-e', '-f', '-i', '-it', '-t', '-v', '.', '.git', '.md', '/', '/:', '0', '1', ':', 'ANTHROPIC_API_KEY', 'Docker build failed', 'EGG_AGENT_ROLE', 'EGG_ISSUE_NUMBER', 'EGG_MULTI_AGENT', 'EGG_PIPELINE_ID', 'EGG_PIPELINE_PHASE', 'EGG_PR_NUMBER', 'EGG_QUIET', 'EGG_REPOS', 'EGG_TASK_ID', 'EGG_THREAD_TS', 'EGG_TIMING', 'IPv4Address', 'Interrupted by user', 'PYTHONUNBUFFERED', 'Starting services...', 'api-key', 'api_key', 'build_docker_cmd', 'build_image', 'check_config', 'check_image', 'configure_mounts', 'docker', 'get-url', 'git', 'git@', 'github.com', 'inspect', 'kill', 'network', 'null', 'oauth', 'oauth-token', 'origin', 'prepare_container', 'private', 'public', 'remote', 'repositories.yaml', 'rm', 'start_gateway', '{{json .Containers}}'] \ No newline at end of file diff --git a/.hypothesis/constants/1d2480d1c18e5ace b/.hypothesis/constants/1d2480d1c18e5ace deleted file mode 100644 index e47a4f78..00000000 --- a/.hypothesis/constants/1d2480d1c18e5ace +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/ciphers/algorithms.py -# hypothesis_version: 6.151.9 - -[128, 129, 160, 192, 256, 449, 512, '3DES', 'AES', 'Blowfish', 'CAST5', 'ChaCha20', 'IDEA', 'RC4', 'SEED', '_nonce', 'camellia', 'key', 'nonce'] \ No newline at end of file diff --git a/.hypothesis/constants/1d6e2398a096a201 b/.hypothesis/constants/1d6e2398a096a201 deleted file mode 100644 index 12a6b08e..00000000 --- a/.hypothesis/constants/1d6e2398a096a201 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/__init__.py -# hypothesis_version: 6.151.9 - -[] \ No newline at end of file diff --git a/.hypothesis/constants/1db06484f014299a b/.hypothesis/constants/1db06484f014299a deleted file mode 100644 index dd2a595f..00000000 --- a/.hypothesis/constants/1db06484f014299a +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/container_spawner.py -# hypothesis_version: 6.151.9 - -[200, 1000, 9848, '...', '/', '/home/egg', '/home/egg/repos', '/shared/certs', '172.32.0.10', '172.32.0.2', '172.33.0.2', 'CLAUDE_CODE_VERSION', 'CONTAINER_ID', 'Container created', 'EGG_AGENT_ROLE', 'EGG_EXTERNAL_NETWORK', 'EGG_ISOLATED_NETWORK', 'EGG_ISSUE_NUMBER', 'EGG_PHASE', 'EGG_PIPELINE_ID', 'EGG_REPO_PATH', 'EGG_SANDBOX_IMAGE', 'HOST_GID', 'HOST_HOME', 'HOST_UID', 'IPAddress', 'NetworkSettings', 'Networks', 'bind', 'egg-external', 'egg-gateway', 'egg-isolated', 'egg.agent.role', 'egg.issue.number', 'egg.pipeline.id', 'egg:latest', 'local', 'orchestrator.spawner', 'private', 'public', 'shared', 'volume'] \ No newline at end of file diff --git a/.hypothesis/constants/1e9d89b39c0c8663 b/.hypothesis/constants/1e9d89b39c0c8663 deleted file mode 100644 index e48d8d98..00000000 --- a/.hypothesis/constants/1e9d89b39c0c8663 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/auth.py -# hypothesis_version: 6.151.9 - -[401, 'Authorization', 'Bearer ', 'F', 'gateway.auth', 'gateway.rate_limiter', 'message', 'rate_limiter', 'session_manager', 'shared', 'success'] \ No newline at end of file diff --git a/.hypothesis/constants/1ecab4796e6213d0 b/.hypothesis/constants/1ecab4796e6213d0 deleted file mode 100644 index ae4df17e..00000000 --- a/.hypothesis/constants/1ecab4796e6213d0 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/health_checks/tier1/phase_output.py -# hypothesis_version: 6.151.9 - -['--count', '.egg-state', '/', 'agents_with_commits', 'architect', 'drafts', 'git', 'origin/main..HEAD', 'plan', 'rev-list', 'shared'] \ No newline at end of file diff --git a/.hypothesis/constants/20370c1edfca5c1b b/.hypothesis/constants/20370c1edfca5c1b deleted file mode 100644 index e6d752a2..00000000 --- a/.hypothesis/constants/20370c1edfca5c1b +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/jwt/__init__.py -# hypothesis_version: 6.151.9 - -[' <', '2.3.0', '>', 'DecodeError', 'InvalidAudienceError', 'InvalidIssuedAtError', 'InvalidIssuerError', 'InvalidKeyError', 'InvalidTokenError', 'José Padilla', 'MIT', 'PyJWK', 'PyJWKClient', 'PyJWKClientError', 'PyJWKError', 'PyJWKSet', 'PyJWKSetError', 'PyJWS', 'PyJWT', 'PyJWTError', 'decode', 'encode', 'hello@jpadilla.com', 'register_algorithm', 'unregister_algorithm'] \ No newline at end of file diff --git a/.hypothesis/constants/225008640bfd14aa b/.hypothesis/constants/225008640bfd14aa deleted file mode 100644 index 4d178ee7..00000000 --- a/.hypothesis/constants/225008640bfd14aa +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/models.py -# hypothesis_version: 6.151.9 - -['1.0', 'Acceptance criteria', 'Action performed', 'Additional details', 'Audit trail', 'Available options', 'Check result status', 'Contract', 'Debounce expiration', 'Decision type', 'Files affected', 'Git commit SHA', 'GitHub issue number', 'HITL decisions', 'ISSUE_CHECKBOX', 'Implementation notes', 'Issue URL', 'Issue metadata', 'Issue title', 'New value', 'Option description', 'Option identifier', 'Option label', 'PR description/body', 'PR_REVIEW', 'Phase status', 'Previous value', 'Reason for change', 'Reviewer feedback', 'Role of the actor', 'Schema version', 'Selected resolution', 'Task description', 'Task status', 'Tasks in this phase', 'The agent role', 'The question text', 'Unique identifier', 'When agent completed', 'When agent started', 'When resolved', 'Whether escalated', 'Whether resolved', 'Who resolved', '^Q[0-9]+$', '^[0-9]+\\.[0-9]+$', '^[a-f0-9]{7,40}$', '^ac-[0-9]+$', '^check-[a-z0-9-]+$', '^decision-[0-9]+$', '^feedback-[0-9]+$', '^phase-[0-9]+$', 'after', 'architect', 'auto', 'before', 'blocked', 'coder', 'commit', 'complete', 'create', 'delete', 'documenter', 'fail', 'failed', 'hitl', 'human', 'implement', 'implementer', 'in_progress', 'incomplete', 'integrator', 'pass', 'pending', 'plan', 'pr', 'refine', 'refiner', 'reviewer', 'reviewer_code', 'reviewer_contract', 'reviewer_plan', 'reviewer_refine', 'risk_analyst', 'running', 'skip', 'skipped', 'system', 'task_planner', 'tester', 'transition', 'update'] \ No newline at end of file diff --git a/.hypothesis/constants/230788c05eba3bb3 b/.hypothesis/constants/230788c05eba3bb3 deleted file mode 100644 index 37258002..00000000 --- a/.hypothesis/constants/230788c05eba3bb3 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/loader.py -# hypothesis_version: 6.151.9 - -['*.json', '.egg-state/contracts', '.tmp', 'audit_log', 'git', 'json', 'show', 'w'] \ No newline at end of file diff --git a/.hypothesis/constants/2319e79a710edf2f b/.hypothesis/constants/2319e79a710edf2f deleted file mode 100644 index a4613cb4..00000000 --- a/.hypothesis/constants/2319e79a710edf2f +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/redactor.py -# hypothesis_version: 6.151.9 - -[0.9, 100, '(--auth[=\\s]+)(\\S+)', '(--token[=\\s]+)(\\S+)', '.*_API_KEY$', '.*_CREDENTIAL.*', '.*_KEY$', '.*_PASSWORD$', '.*_SECRET$', '.*_TOKEN$', 'AKIA[A-Z0-9]{16}', '[REDACTED]', '\\.aws/credentials', '\\.env', '\\.env\\.[a-z]+', '\\.gnupg/', '\\.key$', '\\.netrc', '\\.pem$', '\\.ssh/', '\\1', '^ANTHROPIC_API_KEY$', '^API_KEY$', '^AUTH_TOKEN$', '^AWS_.*', '^AZURE_.*', '^DATABASE_URL$', '^GCP_.*', '^GITHUB_TOKEN$', '^MONGO.*_URI$', '^MYSQL_.*', '^OPENAI_API_KEY$', '^POSTGRES_.*', '^REDIS_URL$', '_-', 'credentials\\.json', 'gho_[a-zA-Z0-9]{36}', 'ghp_[a-zA-Z0-9]{36}', 'ghs_[a-zA-Z0-9]{36}', 'ghu_[a-zA-Z0-9]{36}', 'id_ed25519', 'id_rsa', 'secrets\\.json', 'sk-[a-zA-Z0-9]{20,}', 'ya29\\.[a-zA-Z0-9_-]+'] \ No newline at end of file diff --git a/.hypothesis/constants/24ba4f0a82b38d9b b/.hypothesis/constants/24ba4f0a82b38d9b deleted file mode 100644 index dae00a3b..00000000 --- a/.hypothesis/constants/24ba4f0a82b38d9b +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_orchestrator/detection.py -# hypothesis_version: 6.151.9 - -['distributed', 'get_agent_role', 'get_deployment_mode', 'get_orchestrator_url', 'get_pipeline_id', 'is_orchestrator_mode', 'remote-single'] \ No newline at end of file diff --git a/.hypothesis/constants/251c8f8e27fdd983 b/.hypothesis/constants/251c8f8e27fdd983 deleted file mode 100644 index 49c8ae83..00000000 --- a/.hypothesis/constants/251c8f8e27fdd983 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/health_checks/runner.py -# hypothesis_version: 6.151.9 - -['aggregate', 'aggregate_status', 'check_count', 'results', 'shared', 'trigger'] \ No newline at end of file diff --git a/.hypothesis/constants/262b1a2b548b4813 b/.hypothesis/constants/262b1a2b548b4813 deleted file mode 100644 index 2eb3c2b9..00000000 --- a/.hypothesis/constants/262b1a2b548b4813 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/ciphers/modes.py -# hypothesis_version: 6.151.9 - -[128, 256, 512, 'AES', 'CBC', 'CFB', 'CFB8', 'CTR', 'ECB', 'GCM', 'OFB', 'XTS', '_nonce', '_tag', '_tweak', 'nonce', 'tag', 'tweak'] \ No newline at end of file diff --git a/.hypothesis/constants/279fef10afa8a9d2 b/.hypothesis/constants/279fef10afa8a9d2 deleted file mode 100644 index 5b65de4a..00000000 --- a/.hypothesis/constants/279fef10afa8a9d2 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/repo_visibility.py -# hypothesis_version: 6.151.9 - -[200, 403, 404, '2022-11-28', 'Accept', 'Authorization', 'GITHUB_USER_TOKEN', 'GitHub API timeout', 'X-GitHub-Api-Version', 'bot', 'internal', 'private', 'public', 'shared', 'user', 'visibility'] \ No newline at end of file diff --git a/.hypothesis/constants/286bf5f38a08a328 b/.hypothesis/constants/286bf5f38a08a328 deleted file mode 100644 index 74ccf59b..00000000 --- a/.hypothesis/constants/286bf5f38a08a328 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/exceptions.py -# hypothesis_version: 6.151.9 - -[] \ No newline at end of file diff --git a/.hypothesis/constants/28a2ad9660aea065 b/.hypothesis/constants/28a2ad9660aea065 deleted file mode 100644 index bac2377c..00000000 --- a/.hypothesis/constants/28a2ad9660aea065 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/routes/health.py -# hypothesis_version: 6.151.9 - -[200, 404, 500, 503, '/api/v1', '/health', '/live', '/ready', 'EGG_REPO_PATH', 'GET', 'HEALTH_CHECK_RUNNER', 'Z', 'alive', 'components', 'degraded', 'docker', 'egg-orchestrator', 'error', 'failed', 'health', 'healthy', 'message', 'ok', 'pipeline_id', 'ready', 'results', 'service', 'shared', 'state_store', 'status', 'timestamp', 'unknown'] \ No newline at end of file diff --git a/.hypothesis/constants/2a376eba55014067 b/.hypothesis/constants/2a376eba55014067 deleted file mode 100644 index 8944d997..00000000 --- a/.hypothesis/constants/2a376eba55014067 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_config/configs/github.py -# hypothesis_version: 6.151.9 - -[5.0, 300, 401, 1000, '.config', '2022-11-28', 'Accept', 'Authorization', 'GITHUB_TOKEN', 'GITHUB_USER_TOKEN', 'GitHubConfig', 'Token not configured', 'User-Agent', 'X-GitHub-Api-Version', '_token_source', 'egg', 'egg-config/1.0', 'environment', 'github', 'github-token', 'github-token file', 'github_username', 'login', 'readonly_token', 'repositories.yaml', 'secrets.env', 'token', 'token_expires_at', 'unknown', 'user_mode_token', 'username'] \ No newline at end of file diff --git a/.hypothesis/constants/2a4d6fdca7e32452 b/.hypothesis/constants/2a4d6fdca7e32452 deleted file mode 100644 index 4dcb084d..00000000 --- a/.hypothesis/constants/2a4d6fdca7e32452 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/__init__.py -# hypothesis_version: 6.151.9 - -['GitHubClient', 'PolicyEngine', 'app', 'get_github_client', 'get_policy_engine'] \ No newline at end of file diff --git a/.hypothesis/constants/2da316f7eb364ba2 b/.hypothesis/constants/2da316f7eb364ba2 deleted file mode 100644 index 3199af9a..00000000 --- a/.hypothesis/constants/2da316f7eb364ba2 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/contract_cli.py -# hypothesis_version: 6.151.9 - -['*', '-', '--audit', '--commit', '--criterion', '--error', '--format', '--issue', '--json', '--notes', '--options', '--question', '--repo-path', '--role', '--task', '.egg-session-token', '?', 'Agent Executions:', 'Agent role to start', 'Authorization', 'Available commands', 'Content-Type', 'Decision question', 'EGG_ISSUE_NUMBER', 'EGG_REPO_PATH', 'EGG_SESSION_TOKEN', 'GATEWAY_URL', 'GET', 'Git commit SHA', 'Implementation notes', 'Include audit log', 'Invalid task ID', 'Link commit to task', 'Output as JSON', 'POST', 'Pending Decisions:', 'Phases:', 'Task ID', '^[0-9a-fA-F]{7,40}$', '^[a-z0-9-]+$', '__main__', 'ac-', 'actor', 'add-commit', 'add-decision', 'add-feedback', 'agent-complete', 'agent-fail', 'agent-next', 'agent-start', 'agent-status', 'agent_executions', 'agents', 'answer', 'append', 'application/json', 'blocked', 'coder', 'command', 'comment_id', 'commit', 'complete', 'current_phase', 'data', 'debounce_until', 'decisions', 'description', 'details', 'dispatch', 'documenter', 'egg', 'egg-contract', 'error', 'failed', 'failed_agents', 'feedback', 'field_path', 'format', 'hitl', 'id', 'in_progress', 'include_audit_log', 'incomplete', 'integrator', 'issue_number', 'json', 'label', 'markdown', 'message', 'multi_agent_config', 'must be >= 1', 'new_value', 'options', 'parallel', 'pending', 'pending_agents', 'phase', 'phases', 'question', 'questions', 'reason', 'repo_path', 'resolution', 'resolved', 'resolved_at', 'resolved_by', 'retry_count', 'role', 'running', 'running_agents', 'show', 'skipped', 'status', 'store_true', 'submitted', 'submitted_at', 'submitted_by', 'success', 'task-', 'tasks', 'tester', 'true', 'type', 'unknown', 'update-notes', 'verify-criterion', 'waiting', '⊘', '○', '●', '◐', '✗'] \ No newline at end of file diff --git a/.hypothesis/constants/2fc8c18522ebb776 b/.hypothesis/constants/2fc8c18522ebb776 deleted file mode 100644 index bb6a649b..00000000 --- a/.hypothesis/constants/2fc8c18522ebb776 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/jwt/jwks_client.py -# hypothesis_version: 6.151.9 - -['header', 'kid', 'sig', 'verify_signature'] \ No newline at end of file diff --git a/.hypothesis/constants/2fcd3db891e6a004 b/.hypothesis/constants/2fcd3db891e6a004 deleted file mode 100644 index 414b816b..00000000 --- a/.hypothesis/constants/2fcd3db891e6a004 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_config/constants.py -# hypothesis_version: 6.151.9 - -[256, 300, 1234, 3129, 5678, 9848, 9849, '1.0', '172.32.0.0/24', '172.32.0.10', '172.32.0.2', '172.32.0.3', '172.33.0.0/24', '172.33.0.2', '172.33.0.3', '512m', 'DEVSERVER_CPU_LIMIT', 'DEVSERVER_PIDS_LIMIT', 'EGG_CONTAINER_IP', 'EGG_EXTERNAL_NETWORK', 'EGG_EXTERNAL_SUBNET', 'EGG_ISOLATED_NETWORK', 'EGG_ISOLATED_SUBNET', 'GATEWAY_EXTERNAL_IP', 'GATEWAY_IMAGE_NAME', 'GATEWAY_ISOLATED_IP', 'GATEWAY_PORT', 'GATEWAY_PROXY_PORT', 'ORCHESTRATOR_PORT', 'TEST_GATEWAY_PORT', 'egg-check', 'egg-external', 'egg-gateway', 'egg-isolated', 'egg-orchestrator'] \ No newline at end of file diff --git a/.hypothesis/constants/313e3c61e44b222b b/.hypothesis/constants/313e3c61e44b222b deleted file mode 100644 index 2dab212e..00000000 --- a/.hypothesis/constants/313e3c61e44b222b +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_config/validators.py -# hypothesis_version: 6.151.9 - -[65535, '*', 'Email is empty', 'Invalid email format', 'URL is empty', 'URL missing host', '[EMPTY]', 'command', 'gho_', 'ghp_', 'ghs_', 'ghu_', 'github_pat_', 'http', 'https', 'name', 'sk-ant-'] \ No newline at end of file diff --git a/.hypothesis/constants/3250de540824c309 b/.hypothesis/constants/3250de540824c309 deleted file mode 100644 index ebedcd5b..00000000 --- a/.hypothesis/constants/3250de540824c309 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/self_improvement/collect.py -# hypothesis_version: 6.151.9 - -[500, 5000, 50000, '### Statistics', '--format', '--output', '--partition', '--repo', '--since-hours', '0', '', 'PARTITION_COUNT=0', '__main__', '```', 'branch', 'collected_at', 'completed_at', 'failed_runs', 'failure', 'head_branch', 'html_url', 'index', 'json', 'log_excerpt', 'logs_omitted', 'markdown', 'other_runs', 'partition', 'repository', 'run_id', 'run_number', 'runs_to_analyze', 'since', 'started_at', 'statistics', 'status', 'store_true', 'success', 'successful_runs', 'total', 'total_runs', 'trigger', 'unknown', 'url', 'workflow', 'workflow_path', 'workflows_analyzed', '{partition}', '✅', '❌'] \ No newline at end of file diff --git a/.hypothesis/constants/32e204518134dad2 b/.hypothesis/constants/32e204518134dad2 deleted file mode 100644 index 28a11ed3..00000000 --- a/.hypothesis/constants/32e204518134dad2 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/dh.py -# hypothesis_version: 6.151.9 - -[512, 'DHParameters', 'DHPrivateKey', 'DHPublicKey', '_g', '_p', '_parameter_numbers', '_public_numbers', '_q', '_x', '_y'] \ No newline at end of file diff --git a/.hypothesis/constants/330d1d189f8eef40 b/.hypothesis/constants/330d1d189f8eef40 deleted file mode 100644 index 84cc885c..00000000 --- a/.hypothesis/constants/330d1d189f8eef40 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/transcript_extractor.py -# hypothesis_version: 6.151.9 - -[1.5, 15.0, 75.0, 100, 1000, 1500, 2500, 25000, 1000000, '+00:00', '..', '...', '/', '/tmp/egg-transcripts', 'Edit', 'Glob', 'Grep', 'Read', 'Write', 'Z', '\\', 'api_turn', 'content', 'file_path', 'id', 'input', 'input_parse_error', 'input_tokens', 'is_error', 'messages', 'model', 'name', 'output_tokens', 'path', 'raw_partial_input', 'request', 'response', 'role', 'text', 'timestamp', 'tool_result', 'tool_use', 'tool_use_id', 'type', 'unknown', 'usage', 'user'] \ No newline at end of file diff --git a/.hypothesis/constants/38228c703f8fb4b8 b/.hypothesis/constants/38228c703f8fb4b8 deleted file mode 100644 index 70298916..00000000 --- a/.hypothesis/constants/38228c703f8fb4b8 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/sse.py -# hypothesis_version: 6.151.9 - -[1000, 3600, 5000, 'EGG_REPO_PATH', 'SSE client connected', 'Z', 'already_terminal', 'cancelled', 'complete', 'completed', 'current_phase', 'dag', 'data', 'done', 'error', 'event', 'event_type', 'failed', 'orchestrator.sse', 'pending_decisions', 'pipeline_id', 'reason', 'refresh', 'shared', 'snapshot', 'status', 'timeout', 'timestamp', 'update', 'visualization'] \ No newline at end of file diff --git a/.hypothesis/constants/392b89d1ef89a2c3 b/.hypothesis/constants/392b89d1ef89a2c3 deleted file mode 100644 index bc108644..00000000 --- a/.hypothesis/constants/392b89d1ef89a2c3 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/_asymmetric.py -# hypothesis_version: 6.151.9 - -[] \ No newline at end of file diff --git a/.hypothesis/constants/39700f051169726b b/.hypothesis/constants/39700f051169726b deleted file mode 100644 index 6f40f541..00000000 --- a/.hypothesis/constants/39700f051169726b +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/__init__.py -# hypothesis_version: 6.151.9 - -[] \ No newline at end of file diff --git a/.hypothesis/constants/3a2167e67605985c b/.hypothesis/constants/3a2167e67605985c deleted file mode 100644 index 9c276b43..00000000 --- a/.hypothesis/constants/3a2167e67605985c +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_orchestrator/types.py -# hypothesis_version: 6.151.9 - -[100, 'AgentRole', 'CompletionData', 'DeploymentMode', 'ErrorData', 'HeartbeatData', 'ProgressData', 'SignalPayload', 'SignalResponse', 'SignalType', 'agent_role', 'architect', 'checker', 'coder', 'commit', 'complete', 'container_id', 'current_task', 'data', 'distributed', 'documenter', 'error', 'files_changed', 'handoff_data', 'heartbeat', 'integrator', 'local', 'message', 'metrics', 'progress', 'progress_percent', 'recoverable', 'refiner', 'remote-single', 'reviewer', 'reviewer_code', 'reviewer_contract', 'reviewer_plan', 'reviewer_refine', 'risk_analyst', 'signal_type', 'success', 'task_planner', 'tester', 'traceback'] \ No newline at end of file diff --git a/.hypothesis/constants/3ae779cdb993c4c5 b/.hypothesis/constants/3ae779cdb993c4c5 deleted file mode 100644 index 32fac42f..00000000 --- a/.hypothesis/constants/3ae779cdb993c4c5 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_logging/signatures.py -# hypothesis_version: 6.151.9 - -['_', 'trace_id', 'workflow_id', 'workflow_type'] \ No newline at end of file diff --git a/.hypothesis/constants/3b45313687bba9b8 b/.hypothesis/constants/3b45313687bba9b8 deleted file mode 100644 index 5c779573..00000000 --- a/.hypothesis/constants/3b45313687bba9b8 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/health_checks/types.py -# hypothesis_version: 6.151.9 - -['Z', 'action', 'alert', 'check_name', 'continue', 'degraded', 'details', 'fail_pipeline', 'failed', 'healthy', 'on_demand', 'phase_complete', 'reasoning', 'runtime_tick', 'startup', 'status', 'tier', 'tier1', 'tier2', 'timestamp', 'wave_complete'] \ No newline at end of file diff --git a/.hypothesis/constants/3b67f7ddaeddce27 b/.hypothesis/constants/3b67f7ddaeddce27 deleted file mode 100644 index e70dbd59..00000000 --- a/.hypothesis/constants/3b67f7ddaeddce27 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/phase_filter.py -# hypothesis_version: 6.151.9 - -['*', '../', './', '.egg', '.egg-state/drafts/*', '.egg-state/reviews/*', '/', '; ', 'Add notes', 'All files allowed', 'Comment on issues', 'Create PRs', 'Edit PRs', 'Edit issues', 'Files allowed', 'Link commits', 'No files to check', 'Operation allowed', 'Push code', 'View contract state', 'add-commit *', 'add-decision *', 'allowed_operations', 'allowed_patterns', 'blocked_operations', 'blocked_patterns', 'blocked_reason', 'description', 'egg-contract', 'exit_requires', 'file_restrictions', 'gh', 'git', 'human', 'implement', 'implementer', 'issue comment *', 'issue edit *', 'pattern', 'phases', 'plan', 'pr', 'pr create*', 'pr edit *', 'push *', 'refine', 'reviewer', 'role', 'show *', 'type', 'unknown', 'update-notes *'] \ No newline at end of file diff --git a/.hypothesis/constants/3eb73e08628c2238 b/.hypothesis/constants/3eb73e08628c2238 deleted file mode 100644 index d4991436..00000000 --- a/.hypothesis/constants/3eb73e08628c2238 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_orchestrator/client.py -# hypothesis_version: 6.151.9 - -['Content-Type', 'GET', 'OrchestratorClient', 'OrchestratorError', 'OrchestratorHealth', 'POST', 'agent_role', 'application/json', 'components', 'details', 'egg-orchestrator', 'healthy', 'message', 'service', 'signal_type', 'status', 'timestamp', 'unhealthy', 'unknown', 'unreachable'] \ No newline at end of file diff --git a/.hypothesis/constants/421cf5837f2d699e b/.hypothesis/constants/421cf5837f2d699e deleted file mode 100644 index 60a50ecf..00000000 --- a/.hypothesis/constants/421cf5837f2d699e +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/state_store.py -# hypothesis_version: 6.151.9 - -[0.1, '*.json', '*/index.lock', '--cached', '--detach', '--no-verify', '--orphan', '--quiet', '--verify', '-C', '-c', '-m', '-rf', '.', '.egg-state/pipelines', '.git', '.git-ops.lock', '/', '/home/egg/.egg-state', 'EGG_STATE_DIR', 'HEAD', 'add', 'checkout', 'commit', 'diff', 'egg/pipeline-state', 'git', 'gitdir', 'index.lock', 'issue', 'local', 'local-', 'mode', 'pipeline-worktree', 'rev-parse', 'rm', 'w', 'worktree', 'worktrees'] \ No newline at end of file diff --git a/.hypothesis/constants/43e0facb839eb1b2 b/.hypothesis/constants/43e0facb839eb1b2 deleted file mode 100644 index 2ba833ef..00000000 --- a/.hypothesis/constants/43e0facb839eb1b2 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/config.py -# hypothesis_version: 6.151.9 - -['\x1b[0;31m', '\x1b[0;32m', '\x1b[0;34m', '\x1b[0m', '\x1b[1;33m', '\x1b[1m', '.aws', '.cache', '.config', '.docker', '.gitconfig', '.gnupg', '.kube', '.netrc', '.ssh', 'Colors', 'Config', 'Dockerfile', 'EGG_CONTAINER_IP', 'EGG_EXTERNAL_NETWORK', 'EGG_EXTERNAL_SUBNET', 'EGG_ISOLATED_NETWORK', 'EGG_ISOLATED_SUBNET', 'GATEWAY_EXTERNAL_IP', 'GATEWAY_IMAGE_NAME', 'GATEWAY_ISOLATED_IP', 'GATEWAY_PORT', 'GATEWAY_PROXY_PORT', 'ORCHESTRATOR_PORT', 'XDG_CACHE_HOME', 'darwin', 'egg', 'gcloud', 'get_local_repos', 'get_platform', 'github-token', 'linux', 'local_repos', 'macos', 'paths', 'repositories.yaml', 'shared', 'unknown'] \ No newline at end of file diff --git a/.hypothesis/constants/45dd2e709899e84f b/.hypothesis/constants/45dd2e709899e84f deleted file mode 100644 index dd72a562..00000000 --- a/.hypothesis/constants/45dd2e709899e84f +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/llm/claude/config.py -# hypothesis_version: 6.151.9 - -[7200] \ No newline at end of file diff --git a/.hypothesis/constants/49745a28c00ed4a5 b/.hypothesis/constants/49745a28c00ed4a5 deleted file mode 100644 index 07cc3ab6..00000000 --- a/.hypothesis/constants/49745a28c00ed4a5 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/routes/pipelines.py -# hypothesis_version: 6.151.9 - -[-2000, 100, 200, 297, 300, 400, 404, 409, 500, 1000, 1800, 2700, 3600, 9849, 32000, ' files:', ' - id: TASK-1-1', ' name: Phase Name', ' tasks:', ' "checks": [', ' - id: 1', ' --format markdown', ' ]', ' description: |', '#', '# ', '# metadata', '# yaml-tasks', '## Check Failures\n', '## Constraints\n', '## Context\n', '## Contract Tasks\n', '## Current Behavior\n', '## Delta Review\n', '## Fix ALL Failures\n', '## For More Context\n', '## HITL Decisions\n', '## Important\n', '## Instructions\n', '## Open Questions\n', '## Output Format', '## Output Format\n', '## Phase Completion\n', '## Plan Overview\n', '## Review Criteria\n', '## Review Feedback\n', '## Scope\n', '## Task Description\n', '## Verdict Format\n', '## Your Task\n', '### Check Commands\n', '### Fix Rules\n', '### Phase ', '### Push Recovery', '### Results File\n', '### Tasks\n', '### Workflow\n', '### phase-', '### tester findings', '**Cons**:', '**Pros**:', '*Authored-by: egg*', '-', '- You CAN run tests', '- [Advantage 1]\n', '- [Disadvantage 1]\n', '--', '---\n', '--cached', '--count', '--hard', '--left-right', '--max-turns', '--model', '--no-verify', '--output-format', '--print', '--quiet', '--show-current', '--verbose', '--verify', '-C', '-c', '-certs', '-m', '.', '...', '.egg', '.egg-state', '.egg-state/', '.git', '/', '/', '//start', '/api/v1/pipelines', '/app/prompts', '/stream', '1', '1. Run all checks', '100', '172.32.0.3', '172.33.0.3', '200', '50', 'Analysis', 'COMPOSE_PROJECT_NAME', 'Cache-Control', 'ContainerSpawner', 'DELETE', 'EGG_AGENT_ROLE', 'EGG_BRANCH', 'EGG_CERTS_VOLUME', 'EGG_HOST_REPO_MAP', 'EGG_MULTI_AGENT', 'EGG_ORCHESTRATOR_URL', 'EGG_PIPELINE_ID', 'EGG_PIPELINE_MODE', 'EGG_PIPELINE_PHASE', 'EGG_PIPELINE_PROMPT', 'EGG_PLAN_PHASE_ID', 'EGG_REPO', 'EGG_REPO_CHECKS', 'EGG_REPO_PATH', 'EventType', 'Executing phase wave', 'Focus on:', 'GET', 'Gap-finding focus:', 'HEAD', 'HOST_GID', 'HOST_UID', 'In this phase:', 'Integrator failed', 'Missing branch', 'Missing issue_number', 'Missing repo', 'Missing request body', 'PATCH', 'POST', 'Phase advanced', 'Phase failed', 'Phase: implement', 'Pipeline complete', 'Pipeline created', 'Pipeline deleted', 'Pipeline retrieved', 'Pipeline started', 'Pipeline stopped', 'Pipeline updated', 'Plan', 'Plan parse warning', 'Risk Assessment', 'Status retrieved', 'Steps:', 'Tester found gaps', 'Worktree error', 'X-Accel-Buffering', '_', '```', '```\n', '````', '```bash', '```json', '```markdown', '```yaml', 'acceptance_criteria', 'active_only', 'add', 'agent-design', 'agent-outputs', 'already exists', 'analysis', 'approve', 'approved', 'architect', 'ascii', 'autofixer-rules.md', 'branch', 'checker', 'checks', 'claude', 'code', 'coder', 'command', 'commit', 'compact', 'complete', 'complexity_tier', 'complexity_tier: low', 'complexity_tier: mid', 'config', 'content', 'context', 'contract', 'contract-rules.md', 'created_at', 'current_phase', 'data', 'decision.created', 'deficien', 'details', 'diff', 'distributed', 'documenter', 'egg', 'egg-certs', 'error', 'fail', 'failed', 'false', 'files_affected', 'format', 'full', 'full_dag', 'gap', 'gaps_found', 'git', 'high', 'id', 'implement', 'integrator', 'issue', 'issue_number', 'json', 'lgtm', 'local', 'low', 'message', 'mid', 'missing', 'mode', 'name', 'needs_revision', 'network_mode', 'no', 'no-cache', 'options', 'opus', 'output', 'parallel_phases', 'passed', 'pending_decision', 'pending_decisions', 'phase', 'phase.completed', 'phase.started', 'phases:', 'pipeline', 'pipeline.completed', 'pipeline.failed', 'pipeline_id', 'pipelines', 'plan', 'pr', 'pr:', 'private', 'progress', 'prompt', 'prompts', 'public', 'question', 'refine', 'refiner', 'repo', 'request changes', 'request_changes', 'reset', 'rev-list', 'rev-parse', 'review-rules.md', 'reviewer_', 'risk_analyst', 'running', 'shared', 'short_circuit: true', 'status', 'stream-json', 'success', 'summary', 'task_planner', 'tester', 'tester-output.json', 'tests_failed', 'text', 'text/event-stream', 'text/plain', 'true', 'unknown', 'updated_at', 'utf-8', 'x', 'yaml-tasks', 'yes', '{', '{}', '}'] \ No newline at end of file diff --git a/.hypothesis/constants/4c96678797af7a13 b/.hypothesis/constants/4c96678797af7a13 deleted file mode 100644 index 68ec5ae2..00000000 --- a/.hypothesis/constants/4c96678797af7a13 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/health_checks/tier1/__init__.py -# hypothesis_version: 6.151.9 - -['StartupStateCheck'] \ No newline at end of file diff --git a/.hypothesis/constants/4c9d15d0279c51b7 b/.hypothesis/constants/4c9d15d0279c51b7 deleted file mode 100644 index f1d6db3a..00000000 --- a/.hypothesis/constants/4c9d15d0279c51b7 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/repo_parser.py -# hypothesis_version: 6.151.9 - -[200, '-C', '-c', '..', '.git', '/', '//', '://', 'Git command failed', 'gateway.repo-parser', 'get-url', 'git', 'git@', 'github.com', 'http://', 'https://', 'origin', 'remote', 'safe.directory=*', 'shared', '~/.egg-worktrees'] \ No newline at end of file diff --git a/.hypothesis/constants/4cc3f46c3441ee36 b/.hypothesis/constants/4cc3f46c3441ee36 deleted file mode 100644 index 04f0bef4..00000000 --- a/.hypothesis/constants/4cc3f46c3441ee36 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/health_checks/tier2/agent_inspector.py -# hypothesis_version: 6.151.9 - -[500, 100000, 'DEGRADED', 'EGG_NETWORK_MODE', 'FAILED', 'HEALTHY', '```', 'acceptance_criteria', 'agent_executions', 'agent_inspector', 'agent_outputs', 'branch', 'contract_summary', 'current_phase', 'decisions', 'error', 'git_diff_stat', 'git_log', 'graceful_degradation', 'pipeline_id', 'public', 'python3', 'raw_response', 'reasoning', 'shared', 'status', 'trigger', 'unknown', '{'] \ No newline at end of file diff --git a/.hypothesis/constants/4cda8bf85938f7eb b/.hypothesis/constants/4cda8bf85938f7eb deleted file mode 100644 index d7a02c9c..00000000 --- a/.hypothesis/constants/4cda8bf85938f7eb +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/_types.py -# hypothesis_version: 6.151.9 - -[] \ No newline at end of file diff --git a/.hypothesis/constants/4ece4d8313dbf605 b/.hypothesis/constants/4ece4d8313dbf605 deleted file mode 100644 index 274c90e4..00000000 --- a/.hypothesis/constants/4ece4d8313dbf605 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_container/__init__.py -# hypothesis_version: 6.151.9 - -[',readonly', '--add-host', '--dns', '--ip', '--mount', '--name', '--network', '--security-opt', '-e', '.egg-readonly', '.egg-state', '.git', '/dev/null', '/home/egg/repos', '0.0.0.0', 'CONTAINER_ID', 'EGG_PRIVATE_MODE', 'EGG_SESSION_TOKEN', 'EndpointsConfig', 'GATEWAY_URL', 'HTTPS_PROXY', 'HTTP_PROXY', 'IPAMConfig', 'IPv4Address', 'NO_PROXY', 'PRIVATE_MODE', 'RUNTIME_GID', 'RUNTIME_UID', 'ReadOnly', 'Source', 'Target', 'Type', 'bind', 'command', 'contracts', 'dns', 'docker', 'drafts', 'environment', 'extra_hosts', 'false', 'http_proxy', 'https_proxy', 'image', 'implement', 'label=disable', 'labels', 'mounts', 'name', 'network', 'networking_config', 'no_proxy', 'pipelines', 'private', 'reviewer', 'reviews', 'run', 'security_opt', 'tmpfs', 'true', 'volume'] \ No newline at end of file diff --git a/.hypothesis/constants/4ef32942a287beb4 b/.hypothesis/constants/4ef32942a287beb4 deleted file mode 100644 index f845262d..00000000 --- a/.hypothesis/constants/4ef32942a287beb4 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_config/configs/__init__.py -# hypothesis_version: 6.151.9 - -['GatewayConfig', 'GitHubConfig', 'LLMConfig'] \ No newline at end of file diff --git a/.hypothesis/constants/4f07a9c831c6f212 b/.hypothesis/constants/4f07a9c831c6f212 deleted file mode 100644 index aca3cc55..00000000 --- a/.hypothesis/constants/4f07a9c831c6f212 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/auth.py -# hypothesis_version: 6.151.9 - -['#', '--config-dir', '.venv', '=', 'ANTHROPIC_API_KEY', 'ANTHROPIC_API_KEY=', 'GITHUB_APP_ID', 'PROXY-INJECTED', 'anthropic-api-key', 'api_key', 'bin', 'config.yaml', 'ghp_', 'ghs_', 'github-app-token.py', 'github-app.pem', 'github_pat_', 'host-services', 'oauth', 'python', 'python3', 'secrets.env', 'tools'] \ No newline at end of file diff --git a/.hypothesis/constants/509cdc89a791f856 b/.hypothesis/constants/509cdc89a791f856 deleted file mode 100644 index 86c3dbbd..00000000 --- a/.hypothesis/constants/509cdc89a791f856 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/ec.py -# hypothesis_version: 6.151.9 - -[b'\x04', 163, 192, 224, 233, 256, 283, 384, 409, 512, 521, 570, 571, '1.2.840.10045.3.1.1', '1.2.840.10045.3.1.7', '1.3.132.0.1', '1.3.132.0.10', '1.3.132.0.15', '1.3.132.0.16', '1.3.132.0.17', '1.3.132.0.26', '1.3.132.0.27', '1.3.132.0.33', '1.3.132.0.34', '1.3.132.0.35', '1.3.132.0.36', '1.3.132.0.37', '1.3.132.0.38', '1.3.132.0.39', '1.3.36.3.3.2.8.1.1.7', 'ECDH', '_algorithm', '_curve', '_private_value', '_public_numbers', '_x', '_y', 'big', 'brainpoolP256r1', 'brainpoolP384r1', 'brainpoolP512r1', 'data', 'prime192v1', 'prime256v1', 'secp192r1', 'secp224r1', 'secp256k1', 'secp256r1', 'secp384r1', 'secp521r1', 'sect163k1', 'sect163r2', 'sect233k1', 'sect233r1', 'sect283k1', 'sect283r1', 'sect409k1', 'sect409r1', 'sect571k1', 'sect571r1'] \ No newline at end of file diff --git a/.hypothesis/constants/511355bf243f0d52 b/.hypothesis/constants/511355bf243f0d52 deleted file mode 100644 index 3ab31904..00000000 --- a/.hypothesis/constants/511355bf243f0d52 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/health_checks/tier2/__init__.py -# hypothesis_version: 6.151.9 - -['AgentInspectorCheck'] \ No newline at end of file diff --git a/.hypothesis/constants/5394883cdc8934f9 b/.hypothesis/constants/5394883cdc8934f9 deleted file mode 100644 index b8cefc37..00000000 --- a/.hypothesis/constants/5394883cdc8934f9 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/anthropic_credentials.py -# hypothesis_version: 6.151.9 - -['"', '#', "'", '...', '.config', '=', 'ANTHROPIC_API_KEY', 'Authorization', 'EGG_SECRETS_PATH', 'egg', 'secrets.env', 'shared', 'sk-ant-', 'x-api-key'] \ No newline at end of file diff --git a/.hypothesis/constants/55c5e3e37035e354 b/.hypothesis/constants/55c5e3e37035e354 deleted file mode 100644 index 11200ef5..00000000 --- a/.hypothesis/constants/55c5e3e37035e354 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/private_repo_policy.py -# hypothesis_version: 6.151.9 - -['/', '1', 'Missing session mode', 'PRIVATE_MODE', 'allowed', 'clone', 'decision', 'denied', 'details', 'error', 'event_type', 'false', 'fetch', 'gh_execute', 'global', 'hint', 'issue', 'mode_source', 'operation', 'policy', 'pr_comment', 'pr_create', 'private', 'private_mode', 'private_repo_policy', 'public', 'push', 'reason', 'repo', 'repo_path', 'repository', 'session', 'session_mode', 'shared', 'timestamp', 'true', 'unknown', 'url', 'visibility', 'visibility_unknown', 'yes'] \ No newline at end of file diff --git a/.hypothesis/constants/562993fd4babc3d3 b/.hypothesis/constants/562993fd4babc3d3 deleted file mode 100644 index c9ef4601..00000000 --- a/.hypothesis/constants/562993fd4babc3d3 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/health_checks/tier1/startup_state.py -# hypothesis_version: 6.151.9 - -['shared', 'stale_agents', 'stale_containers', 'startup_state'] \ No newline at end of file diff --git a/.hypothesis/constants/5740801a1206fde7 b/.hypothesis/constants/5740801a1206fde7 deleted file mode 100644 index f3e8d6e8..00000000 --- a/.hypothesis/constants/5740801a1206fde7 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/phase_api.py -# hypothesis_version: 6.151.9 - -[200, 400, 403, 404, 500, '.', '/advance', '/api/v1/phase', '/app', '/filter', '/home/egg/repos', '/permissions/', '1', 'EGG_AGENT_ROLE', 'GET', 'Missing command', 'Missing issue_number', 'Missing request body', 'POST', 'X-Egg-Role', 'actor', 'agent', 'agent_role', 'allowed', 'allowed_operations', 'blocked_operations', 'command', 'current_phase', 'data', 'description', 'details', 'exit_requires', 'from_phase', 'gateway.phase', 'hint', 'issue_number', 'message', 'next_phase', 'operation_type', 'pattern', 'phase', 'reason', 'repo_path', 'repos', 'role', 'session', 'shared', 'success', 'to_phase', 'transitioned_by', 'type', 'valid_phases', 'valid_types'] \ No newline at end of file diff --git a/.hypothesis/constants/57ce45cbb8e07966 b/.hypothesis/constants/57ce45cbb8e07966 deleted file mode 100644 index 9573135d..00000000 --- a/.hypothesis/constants/57ce45cbb8e07966 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_config/configs/llm.py -# hypothesis_version: 6.151.9 - -[5.0, 400, 401, 1000, 7200, '2023-06-01', '7200', 'ANTHROPIC_API_KEY', 'ANTHROPIC_BASE_URL', 'LLMConfig', 'LLM_MODEL', 'LLM_TIMEOUT', 'POST', '[default]', '[provider default]', 'anthropic-version', 'anthropic_api_key', 'anthropic_base_url', 'api_key', 'application/json', 'claude-haiku-4-5', 'content', 'content-type', 'hi', 'llm', 'max_tokens', 'messages', 'model', 'oauth', 'role', 'timeout', 'user', 'x-api-key'] \ No newline at end of file diff --git a/.hypothesis/constants/58bb84fa70f4b5ca b/.hypothesis/constants/58bb84fa70f4b5ca deleted file mode 100644 index 09cda3d1..00000000 --- a/.hypothesis/constants/58bb84fa70f4b5ca +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/orchestration.py -# hypothesis_version: 6.151.9 - -['+00:00', 'Z'] \ No newline at end of file diff --git a/.hypothesis/constants/59a3d024bea7437c b/.hypothesis/constants/59a3d024bea7437c deleted file mode 100644 index 0248361c..00000000 --- a/.hypothesis/constants/59a3d024bea7437c +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_logging/__init__.py -# hypothesis_version: 6.151.9 - -['0.2.0', 'BoundLogger', 'ConsoleFormatter', 'ContextScope', 'EggLogger', 'JsonFormatter', 'LogContext', 'context_from_env', 'get_current_context', 'get_logger', 'set_current_context'] \ No newline at end of file diff --git a/.hypothesis/constants/5b79f41a5acfe503 b/.hypothesis/constants/5b79f41a5acfe503 deleted file mode 100644 index 27b000ef..00000000 --- a/.hypothesis/constants/5b79f41a5acfe503 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/health_checks/tier1/container_liveness.py -# hypothesis_version: 6.151.9 - -['container_liveness', 'shared'] \ No newline at end of file diff --git a/.hypothesis/constants/5c7228b42a374c5d b/.hypothesis/constants/5c7228b42a374c5d deleted file mode 100644 index 83c2c6dc..00000000 --- a/.hypothesis/constants/5c7228b42a374c5d +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/config_validator.py -# hypothesis_version: 6.151.9 - -['#', '/secrets', '1', 'PRIVATE_MODE', '__main__', 'false', 'launcher-secret', 'true', 'yes'] \ No newline at end of file diff --git a/.hypothesis/constants/600783293363fef8 b/.hypothesis/constants/600783293363fef8 deleted file mode 100644 index 6e75d4b2..00000000 --- a/.hypothesis/constants/600783293363fef8 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_config/base.py -# hypothesis_version: 6.151.9 - -[5.0, 'BaseConfig', 'Config', 'ValidationResult', 'degraded', 'healthy', 'invalid', 'latency_ms', 'message', 'valid'] \ No newline at end of file diff --git a/.hypothesis/constants/622fb2a377a78521 b/.hypothesis/constants/622fb2a377a78521 deleted file mode 100644 index c09ce4a7..00000000 --- a/.hypothesis/constants/622fb2a377a78521 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/_der.py -# hypothesis_version: 6.151.9 - -[127, 128, 'DERReader', 'big'] \ No newline at end of file diff --git a/.hypothesis/constants/62a4144dc85688ee b/.hypothesis/constants/62a4144dc85688ee deleted file mode 100644 index 8ccf9d5d..00000000 --- a/.hypothesis/constants/62a4144dc85688ee +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_config/__init__.py -# hypothesis_version: 6.151.9 - -['BaseConfig', 'Config', 'ConfigRegistry', 'ConfigStatus', 'EGG_CONTAINER_IP', 'EGG_EXTERNAL_NETWORK', 'EGG_EXTERNAL_SUBNET', 'EGG_ISOLATED_NETWORK', 'EGG_ISOLATED_SUBNET', 'GATEWAY_EXTERNAL_IP', 'GATEWAY_IMAGE_NAME', 'GATEWAY_ISOLATED_IP', 'GATEWAY_PORT', 'GATEWAY_PROXY_PORT', 'GatewayConfig', 'GitHubConfig', 'HealthCheckResult', 'LLMConfig', 'ORCHESTRATOR_PORT', 'TEST_GATEWAY_PORT', 'ValidationResult', 'get_local_repos', 'get_registry', 'reset_registry'] \ No newline at end of file diff --git a/.hypothesis/constants/62e69e7297f63486 b/.hypothesis/constants/62e69e7297f63486 deleted file mode 100644 index 6c7534c9..00000000 --- a/.hypothesis/constants/62e69e7297f63486 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/phase_defaults.py -# hypothesis_version: 6.151.9 - -['Auto-fix Check', 'Draft Validation', 'Lint Check', 'Merge Conflict Check', 'Plan YAML Validation', 'Test Check', 'check-fixer', 'check-lint', 'check-merge-conflict', 'check-plan-yaml', 'check-test', 'check_fixer.py', 'lint_check.py', 'plan_yaml_check.py', 'test_check.py'] \ No newline at end of file diff --git a/.hypothesis/constants/633539afd6be13a5 b/.hypothesis/constants/633539afd6be13a5 deleted file mode 100644 index 2537f8e5..00000000 --- a/.hypothesis/constants/633539afd6be13a5 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/self_improvement/collectors/base.py -# hypothesis_version: 6.151.9 - -['cancelled', 'failure', 'gha', 'local', 'running', 'success'] \ No newline at end of file diff --git a/.hypothesis/constants/6a58dd6e8e66bb91 b/.hypothesis/constants/6a58dd6e8e66bb91 deleted file mode 100644 index c46f2dbe..00000000 --- a/.hypothesis/constants/6a58dd6e8e66bb91 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/docker.py -# hypothesis_version: 6.151.9 - -[b'.claude/hooks', b'shared', 0.1, 256, 493, 8192, ' sudo $(which egg)', '*', '--build-arg', '--driver', '--entrypoint', '--format', '--internal', '--label', '--no-cache', '--quiet', '--rm', '--subnet', '-aG', '-f', '-fsSL', '-o', '-t', '.', '.claude', '/opt/claude/VERSION', '/tmp/get-docker.sh', '', 'Claude commands', 'Claude rules', 'Docker build failed', 'Docker is required', 'Dockerfile', 'Installing Docker...', 'Shared modules', 'Solutions:', 'USER', '__pycache__', 'bin', 'bridge', 'build', 'build files changed', 'cat', 'claude-commands', 'claude-rules', 'create', 'curl', 'docker', 'docker-setup.py', 'egg_lib', 'entrypoint.py', 'hooks', 'image', 'image does not exist', 'inspect', 'llm', 'ls', 'macos', 'network', 'org.egg.build-hash', 'permission denied', 'ps', 'pyproject.toml', 'rb', 'rm', 'run', 'sandbox', 'scripts', 'sh', 'shared', 'sudo', 'temp_dir', 'tools', 'usermod', 'version', 'which', 'yes', '{{.ID}}'] \ No newline at end of file diff --git a/.hypothesis/constants/6b092661788ac6b6 b/.hypothesis/constants/6b092661788ac6b6 deleted file mode 100644 index ffc0b637..00000000 --- a/.hypothesis/constants/6b092661788ac6b6 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/status_reporter.py -# hypothesis_version: 6.151.9 - -[100, '.tmp', '=', 'Agent completed', 'Agent failed', 'Agent started', 'Phase completed', 'Phase failed', 'Phase started', 'Pipeline cancelled', 'Pipeline created', 'Pipeline failed', 'Status handler error', 'Z', 'a', 'compact', 'current_phase', 'dag', 'data', 'event_type', 'message', 'phase', 'pipeline_id', 'progress', 'shared', 'status', 'status_update', 'timestamp', 'unknown', 'visualization'] \ No newline at end of file diff --git a/.hypothesis/constants/6b8d78ec7fe1be7b b/.hypothesis/constants/6b8d78ec7fe1be7b deleted file mode 100644 index 89501163..00000000 --- a/.hypothesis/constants/6b8d78ec7fe1be7b +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/jwt/algorithms.py -# hypothesis_version: 6.151.9 - -[b'ecdsa-sha2-', b'ssh-rsa', '-----BEGIN PRIVATE', '-----BEGIN PUBLIC', 'EC', 'ES256', 'ES256K', 'ES384', 'ES512', 'ES521', 'Ed25519', 'Ed448', 'EdDSA', 'HS256', 'HS384', 'HS512', 'Not an HMAC key', 'Not an RSA key', 'OKP', 'P-256', 'P-384', 'P-521', 'PS256', 'PS384', 'PS512', 'RS256', 'RS384', 'RS512', 'RSA', 'big', 'crv', 'd', 'dp', 'dq', 'e', 'k', 'key_ops', 'kty', 'n', 'none', 'oct', 'oth', 'p', 'private_numbers', 'q', 'qi', 'secp256k1', 'sign', 'ssh-', 'utf-8', 'verify', 'x', 'y'] \ No newline at end of file diff --git a/.hypothesis/constants/6c0c1bae1b8e1a01 b/.hypothesis/constants/6c0c1bae1b8e1a01 deleted file mode 100644 index 942d7c1b..00000000 --- a/.hypothesis/constants/6c0c1bae1b8e1a01 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/timing.py -# hypothesis_version: 6.151.9 - -[100, 1000, '-', '=', 'PhaseContext', 'timings', 'total_time', '█'] \ No newline at end of file diff --git a/.hypothesis/constants/6c70e98185d05a7d b/.hypothesis/constants/6c70e98185d05a7d deleted file mode 100644 index 6af106b7..00000000 --- a/.hypothesis/constants/6c70e98185d05a7d +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/roles.py -# hypothesis_version: 6.151.9 - -['*', '.', '.*', 'can_modify', 'cannot_modify', 'current_phase', 'decisions.*', 'decisions.*.resolved', 'human', 'implementer', 'phases.*.status', 'reviewer', 'system'] \ No newline at end of file diff --git a/.hypothesis/constants/6d819355c6a09701 b/.hypothesis/constants/6d819355c6a09701 deleted file mode 100644 index 05cb9e45..00000000 --- a/.hypothesis/constants/6d819355c6a09701 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/utils.py -# hypothesis_version: 6.151.9 - -['_digest_size'] \ No newline at end of file diff --git a/.hypothesis/constants/6da25e32907e3ee9 b/.hypothesis/constants/6da25e32907e3ee9 deleted file mode 100644 index d8cb2321..00000000 --- a/.hypothesis/constants/6da25e32907e3ee9 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/serialization/base.py -# hypothesis_version: 6.151.9 - -['dh.DHParameters'] \ No newline at end of file diff --git a/.hypothesis/constants/6f1cb59bdf4098e0 b/.hypothesis/constants/6f1cb59bdf4098e0 deleted file mode 100644 index 0ffd1d73..00000000 --- a/.hypothesis/constants/6f1cb59bdf4098e0 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/rate_limiter.py -# hypothesis_version: 6.151.9 - -[100, 3600, 'Rate limit exceeded', 'active_keys', 'allowed', 'any_limited', 'core', 'default', 'event_type', 'failed_lookup', 'gateway.rate-limiter', 'github_api', 'heartbeat', 'is_limited', 'last_updated', 'limit', 'max_requests', 'name', 'rate_limited', 'recent_events', 'remaining', 'reset_at', 'resource', 'resources', 'retry-after', 'retry_after_seconds', 'seconds_until_reset', 'session_heartbeat', 'shared', 'timestamp', 'used', 'window_seconds', 'x-ratelimit-limit', 'x-ratelimit-reset', 'x-ratelimit-used'] \ No newline at end of file diff --git a/.hypothesis/constants/71ba56e7bda2f6b9 b/.hypothesis/constants/71ba56e7bda2f6b9 deleted file mode 100644 index 7e971b4e..00000000 --- a/.hypothesis/constants/71ba56e7bda2f6b9 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/padding.py -# hypothesis_version: 6.151.9 - -['EME-OAEP', 'EMSA-PKCS1-v1_5', 'EMSA-PSS', 'MGF1', 'rsa.RSAPrivateKey', 'rsa.RSAPublicKey'] \ No newline at end of file diff --git a/.hypothesis/constants/758c5ab2a582073b b/.hypothesis/constants/758c5ab2a582073b deleted file mode 100644 index ceb590c8..00000000 --- a/.hypothesis/constants/758c5ab2a582073b +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/self_improvement/config.py -# hypothesis_version: 6.151.9 - -['EGG_BOT_EMAIL', 'EGG_BOT_USERNAME', 'egg', 'egg@localhost', 'metrics', 'on-check-failure.yml', 'on-pull-request.yml'] \ No newline at end of file diff --git a/.hypothesis/constants/75916ad048e366a8 b/.hypothesis/constants/75916ad048e366a8 deleted file mode 100644 index a5a9f68a..00000000 --- a/.hypothesis/constants/75916ad048e366a8 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/entrypoint.py -# hypothesis_version: 6.151.9 - -[0.0, 1.0, 2.0, 100, 128, 200, 384, 401, 403, 404, 420, 448, 500, 1000, 60000, '\n\n---\n\n', ' ✓ Responding', ' ✓ Working', '*.md', '-', '--', '--global', '-C', '-R', '-c', '-g', '-n', '-u', '.', '.bashrc', '.claude', '.claude.json', '.claude.json.', '.config', '.config/claude-code', '.git', '.local', '.tmp', '/', '/etc/hosts', '/home/egg', '/opt/claude-rules', '0', '1', '1000', '127.0.0.1', '172.32.0.', '172.32.0.2', '172.33.0.', '172.33.0.2', '2.0.69', '60', '=', 'ANTHROPIC_API_KEY', 'ANTHROPIC_BASE_URL', 'CLAUDE.md', 'CONTAINER:', 'DISABLE_AUTOUPDATER', 'DISABLE_TELEMETRY', 'DOCKER:', 'Diagnostic summary:', 'EGG_AGENT_ROLE', 'EGG_DEBUG', 'EGG_GATEWAY_TIMEOUT', 'EGG_HOST_LAUNCH_TIME', 'EGG_HOST_TIMING', 'EGG_LAUNCHER_SECRET', 'EGG_ORCHESTRATOR_URL', 'EGG_PIPELINE_ID', 'EGG_PRIVATE_MODE', 'EGG_QUIET', 'EGG_REPO_PATH', 'EGG_TIMING', 'GATEWAY_URL', 'GITHUB_TOKEN', 'GIT_EDITOR', 'Gateway ready!', 'HEAD', 'HOME', 'HOST:', 'HTTPS_PROXY', 'HTTP_PROXY', 'NODE_EXTRA_CA_CERTS', 'PATH', 'PYTHONPATH', 'PYTHONUNBUFFERED', 'PhaseContext', 'README.md', 'REQUESTS_CA_BUNDLE', 'RUNTIME_GID', 'RUNTIME_UID', 'SSL_CERT_FILE', 'USER', '__main__', 'a', 'addr', 'api_key', 'auth_configured', 'autoApproveEdits', 'autoUpdate', 'autoUpdates', 'bin', 'buffer', 'bypassPermissions', 'check_gateway', 'checkout', 'checkpoint.md', 'chown', 'claude', 'claude-code', 'code-standards.md', 'commands', 'complete', 'config', 'connected', 'contract.md', 'created', 'credential.helper', 'default', 'defaultModel', 'distributed', 'editorMode', 'egg', 'egg-external', 'egg-gateway', 'egg-isolated', 'egg@localhost', 'entrypoint_init', 'environment.md', 'error', 'false', 'git', 'github_token_valid', 'gosu', 'groupmod', 'healthy', 'http', 'http_proxy', 'https', 'https_proxy', 'inet', 'inet ', 'installMethod', 'ip', 'local', 'mission.md', 'normal', 'numStartups', 'oauth', 'opus', 'orchestrator.md', 'outputStyle', 'pr-descriptions.md', 'python3', 'remote-single', 'replace', 'repos', 'settings.json', 'setup_agent_rules', 'setup_anthropic_api', 'setup_bashrc', 'setup_claude', 'setup_egg_symlink', 'setup_environment', 'setup_gateway_ca', 'setup_git', 'setup_user', 'setup_worktrees', 'show', 'showResumeCommand', 'status', 'test-workflow.md', 'timeout', 'timings', 'total_time', 'true', 'unchanged', 'unknown', 'updated', 'user.email', 'user.name', 'usermod', 'w', 'wb', '█', '✓ Cleanup complete'] \ No newline at end of file diff --git a/.hypothesis/constants/760953e97136a180 b/.hypothesis/constants/760953e97136a180 deleted file mode 100644 index 52930857..00000000 --- a/.hypothesis/constants/760953e97136a180 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/jwt/api_jwt.py -# hypothesis_version: 6.151.9 - -[',', ':', 'HS256', 'Invalid audience', 'Invalid issuer', 'aud', 'exp', 'iat', 'iss', 'nbf', 'payload', 'require', 'utf-8', 'verify_aud', 'verify_exp', 'verify_iat', 'verify_iss', 'verify_nbf', 'verify_signature'] \ No newline at end of file diff --git a/.hypothesis/constants/78706754819d8764 b/.hypothesis/constants/78706754819d8764 deleted file mode 100644 index 5759e8a7..00000000 --- a/.hypothesis/constants/78706754819d8764 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/audit.py -# hypothesis_version: 6.151.9 - -['%Y-%m-%d %H:%M:%S', 'Audit Log:', 'current_phase'] \ No newline at end of file diff --git a/.hypothesis/constants/7c84dedefd1cbde2 b/.hypothesis/constants/7c84dedefd1cbde2 deleted file mode 100644 index 74789dc0..00000000 --- a/.hypothesis/constants/7c84dedefd1cbde2 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_config/registry.py -# hypothesis_version: 6.151.9 - -[5.0, 'ConfigRegistry', 'all_valid', 'degraded', 'errors', 'healthy', 'results', 'services', 'status', 'timestamp', 'unhealthy', 'warnings'] \ No newline at end of file diff --git a/.hypothesis/constants/7cef6f25b014d2b7 b/.hypothesis/constants/7cef6f25b014d2b7 deleted file mode 100644 index 67ff46a8..00000000 --- a/.hypothesis/constants/7cef6f25b014d2b7 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/agent_recovery.py -# hypothesis_version: 6.151.9 - -[2.0, 300, ', ', '--diff-filter=U', '--name-only', 'Retrying immediately', 'agents_involved', 'attempts', 'backoff', 'can_execute', 'can_retry', 'changed_files', 'closed', 'conflict_type', 'conflicting_files', 'detected_at', 'diff', 'edit', 'errors', 'failed_agents', 'failure_count', 'failure_threshold', 'git', 'half_open', 'immediate', 'last_failure', 'manual', 'merge', 'network', 'open', 'opened_at', 'rate_limit', 'resolution_hint', 'skip', 'state', 'success_count', 'timeout', 'transient'] \ No newline at end of file diff --git a/.hypothesis/constants/7f33c3e342224c87 b/.hypothesis/constants/7f33c3e342224c87 deleted file mode 100644 index 490e2269..00000000 --- a/.hypothesis/constants/7f33c3e342224c87 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/gateway_client.py -# hypothesis_version: 6.151.9 - -[2.0, 9848, '/api/v1/git/fetch', '/api/v1/git/push', '/api/v1/health', '127.0.0.1', '172.32.0.', 'Authorization', 'Content-Type', 'DELETE', 'EGG_LAUNCHER_SECRET', 'GATEWAY_HOST', 'GATEWAY_PORT', 'GET', 'Gateway is healthy', 'PATCH', 'POST', 'Waiting for gateway', 'agent_role', 'application/json', 'base_branch', 'branch', 'claude_code_version', 'complexity_tier', 'container_id', 'container_ip', 'created_at', 'data', 'deleted', 'details', 'egg-gateway', 'errors', 'expires_at', 'force', 'gid', 'healthy', 'issue_number', 'local', 'message', 'mode', 'origin', 'phase', 'pipeline_id', 'pr_number', 'public', 'refspec', 'remote', 'repo_path', 'repos', 'session_token', 'shared', 'status', 'success', 'uid', 'unhealthy', 'unknown', 'unreachable', 'uptime_seconds', 'valid', 'version', 'worktrees'] \ No newline at end of file diff --git a/.hypothesis/constants/816c83f6532ca62b b/.hypothesis/constants/816c83f6532ca62b deleted file mode 100644 index e4942c47..00000000 --- a/.hypothesis/constants/816c83f6532ca62b +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/phase_transition.py -# hypothesis_version: 6.151.9 - -['action', 'actor', 'current_phase', 'field_path', 'from_phase', 'human', 'implementer', 'new_value', 'old_value', 'reason', 'reviewer', 'role', 'shared', 'timestamp', 'to_phase', 'transition', 'unknown'] \ No newline at end of file diff --git a/.hypothesis/constants/82087d68c872a73d b/.hypothesis/constants/82087d68c872a73d deleted file mode 100644 index ad4eee75..00000000 --- a/.hypothesis/constants/82087d68c872a73d +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_orchestrator/constants.py -# hypothesis_version: 6.151.9 - -[9849, '/api/v1/health', '172.32.0.3', '172.33.0.3', 'EGG_AGENT_ROLE', 'EGG_ORCHESTRATOR_URL', 'EGG_PIPELINE_ID', 'ENV_AGENT_ROLE', 'ENV_ORCHESTRATOR_URL', 'ENV_PIPELINE_ID', 'ORCHESTRATOR_PORT', 'egg-orchestrator'] \ No newline at end of file diff --git a/.hypothesis/constants/8753fc38897693cb b/.hypothesis/constants/8753fc38897693cb deleted file mode 100644 index f972a1c6..00000000 --- a/.hypothesis/constants/8753fc38897693cb +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_logging/formatters.py -# hypothesis_version: 6.151.9 - -[100, '\x1b[0m', '\x1b[31m', '\x1b[32m', '\x1b[33m', '\x1b[35m', '\x1b[36m', '%Y-%m-%d %H:%M:%S', '%Y-%m-%dT%H:%M:%S.', '.', 'CRITICAL', 'DEBUG', 'DEFAULT', 'ERROR', 'INFO', 'NO_COLOR', 'WARNING', '_', 'access_level', 'args', 'component', 'context', 'created', 'egg', 'environment', 'exc_info', 'exc_text', 'exception', 'extra', 'file', 'filename', 'funcName', 'function', 'isatty', 'levelname', 'levelno', 'line', 'lineno', 'logger', 'message', 'module', 'msecs', 'msg', 'name', 'pathname', 'pr_number', 'process', 'processName', 'relativeCreated', 'repository', 'service', 'severity', 'sourceLocation', 'spanId', 'span_id', 'stack_info', 'taskName', 'task_id', 'thread', 'threadName', 'timestamp', 'traceFlags', 'traceId', 'trace_flags', 'trace_id'] \ No newline at end of file diff --git a/.hypothesis/constants/88a78023637ebf61 b/.hypothesis/constants/88a78023637ebf61 deleted file mode 100644 index 11b0953b..00000000 --- a/.hypothesis/constants/88a78023637ebf61 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/session_manager.py -# hypothesis_version: 6.151.9 - -[384, '.tmp', 'Session deleted', 'Session has expired', 'Session registered', 'agent_role', 'assigned_branch', 'auto_commit_sha', 'checkpoint_repo', 'claude_code_version', 'completed', 'complexity_tier', 'container_id', 'container_ip', 'created_at', 'error', 'expired', 'expires_at', 'issue_number', 'last_branch', 'last_repo_path', 'last_seen', 'local', 'mode', 'phase', 'pipeline_id', 'pr_number', 'private', 'public', 'saved_at', 'session_auth_failed', 'session_deleted', 'session_expired', 'session_ip_mismatch', 'session_registered', 'session_token_hash', 'sessions', 'sessions.json', 'shared', 'valid', 'version', 'w'] \ No newline at end of file diff --git a/.hypothesis/constants/8a1fe30e1d2c71a3 b/.hypothesis/constants/8a1fe30e1d2c71a3 deleted file mode 100644 index f412d71a..00000000 --- a/.hypothesis/constants/8a1fe30e1d2c71a3 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/ciphers/__init__.py -# hypothesis_version: 6.151.9 - -['AEADCipherContext', 'BlockCipherAlgorithm', 'Cipher', 'CipherAlgorithm', 'CipherContext'] \ No newline at end of file diff --git a/.hypothesis/constants/8f6bb4ae4c5a7912 b/.hypothesis/constants/8f6bb4ae4c5a7912 deleted file mode 100644 index 257af037..00000000 --- a/.hypothesis/constants/8f6bb4ae4c5a7912 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/routes/phases.py -# hypothesis_version: 6.151.9 - -[200, 400, 404, 409, '//phase', '/api/v1/pipelines', 'GET', 'HEALTH_CHECK_RUNNER', 'Missing target_phase', 'POST', 'Phase advanced', 'Phase completed', 'Phase failed', 'Phase retrieved', 'Phase started', 'artifacts', 'completed_at', 'current_phase', 'data', 'details', 'error', 'force', 'health_results', 'issue', 'local', 'message', 'mode', 'next_phase', 'orchestrator.phases', 'phase', 'phase_execution', 'phases', 'previous_phase', 'review_cycles', 'shared', 'started_at', 'status', 'success', 'target_phase', 'work_started_at'] \ No newline at end of file diff --git a/.hypothesis/constants/910a59d3760f2706 b/.hypothesis/constants/910a59d3760f2706 deleted file mode 100644 index 4dc3e1cc..00000000 --- a/.hypothesis/constants/910a59d3760f2706 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/cli.py -# hypothesis_version: 6.151.9 - -[9849, '%(prog)s 0.1.0', '--branch', '--debug', '--help', '--host', '--issue', '--json', '--port', '--repo', '--repo-path', '--version', '0.0.0.0', 'Available commands', 'Check service health', 'Configuration', 'Create a pipeline', 'Delete a pipeline', 'EGG_HOST_REPO_MAP', 'EGG_REPO_PATH', 'Enable debug mode', 'Gateway operations', 'Get pipeline status', 'HEALTH_CHECK_RUNNER', 'Issue number', 'List pipelines', 'No pipelines found', 'ORCHESTRATOR_DEBUG', 'ORCHESTRATOR_HOST', 'ORCHESTRATOR_PORT', 'Output as JSON', 'Pipeline ID', 'Pipeline operations', 'Repository path', 'Start the API server', '__main__', 'command', 'create', 'delete', 'egg-orchestrator', 'error', 'exc_info', 'func', 'gateway', 'gateway_command', 'health', 'healthy', 'json', 'list', 'localhost', 'not set', 'orchestrator.cli', 'pipeline_id', 'pipelines', 'pipelines_command', 'running', 'serve', 'shared', 'status', 'store_true', 'true', 'uptime_seconds', 'version'] \ No newline at end of file diff --git a/.hypothesis/constants/92379c7302fe5878 b/.hypothesis/constants/92379c7302fe5878 deleted file mode 100644 index 07cc3ab6..00000000 --- a/.hypothesis/constants/92379c7302fe5878 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/routes/pipelines.py -# hypothesis_version: 6.151.9 - -[-2000, 100, 200, 297, 300, 400, 404, 409, 500, 1000, 1800, 2700, 3600, 9849, 32000, ' files:', ' - id: TASK-1-1', ' name: Phase Name', ' tasks:', ' "checks": [', ' - id: 1', ' --format markdown', ' ]', ' description: |', '#', '# ', '# metadata', '# yaml-tasks', '## Check Failures\n', '## Constraints\n', '## Context\n', '## Contract Tasks\n', '## Current Behavior\n', '## Delta Review\n', '## Fix ALL Failures\n', '## For More Context\n', '## HITL Decisions\n', '## Important\n', '## Instructions\n', '## Open Questions\n', '## Output Format', '## Output Format\n', '## Phase Completion\n', '## Plan Overview\n', '## Review Criteria\n', '## Review Feedback\n', '## Scope\n', '## Task Description\n', '## Verdict Format\n', '## Your Task\n', '### Check Commands\n', '### Fix Rules\n', '### Phase ', '### Push Recovery', '### Results File\n', '### Tasks\n', '### Workflow\n', '### phase-', '### tester findings', '**Cons**:', '**Pros**:', '*Authored-by: egg*', '-', '- You CAN run tests', '- [Advantage 1]\n', '- [Disadvantage 1]\n', '--', '---\n', '--cached', '--count', '--hard', '--left-right', '--max-turns', '--model', '--no-verify', '--output-format', '--print', '--quiet', '--show-current', '--verbose', '--verify', '-C', '-c', '-certs', '-m', '.', '...', '.egg', '.egg-state', '.egg-state/', '.git', '/', '/', '//start', '/api/v1/pipelines', '/app/prompts', '/stream', '1', '1. Run all checks', '100', '172.32.0.3', '172.33.0.3', '200', '50', 'Analysis', 'COMPOSE_PROJECT_NAME', 'Cache-Control', 'ContainerSpawner', 'DELETE', 'EGG_AGENT_ROLE', 'EGG_BRANCH', 'EGG_CERTS_VOLUME', 'EGG_HOST_REPO_MAP', 'EGG_MULTI_AGENT', 'EGG_ORCHESTRATOR_URL', 'EGG_PIPELINE_ID', 'EGG_PIPELINE_MODE', 'EGG_PIPELINE_PHASE', 'EGG_PIPELINE_PROMPT', 'EGG_PLAN_PHASE_ID', 'EGG_REPO', 'EGG_REPO_CHECKS', 'EGG_REPO_PATH', 'EventType', 'Executing phase wave', 'Focus on:', 'GET', 'Gap-finding focus:', 'HEAD', 'HOST_GID', 'HOST_UID', 'In this phase:', 'Integrator failed', 'Missing branch', 'Missing issue_number', 'Missing repo', 'Missing request body', 'PATCH', 'POST', 'Phase advanced', 'Phase failed', 'Phase: implement', 'Pipeline complete', 'Pipeline created', 'Pipeline deleted', 'Pipeline retrieved', 'Pipeline started', 'Pipeline stopped', 'Pipeline updated', 'Plan', 'Plan parse warning', 'Risk Assessment', 'Status retrieved', 'Steps:', 'Tester found gaps', 'Worktree error', 'X-Accel-Buffering', '_', '```', '```\n', '````', '```bash', '```json', '```markdown', '```yaml', 'acceptance_criteria', 'active_only', 'add', 'agent-design', 'agent-outputs', 'already exists', 'analysis', 'approve', 'approved', 'architect', 'ascii', 'autofixer-rules.md', 'branch', 'checker', 'checks', 'claude', 'code', 'coder', 'command', 'commit', 'compact', 'complete', 'complexity_tier', 'complexity_tier: low', 'complexity_tier: mid', 'config', 'content', 'context', 'contract', 'contract-rules.md', 'created_at', 'current_phase', 'data', 'decision.created', 'deficien', 'details', 'diff', 'distributed', 'documenter', 'egg', 'egg-certs', 'error', 'fail', 'failed', 'false', 'files_affected', 'format', 'full', 'full_dag', 'gap', 'gaps_found', 'git', 'high', 'id', 'implement', 'integrator', 'issue', 'issue_number', 'json', 'lgtm', 'local', 'low', 'message', 'mid', 'missing', 'mode', 'name', 'needs_revision', 'network_mode', 'no', 'no-cache', 'options', 'opus', 'output', 'parallel_phases', 'passed', 'pending_decision', 'pending_decisions', 'phase', 'phase.completed', 'phase.started', 'phases:', 'pipeline', 'pipeline.completed', 'pipeline.failed', 'pipeline_id', 'pipelines', 'plan', 'pr', 'pr:', 'private', 'progress', 'prompt', 'prompts', 'public', 'question', 'refine', 'refiner', 'repo', 'request changes', 'request_changes', 'reset', 'rev-list', 'rev-parse', 'review-rules.md', 'reviewer_', 'risk_analyst', 'running', 'shared', 'short_circuit: true', 'status', 'stream-json', 'success', 'summary', 'task_planner', 'tester', 'tester-output.json', 'tests_failed', 'text', 'text/event-stream', 'text/plain', 'true', 'unknown', 'updated_at', 'utf-8', 'x', 'yaml-tasks', 'yes', '{', '{}', '}'] \ No newline at end of file diff --git a/.hypothesis/constants/9248d1b4012edaf1 b/.hypothesis/constants/9248d1b4012edaf1 deleted file mode 100644 index aabab3fb..00000000 --- a/.hypothesis/constants/9248d1b4012edaf1 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/startup_reconciliation.py -# hypothesis_version: 6.151.9 - -['shared'] \ No newline at end of file diff --git a/.hypothesis/constants/92767bced458b94e b/.hypothesis/constants/92767bced458b94e deleted file mode 100644 index c89e7f2b..00000000 --- a/.hypothesis/constants/92767bced458b94e +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/jwt/exceptions.py -# hypothesis_version: 6.151.9 - -[] \ No newline at end of file diff --git a/.hypothesis/constants/9381368efb8300ed b/.hypothesis/constants/9381368efb8300ed deleted file mode 100644 index 7b3e24bc..00000000 --- a/.hypothesis/constants/9381368efb8300ed +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/__about__.py -# hypothesis_version: 6.151.9 - -['3.4.8', '__author__', '__copyright__', '__email__', '__license__', '__summary__', '__title__', '__uri__', '__version__', 'cryptography'] \ No newline at end of file diff --git a/.hypothesis/constants/93ae11514a1bc1d2 b/.hypothesis/constants/93ae11514a1bc1d2 deleted file mode 100644 index 5b320335..00000000 --- a/.hypothesis/constants/93ae11514a1bc1d2 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/ed448.py -# hypothesis_version: 6.151.9 - -['Ed448PrivateKey', 'Ed448PublicKey'] \ No newline at end of file diff --git a/.hypothesis/constants/93be14cbbd917f67 b/.hypothesis/constants/93be14cbbd917f67 deleted file mode 100644 index b686a300..00000000 --- a/.hypothesis/constants/93be14cbbd917f67 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/cli.py -# hypothesis_version: 6.151.9 - -['--auth', '--build', '--compose', '--down', '--exec', '--max-parallel', '--max-turns', '--model', '--multi-agent', '--output-format', '--print', '--private', '--public', '--rebuild', '--reset', '--setup', '--time', '--timeout', '--verbose', '-v', '200', '30', 'EGG_AGENT_ROLE', 'EGG_BOT_NAME', 'EGG_COMMIT_SHA', 'EGG_ISSUE_NUMBER', 'EGG_PIPELINE_ID', 'EGG_PR_NUMBER', 'INPUT_MODE', 'INPUT_MODEL', 'INPUT_PROMPT', 'INPUT_TIMEOUT', 'MINUTES', 'api-key', 'auto', 'claude', 'internal', 'multi_agent', 'oauth-token', 'opus', 'private', 'public', 'store_true', 'stream-json', 'yes'] \ No newline at end of file diff --git a/.hypothesis/constants/958656e82d859095 b/.hypothesis/constants/958656e82d859095 deleted file mode 100644 index c190727e..00000000 --- a/.hypothesis/constants/958656e82d859095 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/events.py -# hypothesis_version: 6.151.9 - -[1.0, 5.0, 100, 'Event handler error', 'Event published', 'Z', 'agent.completed', 'agent.failed', 'agent.started', 'agent.timeout', 'container.removed', 'container.spawned', 'container.stopped', 'data', 'decision.created', 'decision.resolved', 'event_type', 'orchestrator', 'orchestrator.events', 'phase.completed', 'phase.failed', 'phase.started', 'pipeline.cancelled', 'pipeline.completed', 'pipeline.created', 'pipeline.failed', 'pipeline.started', 'pipeline_id', 'shared', 'source', 'system.error', 'system.health_check', 'timestamp'] \ No newline at end of file diff --git a/.hypothesis/constants/96a978335752f060 b/.hypothesis/constants/96a978335752f060 deleted file mode 100644 index 07de819e..00000000 --- a/.hypothesis/constants/96a978335752f060 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/fork_policy.py -# hypothesis_version: 6.151.9 - -['Fork will be private', 'allowed', 'decision', 'denied', 'details', 'error', 'event_type', 'fork', 'fork_from_public', 'fork_policy', 'fork_to_public', 'gateway.fork-policy', 'hint', 'make_private', 'personal', 'policy', 'private', 'private_mode', 'public', 'reason', 'shared', 'source_repository', 'source_visibility', 'target_organization', 'target_visibility', 'timestamp', 'visibility_unknown'] \ No newline at end of file diff --git a/.hypothesis/constants/96b7f20f5a75f2c5 b/.hypothesis/constants/96b7f20f5a75f2c5 deleted file mode 100644 index f99201fd..00000000 --- a/.hypothesis/constants/96b7f20f5a75f2c5 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/routes/checks.py -# hypothesis_version: 6.151.9 - -[200, 400, 404, 409, 422, 500, '/api/v1/pipelines', 'Devserver started', 'Devserver torn down', 'GET', 'POST', 'checks', 'message', 'shared', 'status', 'success'] \ No newline at end of file diff --git a/.hypothesis/constants/9778d411732b77fa b/.hypothesis/constants/9778d411732b77fa deleted file mode 100644 index f123a251..00000000 --- a/.hypothesis/constants/9778d411732b77fa +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/.github/scripts/checks/lint_check.py -# hypothesis_version: 6.151.9 - -[-2000, 300, 'Linting failed', 'Linting passed', 'Makefile', 'check-lint', 'command', 'hint', 'lint', 'lint :', 'lint:', 'make', 'make lint', 'stderr', 'stdout'] \ No newline at end of file diff --git a/.hypothesis/constants/97cd9c4555a2cca6 b/.hypothesis/constants/97cd9c4555a2cca6 deleted file mode 100644 index 616d3ea6..00000000 --- a/.hypothesis/constants/97cd9c4555a2cca6 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/self_improvement/collectors/__init__.py -# hypothesis_version: 6.151.9 - -['LogCollector', 'RunLog'] \ No newline at end of file diff --git a/.hypothesis/constants/99bca4ca0a2f7be2 b/.hypothesis/constants/99bca4ca0a2f7be2 deleted file mode 100644 index 97077cb4..00000000 --- a/.hypothesis/constants/99bca4ca0a2f7be2 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_config/config.py -# hypothesis_version: 6.151.9 - -['.config', '__main__', 'egg', 'local_repos', 'paths', 'repositories.yaml'] \ No newline at end of file diff --git a/.hypothesis/constants/9a5f396af21c5e42 b/.hypothesis/constants/9a5f396af21c5e42 deleted file mode 100644 index c10a55c7..00000000 --- a/.hypothesis/constants/9a5f396af21c5e42 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/checkpoint_handler.py -# hypothesis_version: 6.151.9 - -[120, 3000000, '(same repo)', '--detach', '--force', '--heads', '--no-verify', '--orphan', '-D', '-c', '-m', '-rf', '.', '.git', '/home/egg/repos', 'Bash', 'CHECKPOINT_ENABLED', 'Checkpoint captured', 'Checkpoint stored', 'EGG_ISSUE_NUMBER', 'EGG_PIPELINE_ID', 'EGG_PIPELINE_PHASE', 'EGG_PR_NUMBER', 'FETCH_HEAD', 'add', 'architect', 'branch', 'checker', 'checkout', 'checkpoint_', 'checkpoints', 'coder', 'command', 'commit', 'container_crash', 'content', 'documenter', 'egg/checkpoints/v2', 'fetch', 'get-url', 'git', 'index.json', 'integrator', 'ls-remote', 'messages', 'origin', 'parameters', 'push', 'refiner', 'remote', 'remove', 'result_summary', 'rev-parse', 'reviewer', 'reviewer_code', 'reviewer_contract', 'reviewer_plan', 'reviewer_refine', 'risk_analyst', 'rm', 'shared', 'show', 'task_planner', 'tester', 'true', 'truncated', 'truncation_reason', 'unknown', 'unknown commit', 'worktree'] \ No newline at end of file diff --git a/.hypothesis/constants/9b2b931afce7a42d b/.hypothesis/constants/9b2b931afce7a42d deleted file mode 100644 index 3cb9dba9..00000000 --- a/.hypothesis/constants/9b2b931afce7a42d +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/__init__.py -# hypothesis_version: 6.151.9 - -['1.0.0', 'egg_container', 'name', 'statusbar', 'yaml'] \ No newline at end of file diff --git a/.hypothesis/constants/9c2147cfef7abdd7 b/.hypothesis/constants/9c2147cfef7abdd7 deleted file mode 100644 index c8e925ca..00000000 --- a/.hypothesis/constants/9c2147cfef7abdd7 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/token_refresher.py -# hypothesis_version: 6.151.9 - -['#', '+00:00', '.config', '2022-11-28', '=', 'Accept', 'Authorization', 'EGG_CONFIG_DIR', 'GITHUB_APP_ID', 'REVIEWER_APP_ID', 'RS256', 'Token refresh failed', 'X-GitHub-Api-Version', 'Z', 'egg', 'exp', 'expires_at', 'github-app.pem', 'iat', 'iss', 'none', 'refresher', 'reviewer-app.pem', 'reviewer_refresher', 'secrets.env', 'shared', 'token'] \ No newline at end of file diff --git a/.hypothesis/constants/9e13917238468a8c b/.hypothesis/constants/9e13917238468a8c deleted file mode 100644 index 28ff92cc..00000000 --- a/.hypothesis/constants/9e13917238468a8c +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/unified_sse.py -# hypothesis_version: 6.151.9 - -[1000, 5000, 'EGG_REPO_PATH', 'Z', 'branch', 'compact', 'current_phase', 'dag', 'data', 'done', 'error', 'event_type', 'is_terminal', 'pipeline_id', 'pipelines', 'progress', 'reason', 'repo', 'shared', 'snapshot', 'status', 'timeout', 'timestamp', 'update'] \ No newline at end of file diff --git a/.hypothesis/constants/a0b16f041155a749 b/.hypothesis/constants/a0b16f041155a749 deleted file mode 100644 index 562203f4..00000000 --- a/.hypothesis/constants/a0b16f041155a749 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/usage_loader.py -# hypothesis_version: 6.151.9 - -[0.1, 420, '.tmp', '.usage_', 'T', 'by-issue', 'by-pr', 'by-session', 'by-workflow', 'index.json', 'json', 'no-commit', 'true', 'usage', 'w'] \ No newline at end of file diff --git a/.hypothesis/constants/a1a6023fc279930a b/.hypothesis/constants/a1a6023fc279930a deleted file mode 100644 index beec93ed..00000000 --- a/.hypothesis/constants/a1a6023fc279930a +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/context.py -# hypothesis_version: 6.151.9 - -['1', 'CONFIG_DIR', 'EGG_', 'EPHEMERAL', 'EXTERNAL_NETWORK', 'EXTERNAL_SUBNET', 'GATEWAY_EXTERNAL_IP', 'GATEWAY_IMAGE', 'GATEWAY_ISOLATED_IP', 'GATEWAY_PORT', 'GATEWAY_PROXY_PORT', 'ISOLATED_NETWORK', 'ISOLATED_SUBNET', 'LAUNCHER_SECRET', 'ORCHESTRATOR_IMAGE', 'ORCHESTRATOR_PORT', 'SANDBOX_IMAGE', 'SKIP_BUILD', 'auto', 'true', 'yes'] \ No newline at end of file diff --git a/.hypothesis/constants/a4136aca6b851514 b/.hypothesis/constants/a4136aca6b851514 deleted file mode 100644 index b8b8cab0..00000000 --- a/.hypothesis/constants/a4136aca6b851514 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/dependency_graph.py -# hypothesis_version: 6.151.9 - -[' [parallel]', ', ', 'dependencies'] \ No newline at end of file diff --git a/.hypothesis/constants/a60840b027177571 b/.hypothesis/constants/a60840b027177571 deleted file mode 100644 index 9ea6fa95..00000000 --- a/.hypothesis/constants/a60840b027177571 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_logging/context.py -# hypothesis_version: 6.151.9 - -['01', 'EGG_PR_NUMBER', 'EGG_REPOSITORY', 'EGG_SPAN_ID', 'EGG_TASK_ID', 'EGG_TRACE_ID', 'EGG_WORKFLOW_ID', 'EGG_WORKFLOW_TYPE', 'LogContext', 'LogContext | None', 'OTEL_SPAN_ID', 'OTEL_TRACE_ID', 'egg_log_context', 'pr_number', 'repository', 'spanId', 'task_id', 'traceFlags', 'traceId', 'workflow_id', 'workflow_type'] \ No newline at end of file diff --git a/.hypothesis/constants/a8bb40c47f8e3f9c b/.hypothesis/constants/a8bb40c47f8e3f9c deleted file mode 100644 index db4ac4f3..00000000 --- a/.hypothesis/constants/a8bb40c47f8e3f9c +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/setup_flow.py -# hypothesis_version: 6.151.9 - -[384, ' 2. API Key', '#', '# Other', '***', '-v', '.egg-shared-certs', '.git', '.pem', '/', '2', '=', '=== Egg Setup ===', 'ANTHROPIC_API_KEY', 'API key saved', 'API key: ', 'Bot name: ', 'Directories created', 'Docker build failed', 'Egg setup complete!', 'GATEWAY_BOT_NAME', 'GITHUB_APP_ID', 'GITHUB_TOKEN', 'GITHUB_USER_TOKEN', 'GitHub App', 'GitHub App ID: ', 'GitHub PAT saved', 'GitHub Tokens', 'GitHub username: ', 'Installation ID: ', 'KEEP', 'Next steps:', 'No API key provided.', 'OAuth token saved', 'OAuth token: ', 'OPERATING MODEL:', 'Setup cancelled', 'WHAT EGG DOES:', 'YOUR_USERNAME', 'api_key', 'apt', 'bot_username', 'checks', 'command', 'config', 'config.yaml', 'default_reviewer', 'dnf', 'docker_setup', 'extra_packages', 'ghp_', 'github-app.pem', 'github_pat_', 'github_sync', 'github_username', 'launcher-secret', 'local_repos', 'name', 'oauth', 'packages', 'paths', 'readable_repos', 'repo_settings', 'repositories.yaml', 'secrets.env', 'sk-ant-', 'sk-ant-oat', 'sync_all_prs', 'user_mode', 'w', 'writable_repos', 'yes'] \ No newline at end of file diff --git a/.hypothesis/constants/a96648b2a575bed7 b/.hypothesis/constants/a96648b2a575bed7 deleted file mode 100644 index 6ca39d0e..00000000 --- a/.hypothesis/constants/a96648b2a575bed7 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/post_agent_commit.py -# hypothesis_version: 6.151.9 - -[200, ' -> ', '--', '--abbrev-ref', '--author', '--no-verify', '--porcelain', '-c', '-m', '/usr/bin/git', 'Authorization', 'Auto-commit failed', 'Content-Type', 'HEAD', 'POST', 'add', 'application/json', 'checkout', 'commit', 'egg ', 'origin', 'post_agent_auto_push', 'refspec', 'remote', 'repo_path', 'rev-parse', 'safe.directory=*', 'shared', 'status'] \ No newline at end of file diff --git a/.hypothesis/constants/ab2f93aeba5066fd b/.hypothesis/constants/ab2f93aeba5066fd deleted file mode 100644 index 64e345ba..00000000 --- a/.hypothesis/constants/ab2f93aeba5066fd +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/.github/scripts/checks/merge_conflict_check.py -# hypothesis_version: 6.151.9 - -['<<<<<<<', 'check-merge-conflict', 'files', 'git', 'ignore', 'ls-files', 'stderr'] \ No newline at end of file diff --git a/.hypothesis/constants/ae2847ca771c9802 b/.hypothesis/constants/ae2847ca771c9802 deleted file mode 100644 index eb5e06df..00000000 --- a/.hypothesis/constants/ae2847ca771c9802 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/gateway.py -# hypothesis_version: 6.151.9 - -[b'scripts', b'shared/pyproject.toml', 0.5, 200, 384, 401, 403, 493, 8192, '"', '#', "'", '*', '*.py', ',', '--format', '--ip', '--label', '--name', '--network', '--security-opt', '-d', '-e', '-f', '-p', '-t', '-v', '.', '.egg-local-objects', '.egg-shared-certs', '.egg-state', '.egg-worktrees', '.git', '.git-main', '/api/v1/sessions', '/home/egg', '5', '', '=', 'Authorization', 'Content-Type', 'DELETE', 'Dockerfile', 'GATEWAY_BOT_NAME', 'GET', 'GITHUB_USER_TOKEN', 'POST', 'Unknown error', 'User-Agent', 'agent_role', 'allowed_domains.txt', 'application/json', 'base_branch', 'build', 'connect', 'container', 'container_id', 'container_ip', 'data', 'deleted', 'docker', 'egg-gateway-check', 'egg_config', 'egg_logging', 'entrypoint.sh', 'error', 'errors', 'filtered_repos', 'force', 'gateway', 'gid', 'git_email', 'git_name', 'gitdir:', 'http', 'https', 'image', 'image does not exist', 'inspect', 'issue_number', 'label=disable', 'launcher-secret', 'local_repos', 'localhost', 'mode', 'network', 'paths', 'phase', 'pipeline_id', 'pr_number', 'pyproject.toml', 'rb', 'repos', 'repositories.yaml', 'rm', 'run', 'scripts', 'secrets.env', 'session_token', 'sessions', 'shared', 'squid-allow-all.conf', 'squid.conf', 'stop', 'success', 'test', 'tests', 'true', 'uid', 'user_mode', 'utf-8', 'visibilities', 'worktrees', '{{.State.Running}}'] \ No newline at end of file diff --git a/.hypothesis/constants/aee4ac2202df1931 b/.hypothesis/constants/aee4ac2202df1931 deleted file mode 100644 index 1ff7524c..00000000 --- a/.hypothesis/constants/aee4ac2202df1931 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/checkpoints.py -# hypothesis_version: 6.151.9 - -['2.0', 'CheckpointSummaryV2', 'CheckpointV2', 'Git branch', 'Git commit SHA', 'GitHub PR number', 'GitHub issue number', 'Message content', 'Message role', 'Number of tool calls', 'Pipeline phase', 'Pipeline run ID', 'Schema version', 'Session metadata', 'Session/container ID', 'Total input tokens', 'Total output tokens', 'Total tokens used', 'Type of operation', 'When session ended', 'When session started', '^[0-9]+\\.[0-9]+$', '^[a-f0-9]{7,40}$', 'architect', 'assistant', 'before', 'checker', 'coder', 'commit', 'commit_sha', 'completed', 'create', 'delete', 'documenter', 'edit', 'expired', 'failed', 'glob', 'grep', 'implement', 'integrator', 'pipeline_phase', 'plan', 'pr', 'push_sha', 'read', 'refine', 'refiner', 'reviewer', 'risk_analyst', 'session_end', 'system', 'task_planner', 'tester', 'tool_result', 'unknown', 'user', 'write'] \ No newline at end of file diff --git a/.hypothesis/constants/af4ad0a4f088e1ed b/.hypothesis/constants/af4ad0a4f088e1ed deleted file mode 100644 index 14a8f3a1..00000000 --- a/.hypothesis/constants/af4ad0a4f088e1ed +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/proxy_monitor.py -# hypothesis_version: 6.151.9 - -[0.1, 400, 403, '\nStopped. Summary:', '0', '1', 'PROXY_LOG_VERBOSE', 'Z', '__main__', 'action', 'alert_type', 'allowed', 'allowed_requests', 'block_rate', 'blocked', 'blocked_requests', 'client_ip', 'destination', 'event_type', 'high_block_rate', 'message', 'method', 'reason', 'security_alert', 'source', 'squid_proxy', 'status', 'timestamp', 'unknown', 'url'] \ No newline at end of file diff --git a/.hypothesis/constants/afa6b25c640dfe11 b/.hypothesis/constants/afa6b25c640dfe11 deleted file mode 100644 index 3f17cd73..00000000 --- a/.hypothesis/constants/afa6b25c640dfe11 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/handoffs.py -# hypothesis_version: 6.151.9 - -['AgentOutput', 'HandoffData', 'by_role', 'commit', 'commits', 'data', 'error', 'failed', 'files_changed', 'handoff_data', 'logs', 'metrics', 'role', 'shared', 'source_role', 'status', 'successful', 'timestamp', 'total'] \ No newline at end of file diff --git a/.hypothesis/constants/b217da0623d6567c b/.hypothesis/constants/b217da0623d6567c deleted file mode 100644 index f48ca9ba..00000000 --- a/.hypothesis/constants/b217da0623d6567c +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/jwt/api_jws.py -# hypothesis_version: 6.151.9 - -[b'.', ',', ':', 'HS256', 'JWT', 'Not enough segments', 'alg', 'header', 'kid', 'none', 'payload', 'signature', 'typ', 'utf-8', 'verify_signature'] \ No newline at end of file diff --git a/.hypothesis/constants/b348d24346d06451 b/.hypothesis/constants/b348d24346d06451 deleted file mode 100644 index 1e5bb436..00000000 --- a/.hypothesis/constants/b348d24346d06451 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/.github/scripts/checks/draft_validation_check.py -# hypothesis_version: 6.151.9 - -[100, '.egg-state', 'Draft file is valid', '^#\\s+', 'drafts', 'expected_path', 'length', 'missing', 'path'] \ No newline at end of file diff --git a/.hypothesis/constants/b386c19c164f1cc2 b/.hypothesis/constants/b386c19c164f1cc2 deleted file mode 100644 index 97cca378..00000000 --- a/.hypothesis/constants/b386c19c164f1cc2 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_orchestrator/__init__.py -# hypothesis_version: 6.151.9 - -['0.1.0', 'CompletionData', 'DeploymentMode', 'ErrorData', 'HeartbeatData', 'ORCHESTRATOR_PORT', 'OrchestratorClient', 'OrchestratorError', 'OrchestratorHealth', 'ProgressData', 'SignalPayload', 'SignalResponse', 'SignalType', 'get_orchestrator_url', 'is_orchestrator_mode'] \ No newline at end of file diff --git a/.hypothesis/constants/b5a044487f4ce8b6 b/.hypothesis/constants/b5a044487f4ce8b6 deleted file mode 100644 index e0ea1601..00000000 --- a/.hypothesis/constants/b5a044487f4ce8b6 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/container_logging.py -# hypothesis_version: 6.151.9 - -[-1000, 100, 1000, 1024, '\n=== STDERR ===\n', '%Y%m%d-%H%M%S', '(task-\\d{8}-\\d{6})', '--label', '--log-driver', '--log-opt', '.cache', '=', '=== STDOUT ===\n', 'a+', 'container-logs', 'container_id', 'docker', 'egg', 'entries', 'json-file', 'log-index.json', 'log_file', 'logs', 'max-file=5', 'max-size=10m', 'task_id', 'task_to_container', 'thread_to_task', 'thread_ts', 'timestamp', 'w'] \ No newline at end of file diff --git a/.hypothesis/constants/b68d77d253ca9c8a b/.hypothesis/constants/b68d77d253ca9c8a deleted file mode 100644 index 12b19df1..00000000 --- a/.hypothesis/constants/b68d77d253ca9c8a +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/validator.py -# hypothesis_version: 6.151.9 - -['.', 'Mutation allowed'] \ No newline at end of file diff --git a/.hypothesis/constants/b6da3cb5ac559c77 b/.hypothesis/constants/b6da3cb5ac559c77 deleted file mode 100644 index 94d60ff1..00000000 --- a/.hypothesis/constants/b6da3cb5ac559c77 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/sandbox_template.py -# hypothesis_version: 6.151.9 - -[2.0, 1000000000.0, 3129, 9848, 9849, '-', '/home/egg/repos', '0', '1', '172.32.0.2', '172.32.0.3', '4g', 'EGG_AGENT_ROLE', 'EGG_GATEWAY_URL', 'EGG_ISSUE_NUMBER', 'EGG_ORCHESTRATOR_URL', 'EGG_PIPELINE_ID', 'EGG_PRIVATE_MODE', 'EGG_PROMPT_FILE', 'EGG_SESSION_TOKEN', 'GATEWAY_URL', 'HTTPS_PROXY', 'HTTP_PROXY', 'NO_PROXY', 'ORCHESTRATOR_URL', 'bind', 'detach', 'egg-isolated', 'egg-orchestrator', 'egg.agent.role', 'egg.issue.number', 'egg.orchestrator', 'egg.pipeline.id', 'egg:latest', 'environment', 'host', 'http_proxy', 'https_proxy', 'image', 'labels', 'mem_limit', 'mode', 'name', 'nano_cpus', 'network', 'network_mode', 'no_proxy', 'rw', 'shared', 'true', 'volumes'] \ No newline at end of file diff --git a/.hypothesis/constants/b9f25bf6c627771f b/.hypothesis/constants/b9f25bf6c627771f deleted file mode 100644 index 930e1929..00000000 --- a/.hypothesis/constants/b9f25bf6c627771f +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/__init__.py -# hypothesis_version: 6.151.9 - -['0.1.0'] \ No newline at end of file diff --git a/.hypothesis/constants/ba53e1ba85a588bb b/.hypothesis/constants/ba53e1ba85a588bb deleted file mode 100644 index 1ee0bd02..00000000 --- a/.hypothesis/constants/ba53e1ba85a588bb +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/docker-setup.py -# hypothesis_version: 6.151.9 - -[' extra_packages:', ' docker_setup:', '--skip-unavailable', '-p', '-qq', '-y', '.config', '/bin/bash', '/etc/debian_version', '/etc/fedora-release', '/etc/lsb-release', '/etc/sysctl.conf', '=', 'EGG_REPO_CONFIG', 'Setup complete!', '__main__', 'a', 'apt', 'apt-get', 'build-essential', 'config', 'curl', 'dnf', 'docker_setup', 'egg', 'extra_packages', 'fedora', 'gcc', 'gcc-c++', 'git', 'htop', 'install', 'jq', 'lsof', 'make', 'packages', 'pkg-config', 'pkgconf', 'repos', 'repositories.yaml', 'sysctl', 'tree', 'ubuntu', 'unknown', 'unzip', 'update', 'vim', 'wget', 'yes'] \ No newline at end of file diff --git a/.hypothesis/constants/bd83433c7b861b64 b/.hypothesis/constants/bd83433c7b861b64 deleted file mode 100644 index 1489cc57..00000000 --- a/.hypothesis/constants/bd83433c7b861b64 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/error_messages.py -# hypothesis_version: 6.151.9 - -['1', 'PolicyViolation', 'VERBOSE_ERRORS', 'clone_public', 'default', 'error', 'fetch_public', 'fork', 'fork_blocked', 'fork_from_public', 'fork_to_public', 'gh_execute_public', 'hint', 'hints', 'issue_public', 'operation', 'policy', 'pr_comment_public', 'pr_create_public', 'private_mode', 'public', 'public_repo', 'push_public', 'reason', 'repo', 'repository', 'success', 'true', 'unknown', 'visibility', 'visibility_unknown', 'yes'] \ No newline at end of file diff --git a/.hypothesis/constants/bfceb5beccb60d21 b/.hypothesis/constants/bfceb5beccb60d21 deleted file mode 100644 index 5c3bb589..00000000 --- a/.hypothesis/constants/bfceb5beccb60d21 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/compose.py -# hypothesis_version: 6.151.9 - -[b'config/repo_config.py', b'docker-compose.yml', b'gateway', b'orchestrator', b'shared', 0.0, 200, 384, ' volumes:', ' gateway:', ' orchestrator:', ' "\'#$`\n\\', '"', '--build', '--format', '--remove-orphans', '-d', '-f', '.compose-build-hash', '.env', '172.32.0.2', '=', 'BOT_GITHUB_TOKEN', 'EGG_COMPOSE_FILE', 'EGG_CONFIG_DIR', 'EGG_HOST_REPO_MAP', 'EGG_LAUNCHER_SECRET', 'EGG_REPO_CHECKS', 'EGG_USER_GIT_EMAIL', 'EGG_USER_GIT_NAME', 'Egg stack stopped', 'GATEWAY_BOT_NAME', 'GITHUB_USER_TOKEN', 'Gateway', 'Gateway is healthy', 'HOST_GID', 'HOST_HOME', 'HOST_UID', 'Orchestrator', '[\\x00-\\x1f\\x7f]', '\\', '\\"', '\\\\', 'checks', 'compose', 'config', 'disconnect', 'docker', 'docker-compose.yml', 'down', 'egg', 'gateway', 'inspect', 'network', 'orchestrator', 'repo_config.py', 'repo_settings', 'repositories.yaml', 'rm', 'services:', 'shared', 'up', 'version', '{}'] \ No newline at end of file diff --git a/.hypothesis/constants/bff98697456ca806 b/.hypothesis/constants/bff98697456ca806 deleted file mode 100644 index b08de7b6..00000000 --- a/.hypothesis/constants/bff98697456ca806 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/_cipheralgorithm.py -# hypothesis_version: 6.151.9 - -[] \ No newline at end of file diff --git a/.hypothesis/constants/c00c73d5fb997fc6 b/.hypothesis/constants/c00c73d5fb997fc6 deleted file mode 100644 index f29d8626..00000000 --- a/.hypothesis/constants/c00c73d5fb997fc6 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/__init__.py -# hypothesis_version: 6.151.9 - -[] \ No newline at end of file diff --git a/.hypothesis/constants/c1e7a48d1bb21be6 b/.hypothesis/constants/c1e7a48d1bb21be6 deleted file mode 100644 index eefc5ca2..00000000 --- a/.hypothesis/constants/c1e7a48d1bb21be6 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_logging/logger.py -# hypothesis_version: 6.151.9 - -[1024, '/.dockerenv', 'BoundLogger', 'EGG_CONTAINER', 'K_SERVICE', 'container', 'gcp', 'host', 'pr_number', 'repository', 'root', 'span_id', 'task_id', 'trace_flags', 'trace_id'] \ No newline at end of file diff --git a/.hypothesis/constants/c27b4e4056f739ca b/.hypothesis/constants/c27b4e4056f739ca deleted file mode 100644 index 23887762..00000000 --- a/.hypothesis/constants/c27b4e4056f739ca +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_config/cli.py -# hypothesis_version: 6.151.9 - -[5.0, '--json', '--service', '--timeout', '--verbose', '-j', '-s', '-t', '-v', 'Available commands', 'Run health checks', 'Show warnings', 'ValidationResult', '[?]', '[FAIL]', '[OK]', '[WARN]', '__main__', 'command', 'degraded', 'egg-config', 'health', 'healthy', 'show', 'store_true', 'timeout', 'unhealthy', 'validate', 'watch'] \ No newline at end of file diff --git a/.hypothesis/constants/c358d5cd358011ce b/.hypothesis/constants/c358d5cd358011ce deleted file mode 100644 index bc53a73b..00000000 --- a/.hypothesis/constants/c358d5cd358011ce +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/gateway.py -# hypothesis_version: 6.151.9 - -[0.0, 10.0, 120.0, 100, 120, 200, 256, 400, 401, 403, 404, 429, 500, 502, 503, 504, 1000, 1024, 9848, '(none)', ',', '--all', '--bare', '--base', '--body', '--cached', '--debug', '--force', '--head', '--host', '--name-only', '--no-verify', '--port', '--repo', '--show-current', '--title', '-c', '.egg-state/', '/', '/api/v1/checkpoints', '/api/v1/gh/execute', '/api/v1/gh/pr/close', '/api/v1/gh/pr/create', '/api/v1/gh/pr/edit', '/api/v1/git/execute', '/api/v1/git/fetch', '/api/v1/git/push', '/api/v1/health', '/api/v1/sessions', '/home/egg', '/home/egg/repos/', '/v1/messages', '0', '0.0.0.0', '1', 'Authorization', 'Bearer ', 'Command executed', 'Comment added', 'DELETE', 'EGG_LAUNCHER_SECRET', 'EGG_ORCHESTRATOR_URL', 'EGG_REPO_PATH', 'Enable debug mode', 'F', 'GATEWAY_HOST', 'GET', 'GIT_EDITOR', 'HEAD', 'HOST_HOME', 'Heartbeat recorded', 'Invalid session', 'Missing args', 'Missing body', 'Missing container_id', 'Missing container_ip', 'Missing head branch', 'Missing operation', 'Missing phase', 'Missing pr_number', 'Missing repo', 'Missing repo_path', 'Missing repos list', 'Missing request body', 'Missing title', 'No checkpoints found', 'No cost data', 'OK', 'PATCH', 'POST', 'PR closed', 'PR created', 'PR edited', 'Phase updated', 'Push successful', 'Push timed out', 'Session created', 'Session deleted', 'Session not found', 'Session updated', 'Sessions listed', 'Unknown error', 'User mode config', 'User mode push', 'Visibility queried', 'WebFetch', 'WebSearch', 'Worktrees created', 'Worktrees deleted', 'Worktrees listed', '[DONE]', '__main__', '_delta', 'active_sessions', 'agent', 'agent_role', 'agent_type', 'am', 'api', 'api_error', 'api_path', 'api_path_blocked', 'api_path_missing', 'args', 'assigned_branch', 'auth', 'auth_configured', 'auth_mode', 'authentication_error', 'authorization', 'base', 'base_branch', 'blocked_command', 'blocked_files', 'blocked_reason', 'body', 'bot', 'branch', 'breakdown', 'checkpoint', 'checkpoint_branch', 'checkpoint_count', 'checkpoint_repo', 'checkpoints', 'ckpt-', 'claude_code_version', 'client_ip', 'close', 'command', 'command_args', 'comment', 'commit', 'complexity_tier', 'config', 'configured', 'connection', 'container_id', 'container_ip', 'content', 'content-encoding', 'content-length', 'content-type', 'content_block', 'content_block_delta', 'content_block_start', 'cost', 'cost_usd', 'count', 'create', 'cwd', 'data', 'data: ', 'degraded', 'deleted', 'delta', 'diff', 'edit', 'egg/checkpoints/v2', 'error', 'errors', 'event_type', 'exempt_type', 'expires_at', 'false', 'fetch', 'fetch_blocked', 'filtered_repos', 'force', 'gateway', 'gateway_operation', 'gh_execute', 'gh_pr_close', 'gh_pr_comment', 'gh_pr_create', 'gh_pr_edit', 'gid', 'git', 'git_args', 'git_execute_blocked', 'git_execute_failed', 'git_execute_success', 'git_fetch', 'git_push', 'github_token_valid', 'head', 'healthy', 'hint', 'host', 'http.extraheader=', 'id', 'implement', 'index', 'init', 'input', 'input_json_delta', 'input_parse_error', 'input_tokens', 'internal', 'issue', 'issue_number', 'json', 'last_repo_path', 'limit', 'local', 'ls-remote', 'main', 'merge', 'message', 'message_delta', 'message_start', 'method', 'mode', 'model', 'name', 'not a git repository', 'objects', 'operation', 'orchestrator', 'origin', 'output', 'output_tokens', 'partial_input', 'partial_json', 'phase', 'pipeline', 'pipeline_id', 'pipeline_phase', 'plan', 'pr', 'pr checks', 'pr close', 'pr comment', 'pr create', 'pr diff', 'pr edit', 'pr list', 'pr status', 'pr view', 'pr_close', 'pr_close_denied', 'pr_closed', 'pr_comment', 'pr_comment_added', 'pr_comment_denied', 'pr_create', 'pr_create_blocked', 'pr_create_failed', 'pr_created', 'pr_edit', 'pr_edit_denied', 'pr_edited', 'pr_number', 'private', 'public', 'push', 'push_blocked', 'push_denied', 'push_failed', 'push_success', 'raw_partial_input', 'reachable', 'reason', 'refine', 'refspec', 'remote', 'replace', 'repo', 'repo_path', 'repos', 'restriction_message', 'returncode', 'rev-parse', 'review', 'reviewer', 'role', 'service', 'session', 'session_create', 'session_created', 'session_delete', 'session_deleted', 'session_id', 'session_mode', 'session_phase', 'session_status', 'session_token', 'session_update', 'session_update_phase', 'sessions', 'shared', 'source_ip', 'source_repo', 'status', 'status_code', 'stderr', 'stdout', 'stop_reason', 'store_true', 'stream', 'success', 'text', 'text/event-stream', 'text_delta', 'threading', 'timestamp', 'title', 'tool_use', 'tools', 'total_cost_usd', 'total_input_tokens', 'total_output_tokens', 'transfer-encoding', 'trigger', 'trigger_type', 'true', 'type', 'uid', 'unknown', 'url', 'usage', 'user', 'utf-8', 'valid', 'visibilities', 'visibility', 'warnings', 'web_fetch', 'web_search', 'worktree_count', 'worktree_create', 'worktree_delete', 'worktree_errors', 'worktrees', 'worktrees_created', 'worktrees_deleted', 'x-api-key', 'yes'] \ No newline at end of file diff --git a/.hypothesis/constants/c46f66753ea9ec79 b/.hypothesis/constants/c46f66753ea9ec79 deleted file mode 100644 index 2642345f..00000000 --- a/.hypothesis/constants/c46f66753ea9ec79 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/dsa.py -# hypothesis_version: 6.151.9 - -[160, 224, 256, 1024, 2048, 3072, 4096, 'DSAParameterNumbers', 'DSAPrivateKey', 'DSAPrivateNumbers', 'DSAPublicKey', 'DSAPublicNumbers', '_g', '_p', '_parameter_numbers', '_public_numbers', '_q', '_x', '_y'] \ No newline at end of file diff --git a/.hypothesis/constants/c6884a9944304355 b/.hypothesis/constants/c6884a9944304355 deleted file mode 100644 index b015a37d..00000000 --- a/.hypothesis/constants/c6884a9944304355 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/github_client.py -# hypothesis_version: 6.151.9 - -[200, 500, '*', '-', '--cache', '--field', '--head', '--header', '--hostname', '--include', '--input', '--jq', '--json', '--method', '--method=', '--paginate', '--raw-field', '--repo', '--silent', '--slurp', '--state', '--template', '--verbose', '-F', '-H', '-R', '-X', '-X=', '-f', '-i', '-p', '-q', '-t', '.login', '/', '/user', '/usr/bin/gh', '/usr/bin:/bin', '3', '404', '=', '?', 'Executing gh command', 'GET', 'GH_TOKEN', 'GITHUB_USER_TOKEN', 'GIT_CONFIG_COUNT', 'GIT_CONFIG_KEY_0', 'GIT_CONFIG_KEY_1', 'GIT_CONFIG_KEY_2', 'GIT_CONFIG_VALUE_0', 'GIT_CONFIG_VALUE_1', 'GIT_CONFIG_VALUE_2', 'Not Found', 'PATCH', 'PATH', 'POST', '^repos/[^/]+/[^/]+$', '^user$', '^users/[^/]+$', 'api', 'archive', 'auth login', 'auth logout', 'auth status', 'bot', 'clone', 'config', 'config get', 'config set', 'credits', 'delete', 'deploy-key', 'edit', 'fork', 'gh command failed', 'gh command timed out', 'git@github.com:', 'github_user', 'issue list', 'issue status', 'issue view', 'list', 'open', 'origin', 'pr', 'pr checks', 'pr diff', 'pr list', 'pr merge', 'pr status', 'pr view', 'rate limit', 'release delete', 'release list', 'release view', 'rename', 'repo', 'repo archive', 'repo delete', 'repo list', 'repo view', 'repos/', 'returncode', 'reviewer', 'safe.directory', 'search', 'set-default', 'shared', 'stderr', 'stdout', 'success', 'sync', 'unknown error', 'user', 'view', '{', '{owner}', '{repo}'] \ No newline at end of file diff --git a/.hypothesis/constants/c84a43811198b0bf b/.hypothesis/constants/c84a43811198b0bf deleted file mode 100644 index 92f4e1e2..00000000 --- a/.hypothesis/constants/c84a43811198b0bf +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/ciphers/base.py -# hypothesis_version: 6.151.9 - -[] \ No newline at end of file diff --git a/.hypothesis/constants/c94e24de598a26b3 b/.hypothesis/constants/c94e24de598a26b3 deleted file mode 100644 index 53d154a7..00000000 --- a/.hypothesis/constants/c94e24de598a26b3 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/llm/claude/__init__.py -# hypothesis_version: 6.151.9 - -['AgentResult', 'ClaudeConfig', 'ClaudeResult', 'run_agent', 'run_agent_async'] \ No newline at end of file diff --git a/.hypothesis/constants/c9bfb1969437e49b b/.hypothesis/constants/c9bfb1969437e49b deleted file mode 100644 index db94ed62..00000000 --- a/.hypothesis/constants/c9bfb1969437e49b +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/plan_parser.py -# hypothesis_version: 6.151.9 - -['### Parse Warnings', '(\\d+)', ',', '-', '---', 'Human verification', 'TASK-(\\d+)-(\\d+)', '\\*\\*Goal\\*\\*:\\s*(.+)', '\\[([^\\]]+)\\]', 'acceptance', 'dependencies', 'description', 'exit_criteria', 'files', 'goal', 'id', 'name', 'phase-', 'phase\\s*(\\d+)', 'phases', 'pr', 'pr_plan', 'tasks', 'title', 'utf-8'] \ No newline at end of file diff --git a/.hypothesis/constants/ca249cf989c67921 b/.hypothesis/constants/ca249cf989c67921 deleted file mode 100644 index 42d73b8a..00000000 --- a/.hypothesis/constants/ca249cf989c67921 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/__init__.py -# hypothesis_version: 6.151.9 - -['AGENT_ROLES', 'ARCHITECT_ROLE', 'AcceptanceCriterion', 'AgentCircuitBreaker', 'AgentExecution', 'AgentExecutionModel', 'AgentExecutionStatus', 'AgentHandoff', 'AgentResult', 'AgentRetryConfig', 'AgentRetryManager', 'AgentRole', 'AgentRoleDefinition', 'AgentRoleType', 'AgentStatus', 'AuditAction', 'AuditEntry', 'AuditRole', 'CODER_ROLE', 'CheckDefinition', 'CheckResult', 'CheckStatus', 'CheckpointState', 'CircuitBreakerConfig', 'CircuitState', 'ConflictDetector', 'ConflictInfo', 'Contract', 'DOCUMENTER_ROLE', 'Decision', 'DecisionOption', 'DecisionType', 'DependencyGraph', 'DependencyNode', 'DeploymentConfig', 'DispatchDecision', 'ExecutionPlan', 'ExecutionWave', 'FIELD_OWNERSHIP', 'Feedback', 'FeedbackQuestion', 'FileAccessPattern', 'HitlCheckboxState', 'HitlDecisionCategory', 'HitlOption', 'HitlOptionId', 'HumanReviewMechanism', 'INTEGRATOR_ROLE', 'IssueInfo', 'MultiAgentConfig', 'MutationResult', 'OrchestrationState', 'Orchestrator', 'PRMetadata', 'ParseResult', 'ParseWarning', 'ParsedPhase', 'ParsedTask', 'Phase', 'PhaseAgentConfig', 'PhaseConfig', 'PhaseStatus', 'PipelinePhase', 'REVIEWER_CODE_ROLE', 'RISK_ANALYST_ROLE', 'RateLimitHandler', 'RateLimitInfo', 'RetryConfig', 'RetryDecision', 'RetryPolicy', 'RetryableError', 'ReviewFeedback', 'Role', 'ServiceMapping', 'TASK_PLANNER_ROLE', 'TESTER_ROLE', 'Task', 'TaskStatus', 'TimeoutCheckpoint', 'ValidationResult', 'ValidationTest', 'apply_mutation', 'can_agent_run', 'can_modify', 'can_run_in_parallel', 'collect_handoff_data', 'contract_exists', 'create_audit_entry', 'create_contract', 'create_orchestrator', 'create_retry_manager', 'create_update_entry', 'delete_contract', 'export_contract', 'format_audit_log', 'generate_feedback_id', 'get_all_roles', 'get_contract_path', 'get_field_owner', 'get_next_wave', 'get_parallel_groups', 'get_role_definition', 'get_role_permissions', 'get_roles_for_phase', 'get_runnable_agents', 'list_contracts', 'load_agent_output', 'load_contract', 'normalize_path', 'parse_checkbox_state', 'parse_plan', 'parse_plan_file', 'retry_with_backoff', 'save_agent_output', 'save_contract', 'start_debounce', 'validate_mutation'] \ No newline at end of file diff --git a/.hypothesis/constants/cb11f830266a38f7 b/.hypothesis/constants/cb11f830266a38f7 deleted file mode 100644 index b3e0a5e1..00000000 --- a/.hypothesis/constants/cb11f830266a38f7 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/checkpoint_cli.py -# hypothesis_version: 6.151.9 - -[0.0, 100, 120, 500, 1000, 3600, 1000000, ' | ', '%Y-%m-%d %H:%M:%S', '(no phase)', '(none)', '+00:00', '--agent-type', '--branch', '--checkpoint-repo', '--files', '--heads', '--issue', '--json', '--limit', '--phase', '--pipeline', '--pr', '--repo', '--repo-path', '--session', '--status', '--trigger', '-c', '/api/v1/checkpoints', 'Accept', 'Authorization', 'Available commands', 'EGG_REPO_PATH', 'EGG_SESSION_TOKEN', 'FETCH_HEAD', 'Filter by PR number', 'Filter by agent type', 'Filter by session ID', 'GATEWAY_URL', 'GET', 'N/A', 'No checkpoints found', 'Output as JSON', 'Session:', 'Token Usage:', 'Transcript:', 'Z', '__main__', 'agent', 'agent_role', 'agent_type', 'all', 'application/json', 'branch', 'breakdown', 'browse', 'checkpoint', 'checkpoint_count', 'checkpoint_repo', 'checkpoints', 'ckpt-', 'command', 'commit', 'commit_sha', 'container_id', 'context', 'cost', 'cost_usd', 'count', 'created_at', 'data', 'duration_seconds', 'egg-checkpoint', 'egg/checkpoints/v2', 'ended_at', 'estimated_cost_usd', 'fetch', 'files', 'files_touched', 'files_touched_count', 'get-url', 'git', 'id', 'identifier', 'implement', 'index.json', 'input', 'input_tokens', 'issue', 'issue_number', 'json', 'limit', 'list', 'ls-remote', 'message', 'message_count', 'model', 'name', 'operation', 'origin', 'output', 'output_tokens', 'path', 'phase', 'pipeline', 'pipeline_id', 'pipeline_phase', 'plan', 'pr', 'pr_number', 'push_sha', 'refine', 'remote', 'repo', 'repo_path', 'rev-parse', 'session', 'session-end', 'session_end', 'session_ended_at', 'session_id', 'session_status', 'show', 'source_repo', 'status', 'store_true', 'success', 'token_usage', 'tool_call_count', 'tool_calls', 'total_cost_usd', 'total_input_tokens', 'total_output_tokens', 'total_tokens', 'transcript', 'trigger', 'trigger_type', 'truncated', 'unknown'] \ No newline at end of file diff --git a/.hypothesis/constants/cca227baa51e120d b/.hypothesis/constants/cca227baa51e120d deleted file mode 100644 index 93383cf6..00000000 --- a/.hypothesis/constants/cca227baa51e120d +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/multi_agent.py -# hypothesis_version: 6.151.9 - -[3600, 'Agent spawned', 'EGG_AGENT_ROLE', 'EGG_HANDOFF_DATA', 'EGG_WAVE_NUMBER', 'Unknown error', 'Wave completed', 'commit', 'complete', 'completed_waves', 'container_id', 'current_wave', 'dispatcher_status', 'error', 'failed', 'has_failures', 'is_complete', 'phase', 'pipeline_id', 'role', 'running', 'shared', 'status', 'success', 'wave', '{}'] \ No newline at end of file diff --git a/.hypothesis/constants/cce6cb3ba1c3bee9 b/.hypothesis/constants/cce6cb3ba1c3bee9 deleted file mode 100644 index 538704e1..00000000 --- a/.hypothesis/constants/cce6cb3ba1c3bee9 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/llm/result.py -# hypothesis_version: 6.151.9 - -[] \ No newline at end of file diff --git a/.hypothesis/constants/ceabf82662cdbf75 b/.hypothesis/constants/ceabf82662cdbf75 deleted file mode 100644 index 8a86ac39..00000000 --- a/.hypothesis/constants/ceabf82662cdbf75 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/policy.py -# hypothesis_version: 6.151.9 - -[120, 200, 300, 500, '+', ',', ':', 'GATEWAY_BOT_NAME', 'PR comment allowed', 'PR review allowed', 'action', 'allowed', 'auth_mode', 'author', 'bot', 'bot_pr', 'bot_prefix', 'branch', 'config', 'configured_user', 'configured_user_pr', 'details', 'expected', 'gateway.policy', 'github_user', 'headRefName', 'hint', 'login', 'main', 'master', 'new_branch', 'number', 'open', 'open_prs', 'pr_number', 'protected_branches', 'reason', 'refs/heads/', 'repo', 'reviewer', 'shared', 'state', 'trusted_user_pr', 'user'] \ No newline at end of file diff --git a/.hypothesis/constants/ceb1d0465029fa83 b/.hypothesis/constants/ceb1d0465029fa83 deleted file mode 100644 index 9f97de89..00000000 --- a/.hypothesis/constants/ceb1d0465029fa83 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/local/bin/pytest -# hypothesis_version: 6.151.9 - -['__main__'] \ No newline at end of file diff --git a/.hypothesis/constants/cfc7811c74a0eda3 b/.hypothesis/constants/cfc7811c74a0eda3 deleted file mode 100644 index 902ff4da..00000000 --- a/.hypothesis/constants/cfc7811c74a0eda3 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/rsa.py -# hypothesis_version: 6.151.9 - -[512, 1000, 65537, 'RSAPrivateNumbers', 'RSAPublicKey', 'RSAPublicNumbers', '_d', '_dmp1', '_dmq1', '_e', '_iqmp', '_n', '_p', '_public_numbers', '_q', 'dmp1 must be odd.', 'dmq1 must be odd.', 'e must be odd.', 'n must be >= 3.', 'p must be < modulus.', 'q must be < modulus.'] \ No newline at end of file diff --git a/.hypothesis/constants/d1ecdb01d128f44c b/.hypothesis/constants/d1ecdb01d128f44c deleted file mode 100644 index 2b8771c1..00000000 --- a/.hypothesis/constants/d1ecdb01d128f44c +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/sdlc_cli.py -# hypothesis_version: 6.151.9 - -[1.0, 30.0, 409, '\x1b[0m', '\x1b[1m', '\x1b[2J\x1b[H', '\x1b[2m', '\x1b[31m', '\x1b[32m', '\x1b[33m', '\x1b[36m', '--issue', '--json', '--prompt', '--repo', '-i', '-p', '-q', '-r', '.nameWithOwner', '/', '1', ':', '?', 'EGG_PRIVATE_MODE', 'GitHub issue number', 'NAME', 'NUM', 'T', 'TEXT', 'Unknown error', 'Z', '__main__', 'already_terminal', 'awaiting approval', 'awaiting_human', 'cancelled', 'complete', 'completed', 'current_phase', 'dag', 'data: ', 'done', 'egg-sdlc', 'error', 'event: ', 'event_type', 'failed', 'gh', 'id', 'interrupted', 'issue', 'issue_number_pos', 'local', 'message', 'nameWithOwner', 'pending', 'pending_decisions', 'pipeline_id', 'private', 'raw', 'reason', 'replace', 'repo', 'repos', 'running', 'status', 'timeout', 'timestamp', 'true', 'unknown', 'utf-8', 'view', 'visualization', 'was cancelled'] \ No newline at end of file diff --git a/.hypothesis/constants/d5032ce2f0b72e56 b/.hypothesis/constants/d5032ce2f0b72e56 deleted file mode 100644 index c9e78c2e..00000000 --- a/.hypothesis/constants/d5032ce2f0b72e56 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/backends/interfaces.py -# hypothesis_version: 6.151.9 - -[] \ No newline at end of file diff --git a/.hypothesis/constants/d623f9cc71eca74d b/.hypothesis/constants/d623f9cc71eca74d deleted file mode 100644 index d7612824..00000000 --- a/.hypothesis/constants/d623f9cc71eca74d +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/statusbar.py -# hypothesis_version: 6.151.9 - -[1.0, '\x1b[0m', '\x1b[32m', '-', '...', '/', '=', '\\', '\\033\\[[0-9;]*m', '|'] \ No newline at end of file diff --git a/.hypothesis/constants/d6856b5679893fb8 b/.hypothesis/constants/d6856b5679893fb8 deleted file mode 100644 index 47b60b24..00000000 --- a/.hypothesis/constants/d6856b5679893fb8 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/hashes.py -# hypothesis_version: 6.151.9 - -[128, 'Hash', 'HashContext', '_algorithm', '_digest_size', 'blake2b', 'blake2s', 'data', 'md5', 'sha1', 'sha224', 'sha256', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512', 'sha384', 'sha512', 'sha512-224', 'sha512-256', 'shake128', 'shake256'] \ No newline at end of file diff --git a/.hypothesis/constants/d7cd0820127015d3 b/.hypothesis/constants/d7cd0820127015d3 deleted file mode 100644 index bf714e5d..00000000 --- a/.hypothesis/constants/d7cd0820127015d3 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/self_improvement/collectors/local.py -# hypothesis_version: 6.151.9 - -['.cache', '^ERROR[:\\s]', '^Error:', '^Exception:', '^FAILED[:\\s]', '^FATAL[:\\s]', 'all tests passed', 'cancelled', 'container-logs', 'container_id', 'egg', 'entries', 'exec', 'failure', 'local', 'log-index.json', 'log_file', 'replace', 'running', 'success', 'task_id', 'thread_ts', 'timestamp'] \ No newline at end of file diff --git a/.hypothesis/constants/d92287877e17f245 b/.hypothesis/constants/d92287877e17f245 deleted file mode 100644 index 40bb87f7..00000000 --- a/.hypothesis/constants/d92287877e17f245 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/jwt/utils.py -# hypothesis_version: 6.151.9 - -[b'\x00', b')[- ]----\r?\n.+?\r?\n----[- ]END \\1[- ]----\r?\n?', b'----[- ]BEGIN (', b'-cert-v01@openssh.com', b'=', b'CERTIFICATE', b'CERTIFICATE REQUEST', b'DH PARAMETERS', b'DSA PRIVATE KEY', b'EC PRIVATE KEY', b'ENCRYPTED PRIVATE KEY', b'NEW CERTIFICATE REQUEST', b'OPENSSH PRIVATE KEY', b'PRIVATE KEY', b'PUBLIC KEY', b'RSA PRIVATE KEY', b'RSA PUBLIC KEY', b'SSH2 ENCRYPTED PRIVATE KEY', b'SSH2 PUBLIC KEY', b'TRUSTED CERTIFICATE', b'X509 CRL', b'\\A(\\S+)[ \\t]+(\\S+)', b'ecdsa-sha2-nistp256', b'ecdsa-sha2-nistp384', b'ecdsa-sha2-nistp521', b'ssh-dss', b'ssh-ed25519', b'ssh-rsa', b'|', '%0*x', 'Invalid signature', 'ascii', 'big', 'utf-8'] \ No newline at end of file diff --git a/.hypothesis/constants/d955d6634e87422e b/.hypothesis/constants/d955d6634e87422e deleted file mode 100644 index e422337a..00000000 --- a/.hypothesis/constants/d955d6634e87422e +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/health_checks/tier1/state_consistency.py -# hypothesis_version: 6.151.9 - -['contract', 'issues', 'pending', 'shared', 'state_consistency', 'status', 'tasks'] \ No newline at end of file diff --git a/.hypothesis/constants/da39a3ee5e6b4b0d b/.hypothesis/constants/da39a3ee5e6b4b0d deleted file mode 100644 index 3396e349..00000000 --- a/.hypothesis/constants/da39a3ee5e6b4b0d +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3.11/sitecustomize.py -# hypothesis_version: 6.151.9 - -[] \ No newline at end of file diff --git a/.hypothesis/constants/dc6ef3a1b5234c93 b/.hypothesis/constants/dc6ef3a1b5234c93 deleted file mode 100644 index 27008873..00000000 --- a/.hypothesis/constants/dc6ef3a1b5234c93 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/.github/scripts/checks/__init__.py -# hypothesis_version: 6.151.9 - -['CheckRunner'] \ No newline at end of file diff --git a/.hypothesis/constants/df3d09b7b1766bec b/.hypothesis/constants/df3d09b7b1766bec deleted file mode 100644 index a96c36bd..00000000 --- a/.hypothesis/constants/df3d09b7b1766bec +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/decision_queue.py -# hypothesis_version: 6.151.9 - -['Decision cancelled', 'Decision queued', 'Decision resolved', 'created_at', 'id', 'pending', 'pending_decisions', 'pipeline_id', 'question', 'resolved', 'shared', 'total_decisions'] \ No newline at end of file diff --git a/.hypothesis/constants/e0a34de3bcae4642 b/.hypothesis/constants/e0a34de3bcae4642 deleted file mode 100644 index 34ab5f30..00000000 --- a/.hypothesis/constants/e0a34de3bcae4642 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/dag_visualizer.py -# hypothesis_version: 6.151.9 - -[0.5, 3600, ' v', ' |', ' │', ' ▼', '#', '+', '-', '-->', '=', '>', '>>>', '?', 'Cycle Timings:', 'DAG Visualization:', 'Implement', 'PR', 'Plan', 'Refine', 'Status: Not started', 'Z', 'agents', 'awaiting approval', 'compact', 'containers', 'current_phase', 'cycle', 'cycles', 'dag', 'done', 'o', 'pending_decisions', 'phases', 'pipeline_id', 'plan_phase_id', 'progress', 'review_cycles', 'reviewer', 'role', 'running', 'shared', 'status', 'timestamp', 'updated_at', 'v', 'visualization', 'worker', 'x', '|', '||', '×', '→', '⊘', '⏸', '─', '│', '┌', '┐', '└', '┘', '┬', '┴', '┼', '═', '╔', '╗', '╚', '╝', '█', '░', '▶', '▼', '○', '✓', '✗'] \ No newline at end of file diff --git a/.hypothesis/constants/e144e49beae6fb71 b/.hypothesis/constants/e144e49beae6fb71 deleted file mode 100644 index 88f2592a..00000000 --- a/.hypothesis/constants/e144e49beae6fb71 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/agent_restrictions.py -# hypothesis_version: 6.151.9 - -['*', '**', '**/*.go', '**/*.java', '**/*.js', '**/*.json', '**/*.jsx', '**/*.md', '**/*.py', '**/*.rb', '**/*.rs', '**/*.sh', '**/*.spec.js', '**/*.spec.jsx', '**/*.spec.ts', '**/*.spec.tsx', '**/*.test.js', '**/*.test.jsx', '**/*.test.ts', '**/*.test.tsx', '**/*.toml', '**/*.ts', '**/*.tsx', '**/*.yaml', '**/*.yml', '**/*_test.go', '**/*_test.py', '**/CHANGELOG.md', '**/README.md', '**/test/', '**/test_*.go', '**/test_*.py', '**/tests/', '..', './', '.egg-state/drafts/', '.egg-state/reviews/', '.github/', '/', 'Files allowed', 'No files to validate', 'action/', 'architect', 'bin/', 'coder', 'config/', 'docs/', 'documenter', 'gateway/', 'high', 'integration_tests/', 'integrator', 'lib/', 'orchestrator/', 'refiner', 'reviewer_code', 'reviewer_contract', 'reviewer_plan', 'reviewer_refine', 'risk_analyst', 'sandbox/', 'scripts/', 'shared/', 'src/', 'task_planner', 'test/', 'tester', 'tests/'] \ No newline at end of file diff --git a/.hypothesis/constants/e21b380f350d215d b/.hypothesis/constants/e21b380f350d215d deleted file mode 100644 index a68aaf4a..00000000 --- a/.hypothesis/constants/e21b380f350d215d +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/llm/runner.py -# hypothesis_version: 6.151.9 - -['--model', '1', '127.0.0.1', 'DISABLE_TELEMETRY', 'NO_PROXY', 'claude', 'opus'] \ No newline at end of file diff --git a/.hypothesis/constants/e356ac1b688445f2 b/.hypothesis/constants/e356ac1b688445f2 deleted file mode 100644 index 8c57a0c4..00000000 --- a/.hypothesis/constants/e356ac1b688445f2 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/docker_client.py -# hypothesis_version: 6.151.9 - -[100, 300, 3600, '+00:00', '0001-01-01T00:00:00Z', 'Config', 'Container created', 'Container removed', 'Container started', 'Container stopped', 'DOCKER_HOST', 'ExitCode', 'FinishedAt', 'Labels', 'StartedAt', 'State', 'Status', 'StatusCode', 'Z', 'created', 'egg-sandbox-', 'egg.agent.role', 'egg.container.name', 'egg.created_at', 'egg.orchestrator', 'egg:latest', 'exited', 'label', 'orchestrator.docker', 'replace', 'running', 'shared', 'true', 'unknown', 'utf-8'] \ No newline at end of file diff --git a/.hypothesis/constants/e3de064c74e1a322 b/.hypothesis/constants/e3de064c74e1a322 deleted file mode 100644 index 96d504b2..00000000 --- a/.hypothesis/constants/e3de064c74e1a322 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/feedback.py -# hypothesis_version: 6.151.9 - -['\n\n---\n\n', '###', '### Open Questions', '*Authored-by: egg*', '---', '>', '> _Your answer here_', '^Your answer here$', '^\\s*$', '^_Your answer here_$', 'feedback-(\\d+)', 'feedback-1', 'feedback_id', 'questions', 'submitted', 'x'] \ No newline at end of file diff --git a/.hypothesis/constants/e45a76d3dd8e05b7 b/.hypothesis/constants/e45a76d3dd8e05b7 deleted file mode 100644 index b6be0d54..00000000 --- a/.hypothesis/constants/e45a76d3dd8e05b7 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/resilience.py -# hypothesis_version: 6.151.9 - -[0.5, 0.75, 1.0, 2.0, 30.0, 300, 360, 'T', 'data', 'elapsed_seconds', 'is_limited', 'job_start_time', 'limit', 'ratelimit-limit', 'ratelimit-remaining', 'ratelimit-reset', 'remaining', 'remaining_seconds', 'reset', 'reset_at', 'retry-after', 'retry_after', 'seconds_until_reset', 'timestamp', 'used', 'x-ratelimit-limit', 'x-ratelimit-reset', 'x-ratelimit-used'] \ No newline at end of file diff --git a/.hypothesis/constants/e5eddde6e2bcf446 b/.hypothesis/constants/e5eddde6e2bcf446 deleted file mode 100644 index 1d38d5b8..00000000 --- a/.hypothesis/constants/e5eddde6e2bcf446 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/serialization/ssh.py -# hypothesis_version: 6.151.9 - -[b'\n', b' ', b'(.*?)', b'-----BEGIN OPENSSH PRIVATE KEY-----', b'-----END OPENSSH PRIVATE KEY-----', b'-cert-v01@openssh.com', b'>I', b'>Q', b'\\A(\\S+)[ \\t]+(\\S+)', b'aes256-cbc', b'aes256-ctr', b'bcrypt', b'ecdsa-sha2-nistp256', b'ecdsa-sha2-nistp384', b'ecdsa-sha2-nistp521', b'nistp256', b'nistp384', b'nistp521', b'none', b'openssh-key-v1\x00', b'ssh-dss', b'ssh-ed25519', b'ssh-rsa', 127, 1024, 'Curve name mismatch', 'Invalid data', 'Invalid key format', 'Invalid line format', 'Need bcrypt module', 'Unsupported KDF: %r', 'Unsupported key type', 'big', 'data', 'password', 'secp256r1', 'secp384r1', 'secp521r1'] \ No newline at end of file diff --git a/.hypothesis/constants/e69f65dbd8abef8f b/.hypothesis/constants/e69f65dbd8abef8f deleted file mode 100644 index c12aff58..00000000 --- a/.hypothesis/constants/e69f65dbd8abef8f +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/llm/__init__.py -# hypothesis_version: 6.151.9 - -['AgentResult', 'ClaudeConfig', 'ClaudeResult', 'run_agent', 'run_agent_async', 'run_interactive'] \ No newline at end of file diff --git a/.hypothesis/constants/e830b7334c7145d3 b/.hypothesis/constants/e830b7334c7145d3 deleted file mode 100644 index 54e49955..00000000 --- a/.hypothesis/constants/e830b7334c7145d3 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/usage.py -# hypothesis_version: 6.151.9 - -[0.0, '0.10', '0.30', '0.50', '1.0', '1.00', '1.25', '1000000', '15.00', '25.00', '3.00', '3.75', '5.00', '6.25', 'All PR numbers', 'All issue numbers', 'All session IDs', 'All workflow IDs', 'Associated PR number', 'GitHub PR number', 'GitHub issue number', 'Model used', 'PR base branch', 'PR head branch', 'Pipeline phases seen', 'Schema version', 'Session identifier', 'TokenCounts', 'Total PRs tracked', 'Total estimated cost', 'Total input tokens', 'Total issues tracked', 'Total output tokens', 'Workflow name', '^[0-9]+\\.[0-9]+$', 'cache_read', 'cache_write', 'haiku', 'input', 'opus', 'output', 'sonnet'] \ No newline at end of file diff --git a/.hypothesis/constants/e8bc63ad18787151 b/.hypothesis/constants/e8bc63ad18787151 deleted file mode 100644 index 2c2b9b11..00000000 --- a/.hypothesis/constants/e8bc63ad18787151 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/health_checks/context.py -# hypothesis_version: 6.151.9 - -[4000, 16000, '\n... [truncated]', '--oneline', '--stat', '-20', '.egg-state', '.json', '.md', '.yaml', '.yml', '/', 'agent-outputs', 'contracts', 'diff', 'drafts', 'git', 'log', 'origin/main...HEAD', 'replace'] \ No newline at end of file diff --git a/.hypothesis/constants/e9088653e78957f6 b/.hypothesis/constants/e9088653e78957f6 deleted file mode 100644 index 7b1d1e85..00000000 --- a/.hypothesis/constants/e9088653e78957f6 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/_serialization.py -# hypothesis_version: 6.151.9 - -['ANSI X9.62', 'DER', 'OpenSSH', 'PEM', 'PKCS3', 'PKCS8', 'Raw', 'Raw PKCS#1', 'S/MIME', 'TraditionalOpenSSL'] \ No newline at end of file diff --git a/.hypothesis/constants/e92f346d8980eda2 b/.hypothesis/constants/e92f346d8980eda2 deleted file mode 100644 index 7cc52c68..00000000 --- a/.hypothesis/constants/e92f346d8980eda2 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/output.py -# hypothesis_version: 6.151.9 - -['shared'] \ No newline at end of file diff --git a/.hypothesis/constants/e978b4934ef42344 b/.hypothesis/constants/e978b4934ef42344 deleted file mode 100644 index 5519fc09..00000000 --- a/.hypothesis/constants/e978b4934ef42344 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/metrics.py -# hypothesis_version: 6.151.9 - -[0.0, 0.1, 0.5, 1.0, 5.0, 10.0, 30.0, 60.0, 300, 600, 1800, 3600, 7200, 14400, ',', 'Metric: agent failed', 'buckets', 'count', 'counters', 'gauges', 'histograms', 'inf', 'labels', 'name', 'orchestrator.metrics', 'shared', 'sum', 'uptime_seconds', 'value'] \ No newline at end of file diff --git a/.hypothesis/constants/eaa33e077b23b1ca b/.hypothesis/constants/eaa33e077b23b1ca deleted file mode 100644 index 2425d0db..00000000 --- a/.hypothesis/constants/eaa33e077b23b1ca +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/gateway/contract_api.py -# hypothesis_version: 6.151.9 - -[200, 400, 403, 404, 500, '/', '/api/v1/contract', '/mutate', '/validate', '1', 'Contract exists', 'Contract retrieved', 'EGG_AGENT_ROLE', 'GET', 'Missing field_path', 'Missing issue_number', 'Missing new_value', 'Missing request body', 'Mutation allowed', 'POST', 'X-Egg-Role', 'actor', 'agent', 'agent_role', 'contract', 'data', 'details', 'exists', 'false', 'field_path', 'gateway.contract', 'hint', 'include_audit_log', 'issue_number', 'message', 'new_value', 'reason', 'repo_path', 'required_role', 'role', 'session', 'shared', 'success', 'true'] \ No newline at end of file diff --git a/.hypothesis/constants/eb36230d1c6ec60a b/.hypothesis/constants/eb36230d1c6ec60a deleted file mode 100644 index 303244cc..00000000 --- a/.hypothesis/constants/eb36230d1c6ec60a +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg_lib/orch_client.py -# hypothesis_version: 6.151.9 - -[120, 200, 400, 9849, '/.dockerenv', '/api/v1/health', '/api/v1/pipelines', '?pending_only=true', 'Accept', 'Cache-Control', 'Content-Type', 'DELETE', 'EGG_CONTAINER', 'EGG_ORCHESTRATOR_URL', 'GET', 'PATCH', 'POST', 'application/json', 'branch', 'cancelled', 'config', 'data', 'decisions', 'egg-orchestrator', 'healthy', 'issue', 'issue_number', 'message', 'mode', 'network_mode', 'no-cache', 'pipeline', 'prompt', 'raw', 'replace', 'repo', 'resolution', 'status', 'text/event-stream', 'utf-8'] \ No newline at end of file diff --git a/.hypothesis/constants/f363992e8bc23fd2 b/.hypothesis/constants/f363992e8bc23fd2 deleted file mode 100644 index 5892feb3..00000000 --- a/.hypothesis/constants/f363992e8bc23fd2 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/models.py -# hypothesis_version: 6.151.9 - -['Additional context', 'Agent if applicable', 'Agent role', 'Container exit code', 'Container name', 'Container status', 'Current phase', 'Decision status', 'Docker container ID', 'Error if failed', 'Event data', 'Event type', 'Execution status', 'GitHub issue number', 'HITL decisions', "Human's response", 'ISO 8601 timestamp', 'Last update time', 'Number of retries', 'Phase being executed', 'Phase if applicable', 'Phase status', 'Pipeline ID', 'Question for human', 'Unique decision ID', 'When completed', 'When created', 'When event occurred', 'When resolved', 'When started', 'Work branch name', 'agent-design', 'architect', 'awaiting_human', 'cancelled', 'checker', 'code', 'coder', 'complete', 'contract', 'creating', 'documenter', 'exited', 'failed', 'high', 'implement', 'inspector', 'integrator', 'issue', 'low', 'mid', 'pending', 'plan', 'pr', 'refine', 'refiner', 'removed', 'resolved', 'reviewer', 'reviewer_code', 'reviewer_contract', 'reviewer_plan', 'reviewer_refine', 'risk_analyst', 'running', 'task_planner', 'tester', 'timeout'] \ No newline at end of file diff --git a/.hypothesis/constants/f50b0baa1a6bc055 b/.hypothesis/constants/f50b0baa1a6bc055 deleted file mode 100644 index 5dfba801..00000000 --- a/.hypothesis/constants/f50b0baa1a6bc055 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/dispatch.py -# hypothesis_version: 6.151.9 - -['shared'] \ No newline at end of file diff --git a/.hypothesis/constants/f5fba0c9590657ac b/.hypothesis/constants/f5fba0c9590657ac deleted file mode 100644 index d507c4ab..00000000 --- a/.hypothesis/constants/f5fba0c9590657ac +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/_oid.py -# hypothesis_version: 6.151.9 - -['.', 'Unknown OID', '_dotted_string'] \ No newline at end of file diff --git a/.hypothesis/constants/f804a60f84a904cf b/.hypothesis/constants/f804a60f84a904cf deleted file mode 100644 index 22e87c38..00000000 --- a/.hypothesis/constants/f804a60f84a904cf +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/.github/scripts/checks/plan_yaml_check.py -# hypothesis_version: 6.151.9 - -['.egg-state', 'check-plan-yaml', 'drafts', 'errors', 'expected_path', 'has_pr_metadata', 'hint', 'id', 'phases', 'phases_count', 'pr', 'tasks', 'yaml_error'] \ No newline at end of file diff --git a/.hypothesis/constants/f89f357f7bd4558b b/.hypothesis/constants/f89f357f7bd4558b deleted file mode 100644 index 756a3b13..00000000 --- a/.hypothesis/constants/f89f357f7bd4558b +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/orchestrator/devserver.py -# hypothesis_version: 6.151.9 - -[200, '--name-only', '--no-build', '--project-name', '--remove-orphans', '--timeout', '--volumes', '-d', '-f', '-q', '/', '10', '=', 'ALL', 'Config', 'Credential check', 'ExposedPorts', 'GET', 'HEAD', 'HEAD~1', 'IPAddress', 'NetworkSettings', 'Networks', 'Pre-pulling image', 'Service healthy', 'bridge', 'cap_drop', 'compose', 'container_id', 'cpus', 'deploy', 'diff', 'docker', 'docker-compose.yml', 'down', 'egg.check-network', 'egg.pipeline-id', 'egg.service', 'environment', 'error', 'error_message', 'external', 'git', 'healthy', 'image', 'ip', 'limits', 'memory', 'name', 'network_id', 'networks', 'origin/main...HEAD', 'pids', 'port', 'privileged', 'ps', 'read_only', 'resources', 'security_opt', 'services', 'shared', 'show', 'starting', 'status', 'stopped', 'true', 'unhealthy', 'up', 'utf-8', 'volumes', 'warnings'] \ No newline at end of file diff --git a/.hypothesis/constants/f993ffbeb7ab7d83 b/.hypothesis/constants/f993ffbeb7ab7d83 deleted file mode 100644 index 1bd5be23..00000000 --- a/.hypothesis/constants/f993ffbeb7ab7d83 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/__init__.py -# hypothesis_version: 6.151.9 - -['__author__', '__copyright__', '__email__', '__license__', '__summary__', '__title__', '__uri__', '__version__'] \ No newline at end of file diff --git a/.hypothesis/constants/fb373b5e85396387 b/.hypothesis/constants/fb373b5e85396387 deleted file mode 100644 index 73820234..00000000 --- a/.hypothesis/constants/fb373b5e85396387 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/egg -# hypothesis_version: 6.151.9 - -['Interrupted by user', '__main__', 'shared'] \ No newline at end of file diff --git a/.hypothesis/constants/fb5926a4d20d8d6c b/.hypothesis/constants/fb5926a4d20d8d6c deleted file mode 100644 index db38fcc1..00000000 --- a/.hypothesis/constants/fb5926a4d20d8d6c +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/sandbox/tools/discover-tests.py -# hypothesis_version: 6.151.9 - -['## Makefile Targets', '## Notes', '*.spec.js', '*.spec.jsx', '*.spec.ts', '*.spec.tsx', '*.test.js', '*.test.jsx', '*.test.ts', '*.test.tsx', '*Spec.java', '*Test.java', '*Tests.java', '*_spec.rb', '*_test.go', '*_test.py', '*_test.rb', '*_test.rs', ',', '--files', '--json', '--run', '.', './gradlew test', '.git', '?', '@playwright/test', 'GNUmakefile', 'Makefile', 'Output as JSON', 'Run discovered tests', '[pytest]', '[tool.pytest', '__main__', '__tests__', 'bin', 'build', 'build.gradle', 'build.gradle.kts', 'conftest.py', 'dependencies', 'devDependencies', 'dist', 'e2e', 'eslint', 'frameworks', 'go', 'go test -cover ./...', 'go test ./...', 'go-test', 'go.mod', 'gradle', 'java', 'javascript', 'jest', 'jest --coverage', 'jest --watch', 'jest.config.js', 'jest.config.json', 'jest.config.mjs', 'jest.config.ts', 'lint', 'lint_command', 'make test', 'makefile', 'makefile_targets', 'maven', 'mocha', 'mocha --watch', 'mvn test', 'node_modules', 'notes', 'npm run lint', 'npm test', 'npx eslint .', 'npx playwright test', 'package.json', 'path', 'playwright', 'playwright.config.js', 'playwright.config.ts', 'pom.xml', 'project_root', 'pyproject.toml', 'pytest', 'pytest --cov', 'pytest-watch', 'pytest.ini', 'python', 'recommended_command', 'requirements-dev.txt', 'ruby', 'run-tests.sh', 'run_tests.sh', 'rust', 'scripts', 'setup.cfg', 'spec', 'specs', 'src/test/java', 'store_true', 'test', 'test-*.sh', 'test.sh', 'test_*', 'test_*.py', 'test_file_count', 'tests', 'tests.py', 'tools', 'unittest', 'vendor', 'vitest', 'vitest --coverage', 'vitest --watch', 'vitest.config.ts'] \ No newline at end of file diff --git a/.hypothesis/constants/fc6509cf8d2e7621 b/.hypothesis/constants/fc6509cf8d2e7621 deleted file mode 100644 index 593913bf..00000000 --- a/.hypothesis/constants/fc6509cf8d2e7621 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/checkpoint_loader.py -# hypothesis_version: 6.151.9 - -[420, '.checkpoint_', '.index_', '.tmp', '00', 'json', 'w'] \ No newline at end of file diff --git a/.hypothesis/constants/fd1413b487818ede b/.hypothesis/constants/fd1413b487818ede deleted file mode 100644 index 873349a0..00000000 --- a/.hypothesis/constants/fd1413b487818ede +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/hitl.py -# hypothesis_version: 6.151.9 - -['-', '---', '> ', 'Option 2: Override', '[ ]', '[x]', '_', 'adjust', 'adjust_criteria', 'assign', 'break', 'break_into_subtasks', 'cancel', 'cancel_pipeline', 'category', 'checked', 'complete', 'complete_manually', 'context', 'criteria', 'debounce_until', 'guidance', 'has_changes', 'id', 'label', 'manual', 'manually', 'mark', 'mark_complete', 'options', 'override', 'provide_context', 'reassign', 'requirements', 'skip', 'skip_tasks', 'sub-task', 'subtask', 'x'] \ No newline at end of file diff --git a/.hypothesis/constants/fd23d3f57846831d b/.hypothesis/constants/fd23d3f57846831d deleted file mode 100644 index c7a4bb5c..00000000 --- a/.hypothesis/constants/fd23d3f57846831d +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/serialization/__init__.py -# hypothesis_version: 6.151.9 - -['Encoding', 'NoEncryption', 'ParameterFormat', 'PrivateFormat', 'PublicFormat', 'load_der_parameters', 'load_der_private_key', 'load_der_public_key', 'load_pem_parameters', 'load_pem_private_key', 'load_pem_public_key', 'load_ssh_private_key', 'load_ssh_public_key'] \ No newline at end of file diff --git a/.hypothesis/constants/fe02ea75b037cc90 b/.hypothesis/constants/fe02ea75b037cc90 deleted file mode 100644 index 7725fa17..00000000 --- a/.hypothesis/constants/fe02ea75b037cc90 +++ /dev/null @@ -1,4 +0,0 @@ -# file: /home/egg/repos/egg/shared/egg_contracts/orchestrator.py -# hypothesis_version: 6.151.9 - -['.egg-state', 'Unknown error', 'agent-outputs', 'agents', 'all_complete', 'any_failed', 'commit', 'complete', 'completed', 'error', 'executions', 'failed', 'parallel', 'pending', 'reason', 'running', 'status', 'total_agents', 'w', 'wave'] \ No newline at end of file diff --git a/.hypothesis/constants/ff9057633f31936b b/.hypothesis/constants/ff9057633f31936b deleted file mode 100644 index 90129a7c..00000000 --- a/.hypothesis/constants/ff9057633f31936b +++ /dev/null @@ -1,4 +0,0 @@ -# file: /usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/ed25519.py -# hypothesis_version: 6.151.9 - -['Ed25519PrivateKey', 'Ed25519PublicKey'] \ No newline at end of file diff --git a/.hypothesis/unicode_data/14.0.0/charmap.json.gz b/.hypothesis/unicode_data/14.0.0/charmap.json.gz deleted file mode 100644 index 68a4579c7862aa0f16c7a91b5870fe617af45247..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21505 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 PZbUHDMd`1Q1L^?)F@X}y