recce-nightly 1.9.0.20250622__py3-none-any.whl → 1.9.0.20250624__py3-none-any.whl
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.
Potentially problematic release.
This version of recce-nightly might be problematic. Click here for more details.
- recce/VERSION +1 -1
- recce/adapter/dbt_adapter/__init__.py +108 -45
- recce/cli.py +42 -11
- recce/connect_to_cloud.py +138 -0
- recce/data/404.html +2 -2
- recce/data/_next/static/chunks/{92-7ab55ae02606193c.js → 92-607cd1af83c41f43.js} +1 -1
- recce/data/_next/static/chunks/app/page-3f79c2e6d6f03a09.js +1 -0
- recce/data/auth_callback.html +68 -0
- recce/data/index.html +2 -2
- recce/data/index.txt +3 -3
- recce/models/types.py +7 -0
- recce/server.py +37 -33
- recce/state.py +3 -2
- recce/util/api_token.py +1 -9
- recce/util/lineage.py +16 -12
- recce/util/onboarding_state.py +45 -0
- recce/util/recce_cloud.py +7 -7
- {recce_nightly-1.9.0.20250622.dist-info → recce_nightly-1.9.0.20250624.dist-info}/METADATA +1 -1
- {recce_nightly-1.9.0.20250622.dist-info → recce_nightly-1.9.0.20250624.dist-info}/RECORD +27 -23
- tests/adapter/dbt_adapter/test_dbt_cll.py +9 -9
- tests/test_connect_to_cloud.py +82 -0
- recce/data/_next/static/chunks/app/page-707b8e8d98d7f780.js +0 -1
- /recce/data/_next/static/{M3_t2h-wA4_IXOtKHdJqV → Iga3yMdHBVJ_Vhluh2SdE}/_buildManifest.js +0 -0
- /recce/data/_next/static/{M3_t2h-wA4_IXOtKHdJqV → Iga3yMdHBVJ_Vhluh2SdE}/_ssgManifest.js +0 -0
- {recce_nightly-1.9.0.20250622.dist-info → recce_nightly-1.9.0.20250624.dist-info}/WHEEL +0 -0
- {recce_nightly-1.9.0.20250622.dist-info → recce_nightly-1.9.0.20250624.dist-info}/entry_points.txt +0 -0
- {recce_nightly-1.9.0.20250622.dist-info → recce_nightly-1.9.0.20250624.dist-info}/licenses/LICENSE +0 -0
- {recce_nightly-1.9.0.20250622.dist-info → recce_nightly-1.9.0.20250624.dist-info}/top_level.txt +0 -0
recce/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.9.0.
|
|
1
|
+
1.9.0.20250624
|
|
@@ -915,65 +915,128 @@ class DbtAdapter(BaseAdapter):
|
|
|
915
915
|
diff=diff,
|
|
916
916
|
)
|
|
917
917
|
|
|
918
|
-
def get_cll(
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
upstream
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
p_map, c_map = filter_dependency_maps(cll.parent_map, cll.child_map, relevant_columns)
|
|
929
|
-
return CllData(
|
|
930
|
-
nodes=nodes,
|
|
931
|
-
columns=columns,
|
|
932
|
-
parent_map=p_map,
|
|
933
|
-
child_map=c_map,
|
|
934
|
-
)
|
|
935
|
-
|
|
936
|
-
def get_cll_by_node_id(self, node_id: str, base: Optional[bool] = False) -> CllData:
|
|
918
|
+
def get_cll(
|
|
919
|
+
self,
|
|
920
|
+
node_id: Optional[str] = None,
|
|
921
|
+
column: Optional[str] = None,
|
|
922
|
+
change_analysis: Optional[bool] = False,
|
|
923
|
+
cll: Optional[bool] = True,
|
|
924
|
+
upstream: Optional[bool] = True,
|
|
925
|
+
downstream: Optional[bool] = True,
|
|
926
|
+
no_filter: Optional[bool] = False,
|
|
927
|
+
) -> CllData:
|
|
937
928
|
cll_tracker = CLLPerformanceTracking()
|
|
938
929
|
cll_tracker.start_column_lineage()
|
|
939
930
|
|
|
940
|
-
manifest = self.curr_manifest
|
|
931
|
+
manifest = self.curr_manifest
|
|
941
932
|
manifest_dict = manifest.to_dict()
|
|
942
933
|
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
934
|
+
# Find related model nodes
|
|
935
|
+
if node_id is not None:
|
|
936
|
+
cll_node_ids = {node_id}
|
|
937
|
+
else:
|
|
938
|
+
lineage_diff = self.get_lineage_diff()
|
|
939
|
+
cll_node_ids = lineage_diff.diff.keys()
|
|
947
940
|
|
|
948
941
|
nodes = {}
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
942
|
+
columns = {}
|
|
943
|
+
parent_map = {}
|
|
944
|
+
child_map = {}
|
|
945
|
+
|
|
946
|
+
if upstream:
|
|
947
|
+
cll_node_ids = cll_node_ids.union(find_upstream(cll_node_ids, manifest_dict.get("parent_map")))
|
|
948
|
+
if downstream:
|
|
949
|
+
cll_node_ids = cll_node_ids.union(find_downstream(cll_node_ids, manifest_dict.get("child_map")))
|
|
950
|
+
|
|
951
|
+
if cll:
|
|
952
|
+
for cll_node_id in cll_node_ids:
|
|
953
|
+
if (
|
|
954
|
+
cll_node_id not in manifest.sources
|
|
955
|
+
and cll_node_id not in manifest.nodes
|
|
956
|
+
and cll_node_id not in manifest.exposures
|
|
957
|
+
):
|
|
958
|
+
continue
|
|
959
|
+
cll_data_one = self.get_cll_cached(cll_node_id, base=False)
|
|
960
|
+
if cll_data_one is None:
|
|
961
|
+
continue
|
|
962
|
+
|
|
963
|
+
node_diff = self.get_lineage_diff().diff.get(cll_node_id) if change_analysis else None
|
|
964
|
+
for n_id, n in cll_data_one.nodes.items():
|
|
965
|
+
nodes[n_id] = n
|
|
966
|
+
|
|
967
|
+
if node_diff is not None:
|
|
968
|
+
n.change_status = node_diff.change_status
|
|
969
|
+
if node_diff.change is not None:
|
|
970
|
+
n.change_category = node_diff.change.category
|
|
971
|
+
for c_id, c in cll_data_one.columns.items():
|
|
972
|
+
columns[c_id] = c
|
|
973
|
+
if node_diff is not None and node_diff.change is not None:
|
|
974
|
+
column_diff = node_diff.change.columns.get(c.name)
|
|
975
|
+
if column_diff:
|
|
976
|
+
c.change_status = column_diff
|
|
977
|
+
|
|
978
|
+
for p_id, parents in cll_data_one.parent_map.items():
|
|
979
|
+
parent_map[p_id] = parents
|
|
962
980
|
|
|
963
981
|
# build the child map
|
|
964
|
-
|
|
965
|
-
for node_id, parents in cll_data.parent_map.items():
|
|
982
|
+
for parent_id, parents in parent_map.items():
|
|
966
983
|
for parent in parents:
|
|
967
|
-
if parent not in
|
|
968
|
-
|
|
969
|
-
|
|
984
|
+
if parent not in child_map:
|
|
985
|
+
child_map[parent] = set()
|
|
986
|
+
child_map[parent].add(parent_id)
|
|
987
|
+
|
|
988
|
+
# Find the anchor nodes
|
|
989
|
+
anchor_node_ids = set()
|
|
990
|
+
if node_id is None and column is None:
|
|
991
|
+
if change_analysis:
|
|
992
|
+
# If change analysis is requested, we need to find the nodes that have changes
|
|
993
|
+
for node_id, node_diff in self.get_lineage_diff().diff.items():
|
|
994
|
+
if node_diff.change.category == "breaking":
|
|
995
|
+
anchor_node_ids.add(node_id)
|
|
996
|
+
for column_name in node_diff.change.columns:
|
|
997
|
+
anchor_node_ids.add(f"{node_id}_{column_name}")
|
|
998
|
+
else:
|
|
999
|
+
lineage_diff = self.get_lineage_diff()
|
|
1000
|
+
anchor_node_ids = lineage_diff.diff.keys()
|
|
1001
|
+
elif node_id is not None and column is None:
|
|
1002
|
+
if change_analysis:
|
|
1003
|
+
# If change analysis is requested, we need to find the nodes that have changes
|
|
1004
|
+
node_diff = self.get_lineage_diff().diff.get(node_id)
|
|
1005
|
+
if node_diff:
|
|
1006
|
+
if node_diff.change.category == "breaking":
|
|
1007
|
+
anchor_node_ids.add(node_id)
|
|
1008
|
+
for column_name in node_diff.change.columns:
|
|
1009
|
+
anchor_node_ids.add(f"{node_id}_{column_name}")
|
|
1010
|
+
else:
|
|
1011
|
+
anchor_node_ids.add(node_id)
|
|
1012
|
+
else:
|
|
1013
|
+
anchor_node_ids.add(node_id)
|
|
1014
|
+
else:
|
|
1015
|
+
anchor_node_ids.add(f"{node_id}_{column}")
|
|
1016
|
+
|
|
1017
|
+
result_node_ids = set(anchor_node_ids)
|
|
1018
|
+
if upstream:
|
|
1019
|
+
result_node_ids = result_node_ids.union(find_upstream(anchor_node_ids, parent_map))
|
|
1020
|
+
if downstream:
|
|
1021
|
+
result_node_ids = result_node_ids.union(find_downstream(anchor_node_ids, child_map))
|
|
1022
|
+
|
|
1023
|
+
# Filter the nodes and columns based on the anchor nodes
|
|
1024
|
+
if not no_filter:
|
|
1025
|
+
nodes = {k: v for k, v in nodes.items() if k in result_node_ids}
|
|
1026
|
+
columns = {k: v for k, v in columns.items() if k in result_node_ids}
|
|
1027
|
+
parent_map, child_map = filter_dependency_maps(parent_map, child_map, result_node_ids)
|
|
970
1028
|
|
|
971
1029
|
cll_tracker.end_column_lineage()
|
|
972
1030
|
cll_tracker.set_total_nodes(len(nodes))
|
|
973
1031
|
log_performance("column level lineage", cll_tracker.to_dict())
|
|
974
1032
|
cll_tracker.reset()
|
|
975
1033
|
|
|
976
|
-
return
|
|
1034
|
+
return CllData(
|
|
1035
|
+
nodes=nodes,
|
|
1036
|
+
columns=columns,
|
|
1037
|
+
parent_map=parent_map,
|
|
1038
|
+
child_map=child_map,
|
|
1039
|
+
)
|
|
977
1040
|
|
|
978
1041
|
@lru_cache(maxsize=128)
|
|
979
1042
|
def get_cll_cached(self, node_id: str, base: Optional[bool] = False) -> Optional[CllData]:
|
|
@@ -1202,7 +1265,7 @@ class DbtAdapter(BaseAdapter):
|
|
|
1202
1265
|
change_category = diff_info.change.category
|
|
1203
1266
|
|
|
1204
1267
|
if change_category == "breaking":
|
|
1205
|
-
cll = self.
|
|
1268
|
+
cll = self.get_cll(node_id, no_filter=True)
|
|
1206
1269
|
_, downstream = find_column_dependencies(node_id, cll.parent_map, cll.child_map)
|
|
1207
1270
|
relevant_columns = {node_id}
|
|
1208
1271
|
relevant_columns.update(downstream)
|
|
@@ -1220,7 +1283,7 @@ class DbtAdapter(BaseAdapter):
|
|
|
1220
1283
|
return CllData()
|
|
1221
1284
|
change_columns = diff_info.change.columns
|
|
1222
1285
|
|
|
1223
|
-
cll = self.
|
|
1286
|
+
cll = self.get_cll(node_id, no_filter=True)
|
|
1224
1287
|
relevant_columns = set()
|
|
1225
1288
|
for col, change_status in change_columns.items():
|
|
1226
1289
|
if change_status == "removed":
|
recce/cli.py
CHANGED
|
@@ -10,6 +10,11 @@ from click import Abort
|
|
|
10
10
|
from recce import event
|
|
11
11
|
from recce.artifact import download_dbt_artifacts, upload_dbt_artifacts
|
|
12
12
|
from recce.config import RECCE_CONFIG_FILE, RECCE_ERROR_LOG_FILE, RecceConfig
|
|
13
|
+
from recce.connect_to_cloud import (
|
|
14
|
+
generate_key_pair,
|
|
15
|
+
prepare_connection_url,
|
|
16
|
+
run_one_time_http_server,
|
|
17
|
+
)
|
|
13
18
|
from recce.exceptions import RecceConfigException
|
|
14
19
|
from recce.git import current_branch, current_default_branch
|
|
15
20
|
from recce.run import check_github_ci_env, cli_run
|
|
@@ -17,9 +22,9 @@ from recce.state import RecceCloudStateManager, RecceShareStateManager, RecceSta
|
|
|
17
22
|
from recce.summary import generate_markdown_summary
|
|
18
23
|
from recce.util.api_token import prepare_api_token, show_invalid_api_token_message
|
|
19
24
|
from recce.util.logger import CustomFormatter
|
|
25
|
+
from recce.util.onboarding_state import update_onboarding_state
|
|
20
26
|
from recce.util.recce_cloud import (
|
|
21
27
|
RecceCloudException,
|
|
22
|
-
get_recce_cloud_onboarding_state,
|
|
23
28
|
)
|
|
24
29
|
|
|
25
30
|
from .core import RecceContext, set_default_context
|
|
@@ -397,15 +402,21 @@ def server(host, port, lifetime, state_file=None, **kwargs):
|
|
|
397
402
|
is_cloud = kwargs.get("cloud", False)
|
|
398
403
|
console = Console()
|
|
399
404
|
cloud_options = None
|
|
400
|
-
flag = {"
|
|
405
|
+
flag = {"single_env_onboarding": False, "show_relaunch_hint": False}
|
|
401
406
|
if is_cloud:
|
|
402
407
|
cloud_options = {
|
|
403
408
|
"host": kwargs.get("state_file_host"),
|
|
404
409
|
"token": kwargs.get("cloud_token"),
|
|
405
410
|
"password": kwargs.get("password"),
|
|
406
411
|
}
|
|
407
|
-
|
|
408
|
-
|
|
412
|
+
|
|
413
|
+
# Check Single Environment Onboarding Mode if the review mode is False
|
|
414
|
+
if not Path(kwargs.get("target_base_path", "target-base")).is_dir() and not is_review:
|
|
415
|
+
# Mark as single env onboarding mode if user provides the target-path only
|
|
416
|
+
flag["single_env_onboarding"] = True
|
|
417
|
+
flag["show_relaunch_hint"] = True
|
|
418
|
+
# Use the target path as the base path
|
|
419
|
+
kwargs["target_base_path"] = kwargs.get("target_path")
|
|
409
420
|
|
|
410
421
|
auth_options = {}
|
|
411
422
|
try:
|
|
@@ -415,13 +426,8 @@ def server(host, port, lifetime, state_file=None, **kwargs):
|
|
|
415
426
|
exit(1)
|
|
416
427
|
auth_options["api_token"] = api_token
|
|
417
428
|
|
|
418
|
-
#
|
|
419
|
-
|
|
420
|
-
# Mark as single env onboarding mode if user provides the target-path only
|
|
421
|
-
flag["single_env_onboarding"] = True
|
|
422
|
-
flag["show_relaunch_hint"] = True
|
|
423
|
-
# Use the target path as the base path
|
|
424
|
-
kwargs["target_base_path"] = kwargs.get("target_path")
|
|
429
|
+
# Onboarding State logic update here
|
|
430
|
+
update_onboarding_state(api_token, flag["single_env_onboarding"])
|
|
425
431
|
|
|
426
432
|
state_loader = create_state_loader(is_review, is_cloud, state_file, cloud_options)
|
|
427
433
|
|
|
@@ -641,6 +647,31 @@ def summary(state_file, **kwargs):
|
|
|
641
647
|
print(output)
|
|
642
648
|
|
|
643
649
|
|
|
650
|
+
@cli.command(cls=TrackCommand)
|
|
651
|
+
def connect_to_cloud():
|
|
652
|
+
"""
|
|
653
|
+
Connect OSS to Cloud
|
|
654
|
+
"""
|
|
655
|
+
import webbrowser
|
|
656
|
+
|
|
657
|
+
from rich.console import Console
|
|
658
|
+
|
|
659
|
+
console = Console()
|
|
660
|
+
|
|
661
|
+
# Prepare RSA keys for connecting to cloud
|
|
662
|
+
private_key, public_key = generate_key_pair()
|
|
663
|
+
|
|
664
|
+
connect_url, callback_port = prepare_connection_url(public_key)
|
|
665
|
+
console.rule("Connecting to Recce Cloud")
|
|
666
|
+
console.print("Attempting to automatically open the Recce Cloud authorization page in your default browser.")
|
|
667
|
+
console.print("If the browser does not open, please open the following URL:")
|
|
668
|
+
console.print(connect_url)
|
|
669
|
+
webbrowser.open(connect_url)
|
|
670
|
+
|
|
671
|
+
# Launch a callback HTTP server for fetching the api-token
|
|
672
|
+
run_one_time_http_server(private_key, port=callback_port)
|
|
673
|
+
|
|
674
|
+
|
|
644
675
|
@cli.group("cloud", short_help="Manage Recce Cloud state file.")
|
|
645
676
|
def cloud(**kwargs):
|
|
646
677
|
# Manage Recce Cloud.
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import base64
|
|
2
|
+
import os.path
|
|
3
|
+
import random
|
|
4
|
+
import threading
|
|
5
|
+
from http.server import BaseHTTPRequestHandler, HTTPServer
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from typing import Tuple
|
|
8
|
+
from urllib.parse import parse_qs, urlparse
|
|
9
|
+
|
|
10
|
+
from cryptography.hazmat.backends import default_backend
|
|
11
|
+
from cryptography.hazmat.primitives import hashes, serialization
|
|
12
|
+
from cryptography.hazmat.primitives.asymmetric import padding, rsa
|
|
13
|
+
from cryptography.hazmat.primitives.asymmetric.rsa import RSAPrivateKey, RSAPublicKey
|
|
14
|
+
from rich.console import Console
|
|
15
|
+
|
|
16
|
+
from recce.event import update_recce_api_token
|
|
17
|
+
from recce.exceptions import RecceConfigException
|
|
18
|
+
from recce.util.onboarding_state import update_onboarding_state
|
|
19
|
+
from recce.util.recce_cloud import RECCE_CLOUD_BASE_URL, RecceCloud
|
|
20
|
+
|
|
21
|
+
console = Console()
|
|
22
|
+
|
|
23
|
+
static_folder_path = Path(__file__).parent / "data"
|
|
24
|
+
_server_lock = threading.Lock()
|
|
25
|
+
_connection_url = None
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def decrypt_code(private_key: RSAPrivateKey, code: str) -> str:
|
|
29
|
+
ciphertext = base64.b64decode(code)
|
|
30
|
+
plaintext = private_key.decrypt(
|
|
31
|
+
ciphertext,
|
|
32
|
+
padding.OAEP(
|
|
33
|
+
mgf=padding.MGF1(algorithm=hashes.SHA1()), # Node.js uses SHA1 by default
|
|
34
|
+
algorithm=hashes.SHA1(),
|
|
35
|
+
label=None,
|
|
36
|
+
),
|
|
37
|
+
)
|
|
38
|
+
return plaintext.decode("utf-8")
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def handle_callback_request(query_string: str, private_key: RSAPrivateKey):
|
|
42
|
+
query_params = parse_qs(query_string)
|
|
43
|
+
code = query_params.get("code", [None])[0]
|
|
44
|
+
if not code:
|
|
45
|
+
raise RecceConfigException("Missing `code` in query")
|
|
46
|
+
|
|
47
|
+
api_token = decrypt_code(private_key, code)
|
|
48
|
+
if not RecceCloud(api_token).verify_token():
|
|
49
|
+
raise RecceConfigException("Invalid Recce Cloud API token")
|
|
50
|
+
|
|
51
|
+
update_recce_api_token(api_token)
|
|
52
|
+
update_onboarding_state(api_token, False)
|
|
53
|
+
|
|
54
|
+
return api_token # for testability/debugging
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def make_callback_handler(private_key: RSAPrivateKey):
|
|
58
|
+
class OneTimeHTTPRequestHandler(BaseHTTPRequestHandler):
|
|
59
|
+
def do_GET(self):
|
|
60
|
+
try:
|
|
61
|
+
with open(os.path.join(static_folder_path, "auth_callback.html"), "r") as f:
|
|
62
|
+
callback_html_content = f.read()
|
|
63
|
+
|
|
64
|
+
# Parse query parameters
|
|
65
|
+
parsed_url = urlparse(self.path)
|
|
66
|
+
|
|
67
|
+
handle_callback_request(parsed_url.query, private_key)
|
|
68
|
+
|
|
69
|
+
# Construct HTML content
|
|
70
|
+
self.send_response(200)
|
|
71
|
+
self.send_header("Content-Type", "text/html")
|
|
72
|
+
self.send_header("Content-Length", str(len(callback_html_content.encode())))
|
|
73
|
+
self.end_headers()
|
|
74
|
+
self.wfile.write(callback_html_content.encode())
|
|
75
|
+
|
|
76
|
+
except Exception:
|
|
77
|
+
console.print_exception()
|
|
78
|
+
self.send_response(500)
|
|
79
|
+
self.end_headers()
|
|
80
|
+
self.wfile.write(b"<h1>Internal Server Error</h1>")
|
|
81
|
+
finally:
|
|
82
|
+
# Shut down the server after handling the first request
|
|
83
|
+
# Shutdown in a new thread to avoid deadlock
|
|
84
|
+
self.server.server_close()
|
|
85
|
+
threading.Thread(target=self.server.shutdown, daemon=True).start()
|
|
86
|
+
|
|
87
|
+
def log_message(self, format, *args):
|
|
88
|
+
# Suppress default logging
|
|
89
|
+
return
|
|
90
|
+
|
|
91
|
+
return OneTimeHTTPRequestHandler
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def is_callback_server_running():
|
|
95
|
+
return _server_lock.locked()
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def get_connection_url():
|
|
99
|
+
return _connection_url
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def run_one_time_http_server(private_key: RSAPrivateKey, port=8080):
|
|
103
|
+
handler = make_callback_handler(private_key)
|
|
104
|
+
server = HTTPServer(("localhost", port), handler)
|
|
105
|
+
server.serve_forever()
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def prepare_connection_url(public_key: RSAPublicKey):
|
|
109
|
+
public_key_pem_bytes = public_key.public_bytes(
|
|
110
|
+
encoding=serialization.Encoding.PEM,
|
|
111
|
+
format=serialization.PublicFormat.SubjectPublicKeyInfo,
|
|
112
|
+
)
|
|
113
|
+
public_key_pem_str = base64.b64encode(public_key_pem_bytes).decode("utf-8")
|
|
114
|
+
callback_port = random.randint(10000, 15000)
|
|
115
|
+
connect_url = f"{RECCE_CLOUD_BASE_URL}/connect?_key={public_key_pem_str}&_port={callback_port}"
|
|
116
|
+
return connect_url, callback_port
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def generate_key_pair() -> Tuple[RSAPrivateKey, RSAPublicKey]:
|
|
120
|
+
key_size = 2048 # Should be at least 2048
|
|
121
|
+
|
|
122
|
+
private_key = rsa.generate_private_key(
|
|
123
|
+
public_exponent=65537, key_size=key_size, backend=default_backend() # Do not change
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
public_key = private_key.public_key()
|
|
127
|
+
return private_key, public_key
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def connect_to_cloud_background_task(private_key: RSAPrivateKey, callback_port, connection_url):
|
|
131
|
+
if is_callback_server_running():
|
|
132
|
+
return
|
|
133
|
+
|
|
134
|
+
with _server_lock:
|
|
135
|
+
global _connection_url
|
|
136
|
+
_connection_url = connection_url
|
|
137
|
+
run_one_time_http_server(private_key, callback_port)
|
|
138
|
+
_connection_url = None
|
recce/data/404.html
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/1b121dc4d36aeb4d.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/951e2e0eea2d4a5b.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-7b49d5ba7e3a434d.js"/><script src="/_next/static/chunks/86730205-cfb14e3f051bab35.js" async=""></script><script src="/_next/static/chunks/217-879a84d70f7a907c.js" async=""></script><script src="/_next/static/chunks/main-app-39061b0166c47f55.js" async=""></script><script src="/_next/static/chunks/9746af58-a42b7d169cacadf0.js" async=""></script><script src="/_next/static/chunks/47d8844f-929aed9b1c73a905.js" async=""></script><script src="/_next/static/chunks/a30376cd-de84559016d7e133.js" async=""></script><script src="/_next/static/chunks/6dc81886-adbfa45836061d79.js" async=""></script><script src="/_next/static/chunks/3a92ee20-1081c360214f9602.js" async=""></script><script src="/_next/static/chunks/3998a672-03adacad07b346ac.js" async=""></script><script src="/_next/static/chunks/1bff33f1-1ef85cf5e658a751.js" async=""></script><script src="/_next/static/chunks/bbda5537-9ec25eb1dd62348a.js" async=""></script><script src="/_next/static/chunks/42-cd3c06533f5fd47c.js" async=""></script><script src="/_next/static/chunks/608-3b079b544e5d5f5e.js" async=""></script><script src="/_next/static/chunks/92-7ab55ae02606193c.js" async=""></script><script src="/_next/static/chunks/app/layout-177a410a97e0d018.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>recce</title><meta name="description" content="Recce: Data validation toolkit for comprehensive PR review"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><style data-emotion="css-global dh58eu">:host,:root,[data-theme]{--chakra-ring-inset:var(--chakra-empty,/*!*/ /*!*/);--chakra-ring-offset-width:0px;--chakra-ring-offset-color:#fff;--chakra-ring-color:rgba(66, 153, 225, 0.6);--chakra-ring-offset-shadow:0 0 #0000;--chakra-ring-shadow:0 0 #0000;--chakra-space-x-reverse:0;--chakra-space-y-reverse:0;--chakra-colors-transparent:transparent;--chakra-colors-current:currentColor;--chakra-colors-black:#000000;--chakra-colors-white:#FFFFFF;--chakra-colors-whiteAlpha-50:rgba(255, 255, 255, 0.04);--chakra-colors-whiteAlpha-100:rgba(255, 255, 255, 0.06);--chakra-colors-whiteAlpha-200:rgba(255, 255, 255, 0.08);--chakra-colors-whiteAlpha-300:rgba(255, 255, 255, 0.16);--chakra-colors-whiteAlpha-400:rgba(255, 255, 255, 0.24);--chakra-colors-whiteAlpha-500:rgba(255, 255, 255, 0.36);--chakra-colors-whiteAlpha-600:rgba(255, 255, 255, 0.48);--chakra-colors-whiteAlpha-700:rgba(255, 255, 255, 0.64);--chakra-colors-whiteAlpha-800:rgba(255, 255, 255, 0.80);--chakra-colors-whiteAlpha-900:rgba(255, 255, 255, 0.92);--chakra-colors-blackAlpha-50:rgba(0, 0, 0, 0.04);--chakra-colors-blackAlpha-100:rgba(0, 0, 0, 0.06);--chakra-colors-blackAlpha-200:rgba(0, 0, 0, 0.08);--chakra-colors-blackAlpha-300:rgba(0, 0, 0, 0.16);--chakra-colors-blackAlpha-400:rgba(0, 0, 0, 0.24);--chakra-colors-blackAlpha-500:rgba(0, 0, 0, 0.36);--chakra-colors-blackAlpha-600:rgba(0, 0, 0, 0.48);--chakra-colors-blackAlpha-700:rgba(0, 0, 0, 0.64);--chakra-colors-blackAlpha-800:rgba(0, 0, 0, 0.80);--chakra-colors-blackAlpha-900:rgba(0, 0, 0, 0.92);--chakra-colors-gray-50:#F7FAFC;--chakra-colors-gray-100:#EDF2F7;--chakra-colors-gray-200:#E2E8F0;--chakra-colors-gray-300:#CBD5E0;--chakra-colors-gray-400:#A0AEC0;--chakra-colors-gray-500:#718096;--chakra-colors-gray-600:#4A5568;--chakra-colors-gray-700:#2D3748;--chakra-colors-gray-800:#1A202C;--chakra-colors-gray-900:#171923;--chakra-colors-red-50:#FFF5F5;--chakra-colors-red-100:#FED7D7;--chakra-colors-red-200:#FEB2B2;--chakra-colors-red-300:#FC8181;--chakra-colors-red-400:#F56565;--chakra-colors-red-500:#E53E3E;--chakra-colors-red-600:#C53030;--chakra-colors-red-700:#9B2C2C;--chakra-colors-red-800:#822727;--chakra-colors-red-900:#63171B;--chakra-colors-orange-50:#FFFAF0;--chakra-colors-orange-100:#FEEBC8;--chakra-colors-orange-200:#FBD38D;--chakra-colors-orange-300:#F6AD55;--chakra-colors-orange-400:#ED8936;--chakra-colors-orange-500:#DD6B20;--chakra-colors-orange-600:#C05621;--chakra-colors-orange-700:#9C4221;--chakra-colors-orange-800:#7B341E;--chakra-colors-orange-900:#652B19;--chakra-colors-yellow-50:#FFFFF0;--chakra-colors-yellow-100:#FEFCBF;--chakra-colors-yellow-200:#FAF089;--chakra-colors-yellow-300:#F6E05E;--chakra-colors-yellow-400:#ECC94B;--chakra-colors-yellow-500:#D69E2E;--chakra-colors-yellow-600:#B7791F;--chakra-colors-yellow-700:#975A16;--chakra-colors-yellow-800:#744210;--chakra-colors-yellow-900:#5F370E;--chakra-colors-green-50:#F0FFF4;--chakra-colors-green-100:#C6F6D5;--chakra-colors-green-200:#9AE6B4;--chakra-colors-green-300:#68D391;--chakra-colors-green-400:#48BB78;--chakra-colors-green-500:#38A169;--chakra-colors-green-600:#2F855A;--chakra-colors-green-700:#276749;--chakra-colors-green-800:#22543D;--chakra-colors-green-900:#1C4532;--chakra-colors-teal-50:#E6FFFA;--chakra-colors-teal-100:#B2F5EA;--chakra-colors-teal-200:#81E6D9;--chakra-colors-teal-300:#4FD1C5;--chakra-colors-teal-400:#38B2AC;--chakra-colors-teal-500:#319795;--chakra-colors-teal-600:#2C7A7B;--chakra-colors-teal-700:#285E61;--chakra-colors-teal-800:#234E52;--chakra-colors-teal-900:#1D4044;--chakra-colors-blue-50:#ebf8ff;--chakra-colors-blue-100:#bee3f8;--chakra-colors-blue-200:#90cdf4;--chakra-colors-blue-300:#63b3ed;--chakra-colors-blue-400:#4299e1;--chakra-colors-blue-500:#3182ce;--chakra-colors-blue-600:#2b6cb0;--chakra-colors-blue-700:#2c5282;--chakra-colors-blue-800:#2a4365;--chakra-colors-blue-900:#1A365D;--chakra-colors-cyan-50:#EDFDFD;--chakra-colors-cyan-100:#C4F1F9;--chakra-colors-cyan-200:#9DECF9;--chakra-colors-cyan-300:#76E4F7;--chakra-colors-cyan-400:#0BC5EA;--chakra-colors-cyan-500:#00B5D8;--chakra-colors-cyan-600:#00A3C4;--chakra-colors-cyan-700:#0987A0;--chakra-colors-cyan-800:#086F83;--chakra-colors-cyan-900:#065666;--chakra-colors-purple-50:#FAF5FF;--chakra-colors-purple-100:#E9D8FD;--chakra-colors-purple-200:#D6BCFA;--chakra-colors-purple-300:#B794F4;--chakra-colors-purple-400:#9F7AEA;--chakra-colors-purple-500:#805AD5;--chakra-colors-purple-600:#6B46C1;--chakra-colors-purple-700:#553C9A;--chakra-colors-purple-800:#44337A;--chakra-colors-purple-900:#322659;--chakra-colors-pink-50:#FFF5F7;--chakra-colors-pink-100:#FED7E2;--chakra-colors-pink-200:#FBB6CE;--chakra-colors-pink-300:#F687B3;--chakra-colors-pink-400:#ED64A6;--chakra-colors-pink-500:#D53F8C;--chakra-colors-pink-600:#B83280;--chakra-colors-pink-700:#97266D;--chakra-colors-pink-800:#702459;--chakra-colors-pink-900:#521B41;--chakra-colors-brand-100:#fd683e;--chakra-colors-brand-200:#fd683e;--chakra-colors-brand-300:#fd683e;--chakra-colors-brand-400:#fd683e;--chakra-colors-brand-500:#fd683e;--chakra-colors-brand-600:#fd683e;--chakra-colors-brand-700:#fd683e;--chakra-colors-brand-800:#fd683e;--chakra-colors-brand-900:#fd683e;--chakra-borders-none:0;--chakra-borders-1px:1px solid;--chakra-borders-2px:2px solid;--chakra-borders-4px:4px solid;--chakra-borders-8px:8px solid;--chakra-fonts-heading:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--chakra-fonts-body:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--chakra-fonts-mono:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--chakra-fontSizes-3xs:0.45rem;--chakra-fontSizes-2xs:0.625rem;--chakra-fontSizes-xs:0.75rem;--chakra-fontSizes-sm:0.875rem;--chakra-fontSizes-md:1rem;--chakra-fontSizes-lg:1.125rem;--chakra-fontSizes-xl:1.25rem;--chakra-fontSizes-2xl:1.5rem;--chakra-fontSizes-3xl:1.875rem;--chakra-fontSizes-4xl:2.25rem;--chakra-fontSizes-5xl:3rem;--chakra-fontSizes-6xl:3.75rem;--chakra-fontSizes-7xl:4.5rem;--chakra-fontSizes-8xl:6rem;--chakra-fontSizes-9xl:8rem;--chakra-fontWeights-hairline:100;--chakra-fontWeights-thin:200;--chakra-fontWeights-light:300;--chakra-fontWeights-normal:400;--chakra-fontWeights-medium:500;--chakra-fontWeights-semibold:600;--chakra-fontWeights-bold:700;--chakra-fontWeights-extrabold:800;--chakra-fontWeights-black:900;--chakra-letterSpacings-tighter:-0.05em;--chakra-letterSpacings-tight:-0.025em;--chakra-letterSpacings-normal:0;--chakra-letterSpacings-wide:0.025em;--chakra-letterSpacings-wider:0.05em;--chakra-letterSpacings-widest:0.1em;--chakra-lineHeights-3:.75rem;--chakra-lineHeights-4:1rem;--chakra-lineHeights-5:1.25rem;--chakra-lineHeights-6:1.5rem;--chakra-lineHeights-7:1.75rem;--chakra-lineHeights-8:2rem;--chakra-lineHeights-9:2.25rem;--chakra-lineHeights-10:2.5rem;--chakra-lineHeights-normal:normal;--chakra-lineHeights-none:1;--chakra-lineHeights-shorter:1.25;--chakra-lineHeights-short:1.375;--chakra-lineHeights-base:1.5;--chakra-lineHeights-tall:1.625;--chakra-lineHeights-taller:2;--chakra-radii-none:0;--chakra-radii-sm:0.125rem;--chakra-radii-base:0.25rem;--chakra-radii-md:0.375rem;--chakra-radii-lg:0.5rem;--chakra-radii-xl:0.75rem;--chakra-radii-2xl:1rem;--chakra-radii-3xl:1.5rem;--chakra-radii-full:9999px;--chakra-space-1:0.25rem;--chakra-space-2:0.5rem;--chakra-space-3:0.75rem;--chakra-space-4:1rem;--chakra-space-5:1.25rem;--chakra-space-6:1.5rem;--chakra-space-7:1.75rem;--chakra-space-8:2rem;--chakra-space-9:2.25rem;--chakra-space-10:2.5rem;--chakra-space-12:3rem;--chakra-space-14:3.5rem;--chakra-space-16:4rem;--chakra-space-20:5rem;--chakra-space-24:6rem;--chakra-space-28:7rem;--chakra-space-32:8rem;--chakra-space-36:9rem;--chakra-space-40:10rem;--chakra-space-44:11rem;--chakra-space-48:12rem;--chakra-space-52:13rem;--chakra-space-56:14rem;--chakra-space-60:15rem;--chakra-space-64:16rem;--chakra-space-72:18rem;--chakra-space-80:20rem;--chakra-space-96:24rem;--chakra-space-px:1px;--chakra-space-0-5:0.125rem;--chakra-space-1-5:0.375rem;--chakra-space-2-5:0.625rem;--chakra-space-3-5:0.875rem;--chakra-shadows-xs:0 0 0 1px rgba(0, 0, 0, 0.05);--chakra-shadows-sm:0 1px 2px 0 rgba(0, 0, 0, 0.05);--chakra-shadows-base:0 1px 3px 0 rgba(0, 0, 0, 0.1),0 1px 2px 0 rgba(0, 0, 0, 0.06);--chakra-shadows-md:0 4px 6px -1px rgba(0, 0, 0, 0.1),0 2px 4px -1px rgba(0, 0, 0, 0.06);--chakra-shadows-lg:0 10px 15px -3px rgba(0, 0, 0, 0.1),0 4px 6px -2px rgba(0, 0, 0, 0.05);--chakra-shadows-xl:0 20px 25px -5px rgba(0, 0, 0, 0.1),0 10px 10px -5px rgba(0, 0, 0, 0.04);--chakra-shadows-2xl:0 25px 50px -12px rgba(0, 0, 0, 0.25);--chakra-shadows-outline:0 0 0 3px rgba(66, 153, 225, 0.6);--chakra-shadows-inner:inset 0 2px 4px 0 rgba(0,0,0,0.06);--chakra-shadows-none:none;--chakra-shadows-dark-lg:rgba(0, 0, 0, 0.1) 0px 0px 0px 1px,rgba(0, 0, 0, 0.2) 0px 5px 10px,rgba(0, 0, 0, 0.4) 0px 15px 40px;--chakra-sizes-1:0.25rem;--chakra-sizes-2:0.5rem;--chakra-sizes-3:0.75rem;--chakra-sizes-4:1rem;--chakra-sizes-5:1.25rem;--chakra-sizes-6:1.5rem;--chakra-sizes-7:1.75rem;--chakra-sizes-8:2rem;--chakra-sizes-9:2.25rem;--chakra-sizes-10:2.5rem;--chakra-sizes-12:3rem;--chakra-sizes-14:3.5rem;--chakra-sizes-16:4rem;--chakra-sizes-20:5rem;--chakra-sizes-24:6rem;--chakra-sizes-28:7rem;--chakra-sizes-32:8rem;--chakra-sizes-36:9rem;--chakra-sizes-40:10rem;--chakra-sizes-44:11rem;--chakra-sizes-48:12rem;--chakra-sizes-52:13rem;--chakra-sizes-56:14rem;--chakra-sizes-60:15rem;--chakra-sizes-64:16rem;--chakra-sizes-72:18rem;--chakra-sizes-80:20rem;--chakra-sizes-96:24rem;--chakra-sizes-px:1px;--chakra-sizes-0-5:0.125rem;--chakra-sizes-1-5:0.375rem;--chakra-sizes-2-5:0.625rem;--chakra-sizes-3-5:0.875rem;--chakra-sizes-max:max-content;--chakra-sizes-min:min-content;--chakra-sizes-full:100%;--chakra-sizes-3xs:14rem;--chakra-sizes-2xs:16rem;--chakra-sizes-xs:20rem;--chakra-sizes-sm:24rem;--chakra-sizes-md:28rem;--chakra-sizes-lg:32rem;--chakra-sizes-xl:36rem;--chakra-sizes-2xl:42rem;--chakra-sizes-3xl:48rem;--chakra-sizes-4xl:56rem;--chakra-sizes-5xl:64rem;--chakra-sizes-6xl:72rem;--chakra-sizes-7xl:80rem;--chakra-sizes-8xl:90rem;--chakra-sizes-prose:60ch;--chakra-sizes-container-sm:640px;--chakra-sizes-container-md:768px;--chakra-sizes-container-lg:1024px;--chakra-sizes-container-xl:1280px;--chakra-zIndices-hide:-1;--chakra-zIndices-auto:auto;--chakra-zIndices-base:0;--chakra-zIndices-docked:10;--chakra-zIndices-dropdown:1000;--chakra-zIndices-sticky:1100;--chakra-zIndices-banner:1200;--chakra-zIndices-overlay:1300;--chakra-zIndices-modal:1400;--chakra-zIndices-popover:1500;--chakra-zIndices-skipLink:1600;--chakra-zIndices-toast:1700;--chakra-zIndices-tooltip:1800;--chakra-transition-property-common:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;--chakra-transition-property-colors:background-color,border-color,color,fill,stroke;--chakra-transition-property-dimensions:width,height;--chakra-transition-property-position:left,right,top,bottom;--chakra-transition-property-background:background-color,background-image,background-position;--chakra-transition-easing-ease-in:cubic-bezier(0.4, 0, 1, 1);--chakra-transition-easing-ease-out:cubic-bezier(0, 0, 0.2, 1);--chakra-transition-easing-ease-in-out:cubic-bezier(0.4, 0, 0.2, 1);--chakra-transition-duration-ultra-fast:50ms;--chakra-transition-duration-faster:100ms;--chakra-transition-duration-fast:150ms;--chakra-transition-duration-normal:200ms;--chakra-transition-duration-slow:300ms;--chakra-transition-duration-slower:400ms;--chakra-transition-duration-ultra-slow:500ms;--chakra-blur-none:0;--chakra-blur-sm:4px;--chakra-blur-base:8px;--chakra-blur-md:12px;--chakra-blur-lg:16px;--chakra-blur-xl:24px;--chakra-blur-2xl:40px;--chakra-blur-3xl:64px;--chakra-breakpoints-base:0em;--chakra-breakpoints-sm:30em;--chakra-breakpoints-md:48em;--chakra-breakpoints-lg:62em;--chakra-breakpoints-xl:80em;--chakra-breakpoints-2xl:96em;}.chakra-ui-light :host:not([data-theme]),.chakra-ui-light :root:not([data-theme]),.chakra-ui-light [data-theme]:not([data-theme]),[data-theme=light] :host:not([data-theme]),[data-theme=light] :root:not([data-theme]),[data-theme=light] [data-theme]:not([data-theme]),:host[data-theme=light],:root[data-theme=light],[data-theme][data-theme=light]{--chakra-colors-chakra-body-text:var(--chakra-colors-gray-800);--chakra-colors-chakra-body-bg:var(--chakra-colors-white);--chakra-colors-chakra-border-color:var(--chakra-colors-gray-200);--chakra-colors-chakra-inverse-text:var(--chakra-colors-white);--chakra-colors-chakra-subtle-bg:var(--chakra-colors-gray-100);--chakra-colors-chakra-subtle-text:var(--chakra-colors-gray-600);--chakra-colors-chakra-placeholder-color:var(--chakra-colors-gray-500);}.chakra-ui-dark :host:not([data-theme]),.chakra-ui-dark :root:not([data-theme]),.chakra-ui-dark [data-theme]:not([data-theme]),[data-theme=dark] :host:not([data-theme]),[data-theme=dark] :root:not([data-theme]),[data-theme=dark] [data-theme]:not([data-theme]),:host[data-theme=dark],:root[data-theme=dark],[data-theme][data-theme=dark]{--chakra-colors-chakra-body-text:var(--chakra-colors-whiteAlpha-900);--chakra-colors-chakra-body-bg:var(--chakra-colors-gray-800);--chakra-colors-chakra-border-color:var(--chakra-colors-whiteAlpha-300);--chakra-colors-chakra-inverse-text:var(--chakra-colors-gray-800);--chakra-colors-chakra-subtle-bg:var(--chakra-colors-gray-700);--chakra-colors-chakra-subtle-text:var(--chakra-colors-gray-400);--chakra-colors-chakra-placeholder-color:var(--chakra-colors-whiteAlpha-400);}</style><style data-emotion="css-global fubdgu">html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:system-ui,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;touch-action:manipulation;}body{position:relative;min-height:100%;margin:0;font-feature-settings:"kern";}:where(*, *::before, *::after){border-width:0;border-style:solid;box-sizing:border-box;word-wrap:break-word;}main{display:block;}hr{border-top-width:1px;box-sizing:content-box;height:0;overflow:visible;}:where(pre, code, kbd,samp){font-family:SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:1em;}a{background-color:transparent;color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit;}abbr[title]{border-bottom:none;-webkit-text-decoration:underline;text-decoration:underline;-webkit-text-decoration:underline dotted;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;}:where(b, strong){font-weight:bold;}small{font-size:80%;}:where(sub,sup){font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sub{bottom:-0.25em;}sup{top:-0.5em;}img{border-style:none;}:where(button, input, optgroup, select, textarea){font-family:inherit;font-size:100%;line-height:1.15;margin:0;}:where(button, input){overflow:visible;}:where(button, select){text-transform:none;}:where(
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/1b121dc4d36aeb4d.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/951e2e0eea2d4a5b.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-7b49d5ba7e3a434d.js"/><script src="/_next/static/chunks/86730205-cfb14e3f051bab35.js" async=""></script><script src="/_next/static/chunks/217-879a84d70f7a907c.js" async=""></script><script src="/_next/static/chunks/main-app-39061b0166c47f55.js" async=""></script><script src="/_next/static/chunks/9746af58-a42b7d169cacadf0.js" async=""></script><script src="/_next/static/chunks/47d8844f-929aed9b1c73a905.js" async=""></script><script src="/_next/static/chunks/a30376cd-de84559016d7e133.js" async=""></script><script src="/_next/static/chunks/6dc81886-adbfa45836061d79.js" async=""></script><script src="/_next/static/chunks/3a92ee20-1081c360214f9602.js" async=""></script><script src="/_next/static/chunks/3998a672-03adacad07b346ac.js" async=""></script><script src="/_next/static/chunks/1bff33f1-1ef85cf5e658a751.js" async=""></script><script src="/_next/static/chunks/bbda5537-9ec25eb1dd62348a.js" async=""></script><script src="/_next/static/chunks/42-cd3c06533f5fd47c.js" async=""></script><script src="/_next/static/chunks/608-3b079b544e5d5f5e.js" async=""></script><script src="/_next/static/chunks/92-607cd1af83c41f43.js" async=""></script><script src="/_next/static/chunks/app/layout-177a410a97e0d018.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>recce</title><meta name="description" content="Recce: Data validation toolkit for comprehensive PR review"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><style data-emotion="css-global dh58eu">:host,:root,[data-theme]{--chakra-ring-inset:var(--chakra-empty,/*!*/ /*!*/);--chakra-ring-offset-width:0px;--chakra-ring-offset-color:#fff;--chakra-ring-color:rgba(66, 153, 225, 0.6);--chakra-ring-offset-shadow:0 0 #0000;--chakra-ring-shadow:0 0 #0000;--chakra-space-x-reverse:0;--chakra-space-y-reverse:0;--chakra-colors-transparent:transparent;--chakra-colors-current:currentColor;--chakra-colors-black:#000000;--chakra-colors-white:#FFFFFF;--chakra-colors-whiteAlpha-50:rgba(255, 255, 255, 0.04);--chakra-colors-whiteAlpha-100:rgba(255, 255, 255, 0.06);--chakra-colors-whiteAlpha-200:rgba(255, 255, 255, 0.08);--chakra-colors-whiteAlpha-300:rgba(255, 255, 255, 0.16);--chakra-colors-whiteAlpha-400:rgba(255, 255, 255, 0.24);--chakra-colors-whiteAlpha-500:rgba(255, 255, 255, 0.36);--chakra-colors-whiteAlpha-600:rgba(255, 255, 255, 0.48);--chakra-colors-whiteAlpha-700:rgba(255, 255, 255, 0.64);--chakra-colors-whiteAlpha-800:rgba(255, 255, 255, 0.80);--chakra-colors-whiteAlpha-900:rgba(255, 255, 255, 0.92);--chakra-colors-blackAlpha-50:rgba(0, 0, 0, 0.04);--chakra-colors-blackAlpha-100:rgba(0, 0, 0, 0.06);--chakra-colors-blackAlpha-200:rgba(0, 0, 0, 0.08);--chakra-colors-blackAlpha-300:rgba(0, 0, 0, 0.16);--chakra-colors-blackAlpha-400:rgba(0, 0, 0, 0.24);--chakra-colors-blackAlpha-500:rgba(0, 0, 0, 0.36);--chakra-colors-blackAlpha-600:rgba(0, 0, 0, 0.48);--chakra-colors-blackAlpha-700:rgba(0, 0, 0, 0.64);--chakra-colors-blackAlpha-800:rgba(0, 0, 0, 0.80);--chakra-colors-blackAlpha-900:rgba(0, 0, 0, 0.92);--chakra-colors-gray-50:#F7FAFC;--chakra-colors-gray-100:#EDF2F7;--chakra-colors-gray-200:#E2E8F0;--chakra-colors-gray-300:#CBD5E0;--chakra-colors-gray-400:#A0AEC0;--chakra-colors-gray-500:#718096;--chakra-colors-gray-600:#4A5568;--chakra-colors-gray-700:#2D3748;--chakra-colors-gray-800:#1A202C;--chakra-colors-gray-900:#171923;--chakra-colors-red-50:#FFF5F5;--chakra-colors-red-100:#FED7D7;--chakra-colors-red-200:#FEB2B2;--chakra-colors-red-300:#FC8181;--chakra-colors-red-400:#F56565;--chakra-colors-red-500:#E53E3E;--chakra-colors-red-600:#C53030;--chakra-colors-red-700:#9B2C2C;--chakra-colors-red-800:#822727;--chakra-colors-red-900:#63171B;--chakra-colors-orange-50:#FFFAF0;--chakra-colors-orange-100:#FEEBC8;--chakra-colors-orange-200:#FBD38D;--chakra-colors-orange-300:#F6AD55;--chakra-colors-orange-400:#ED8936;--chakra-colors-orange-500:#DD6B20;--chakra-colors-orange-600:#C05621;--chakra-colors-orange-700:#9C4221;--chakra-colors-orange-800:#7B341E;--chakra-colors-orange-900:#652B19;--chakra-colors-yellow-50:#FFFFF0;--chakra-colors-yellow-100:#FEFCBF;--chakra-colors-yellow-200:#FAF089;--chakra-colors-yellow-300:#F6E05E;--chakra-colors-yellow-400:#ECC94B;--chakra-colors-yellow-500:#D69E2E;--chakra-colors-yellow-600:#B7791F;--chakra-colors-yellow-700:#975A16;--chakra-colors-yellow-800:#744210;--chakra-colors-yellow-900:#5F370E;--chakra-colors-green-50:#F0FFF4;--chakra-colors-green-100:#C6F6D5;--chakra-colors-green-200:#9AE6B4;--chakra-colors-green-300:#68D391;--chakra-colors-green-400:#48BB78;--chakra-colors-green-500:#38A169;--chakra-colors-green-600:#2F855A;--chakra-colors-green-700:#276749;--chakra-colors-green-800:#22543D;--chakra-colors-green-900:#1C4532;--chakra-colors-teal-50:#E6FFFA;--chakra-colors-teal-100:#B2F5EA;--chakra-colors-teal-200:#81E6D9;--chakra-colors-teal-300:#4FD1C5;--chakra-colors-teal-400:#38B2AC;--chakra-colors-teal-500:#319795;--chakra-colors-teal-600:#2C7A7B;--chakra-colors-teal-700:#285E61;--chakra-colors-teal-800:#234E52;--chakra-colors-teal-900:#1D4044;--chakra-colors-blue-50:#ebf8ff;--chakra-colors-blue-100:#bee3f8;--chakra-colors-blue-200:#90cdf4;--chakra-colors-blue-300:#63b3ed;--chakra-colors-blue-400:#4299e1;--chakra-colors-blue-500:#3182ce;--chakra-colors-blue-600:#2b6cb0;--chakra-colors-blue-700:#2c5282;--chakra-colors-blue-800:#2a4365;--chakra-colors-blue-900:#1A365D;--chakra-colors-cyan-50:#EDFDFD;--chakra-colors-cyan-100:#C4F1F9;--chakra-colors-cyan-200:#9DECF9;--chakra-colors-cyan-300:#76E4F7;--chakra-colors-cyan-400:#0BC5EA;--chakra-colors-cyan-500:#00B5D8;--chakra-colors-cyan-600:#00A3C4;--chakra-colors-cyan-700:#0987A0;--chakra-colors-cyan-800:#086F83;--chakra-colors-cyan-900:#065666;--chakra-colors-purple-50:#FAF5FF;--chakra-colors-purple-100:#E9D8FD;--chakra-colors-purple-200:#D6BCFA;--chakra-colors-purple-300:#B794F4;--chakra-colors-purple-400:#9F7AEA;--chakra-colors-purple-500:#805AD5;--chakra-colors-purple-600:#6B46C1;--chakra-colors-purple-700:#553C9A;--chakra-colors-purple-800:#44337A;--chakra-colors-purple-900:#322659;--chakra-colors-pink-50:#FFF5F7;--chakra-colors-pink-100:#FED7E2;--chakra-colors-pink-200:#FBB6CE;--chakra-colors-pink-300:#F687B3;--chakra-colors-pink-400:#ED64A6;--chakra-colors-pink-500:#D53F8C;--chakra-colors-pink-600:#B83280;--chakra-colors-pink-700:#97266D;--chakra-colors-pink-800:#702459;--chakra-colors-pink-900:#521B41;--chakra-colors-brand-100:#fd683e;--chakra-colors-brand-200:#fd683e;--chakra-colors-brand-300:#fd683e;--chakra-colors-brand-400:#fd683e;--chakra-colors-brand-500:#fd683e;--chakra-colors-brand-600:#fd683e;--chakra-colors-brand-700:#fd683e;--chakra-colors-brand-800:#fd683e;--chakra-colors-brand-900:#fd683e;--chakra-borders-none:0;--chakra-borders-1px:1px solid;--chakra-borders-2px:2px solid;--chakra-borders-4px:4px solid;--chakra-borders-8px:8px solid;--chakra-fonts-heading:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--chakra-fonts-body:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--chakra-fonts-mono:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--chakra-fontSizes-3xs:0.45rem;--chakra-fontSizes-2xs:0.625rem;--chakra-fontSizes-xs:0.75rem;--chakra-fontSizes-sm:0.875rem;--chakra-fontSizes-md:1rem;--chakra-fontSizes-lg:1.125rem;--chakra-fontSizes-xl:1.25rem;--chakra-fontSizes-2xl:1.5rem;--chakra-fontSizes-3xl:1.875rem;--chakra-fontSizes-4xl:2.25rem;--chakra-fontSizes-5xl:3rem;--chakra-fontSizes-6xl:3.75rem;--chakra-fontSizes-7xl:4.5rem;--chakra-fontSizes-8xl:6rem;--chakra-fontSizes-9xl:8rem;--chakra-fontWeights-hairline:100;--chakra-fontWeights-thin:200;--chakra-fontWeights-light:300;--chakra-fontWeights-normal:400;--chakra-fontWeights-medium:500;--chakra-fontWeights-semibold:600;--chakra-fontWeights-bold:700;--chakra-fontWeights-extrabold:800;--chakra-fontWeights-black:900;--chakra-letterSpacings-tighter:-0.05em;--chakra-letterSpacings-tight:-0.025em;--chakra-letterSpacings-normal:0;--chakra-letterSpacings-wide:0.025em;--chakra-letterSpacings-wider:0.05em;--chakra-letterSpacings-widest:0.1em;--chakra-lineHeights-3:.75rem;--chakra-lineHeights-4:1rem;--chakra-lineHeights-5:1.25rem;--chakra-lineHeights-6:1.5rem;--chakra-lineHeights-7:1.75rem;--chakra-lineHeights-8:2rem;--chakra-lineHeights-9:2.25rem;--chakra-lineHeights-10:2.5rem;--chakra-lineHeights-normal:normal;--chakra-lineHeights-none:1;--chakra-lineHeights-shorter:1.25;--chakra-lineHeights-short:1.375;--chakra-lineHeights-base:1.5;--chakra-lineHeights-tall:1.625;--chakra-lineHeights-taller:2;--chakra-radii-none:0;--chakra-radii-sm:0.125rem;--chakra-radii-base:0.25rem;--chakra-radii-md:0.375rem;--chakra-radii-lg:0.5rem;--chakra-radii-xl:0.75rem;--chakra-radii-2xl:1rem;--chakra-radii-3xl:1.5rem;--chakra-radii-full:9999px;--chakra-space-1:0.25rem;--chakra-space-2:0.5rem;--chakra-space-3:0.75rem;--chakra-space-4:1rem;--chakra-space-5:1.25rem;--chakra-space-6:1.5rem;--chakra-space-7:1.75rem;--chakra-space-8:2rem;--chakra-space-9:2.25rem;--chakra-space-10:2.5rem;--chakra-space-12:3rem;--chakra-space-14:3.5rem;--chakra-space-16:4rem;--chakra-space-20:5rem;--chakra-space-24:6rem;--chakra-space-28:7rem;--chakra-space-32:8rem;--chakra-space-36:9rem;--chakra-space-40:10rem;--chakra-space-44:11rem;--chakra-space-48:12rem;--chakra-space-52:13rem;--chakra-space-56:14rem;--chakra-space-60:15rem;--chakra-space-64:16rem;--chakra-space-72:18rem;--chakra-space-80:20rem;--chakra-space-96:24rem;--chakra-space-px:1px;--chakra-space-0-5:0.125rem;--chakra-space-1-5:0.375rem;--chakra-space-2-5:0.625rem;--chakra-space-3-5:0.875rem;--chakra-shadows-xs:0 0 0 1px rgba(0, 0, 0, 0.05);--chakra-shadows-sm:0 1px 2px 0 rgba(0, 0, 0, 0.05);--chakra-shadows-base:0 1px 3px 0 rgba(0, 0, 0, 0.1),0 1px 2px 0 rgba(0, 0, 0, 0.06);--chakra-shadows-md:0 4px 6px -1px rgba(0, 0, 0, 0.1),0 2px 4px -1px rgba(0, 0, 0, 0.06);--chakra-shadows-lg:0 10px 15px -3px rgba(0, 0, 0, 0.1),0 4px 6px -2px rgba(0, 0, 0, 0.05);--chakra-shadows-xl:0 20px 25px -5px rgba(0, 0, 0, 0.1),0 10px 10px -5px rgba(0, 0, 0, 0.04);--chakra-shadows-2xl:0 25px 50px -12px rgba(0, 0, 0, 0.25);--chakra-shadows-outline:0 0 0 3px rgba(66, 153, 225, 0.6);--chakra-shadows-inner:inset 0 2px 4px 0 rgba(0,0,0,0.06);--chakra-shadows-none:none;--chakra-shadows-dark-lg:rgba(0, 0, 0, 0.1) 0px 0px 0px 1px,rgba(0, 0, 0, 0.2) 0px 5px 10px,rgba(0, 0, 0, 0.4) 0px 15px 40px;--chakra-sizes-1:0.25rem;--chakra-sizes-2:0.5rem;--chakra-sizes-3:0.75rem;--chakra-sizes-4:1rem;--chakra-sizes-5:1.25rem;--chakra-sizes-6:1.5rem;--chakra-sizes-7:1.75rem;--chakra-sizes-8:2rem;--chakra-sizes-9:2.25rem;--chakra-sizes-10:2.5rem;--chakra-sizes-12:3rem;--chakra-sizes-14:3.5rem;--chakra-sizes-16:4rem;--chakra-sizes-20:5rem;--chakra-sizes-24:6rem;--chakra-sizes-28:7rem;--chakra-sizes-32:8rem;--chakra-sizes-36:9rem;--chakra-sizes-40:10rem;--chakra-sizes-44:11rem;--chakra-sizes-48:12rem;--chakra-sizes-52:13rem;--chakra-sizes-56:14rem;--chakra-sizes-60:15rem;--chakra-sizes-64:16rem;--chakra-sizes-72:18rem;--chakra-sizes-80:20rem;--chakra-sizes-96:24rem;--chakra-sizes-px:1px;--chakra-sizes-0-5:0.125rem;--chakra-sizes-1-5:0.375rem;--chakra-sizes-2-5:0.625rem;--chakra-sizes-3-5:0.875rem;--chakra-sizes-max:max-content;--chakra-sizes-min:min-content;--chakra-sizes-full:100%;--chakra-sizes-3xs:14rem;--chakra-sizes-2xs:16rem;--chakra-sizes-xs:20rem;--chakra-sizes-sm:24rem;--chakra-sizes-md:28rem;--chakra-sizes-lg:32rem;--chakra-sizes-xl:36rem;--chakra-sizes-2xl:42rem;--chakra-sizes-3xl:48rem;--chakra-sizes-4xl:56rem;--chakra-sizes-5xl:64rem;--chakra-sizes-6xl:72rem;--chakra-sizes-7xl:80rem;--chakra-sizes-8xl:90rem;--chakra-sizes-prose:60ch;--chakra-sizes-container-sm:640px;--chakra-sizes-container-md:768px;--chakra-sizes-container-lg:1024px;--chakra-sizes-container-xl:1280px;--chakra-zIndices-hide:-1;--chakra-zIndices-auto:auto;--chakra-zIndices-base:0;--chakra-zIndices-docked:10;--chakra-zIndices-dropdown:1000;--chakra-zIndices-sticky:1100;--chakra-zIndices-banner:1200;--chakra-zIndices-overlay:1300;--chakra-zIndices-modal:1400;--chakra-zIndices-popover:1500;--chakra-zIndices-skipLink:1600;--chakra-zIndices-toast:1700;--chakra-zIndices-tooltip:1800;--chakra-transition-property-common:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;--chakra-transition-property-colors:background-color,border-color,color,fill,stroke;--chakra-transition-property-dimensions:width,height;--chakra-transition-property-position:left,right,top,bottom;--chakra-transition-property-background:background-color,background-image,background-position;--chakra-transition-easing-ease-in:cubic-bezier(0.4, 0, 1, 1);--chakra-transition-easing-ease-out:cubic-bezier(0, 0, 0.2, 1);--chakra-transition-easing-ease-in-out:cubic-bezier(0.4, 0, 0.2, 1);--chakra-transition-duration-ultra-fast:50ms;--chakra-transition-duration-faster:100ms;--chakra-transition-duration-fast:150ms;--chakra-transition-duration-normal:200ms;--chakra-transition-duration-slow:300ms;--chakra-transition-duration-slower:400ms;--chakra-transition-duration-ultra-slow:500ms;--chakra-blur-none:0;--chakra-blur-sm:4px;--chakra-blur-base:8px;--chakra-blur-md:12px;--chakra-blur-lg:16px;--chakra-blur-xl:24px;--chakra-blur-2xl:40px;--chakra-blur-3xl:64px;--chakra-breakpoints-base:0em;--chakra-breakpoints-sm:30em;--chakra-breakpoints-md:48em;--chakra-breakpoints-lg:62em;--chakra-breakpoints-xl:80em;--chakra-breakpoints-2xl:96em;}.chakra-ui-light :host:not([data-theme]),.chakra-ui-light :root:not([data-theme]),.chakra-ui-light [data-theme]:not([data-theme]),[data-theme=light] :host:not([data-theme]),[data-theme=light] :root:not([data-theme]),[data-theme=light] [data-theme]:not([data-theme]),:host[data-theme=light],:root[data-theme=light],[data-theme][data-theme=light]{--chakra-colors-chakra-body-text:var(--chakra-colors-gray-800);--chakra-colors-chakra-body-bg:var(--chakra-colors-white);--chakra-colors-chakra-border-color:var(--chakra-colors-gray-200);--chakra-colors-chakra-inverse-text:var(--chakra-colors-white);--chakra-colors-chakra-subtle-bg:var(--chakra-colors-gray-100);--chakra-colors-chakra-subtle-text:var(--chakra-colors-gray-600);--chakra-colors-chakra-placeholder-color:var(--chakra-colors-gray-500);}.chakra-ui-dark :host:not([data-theme]),.chakra-ui-dark :root:not([data-theme]),.chakra-ui-dark [data-theme]:not([data-theme]),[data-theme=dark] :host:not([data-theme]),[data-theme=dark] :root:not([data-theme]),[data-theme=dark] [data-theme]:not([data-theme]),:host[data-theme=dark],:root[data-theme=dark],[data-theme][data-theme=dark]{--chakra-colors-chakra-body-text:var(--chakra-colors-whiteAlpha-900);--chakra-colors-chakra-body-bg:var(--chakra-colors-gray-800);--chakra-colors-chakra-border-color:var(--chakra-colors-whiteAlpha-300);--chakra-colors-chakra-inverse-text:var(--chakra-colors-gray-800);--chakra-colors-chakra-subtle-bg:var(--chakra-colors-gray-700);--chakra-colors-chakra-subtle-text:var(--chakra-colors-gray-400);--chakra-colors-chakra-placeholder-color:var(--chakra-colors-whiteAlpha-400);}</style><style data-emotion="css-global fubdgu">html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:system-ui,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;touch-action:manipulation;}body{position:relative;min-height:100%;margin:0;font-feature-settings:"kern";}:where(*, *::before, *::after){border-width:0;border-style:solid;box-sizing:border-box;word-wrap:break-word;}main{display:block;}hr{border-top-width:1px;box-sizing:content-box;height:0;overflow:visible;}:where(pre, code, kbd,samp){font-family:SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:1em;}a{background-color:transparent;color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit;}abbr[title]{border-bottom:none;-webkit-text-decoration:underline;text-decoration:underline;-webkit-text-decoration:underline dotted;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;}:where(b, strong){font-weight:bold;}small{font-size:80%;}:where(sub,sup){font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sub{bottom:-0.25em;}sup{top:-0.5em;}img{border-style:none;}:where(button, input, optgroup, select, textarea){font-family:inherit;font-size:100%;line-height:1.15;margin:0;}:where(button, input){overflow:visible;}:where(button, select){text-transform:none;}:where(
|
|
2
2
|
button::-moz-focus-inner,
|
|
3
3
|
[type="button"]::-moz-focus-inner,
|
|
4
4
|
[type="reset"]::-moz-focus-inner,
|
|
@@ -19,4 +19,4 @@
|
|
|
19
19
|
pre
|
|
20
20
|
){margin:0;}button{background:transparent;padding:0;}fieldset{margin:0;padding:0;}:where(ol, ul){margin:0;padding:0;}textarea{resize:vertical;}:where(button, [role="button"]){cursor:pointer;}button::-moz-focus-inner{border:0!important;}table{border-collapse:collapse;}:where(h1, h2, h3, h4, h5, h6){font-size:inherit;font-weight:inherit;}:where(button, input, optgroup, select, textarea){padding:0;line-height:inherit;color:inherit;}:where(img, svg, video, canvas, audio, iframe, embed, object){display:block;}:where(img, video){max-width:100%;height:auto;}[data-js-focus-visible] :focus:not([data-focus-visible-added]):not(
|
|
21
21
|
[data-focus-visible-disabled]
|
|
22
|
-
){outline:none;box-shadow:none;}select::-ms-expand{display:none;}:root,:host{--chakra-vh:100vh;}@supports (height: -webkit-fill-available){:root,:host{--chakra-vh:-webkit-fill-available;}}@supports (height: -moz-fill-available){:root,:host{--chakra-vh:-moz-fill-available;}}@supports (height: 100dvh){:root,:host{--chakra-vh:100dvh;}}</style><style data-emotion="css-global 1cgn62j">body{font-family:var(--chakra-fonts-body);color:var(--chakra-colors-chakra-body-text);background:var(--chakra-colors-chakra-body-bg);transition-property:background-color;transition-duration:var(--chakra-transition-duration-normal);line-height:var(--chakra-lineHeights-base);}*::-webkit-input-placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*::-moz-placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*:-ms-input-placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*::placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*,*::before,::after{border-color:var(--chakra-colors-chakra-border-color);}</style><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><span></span><span id="__chakra_env" hidden=""></span><script src="/_next/static/chunks/webpack-7b49d5ba7e3a434d.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/1b121dc4d36aeb4d.css\",\"style\"]\n2:HL[\"/_next/static/css/951e2e0eea2d4a5b.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"3:I[35639,[],\"\"]\n5:I[51454,[],\"\"]\n6:I[48464,[],\"\"]\n7:I[76413,[\"509\",\"static/chunks/9746af58-a42b7d169cacadf0.js\",\"989\",\"static/chunks/47d8844f-929aed9b1c73a905.js\",\"147\",\"static/chunks/a30376cd-de84559016d7e133.js\",\"495\",\"static/chunks/6dc81886-adbfa45836061d79.js\",\"376\",\"static/chunks/3a92ee20-1081c360214f9602.js\",\"678\",\"static/chunks/3998a672-03adacad07b346ac.js\",\"20\",\"static/chunks/1bff33f1-1ef85cf5e658a751.js\",\"413\",\"static/chunks/bbda5537-9ec25eb1dd62348a.js\",\"42\",\"static/chunks/42-cd3c06533f5fd47c.js\",\"608\",\"static/chunks/608-3b079b544e5d5f5e.js\",\"92\",\"static/chunks/92-
|
|
22
|
+
){outline:none;box-shadow:none;}select::-ms-expand{display:none;}:root,:host{--chakra-vh:100vh;}@supports (height: -webkit-fill-available){:root,:host{--chakra-vh:-webkit-fill-available;}}@supports (height: -moz-fill-available){:root,:host{--chakra-vh:-moz-fill-available;}}@supports (height: 100dvh){:root,:host{--chakra-vh:100dvh;}}</style><style data-emotion="css-global 1cgn62j">body{font-family:var(--chakra-fonts-body);color:var(--chakra-colors-chakra-body-text);background:var(--chakra-colors-chakra-body-bg);transition-property:background-color;transition-duration:var(--chakra-transition-duration-normal);line-height:var(--chakra-lineHeights-base);}*::-webkit-input-placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*::-moz-placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*:-ms-input-placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*::placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*,*::before,::after{border-color:var(--chakra-colors-chakra-border-color);}</style><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><span></span><span id="__chakra_env" hidden=""></span><script src="/_next/static/chunks/webpack-7b49d5ba7e3a434d.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/1b121dc4d36aeb4d.css\",\"style\"]\n2:HL[\"/_next/static/css/951e2e0eea2d4a5b.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"3:I[35639,[],\"\"]\n5:I[51454,[],\"\"]\n6:I[48464,[],\"\"]\n7:I[76413,[\"509\",\"static/chunks/9746af58-a42b7d169cacadf0.js\",\"989\",\"static/chunks/47d8844f-929aed9b1c73a905.js\",\"147\",\"static/chunks/a30376cd-de84559016d7e133.js\",\"495\",\"static/chunks/6dc81886-adbfa45836061d79.js\",\"376\",\"static/chunks/3a92ee20-1081c360214f9602.js\",\"678\",\"static/chunks/3998a672-03adacad07b346ac.js\",\"20\",\"static/chunks/1bff33f1-1ef85cf5e658a751.js\",\"413\",\"static/chunks/bbda5537-9ec25eb1dd62348a.js\",\"42\",\"static/chunks/42-cd3c06533f5fd47c.js\",\"608\",\"static/chunks/608-3b079b544e5d5f5e.js\",\"92\",\"static/chunks/92-607cd1af83c41f43.js\",\"185\",\"static/chunks/app/layout-177a410a97e0d018.js\"],\"default\"]\nd:I[26480,[],\"\"]\n8:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\n9:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\na:{\"display\":\"inline-block\"}\nb:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\ne:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L3\",null,{\"buildId\":\"Iga3yMdHBVJ_Vhluh2SdE\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"_not-found\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L4\",[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/1b121dc4d36aeb4d.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/951e2e0eea2d4a5b.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"suppressHydrationWarning\":true,\"children\":[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$8\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$9\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$a\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$b\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]}]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$Lc\"],\"globalErrorComponent\":\"$d\",\"missingSlots\":\"$We\"}]\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"recce\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Recce: Data validation toolkit for comprehensive PR review\"}]]\n4:null\n"])</script></body></html>
|