synapse-hub 2.6.0 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/agents/failure-analyst.md +4 -0
- package/.agents/agents/orchestrator.md +16 -0
- package/.agents/agents/pom-crafter.md +8 -0
- package/.agents/agents/quality-gatekeeper.md +5 -0
- package/.agents/agents/test-runner.md +5 -0
- package/.agents/rules/git-push-protocol.md +1 -1
- package/.agents/rules/graphify.md +2 -0
- package/.agents/rules/mandatory-playwright-live.md +9 -9
- package/.agents/rules/mobile_appium_rules.md +8 -1
- package/.agents/skills/actor-qa-swarm/SKILL.md +77 -0
- package/.agents/skills/actor-qa-swarm/examples/broker_sharding_sample.json +12 -0
- package/.agents/skills/agentless-qa-repair/SKILL.md +69 -0
- package/.agents/skills/agentless-qa-repair/examples/healing_report_sample.json +17 -0
- package/.agents/skills/api-spec-to-e2e-matrix/SKILL.md +1 -1
- package/.agents/skills/clean-pom-crafter/SKILL.md +2 -2
- package/.agents/skills/db-state-verifier-and-seeder/SKILL.md +4 -4
- package/.agents/skills/event-stream-qa-orchestrator/SKILL.md +79 -0
- package/.agents/skills/event-stream-qa-orchestrator/examples/timeline_sample.jsonl +2 -0
- package/.agents/skills/failure-autopsy-and-healing/SKILL.md +2 -2
- package/.agents/skills/failure-autopsy-and-healing/scripts/triage_failures.sh +6 -21
- package/.agents/skills/katalon-cli-runner/SKILL.md +1 -1
- package/.agents/skills/mipro-prompt-compiler/SKILL.md +59 -0
- package/.agents/skills/mipro-prompt-compiler/examples/compiled_module_sample.json +22 -0
- package/.agents/skills/qa-aci-interface/SKILL.md +67 -0
- package/.agents/skills/qa-aci-interface/examples/surgical_edit_sample.json +12 -0
- package/.agents/skills/qa-memory-os/SKILL.md +80 -0
- package/.agents/skills/qa-memory-os/examples/archival_memory_sample.json +21 -0
- package/.agents/skills/review-spec/SKILL.md +60 -0
- package/.agents/skills/review-spec/examples/sample_spec_review.md +33 -0
- package/.agents/skills/synthetic-test-data-generator/SKILL.md +2 -2
- package/.agents/skills/tot-exploratory-testing/SKILL.md +59 -0
- package/.agents/skills/tot-exploratory-testing/examples/tot_graph_sample.json +35 -0
- package/.agents/skills/wcag-audit-patterns/SKILL.md +2 -2
- package/.agents/skills/web-agent-gym-benchmarking/SKILL.md +62 -0
- package/.agents/skills/web-agent-gym-benchmarking/examples/benchmark_report_sample.json +22 -0
- package/CLAUDE.md +1 -1
- package/README.en.md +5 -5
- package/README.md +3 -3
- package/docs/ARCHITECTURE.md +8 -8
- package/docs/research/EXTERNAL_AGENT_SKILLS_SURVEY.md +1062 -0
- package/package.json +1 -1
- package/skills_manifest.json +88 -7
- package/synapse.config.json +1 -1
- package/templates/ai_bridges/CLAUDE.md +1 -1
- package/tools/TOOLS_RUNBOOK.md +1 -1
- package/tools/__init__.py +1 -1
- package/tools/_openapi_parser.py +158 -0
- package/tools/agentless_patcher.py +417 -0
- package/tools/analyze_project.py +9 -6
- package/tools/auto_heal.py +19 -0
- package/tools/autogen_qa_broker.py +318 -0
- package/tools/browser_helpers.js +2 -2
- package/tools/browsergym_eval.py +237 -0
- package/tools/ci_healing_hook.py +1 -1
- package/tools/cli.py +3 -3
- package/tools/dashboard_generator.py +4 -4
- package/tools/db_sandbox.py +4 -0
- package/tools/heal_pr_automator.py +25 -0
- package/tools/mcp_excel_server.py +1 -1
- package/tools/mcp_server.py +1 -1
- package/tools/mipro_assertion_tuner.py +207 -0
- package/tools/pinpoint_failure.py +12 -0
- package/tools/project_state.py +4 -0
- package/tools/qa_event_stream.py +336 -0
- package/tools/reversible_sandbox.py +4 -0
- package/tools/swe_qa_aci.py +369 -0
- package/tools/sync_agent_rules.py +1 -1
- package/tools/test_memory_os.py +409 -0
- package/tools/tot_exploratory_tester.py +240 -0
- package/tools/update_sentinel.py +3 -3
- package/tools/welcome_page.py +1 -1
package/package.json
CHANGED
package/skills_manifest.json
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"name": "Enterprise Agent Skills Hub",
|
|
4
|
-
"version": "2.
|
|
5
|
-
"description": "Unified Catalog of
|
|
6
|
-
"totalSkills":
|
|
4
|
+
"version": "2.7.0",
|
|
5
|
+
"description": "Unified Catalog of 51 Specialized Skills for Autonomous AI Agents in Enterprise Software Quality Engineering, Performance, and Architecture.",
|
|
6
|
+
"totalSkills": 51,
|
|
7
7
|
"categories": {
|
|
8
8
|
"context_and_optimization": [
|
|
9
9
|
"token-and-context-optimizer",
|
|
10
10
|
"agent-orchestration-multi-agent-optimize",
|
|
11
11
|
"persistent-planning-files",
|
|
12
|
-
"meta-prompt-crafter"
|
|
12
|
+
"meta-prompt-crafter",
|
|
13
|
+
"qa-memory-os",
|
|
14
|
+
"event-stream-qa-orchestrator",
|
|
15
|
+
"actor-qa-swarm"
|
|
13
16
|
],
|
|
14
17
|
"test_automation_and_execution": [
|
|
15
18
|
"clean-pom-crafter",
|
|
@@ -22,7 +25,9 @@
|
|
|
22
25
|
"gherkin-to-suite",
|
|
23
26
|
"auth-session-and-cookie-manager",
|
|
24
27
|
"backend-load-and-stress-patterns",
|
|
25
|
-
"rbt-manual-testing"
|
|
28
|
+
"rbt-manual-testing",
|
|
29
|
+
"web-agent-gym-benchmarking",
|
|
30
|
+
"tot-exploratory-testing"
|
|
26
31
|
],
|
|
27
32
|
"verification_and_resilience": [
|
|
28
33
|
"antigravity-test-sentinel",
|
|
@@ -38,7 +43,8 @@
|
|
|
38
43
|
"flaky-test-sentinel-and-quarantine",
|
|
39
44
|
"test-driven-development",
|
|
40
45
|
"systematic-debugging",
|
|
41
|
-
"verification-before-completion"
|
|
46
|
+
"verification-before-completion",
|
|
47
|
+
"agentless-qa-repair"
|
|
42
48
|
],
|
|
43
49
|
"architecture_and_analysis": [
|
|
44
50
|
"api-spec-to-e2e-matrix",
|
|
@@ -53,7 +59,10 @@
|
|
|
53
59
|
"graphify-impact-analyzer",
|
|
54
60
|
"wcag-audit-patterns",
|
|
55
61
|
"github-actions-templates",
|
|
56
|
-
"web-vitals-and-performance-profiler"
|
|
62
|
+
"web-vitals-and-performance-profiler",
|
|
63
|
+
"qa-aci-interface",
|
|
64
|
+
"mipro-prompt-compiler",
|
|
65
|
+
"review-spec"
|
|
57
66
|
]
|
|
58
67
|
},
|
|
59
68
|
"profiles": {
|
|
@@ -509,6 +518,78 @@
|
|
|
509
518
|
"path": ".agents/skills/lean-impact-scoreboard/SKILL.md",
|
|
510
519
|
"summary": "Display the measured impact scoreboard (code reduction %, token optimization %, cost reduction %, test rigor) from lean engineering benchmarks.",
|
|
511
520
|
"version": "1.0.0"
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
"id": "agentless-qa-repair",
|
|
524
|
+
"name": "Agentless QA Repair",
|
|
525
|
+
"category": "verification_and_resilience",
|
|
526
|
+
"path": ".agents/skills/agentless-qa-repair/SKILL.md",
|
|
527
|
+
"summary": "Repair broken test scripts and Page Classes using an Agentless 3-phase flow: localization, candidate synthesis, and minimal diff validation.",
|
|
528
|
+
"version": "1.0.0"
|
|
529
|
+
},
|
|
530
|
+
{
|
|
531
|
+
"id": "qa-aci-interface",
|
|
532
|
+
"name": "QA Agent-Computer Interface",
|
|
533
|
+
"category": "architecture_and_analysis",
|
|
534
|
+
"path": ".agents/skills/qa-aci-interface/SKILL.md",
|
|
535
|
+
"summary": "Safe Agent-Computer Interface for inspecting code windows (40-50 lines), surgical editing with pre-commit AST checks, and distilled test execution.",
|
|
536
|
+
"version": "1.0.0"
|
|
537
|
+
},
|
|
538
|
+
{
|
|
539
|
+
"id": "qa-memory-os",
|
|
540
|
+
"name": "QA Test Memory OS",
|
|
541
|
+
"category": "context_and_optimization",
|
|
542
|
+
"path": ".agents/skills/qa-memory-os/SKILL.md",
|
|
543
|
+
"summary": "Hierarchical 3-tier memory operating system for test automation: Core Memory blocks, Recall step logs, and Archival semantic store with AUT version scoping.",
|
|
544
|
+
"version": "1.0.0"
|
|
545
|
+
},
|
|
546
|
+
{
|
|
547
|
+
"id": "event-stream-qa-orchestrator",
|
|
548
|
+
"name": "EventStream QA Orchestrator",
|
|
549
|
+
"category": "context_and_optimization",
|
|
550
|
+
"path": ".agents/skills/event-stream-qa-orchestrator/SKILL.md",
|
|
551
|
+
"summary": "Immutable EventStream orchestrator recording deterministic action/observation timelines with SHA-256 hash chains and reversible checkpoint rollbacks.",
|
|
552
|
+
"version": "1.0.0"
|
|
553
|
+
},
|
|
554
|
+
{
|
|
555
|
+
"id": "web-agent-gym-benchmarking",
|
|
556
|
+
"name": "Web Agent Gym Benchmarking",
|
|
557
|
+
"category": "test_automation_and_execution",
|
|
558
|
+
"path": ".agents/skills/web-agent-gym-benchmarking/SKILL.md",
|
|
559
|
+
"summary": "Empirical benchmark harness evaluating web agents and Page Classes against standardized enterprise tasks with headless <200ms latency budgets and ground-truth DB state verification.",
|
|
560
|
+
"version": "1.0.0"
|
|
561
|
+
},
|
|
562
|
+
{
|
|
563
|
+
"id": "tot-exploratory-testing",
|
|
564
|
+
"name": "Tree-of-Thoughts Exploratory Testing",
|
|
565
|
+
"category": "test_automation_and_execution",
|
|
566
|
+
"path": ".agents/skills/tot-exploratory-testing/SKILL.md",
|
|
567
|
+
"summary": "Non-linear Tree/Graph-of-Thoughts exploratory testing engine exploring Happy Path, Boundary/Race, and Negative/Chaos branches with Beam Search risk scoring and multi-hypothesis RCA.",
|
|
568
|
+
"version": "1.0.0"
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
"id": "actor-qa-swarm",
|
|
572
|
+
"name": "Actor QA Swarm",
|
|
573
|
+
"category": "context_and_optimization",
|
|
574
|
+
"path": ".agents/skills/actor-qa-swarm/SKILL.md",
|
|
575
|
+
"summary": "Asynchronous Actor Model message broker and matrix sharding coordinator for multi-agent test execution.",
|
|
576
|
+
"version": "1.0.0"
|
|
577
|
+
},
|
|
578
|
+
{
|
|
579
|
+
"id": "mipro-prompt-compiler",
|
|
580
|
+
"name": "MIPROv2 Prompt Compiler",
|
|
581
|
+
"category": "architecture_and_analysis",
|
|
582
|
+
"path": ".agents/skills/mipro-prompt-compiler/SKILL.md",
|
|
583
|
+
"summary": "MIPROv2 Bayesian teleprompter optimizer and few-shot compiler tuning prompt instructions against AST mutation kill scores.",
|
|
584
|
+
"version": "1.0.0"
|
|
585
|
+
},
|
|
586
|
+
{
|
|
587
|
+
"id": "review-spec",
|
|
588
|
+
"name": "Review Spec (Goldfish Protocol)",
|
|
589
|
+
"category": "architecture_and_analysis",
|
|
590
|
+
"path": ".agents/skills/review-spec/SKILL.md",
|
|
591
|
+
"summary": "Zero-context stress test and quality review of test specifications, user stories, BDD feature files, and acceptance criteria before code generation begins.",
|
|
592
|
+
"version": "1.0.0"
|
|
512
593
|
}
|
|
513
594
|
]
|
|
514
595
|
}
|
package/synapse.config.json
CHANGED
|
@@ -17,7 +17,7 @@ In accordance with the MIT License, the original copyright notice crediting **Th
|
|
|
17
17
|
---
|
|
18
18
|
|
|
19
19
|
## ⚡ Quick Commands
|
|
20
|
-
- Verify
|
|
20
|
+
- Verify 10 Quality Gates: `npx synapse-hub verify` (or `python tools/verify_all.py`)
|
|
21
21
|
- Project Health Audit: `npx synapse-hub analyze` (or `python tools/analyze_project.py`)
|
|
22
22
|
- Code Linter & Fake-Pass Sentinel: `npx synapse-hub lint` (or `python tools/infer_linter.py`)
|
|
23
23
|
- Verify Author Attribution: `python tools/author_integrity.py`
|
package/tools/TOOLS_RUNBOOK.md
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
| **Flaky Test Detection & Quarantine Governance ("flaky")** | `tools/flaky_detector.py` | `agent-qa flaky --detect` (or `npx synapse-hub flaky`) |
|
|
16
16
|
| **Executive Project Health & Quality Dashboard ("dashboard")** | `tools/dashboard_generator.py` | `agent-qa dashboard` (or `npx synapse-hub dashboard`) |
|
|
17
17
|
| **Clean Uninstall of AI Bridges & Global Plugins ("uninstall")** | `tools/cli.py` | `agent-qa uninstall` (or `npx synapse-hub uninstall`) |
|
|
18
|
-
| **Comprehensive Health & AST Analysis ("analyze project")** | `tools/analyze_project.py` | `python tools/analyze_project.py [target]` (or `agent-qa analyze`).<br/>*Post-Audit:* Stages
|
|
18
|
+
| **Comprehensive Health & AST Analysis ("analyze project")** | `tools/analyze_project.py` | `python tools/analyze_project.py [target]` (or `agent-qa analyze`).<br/>*Post-Audit:* Stages and commits `PROJECT_HEALTH_REPORT.md` & `repo_map.txt` locally; confirms with user before pushing to remote. |
|
|
19
19
|
| **Action Safety Firewall (Environment Protection)** | `tools/safety_firewall.py` | `python tools/safety_firewall.py --text "Delete" --action click` (or `agent-qa safety-check`) |
|
|
20
20
|
| **API Contract Drift (Breaking Change Detection)** | `tools/api_drift_sentinel.py` | `python tools/api_drift_sentinel.py --old base.json --new curr.json` (or `agent-qa contract-drift`) |
|
|
21
21
|
| **Autonomous API Fuzzing & Chaos Breaker** | `tools/api_fuzzer.py` | `agent-qa fuzz-api --base-url <url> --spec <swagger.json>` (Catches 500, DB leaks, SLA breach) |
|
package/tools/__init__.py
CHANGED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# SPDX-FileCopyrightText: Copyright (c) 2026 Thế Vị (@TeeVee998). All rights reserved.
|
|
3
|
+
# SPDX-License-Identifier: MIT
|
|
4
|
+
# Project: Synapse-Hub (https://github.com/TeeVee998/Synapse-Hub)
|
|
5
|
+
|
|
6
|
+
"""
|
|
7
|
+
tools/_openapi_parser.py — Shared OpenAPI & Swagger Specification Parser
|
|
8
|
+
-------------------------------------------------------------------------
|
|
9
|
+
Internal shared helper module consolidating OpenAPI 3.0 and Swagger 2.0
|
|
10
|
+
schema ingestion, $ref dereferencing, endpoint extraction, and boundary
|
|
11
|
+
value test scenario synthesis across API testing tools.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
import os
|
|
15
|
+
import sys
|
|
16
|
+
import json
|
|
17
|
+
from typing import Dict, Any, List, Optional, Tuple
|
|
18
|
+
|
|
19
|
+
if hasattr(sys.stdout, 'reconfigure'):
|
|
20
|
+
try:
|
|
21
|
+
sys.stdout.reconfigure(encoding='utf-8')
|
|
22
|
+
sys.stderr.reconfigure(encoding='utf-8')
|
|
23
|
+
except Exception:
|
|
24
|
+
pass
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def load_spec(spec_input: Any) -> Dict[str, Any]:
|
|
28
|
+
"""
|
|
29
|
+
Loads OpenAPI / Swagger spec from a file path, raw JSON string, or dict.
|
|
30
|
+
"""
|
|
31
|
+
if isinstance(spec_input, dict):
|
|
32
|
+
return spec_input
|
|
33
|
+
if isinstance(spec_input, str):
|
|
34
|
+
if os.path.exists(spec_input):
|
|
35
|
+
with open(spec_input, "r", encoding="utf-8") as f:
|
|
36
|
+
return json.load(f)
|
|
37
|
+
try:
|
|
38
|
+
return json.loads(spec_input)
|
|
39
|
+
except Exception:
|
|
40
|
+
raise ValueError(f"Unable to parse spec input as JSON file or string: {spec_input[:100]}")
|
|
41
|
+
raise TypeError(f"Expected dict, str path, or JSON string; got {type(spec_input)}")
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def resolve_ref(spec_data: Dict[str, Any], ref_str: str) -> Dict[str, Any]:
|
|
45
|
+
"""
|
|
46
|
+
Resolves local JSON pointers such as '#/components/schemas/User' or '#/definitions/User'.
|
|
47
|
+
"""
|
|
48
|
+
if not ref_str.startswith("#/"):
|
|
49
|
+
return {}
|
|
50
|
+
parts = ref_str[2:].split("/")
|
|
51
|
+
curr = spec_data
|
|
52
|
+
for p in parts:
|
|
53
|
+
if isinstance(curr, dict) and p in curr:
|
|
54
|
+
curr = curr[p]
|
|
55
|
+
else:
|
|
56
|
+
return {}
|
|
57
|
+
return curr if isinstance(curr, dict) else {}
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def extract_endpoints(spec_data: Dict[str, Any]) -> List[Dict[str, Any]]:
|
|
61
|
+
"""
|
|
62
|
+
Parses paths and HTTP operations into a normalized list of API endpoints.
|
|
63
|
+
"""
|
|
64
|
+
endpoints = []
|
|
65
|
+
paths = spec_data.get("paths", {})
|
|
66
|
+
|
|
67
|
+
for path, methods in paths.items():
|
|
68
|
+
if not isinstance(methods, dict):
|
|
69
|
+
continue
|
|
70
|
+
for method, details in methods.items():
|
|
71
|
+
if method.lower() not in ("get", "post", "put", "delete", "patch", "options", "head"):
|
|
72
|
+
continue
|
|
73
|
+
if not isinstance(details, dict):
|
|
74
|
+
continue
|
|
75
|
+
|
|
76
|
+
summary = details.get("summary", details.get("operationId", f"{method.upper()} {path}"))
|
|
77
|
+
operation_id = details.get("operationId", f"{method.lower()}_{path.replace('/', '_').strip('_')}")
|
|
78
|
+
tags = details.get("tags", ["General"])
|
|
79
|
+
|
|
80
|
+
# Parameters (Path, Query, Header)
|
|
81
|
+
parameters = details.get("parameters", [])
|
|
82
|
+
|
|
83
|
+
# Request Body Schema (OpenAPI 3.0 application/json)
|
|
84
|
+
req_content = details.get("requestBody", {}).get("content", {})
|
|
85
|
+
schema = req_content.get("application/json", {}).get("schema", {})
|
|
86
|
+
if "$ref" in schema:
|
|
87
|
+
schema = resolve_ref(spec_data, schema["$ref"])
|
|
88
|
+
|
|
89
|
+
# Swagger 2.0 body parameter fallback
|
|
90
|
+
if not schema:
|
|
91
|
+
for param in parameters:
|
|
92
|
+
if param.get("in") == "body" and "schema" in param:
|
|
93
|
+
s = param["schema"]
|
|
94
|
+
schema = resolve_ref(spec_data, s["$ref"]) if "$ref" in s else s
|
|
95
|
+
break
|
|
96
|
+
|
|
97
|
+
# Response schemas
|
|
98
|
+
responses = details.get("responses", {})
|
|
99
|
+
|
|
100
|
+
endpoints.append({
|
|
101
|
+
"path": path,
|
|
102
|
+
"method": method.upper(),
|
|
103
|
+
"summary": summary,
|
|
104
|
+
"operation_id": operation_id,
|
|
105
|
+
"tags": tags,
|
|
106
|
+
"parameters": parameters,
|
|
107
|
+
"request_schema": schema,
|
|
108
|
+
"responses": responses
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
return endpoints
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def generate_boundary_scenarios(field_name: str, field_schema: Dict[str, Any]) -> List[Dict[str, Any]]:
|
|
115
|
+
"""
|
|
116
|
+
Generates standard positive and boundary value test scenarios for a given field schema.
|
|
117
|
+
"""
|
|
118
|
+
boundaries = []
|
|
119
|
+
f_type = field_schema.get("type", "string")
|
|
120
|
+
|
|
121
|
+
if f_type == "string":
|
|
122
|
+
min_l = field_schema.get("minLength", 1)
|
|
123
|
+
max_l = field_schema.get("maxLength", 50)
|
|
124
|
+
boundaries.append({"scenario": f"{field_name} Empty String", "value": "", "expected": 400})
|
|
125
|
+
boundaries.append({
|
|
126
|
+
"scenario": f"{field_name} Below MinLength ({min_l - 1} chars)",
|
|
127
|
+
"value": "A" * max(0, min_l - 1),
|
|
128
|
+
"expected": 400 if min_l > 0 else 200
|
|
129
|
+
})
|
|
130
|
+
boundaries.append({
|
|
131
|
+
"scenario": f"{field_name} Exact MaxLength ({max_l} chars)",
|
|
132
|
+
"value": "A" * max_l,
|
|
133
|
+
"expected": 200
|
|
134
|
+
})
|
|
135
|
+
boundaries.append({
|
|
136
|
+
"scenario": f"{field_name} Exceed MaxLength ({max_l + 1} chars)",
|
|
137
|
+
"value": "A" * (max_l + 1),
|
|
138
|
+
"expected": 400
|
|
139
|
+
})
|
|
140
|
+
boundaries.append({
|
|
141
|
+
"scenario": f"{field_name} Special & XSS Payload",
|
|
142
|
+
"value": "<script>alert(1)</script>",
|
|
143
|
+
"expected": 400
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
elif f_type in ("integer", "number"):
|
|
147
|
+
minimum = field_schema.get("minimum", 0)
|
|
148
|
+
maximum = field_schema.get("maximum", 1000)
|
|
149
|
+
boundaries.append({"scenario": f"{field_name} Negative Value ({minimum - 1})", "value": minimum - 1, "expected": 400})
|
|
150
|
+
boundaries.append({"scenario": f"{field_name} Boundary Minimum ({minimum})", "value": minimum, "expected": 200})
|
|
151
|
+
boundaries.append({"scenario": f"{field_name} Boundary Maximum ({maximum})", "value": maximum, "expected": 200})
|
|
152
|
+
boundaries.append({"scenario": f"{field_name} Exceed Maximum ({maximum + 1})", "value": maximum + 1, "expected": 400})
|
|
153
|
+
boundaries.append({"scenario": f"{field_name} 32-bit Integer Overflow", "value": 2147483648, "expected": 400})
|
|
154
|
+
|
|
155
|
+
elif f_type == "boolean":
|
|
156
|
+
boundaries.append({"scenario": f"{field_name} Invalid String Instead of Boolean", "value": "not_a_bool", "expected": 400})
|
|
157
|
+
|
|
158
|
+
return boundaries
|