mirror of
https://github.com/Dvorinka/Devour.git
synced 2026-06-03 20:13:03 +00:00
24834 lines
1.3 MiB
Plaintext
24834 lines
1.3 MiB
Plaintext
{
|
|
"version": 1,
|
|
"created": "2026-02-23T10:02:21+00:00",
|
|
"last_scan": "2026-02-24T11:05:35+00:00",
|
|
"scan_count": 30,
|
|
"overall_score": 39.8,
|
|
"objective_score": 78.4,
|
|
"strict_score": 39.8,
|
|
"verified_strict_score": 78.4,
|
|
"stats": {
|
|
"total": 637,
|
|
"open": 526,
|
|
"fixed": 12,
|
|
"auto_resolved": 99,
|
|
"wontfix": 0,
|
|
"false_positive": 0,
|
|
"by_tier": {
|
|
"2": {
|
|
"open": 3,
|
|
"fixed": 0,
|
|
"auto_resolved": 7,
|
|
"wontfix": 0,
|
|
"false_positive": 0
|
|
},
|
|
"3": {
|
|
"open": 408,
|
|
"fixed": 12,
|
|
"auto_resolved": 89,
|
|
"wontfix": 0,
|
|
"false_positive": 0
|
|
},
|
|
"4": {
|
|
"open": 115,
|
|
"fixed": 0,
|
|
"auto_resolved": 3,
|
|
"wontfix": 0,
|
|
"false_positive": 0
|
|
}
|
|
}
|
|
},
|
|
"findings": {
|
|
"structural::internal/quality/narrative_test.go": {
|
|
"id": "structural::internal/quality/narrative_test.go",
|
|
"detector": "structural",
|
|
"file": "internal/quality/narrative_test.go",
|
|
"tier": 3,
|
|
"confidence": "low",
|
|
"summary": "Needs decomposition: large (754 LOC) / complexity score 19",
|
|
"detail": {
|
|
"loc": 754,
|
|
"complexity_score": 19,
|
|
"complexity_signals": [
|
|
"34 if/else branches",
|
|
"25 for loops"
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:21+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:07:57+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:07:57+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"structural::cmd/quality.go": {
|
|
"id": "structural::cmd/quality.go",
|
|
"detector": "structural",
|
|
"file": "cmd/quality.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Needs decomposition: large (734 LOC) / complexity score 52",
|
|
"detail": {
|
|
"loc": 734,
|
|
"complexity_score": 52,
|
|
"complexity_signals": [
|
|
"75 if/else branches",
|
|
"17 for loops"
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:21+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:07:57+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:07:57+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"structural::pkg/godocs/parser.go": {
|
|
"id": "structural::pkg/godocs/parser.go",
|
|
"detector": "structural",
|
|
"file": "pkg/godocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Needs decomposition: large (685 LOC) / complexity score 58",
|
|
"detail": {
|
|
"loc": 685,
|
|
"complexity_score": 58,
|
|
"complexity_signals": [
|
|
"83 if/else branches"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:21+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"structural::cmd/ask.go": {
|
|
"id": "structural::cmd/ask.go",
|
|
"detector": "structural",
|
|
"file": "cmd/ask.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Needs decomposition: large (1048 LOC) / complexity score 175",
|
|
"detail": {
|
|
"loc": 1048,
|
|
"complexity_score": 175,
|
|
"complexity_signals": [
|
|
"135 if/else branches",
|
|
"58 switch/case",
|
|
"32 for loops"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:21+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"structural::pkg/rustdocs/parser.go": {
|
|
"id": "structural::pkg/rustdocs/parser.go",
|
|
"detector": "structural",
|
|
"file": "pkg/rustdocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Needs decomposition: large (620 LOC) / complexity score 50",
|
|
"detail": {
|
|
"loc": 620,
|
|
"complexity_score": 50,
|
|
"complexity_signals": [
|
|
"60 if/else branches",
|
|
"25 switch/case"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:21+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"structural::internal/quality/state_test.go": {
|
|
"id": "structural::internal/quality/state_test.go",
|
|
"detector": "structural",
|
|
"file": "internal/quality/state_test.go",
|
|
"tier": 3,
|
|
"confidence": "low",
|
|
"summary": "Needs decomposition: large (601 LOC) / complexity score 47",
|
|
"detail": {
|
|
"loc": 601,
|
|
"complexity_score": 47,
|
|
"complexity_signals": [
|
|
"72 if/else branches"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:21+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"structural::internal/quality/analyzers/practices.go": {
|
|
"id": "structural::internal/quality/analyzers/practices.go",
|
|
"detector": "structural",
|
|
"file": "internal/quality/analyzers/practices.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Needs decomposition: large (600 LOC)",
|
|
"detail": {
|
|
"loc": 600
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:21+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"structural::internal/quality/plugins/go/analyzers/advanced.go": {
|
|
"id": "structural::internal/quality/plugins/go/analyzers/advanced.go",
|
|
"detector": "structural",
|
|
"file": "internal/quality/plugins/go/analyzers/advanced.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Needs decomposition: large (632 LOC) / complexity score 43",
|
|
"detail": {
|
|
"loc": 632,
|
|
"complexity_score": 43,
|
|
"complexity_signals": [
|
|
"57 if/else branches",
|
|
"12 switch/case",
|
|
"24 for loops"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:21+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"structural::internal/quality/scanner_test.go": {
|
|
"id": "structural::internal/quality/scanner_test.go",
|
|
"detector": "structural",
|
|
"file": "internal/quality/scanner_test.go",
|
|
"tier": 3,
|
|
"confidence": "low",
|
|
"summary": "Needs decomposition: large (605 LOC) / complexity score 17",
|
|
"detail": {
|
|
"loc": 605,
|
|
"complexity_score": 17,
|
|
"complexity_signals": [
|
|
"42 if/else branches"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:21+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"structural::internal/quality/scoring_test.go": {
|
|
"id": "structural::internal/quality/scoring_test.go",
|
|
"detector": "structural",
|
|
"file": "internal/quality/scoring_test.go",
|
|
"tier": 3,
|
|
"confidence": "low",
|
|
"summary": "Needs decomposition: large (567 LOC) / complexity score 17",
|
|
"detail": {
|
|
"loc": 567,
|
|
"complexity_score": 17,
|
|
"complexity_signals": [
|
|
"42 if/else branches"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:21+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"structural::internal/scraper/external/rustdocs.go": {
|
|
"id": "structural::internal/scraper/external/rustdocs.go",
|
|
"detector": "structural",
|
|
"file": "internal/scraper/external/rustdocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Needs decomposition: large (541 LOC) / complexity score 16",
|
|
"detail": {
|
|
"loc": 541,
|
|
"complexity_score": 16,
|
|
"complexity_signals": [
|
|
"37 if/else branches",
|
|
"19 for loops"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:21+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"structural::pkg/pythondocs/parser.go": {
|
|
"id": "structural::pkg/pythondocs/parser.go",
|
|
"detector": "structural",
|
|
"file": "pkg/pythondocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Needs decomposition: large (542 LOC) / complexity score 45",
|
|
"detail": {
|
|
"loc": 542,
|
|
"complexity_score": 45,
|
|
"complexity_signals": [
|
|
"70 if/else branches"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:21+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"structural::internal/quality/plugins/go/analyzers/test_coverage.go": {
|
|
"id": "structural::internal/quality/plugins/go/analyzers/test_coverage.go",
|
|
"detector": "structural",
|
|
"file": "internal/quality/plugins/go/analyzers/test_coverage.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Needs decomposition: large (537 LOC) / complexity score 26",
|
|
"detail": {
|
|
"loc": 537,
|
|
"complexity_score": 26,
|
|
"complexity_signals": [
|
|
"51 if/else branches"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:21+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"structural::internal/quality/scoring.go": {
|
|
"id": "structural::internal/quality/scoring.go",
|
|
"detector": "structural",
|
|
"file": "internal/quality/scoring.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Needs decomposition: complexity score 48",
|
|
"detail": {
|
|
"complexity_score": 48,
|
|
"complexity_signals": [
|
|
"28 if/else branches",
|
|
"47 switch/case",
|
|
"23 for loops"
|
|
],
|
|
"loc": 487
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:21+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"structural::internal/quality/narrative.go": {
|
|
"id": "structural::internal/quality/narrative.go",
|
|
"detector": "structural",
|
|
"file": "internal/quality/narrative.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Needs decomposition: complexity score 37",
|
|
"detail": {
|
|
"complexity_score": 37,
|
|
"complexity_signals": [
|
|
"40 if/else branches",
|
|
"26 switch/case",
|
|
"21 for loops"
|
|
],
|
|
"loc": 438
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:21+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:07:57+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:07:57+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"structural::internal/scraper/localsearch.go": {
|
|
"id": "structural::internal/scraper/localsearch.go",
|
|
"detector": "structural",
|
|
"file": "internal/scraper/localsearch.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Needs decomposition: complexity score 37",
|
|
"detail": {
|
|
"complexity_score": 37,
|
|
"complexity_signals": [
|
|
"60 if/else branches",
|
|
"12 switch/case"
|
|
],
|
|
"loc": 403
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:21+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"structural::internal/scraper/web.go": {
|
|
"id": "structural::internal/scraper/web.go",
|
|
"detector": "structural",
|
|
"file": "internal/scraper/web.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Needs decomposition: complexity score 37",
|
|
"detail": {
|
|
"complexity_score": 37,
|
|
"complexity_signals": [
|
|
"62 if/else branches"
|
|
],
|
|
"loc": 479
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:21+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"signature::internal/quality/analyzers/controlflow.go::signature_variance::analyzeFile": {
|
|
"id": "signature::internal/quality/analyzers/controlflow.go::signature_variance::analyzeFile",
|
|
"detector": "signature",
|
|
"file": "internal/quality/analyzers/controlflow.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "'analyzeFile' has 5 different signatures across 6 files",
|
|
"detail": {},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"signature::internal/quality/detectors/duplication.go::signature_variance::extractFunctions": {
|
|
"id": "signature::internal/quality/detectors/duplication.go::signature_variance::extractFunctions",
|
|
"detector": "signature",
|
|
"file": "internal/quality/detectors/duplication.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "'extractFunctions' has 4 different signatures across 6 files",
|
|
"detail": {},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"signature::internal/quality/plugins/go/plugin.go::signature_variance::New": {
|
|
"id": "signature::internal/quality/plugins/go/plugin.go::signature_variance::New",
|
|
"detector": "signature",
|
|
"file": "internal/quality/plugins/go/plugin.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "'New' has 3 different signatures across 3 files",
|
|
"detail": {},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"signature::pkg/javadocs/parser.go::signature_variance::extractEnums": {
|
|
"id": "signature::pkg/javadocs/parser.go::signature_variance::extractEnums",
|
|
"detector": "signature",
|
|
"file": "pkg/javadocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "'extractEnums' has 3 different signatures across 3 files",
|
|
"detail": {},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"signature::pkg/godocs/parser.go::signature_variance::extractMethods": {
|
|
"id": "signature::pkg/godocs/parser.go::signature_variance::extractMethods",
|
|
"detector": "signature",
|
|
"file": "pkg/godocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "'extractMethods' has 3 different signatures across 3 files",
|
|
"detail": {},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"signature::internal/quality/plugins/go/plugin.go::signature_variance::extractVariables": {
|
|
"id": "signature::internal/quality/plugins/go/plugin.go::signature_variance::extractVariables",
|
|
"detector": "signature",
|
|
"file": "internal/quality/plugins/go/plugin.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "'extractVariables' has 3 different signatures across 3 files",
|
|
"detail": {},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"signature::internal/scraper/external/javadocs.go::signature_variance::classToDocument": {
|
|
"id": "signature::internal/scraper/external/javadocs.go::signature_variance::classToDocument",
|
|
"detector": "signature",
|
|
"file": "internal/scraper/external/javadocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "'classToDocument' has 2 different signatures across 4 files",
|
|
"detail": {},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"signature::pkg/javadocs/parser.go::signature_variance::extractClasses": {
|
|
"id": "signature::pkg/javadocs/parser.go::signature_variance::extractClasses",
|
|
"detector": "signature",
|
|
"file": "pkg/javadocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "'extractClasses' has 2 different signatures across 4 files",
|
|
"detail": {},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"signature::internal/scraper/web.go::signature_variance::extractContent": {
|
|
"id": "signature::internal/scraper/web.go::signature_variance::extractContent",
|
|
"detector": "signature",
|
|
"file": "internal/scraper/web.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "'extractContent' has 2 different signatures across 4 files",
|
|
"detail": {},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"signature::internal/scraper/external/pythondocs.go::signature_variance::moduleToDocument": {
|
|
"id": "signature::internal/scraper/external/pythondocs.go::signature_variance::moduleToDocument",
|
|
"detector": "signature",
|
|
"file": "internal/scraper/external/pythondocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "'moduleToDocument' has 2 different signatures across 4 files",
|
|
"detail": {},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"signature::internal/scraper/external/godocs.go::signature_variance::functionToDocument": {
|
|
"id": "signature::internal/scraper/external/godocs.go::signature_variance::functionToDocument",
|
|
"detector": "signature",
|
|
"file": "internal/scraper/external/godocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "'functionToDocument' has 2 different signatures across 3 files",
|
|
"detail": {},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/scraper/external/vuedocs.go::untested_module": {
|
|
"id": "test_coverage::internal/scraper/external/vuedocs.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/external/vuedocs.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (222 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 222,
|
|
"importer_count": 0,
|
|
"loc_weight": 14.89966442575134
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::cmd/languages.go::untested_module": {
|
|
"id": "test_coverage::cmd/languages.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "cmd/languages.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (62 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 62,
|
|
"importer_count": 0,
|
|
"loc_weight": 7.874007874011811
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:07:57+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:07:57+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"test_coverage::internal/quality/detectors/duplication.go::untested_module": {
|
|
"id": "test_coverage::internal/quality/detectors/duplication.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/quality/detectors/duplication.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (358 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 358,
|
|
"importer_count": 0,
|
|
"loc_weight": 18.920887928424502
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/scraper/registry_simple.go::untested_module": {
|
|
"id": "test_coverage::internal/scraper/registry_simple.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/registry_simple.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (67 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 67,
|
|
"importer_count": 0,
|
|
"loc_weight": 8.18535277187245
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/vector/store.go::untested_module": {
|
|
"id": "test_coverage::internal/vector/store.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/vector/store.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (290 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 290,
|
|
"importer_count": 0,
|
|
"loc_weight": 17.029386365926403
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/indexer/indexer.go::untested_module": {
|
|
"id": "test_coverage::internal/indexer/indexer.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/indexer/indexer.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (271 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 271,
|
|
"importer_count": 0,
|
|
"loc_weight": 16.46207763315433
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/quality/plugins/go/analyzers/detectors.go::untested_module": {
|
|
"id": "test_coverage::internal/quality/plugins/go/analyzers/detectors.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/quality/plugins/go/analyzers/detectors.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (525 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 525,
|
|
"importer_count": 0,
|
|
"loc_weight": 22.9128784747792
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::cmd/generate_scorecards/main.go::untested_module": {
|
|
"id": "test_coverage::cmd/generate_scorecards/main.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "cmd/generate_scorecards/main.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (156 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 156,
|
|
"importer_count": 0,
|
|
"loc_weight": 12.489995996796797
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/scraper/external/mcpdocs.go::untested_module": {
|
|
"id": "test_coverage::internal/scraper/external/mcpdocs.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/external/mcpdocs.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (200 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 200,
|
|
"importer_count": 0,
|
|
"loc_weight": 14.142135623730951
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/scraper/github.go::untested_module": {
|
|
"id": "test_coverage::internal/scraper/github.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/github.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (194 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 194,
|
|
"importer_count": 0,
|
|
"loc_weight": 13.92838827718412
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::cmd/demo.go::untested_module": {
|
|
"id": "test_coverage::cmd/demo.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "cmd/demo.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (124 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 124,
|
|
"importer_count": 0,
|
|
"loc_weight": 11.135528725660043
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/scraper/external/reactdocs.go::untested_module": {
|
|
"id": "test_coverage::internal/scraper/external/reactdocs.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/external/reactdocs.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (192 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 192,
|
|
"importer_count": 0,
|
|
"loc_weight": 13.856406460551018
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/quality/plugins/go/analyzers/advanced.go::untested_critical": {
|
|
"id": "test_coverage::internal/quality/plugins/go/analyzers/advanced.go::untested_critical",
|
|
"detector": "test_coverage",
|
|
"file": "internal/quality/plugins/go/analyzers/advanced.go",
|
|
"tier": 2,
|
|
"confidence": "high",
|
|
"summary": "Untested critical module (632 LOC, 0 importers) \u2014 high blast radius",
|
|
"detail": {
|
|
"kind": "untested_critical",
|
|
"loc": 632,
|
|
"importer_count": 0,
|
|
"loc_weight": 25.13961017995307,
|
|
"complexity_score": 43
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::cmd/init.go::untested_module": {
|
|
"id": "test_coverage::cmd/init.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "cmd/init.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (88 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 88,
|
|
"importer_count": 0,
|
|
"loc_weight": 9.38083151964686
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/quality/plugins/go/plugin.go::untested_module": {
|
|
"id": "test_coverage::internal/quality/plugins/go/plugin.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/quality/plugins/go/plugin.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (376 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 376,
|
|
"importer_count": 0,
|
|
"loc_weight": 19.390719429665317
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/ai/ai.go::untested_module": {
|
|
"id": "test_coverage::internal/ai/ai.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/ai/ai.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (38 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 38,
|
|
"importer_count": 0,
|
|
"loc_weight": 6.164414002968976
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/scraper/external/types.go::untested_module": {
|
|
"id": "test_coverage::internal/scraper/external/types.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/external/types.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (86 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 86,
|
|
"importer_count": 0,
|
|
"loc_weight": 9.273618495495704
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/scraper/external/register.go::untested_module": {
|
|
"id": "test_coverage::internal/scraper/external/register.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/external/register.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (45 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 45,
|
|
"importer_count": 0,
|
|
"loc_weight": 6.708203932499369
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/scraper/scraper.go::untested_module": {
|
|
"id": "test_coverage::internal/scraper/scraper.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/scraper.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (145 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 145,
|
|
"importer_count": 0,
|
|
"loc_weight": 12.041594578792296
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::cmd/root.go::untested_module": {
|
|
"id": "test_coverage::cmd/root.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "cmd/root.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (96 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 96,
|
|
"importer_count": 0,
|
|
"loc_weight": 9.797958971132712
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:07:57+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:07:57+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"test_coverage::internal/server/server.go::untested_module": {
|
|
"id": "test_coverage::internal/server/server.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/server/server.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (274 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 274,
|
|
"importer_count": 0,
|
|
"loc_weight": 16.55294535724685
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/scraper/external/rustdocs.go::untested_critical": {
|
|
"id": "test_coverage::internal/scraper/external/rustdocs.go::untested_critical",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/external/rustdocs.go",
|
|
"tier": 2,
|
|
"confidence": "high",
|
|
"summary": "Untested critical module (563 LOC, 0 importers) \u2014 high blast radius",
|
|
"detail": {
|
|
"kind": "untested_critical",
|
|
"loc": 563,
|
|
"importer_count": 0,
|
|
"loc_weight": 23.727621035409346,
|
|
"complexity_score": 20
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T10:19:49+00:00",
|
|
"resolved_at": "2026-02-24T10:23:45+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:23:45+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"test_coverage::internal/scraper/external/pythondocs.go::untested_module": {
|
|
"id": "test_coverage::internal/scraper/external/pythondocs.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/external/pythondocs.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (441 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 441,
|
|
"importer_count": 0,
|
|
"loc_weight": 21.0
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/scraper/external/nuxtdocs.go::untested_module": {
|
|
"id": "test_coverage::internal/scraper/external/nuxtdocs.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/external/nuxtdocs.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (276 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 276,
|
|
"importer_count": 0,
|
|
"loc_weight": 16.61324772583615
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::cleanup_unused.go::untested_module": {
|
|
"id": "test_coverage::cleanup_unused.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "cleanup_unused.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (110 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 110,
|
|
"importer_count": 0,
|
|
"loc_weight": 10.488088481701515
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/scraper/external/godocs.go::untested_module": {
|
|
"id": "test_coverage::internal/scraper/external/godocs.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/external/godocs.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (401 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 401,
|
|
"importer_count": 0,
|
|
"loc_weight": 20.024984394500787
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::examples/demo_scrapers.go::untested_module": {
|
|
"id": "test_coverage::examples/demo_scrapers.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "examples/demo_scrapers.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (197 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 197,
|
|
"importer_count": 0,
|
|
"loc_weight": 14.035668847618199
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/ai/openai.go::untested_module": {
|
|
"id": "test_coverage::internal/ai/openai.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/ai/openai.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (341 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 341,
|
|
"importer_count": 0,
|
|
"loc_weight": 18.466185312619388
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/scraper/web.go::untested_critical": {
|
|
"id": "test_coverage::internal/scraper/web.go::untested_critical",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/web.go",
|
|
"tier": 2,
|
|
"confidence": "high",
|
|
"summary": "Untested critical module (479 LOC, 0 importers) \u2014 high blast radius",
|
|
"detail": {
|
|
"kind": "untested_critical",
|
|
"loc": 479,
|
|
"importer_count": 0,
|
|
"loc_weight": 21.88606862823929,
|
|
"complexity_score": 37
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/quality/review/packet.go::untested_module": {
|
|
"id": "test_coverage::internal/quality/review/packet.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/quality/review/packet.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (315 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 315,
|
|
"importer_count": 0,
|
|
"loc_weight": 17.74823934929885
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:07:57+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:07:57+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"test_coverage::internal/scraper/register_core.go::untested_module": {
|
|
"id": "test_coverage::internal/scraper/register_core.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/register_core.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (11 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 11,
|
|
"importer_count": 0,
|
|
"loc_weight": 3.3166247903554
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/scraper/external/javadocs.go::untested_module": {
|
|
"id": "test_coverage::internal/scraper/external/javadocs.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/external/javadocs.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (232 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 232,
|
|
"importer_count": 0,
|
|
"loc_weight": 15.231546211727817
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::cmd/quality.go::untested_critical": {
|
|
"id": "test_coverage::cmd/quality.go::untested_critical",
|
|
"detector": "test_coverage",
|
|
"file": "cmd/quality.go",
|
|
"tier": 2,
|
|
"confidence": "high",
|
|
"summary": "Untested critical module (734 LOC, 0 importers) \u2014 high blast radius",
|
|
"detail": {
|
|
"kind": "untested_critical",
|
|
"loc": 734,
|
|
"importer_count": 0,
|
|
"loc_weight": 27.09243436828813,
|
|
"complexity_score": 52
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:07:57+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:07:57+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"test_coverage::internal/quality/analyzers/controlflow.go::untested_module": {
|
|
"id": "test_coverage::internal/quality/analyzers/controlflow.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/quality/analyzers/controlflow.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (425 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 425,
|
|
"importer_count": 0,
|
|
"loc_weight": 20.615528128088304
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::pkg/client/client.go::untested_module": {
|
|
"id": "test_coverage::pkg/client/client.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "pkg/client/client.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (61 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 61,
|
|
"importer_count": 0,
|
|
"loc_weight": 7.810249675906654
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::cmd/realtest/main.go::untested_module": {
|
|
"id": "test_coverage::cmd/realtest/main.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "cmd/realtest/main.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (121 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 121,
|
|
"importer_count": 0,
|
|
"loc_weight": 11.0
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::cmd/push.go::untested_module": {
|
|
"id": "test_coverage::cmd/push.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "cmd/push.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (114 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 114,
|
|
"importer_count": 0,
|
|
"loc_weight": 10.677078252031311
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/scraper/openapi.go::untested_module": {
|
|
"id": "test_coverage::internal/scraper/openapi.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/openapi.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (338 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 338,
|
|
"importer_count": 0,
|
|
"loc_weight": 18.384776310850235
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:07:57+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:07:57+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"test_coverage::internal/scraper/external/astrodocs.go::untested_module": {
|
|
"id": "test_coverage::internal/scraper/external/astrodocs.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/external/astrodocs.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (134 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 134,
|
|
"importer_count": 0,
|
|
"loc_weight": 11.575836902790225
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/quality/plugins/go/fixers/fixers.go::untested_module": {
|
|
"id": "test_coverage::internal/quality/plugins/go/fixers/fixers.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/quality/plugins/go/fixers/fixers.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (124 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 124,
|
|
"importer_count": 0,
|
|
"loc_weight": 11.135528725660043
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/scraper/external/springdocs.go::untested_module": {
|
|
"id": "test_coverage::internal/scraper/external/springdocs.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/external/springdocs.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (199 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 199,
|
|
"importer_count": 0,
|
|
"loc_weight": 14.106735979665885
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::cmd/serve.go::untested_module": {
|
|
"id": "test_coverage::cmd/serve.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "cmd/serve.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (236 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 236,
|
|
"importer_count": 0,
|
|
"loc_weight": 15.362291495737216
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/quality/plugins/go/analyzers/deadcode.go::untested_module": {
|
|
"id": "test_coverage::internal/quality/plugins/go/analyzers/deadcode.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/quality/plugins/go/analyzers/deadcode.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (334 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 334,
|
|
"importer_count": 0,
|
|
"loc_weight": 18.275666882497067
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:07:57+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:07:57+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"test_coverage::internal/quality/plugins/go/analyzers/test_coverage.go::untested_critical": {
|
|
"id": "test_coverage::internal/quality/plugins/go/analyzers/test_coverage.go::untested_critical",
|
|
"detector": "test_coverage",
|
|
"file": "internal/quality/plugins/go/analyzers/test_coverage.go",
|
|
"tier": 2,
|
|
"confidence": "high",
|
|
"summary": "Untested critical module (537 LOC, 0 importers) \u2014 high blast radius",
|
|
"detail": {
|
|
"kind": "untested_critical",
|
|
"loc": 537,
|
|
"importer_count": 0,
|
|
"loc_weight": 23.173260452512935,
|
|
"complexity_score": 26
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/quality/detectors/naming.go::untested_module": {
|
|
"id": "test_coverage::internal/quality/detectors/naming.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/quality/detectors/naming.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (256 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 256,
|
|
"importer_count": 0,
|
|
"loc_weight": 16.0
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/quality/plugins/go/fixers/advanced_fixers.go::untested_module": {
|
|
"id": "test_coverage::internal/quality/plugins/go/fixers/advanced_fixers.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/quality/plugins/go/fixers/advanced_fixers.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (276 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 276,
|
|
"importer_count": 0,
|
|
"loc_weight": 16.61324772583615
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/quality/plugins/registry.go::untested_module": {
|
|
"id": "test_coverage::internal/quality/plugins/registry.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/quality/plugins/registry.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (117 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 117,
|
|
"importer_count": 0,
|
|
"loc_weight": 10.816653826391969
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/scraper/external/dockerdocs.go::untested_module": {
|
|
"id": "test_coverage::internal/scraper/external/dockerdocs.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/external/dockerdocs.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (134 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 134,
|
|
"importer_count": 0,
|
|
"loc_weight": 11.575836902790225
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/ui/character.go::untested_module": {
|
|
"id": "test_coverage::internal/ui/character.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/ui/character.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (179 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 179,
|
|
"importer_count": 0,
|
|
"loc_weight": 13.379088160259652
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/ui/banner.go::untested_module": {
|
|
"id": "test_coverage::internal/ui/banner.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/ui/banner.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (206 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 206,
|
|
"importer_count": 0,
|
|
"loc_weight": 14.352700094407323
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/scraper/local.go::untested_module": {
|
|
"id": "test_coverage::internal/scraper/local.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/local.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (200 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 200,
|
|
"importer_count": 0,
|
|
"loc_weight": 14.142135623730951
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:07:57+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:07:57+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"test_coverage::cmd/sync.go::untested_module": {
|
|
"id": "test_coverage::cmd/sync.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "cmd/sync.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (202 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 202,
|
|
"importer_count": 0,
|
|
"loc_weight": 14.212670403551895
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/quality/analyzers/dataflow.go::untested_module": {
|
|
"id": "test_coverage::internal/quality/analyzers/dataflow.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/quality/analyzers/dataflow.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (471 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 471,
|
|
"importer_count": 0,
|
|
"loc_weight": 21.702534414210707
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/quality/detectors/complexity.go::untested_module": {
|
|
"id": "test_coverage::internal/quality/detectors/complexity.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/quality/detectors/complexity.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (212 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 212,
|
|
"importer_count": 0,
|
|
"loc_weight": 14.560219778561036
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/quality/analyzers/practices.go::untested_module": {
|
|
"id": "test_coverage::internal/quality/analyzers/practices.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/quality/analyzers/practices.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (600 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 600,
|
|
"importer_count": 0,
|
|
"loc_weight": 24.49489742783178
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::cmd/scorecard.go::untested_module": {
|
|
"id": "test_coverage::cmd/scorecard.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "cmd/scorecard.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (41 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 41,
|
|
"importer_count": 0,
|
|
"loc_weight": 6.4031242374328485
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/markdown/formatter.go::untested_module": {
|
|
"id": "test_coverage::internal/markdown/formatter.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/markdown/formatter.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (196 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 196,
|
|
"importer_count": 0,
|
|
"loc_weight": 14.0
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::cmd/query.go::untested_module": {
|
|
"id": "test_coverage::cmd/query.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "cmd/query.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (142 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 142,
|
|
"importer_count": 0,
|
|
"loc_weight": 11.916375287812984
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/quality/plugins/go/analyzers/security.go::untested_module": {
|
|
"id": "test_coverage::internal/quality/plugins/go/analyzers/security.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/quality/plugins/go/analyzers/security.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (410 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 410,
|
|
"importer_count": 0,
|
|
"loc_weight": 20.248456731316587
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::cmd/status.go::untested_module": {
|
|
"id": "test_coverage::cmd/status.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "cmd/status.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (130 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 130,
|
|
"importer_count": 0,
|
|
"loc_weight": 11.40175425099138
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/scheduler/scheduler.go::untested_module": {
|
|
"id": "test_coverage::internal/scheduler/scheduler.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scheduler/scheduler.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (73 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 73,
|
|
"importer_count": 0,
|
|
"loc_weight": 8.54400374531753
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/scraper/external/cloudflaredocs.go::untested_module": {
|
|
"id": "test_coverage::internal/scraper/external/cloudflaredocs.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/external/cloudflaredocs.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (171 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 171,
|
|
"importer_count": 0,
|
|
"loc_weight": 13.076696830622021
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"security::internal/quality/analyzers/dataflow.go::security::hardcoded_secret_value::internal/quality/analyzers/dataflow.go::401": {
|
|
"id": "security::internal/quality/analyzers/dataflow.go::security::hardcoded_secret_value::internal/quality/analyzers/dataflow.go::401",
|
|
"detector": "security",
|
|
"file": "internal/quality/analyzers/dataflow.go",
|
|
"tier": 2,
|
|
"confidence": "high",
|
|
"summary": "Hardcoded Private key block detected",
|
|
"detail": {
|
|
"kind": "hardcoded_secret_value",
|
|
"severity": "critical",
|
|
"line": 401,
|
|
"content": "\t\t\t{Name: \"RSA Private Key\", Pattern: regexp.MustCompile(`-----BEGIN RSA PRIVATE KEY-----`), Severity: quality.SeverityT4},",
|
|
"remediation": "Remove the private key from source and store in a secrets manager"
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-23T10:02:25+00:00",
|
|
"resolved_at": "2026-02-23T10:08:19+00:00",
|
|
"reopen_count": 0,
|
|
"zone": "production",
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-23T10:08:19+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"security::internal/quality/analyzers/dataflow.go::security::hardcoded_secret_value::internal/quality/analyzers/dataflow.go::402": {
|
|
"id": "security::internal/quality/analyzers/dataflow.go::security::hardcoded_secret_value::internal/quality/analyzers/dataflow.go::402",
|
|
"detector": "security",
|
|
"file": "internal/quality/analyzers/dataflow.go",
|
|
"tier": 2,
|
|
"confidence": "high",
|
|
"summary": "Hardcoded Private key block detected",
|
|
"detail": {
|
|
"kind": "hardcoded_secret_value",
|
|
"severity": "critical",
|
|
"line": 402,
|
|
"content": "\t\t\t{Name: \"Private Key\", Pattern: regexp.MustCompile(`-----BEGIN PRIVATE KEY-----`), Severity: quality.SeverityT4},",
|
|
"remediation": "Remove the private key from source and store in a secrets manager"
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-23T10:02:25+00:00",
|
|
"resolved_at": "2026-02-23T10:08:19+00:00",
|
|
"reopen_count": 0,
|
|
"zone": "production",
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-23T10:08:19+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"subjective_review::cleanup_unused.go::unreviewed": {
|
|
"id": "subjective_review::cleanup_unused.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cleanup_unused.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 110
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::cmd/ask.go::unreviewed": {
|
|
"id": "subjective_review::cmd/ask.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cmd/ask.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 1048
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::cmd/demo.go::unreviewed": {
|
|
"id": "subjective_review::cmd/demo.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cmd/demo.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 124
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::cmd/generate_scorecards/main.go::unreviewed": {
|
|
"id": "subjective_review::cmd/generate_scorecards/main.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cmd/generate_scorecards/main.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 156
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::cmd/get.go::unreviewed": {
|
|
"id": "subjective_review::cmd/get.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cmd/get.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 304
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::cmd/init.go::unreviewed": {
|
|
"id": "subjective_review::cmd/init.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cmd/init.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 88
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::cmd/languages.go::unreviewed": {
|
|
"id": "subjective_review::cmd/languages.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cmd/languages.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 90
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::cmd/push.go::unreviewed": {
|
|
"id": "subjective_review::cmd/push.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cmd/push.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 114
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::cmd/quality.go::unreviewed": {
|
|
"id": "subjective_review::cmd/quality.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cmd/quality.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 20
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::cmd/query.go::unreviewed": {
|
|
"id": "subjective_review::cmd/query.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cmd/query.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 142
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::cmd/realtest/main.go::unreviewed": {
|
|
"id": "subjective_review::cmd/realtest/main.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cmd/realtest/main.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 121
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::cmd/root.go::unreviewed": {
|
|
"id": "subjective_review::cmd/root.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cmd/root.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 98
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::cmd/scorecard.go::unreviewed": {
|
|
"id": "subjective_review::cmd/scorecard.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cmd/scorecard.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 41
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::cmd/scrape.go::unreviewed": {
|
|
"id": "subjective_review::cmd/scrape.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cmd/scrape.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 449
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::cmd/serve.go::unreviewed": {
|
|
"id": "subjective_review::cmd/serve.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cmd/serve.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 236
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::cmd/status.go::unreviewed": {
|
|
"id": "subjective_review::cmd/status.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cmd/status.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 130
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::cmd/sync.go::unreviewed": {
|
|
"id": "subjective_review::cmd/sync.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cmd/sync.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 202
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::examples/demo_scrapers.go::unreviewed": {
|
|
"id": "subjective_review::examples/demo_scrapers.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "examples/demo_scrapers.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 197
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/ai/ai.go::unreviewed": {
|
|
"id": "subjective_review::internal/ai/ai.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/ai/ai.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 38
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/ai/openai.go::unreviewed": {
|
|
"id": "subjective_review::internal/ai/openai.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/ai/openai.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 341
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/indexer/indexer.go::unreviewed": {
|
|
"id": "subjective_review::internal/indexer/indexer.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/indexer/indexer.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 271
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/markdown/formatter.go::unreviewed": {
|
|
"id": "subjective_review::internal/markdown/formatter.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/markdown/formatter.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 196
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/analyzers/controlflow.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/analyzers/controlflow.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/analyzers/controlflow.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 425
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/analyzers/dataflow.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/analyzers/dataflow.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/analyzers/dataflow.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 471
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/analyzers/practices.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/analyzers/practices.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/analyzers/practices.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 600
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/detector.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/detector.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/detector.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 97
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/detectors/complexity.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/detectors/complexity.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/detectors/complexity.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 212
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/detectors/duplication.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/detectors/duplication.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/detectors/duplication.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 358
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/detectors/naming.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/detectors/naming.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/detectors/naming.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 256
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/enhanced_types.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/enhanced_types.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/enhanced_types.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 301
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/languages.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/languages.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/languages.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 176
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/narrative.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/narrative.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/narrative.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 438
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:07:57+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:07:57+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"subjective_review::internal/quality/plugins/go/analyzers/advanced.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/plugins/go/analyzers/advanced.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/plugins/go/analyzers/advanced.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 632
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/plugins/go/analyzers/deadcode.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/plugins/go/analyzers/deadcode.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/plugins/go/analyzers/deadcode.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 368
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/plugins/go/analyzers/detectors.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/plugins/go/analyzers/detectors.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/plugins/go/analyzers/detectors.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 525
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/plugins/go/analyzers/security.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/plugins/go/analyzers/security.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/plugins/go/analyzers/security.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 410
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/plugins/go/analyzers/test_coverage.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/plugins/go/analyzers/test_coverage.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/plugins/go/analyzers/test_coverage.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 537
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/plugins/go/fixers/advanced_fixers.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/plugins/go/fixers/advanced_fixers.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/plugins/go/fixers/advanced_fixers.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 276
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/plugins/go/fixers/fixers.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/plugins/go/fixers/fixers.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/plugins/go/fixers/fixers.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 124
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/plugins/go/plugin.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/plugins/go/plugin.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/plugins/go/plugin.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 376
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/plugins/plugin.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/plugins/plugin.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/plugins/plugin.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 163
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/plugins/registry.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/plugins/registry.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/plugins/registry.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 117
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/review/packet.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/review/packet.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/review/packet.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 315
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:07:57+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:07:57+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"subjective_review::internal/quality/scanner.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/scanner.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/scanner.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 243
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/scoring.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/scoring.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/scoring.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 487
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/state.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/state.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/state.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 371
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/types.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/types.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/types.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 111
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scheduler/scheduler.go::unreviewed": {
|
|
"id": "subjective_review::internal/scheduler/scheduler.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scheduler/scheduler.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 73
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/external/astrodocs.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/external/astrodocs.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/external/astrodocs.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 134
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/external/cloudflaredocs.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/external/cloudflaredocs.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/external/cloudflaredocs.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 171
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/external/dockerdocs.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/external/dockerdocs.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/external/dockerdocs.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 134
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/external/godocs.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/external/godocs.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/external/godocs.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 401
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/external/javadocs.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/external/javadocs.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/external/javadocs.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 232
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/external/mcpdocs.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/external/mcpdocs.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/external/mcpdocs.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 200
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/external/nuxtdocs.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/external/nuxtdocs.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/external/nuxtdocs.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 276
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/external/pythondocs.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/external/pythondocs.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/external/pythondocs.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 441
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/external/reactdocs.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/external/reactdocs.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/external/reactdocs.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 192
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/external/register.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/external/register.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/external/register.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 45
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/external/rustdocs.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/external/rustdocs.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/external/rustdocs.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 541
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/external/springdocs.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/external/springdocs.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/external/springdocs.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 199
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/external/tsdocs.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/external/tsdocs.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/external/tsdocs.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 254
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/external/types.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/external/types.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/external/types.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 86
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/external/vuedocs.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/external/vuedocs.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/external/vuedocs.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 222
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/github.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/github.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/github.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 194
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/local.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/local.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/local.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 262
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/localsearch.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/localsearch.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/localsearch.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 403
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/normalize.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/normalize.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/normalize.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 88
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/openapi.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/openapi.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/openapi.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 338
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/registry_simple.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/registry_simple.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/registry_simple.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 67
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/scraper.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/scraper.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/scraper.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 145
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/web.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/web.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/web.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 479
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/scraper/wrapper.go::unreviewed": {
|
|
"id": "subjective_review::internal/scraper/wrapper.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/scraper/wrapper.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 98
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/server/server.go::unreviewed": {
|
|
"id": "subjective_review::internal/server/server.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/server/server.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 274
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/ui/banner.go::unreviewed": {
|
|
"id": "subjective_review::internal/ui/banner.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/ui/banner.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 206
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/ui/character.go::unreviewed": {
|
|
"id": "subjective_review::internal/ui/character.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/ui/character.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 179
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/vector/store.go::unreviewed": {
|
|
"id": "subjective_review::internal/vector/store.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/vector/store.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 290
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/astrodocs/parser.go::unreviewed": {
|
|
"id": "subjective_review::pkg/astrodocs/parser.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/astrodocs/parser.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 163
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/astrodocs/types.go::unreviewed": {
|
|
"id": "subjective_review::pkg/astrodocs/types.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/astrodocs/types.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 32
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/client/client.go::unreviewed": {
|
|
"id": "subjective_review::pkg/client/client.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/client/client.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 61
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/cloudflaredocs/parser.go::unreviewed": {
|
|
"id": "subjective_review::pkg/cloudflaredocs/parser.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/cloudflaredocs/parser.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 201
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/cloudflaredocs/types.go::unreviewed": {
|
|
"id": "subjective_review::pkg/cloudflaredocs/types.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/cloudflaredocs/types.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 35
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/dockerdocs/parser.go::unreviewed": {
|
|
"id": "subjective_review::pkg/dockerdocs/parser.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/dockerdocs/parser.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 186
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/dockerdocs/types.go::unreviewed": {
|
|
"id": "subjective_review::pkg/dockerdocs/types.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/dockerdocs/types.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 26
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/godocs/parser.go::unreviewed": {
|
|
"id": "subjective_review::pkg/godocs/parser.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/godocs/parser.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 685
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/godocs/types.go::unreviewed": {
|
|
"id": "subjective_review::pkg/godocs/types.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/godocs/types.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 156
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/javadocs/parser.go::unreviewed": {
|
|
"id": "subjective_review::pkg/javadocs/parser.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/javadocs/parser.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 355
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/javadocs/types.go::unreviewed": {
|
|
"id": "subjective_review::pkg/javadocs/types.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/javadocs/types.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 116
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/mcpdocs/parser.go::unreviewed": {
|
|
"id": "subjective_review::pkg/mcpdocs/parser.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/mcpdocs/parser.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 198
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/mcpdocs/types.go::unreviewed": {
|
|
"id": "subjective_review::pkg/mcpdocs/types.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/mcpdocs/types.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 49
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/nuxtdocs/parser.go::unreviewed": {
|
|
"id": "subjective_review::pkg/nuxtdocs/parser.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/nuxtdocs/parser.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 252
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/nuxtdocs/types.go::unreviewed": {
|
|
"id": "subjective_review::pkg/nuxtdocs/types.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/nuxtdocs/types.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 159
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/pythondocs/parser.go::unreviewed": {
|
|
"id": "subjective_review::pkg/pythondocs/parser.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/pythondocs/parser.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 542
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/pythondocs/types.go::unreviewed": {
|
|
"id": "subjective_review::pkg/pythondocs/types.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/pythondocs/types.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 168
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/reactdocs/parser.go::unreviewed": {
|
|
"id": "subjective_review::pkg/reactdocs/parser.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/reactdocs/parser.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 272
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/reactdocs/types.go::unreviewed": {
|
|
"id": "subjective_review::pkg/reactdocs/types.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/reactdocs/types.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 104
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/rustdocs/parser.go::unreviewed": {
|
|
"id": "subjective_review::pkg/rustdocs/parser.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/rustdocs/parser.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 620
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/rustdocs/types.go::unreviewed": {
|
|
"id": "subjective_review::pkg/rustdocs/types.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/rustdocs/types.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 182
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/springdocs/parser.go::unreviewed": {
|
|
"id": "subjective_review::pkg/springdocs/parser.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/springdocs/parser.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 296
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/springdocs/types.go::unreviewed": {
|
|
"id": "subjective_review::pkg/springdocs/types.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/springdocs/types.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 102
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/tsdocs/parser.go::unreviewed": {
|
|
"id": "subjective_review::pkg/tsdocs/parser.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/tsdocs/parser.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 293
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/tsdocs/types.go::unreviewed": {
|
|
"id": "subjective_review::pkg/tsdocs/types.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/tsdocs/types.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 177
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/types/types.go::unreviewed": {
|
|
"id": "subjective_review::pkg/types/types.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/types/types.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 74
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/vuedocs/parser.go::unreviewed": {
|
|
"id": "subjective_review::pkg/vuedocs/parser.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/vuedocs/parser.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 319
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/vuedocs/types.go::unreviewed": {
|
|
"id": "subjective_review::pkg/vuedocs/types.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/vuedocs/types.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 155
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::.::holistic_unreviewed": {
|
|
"id": "subjective_review::.::holistic_unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": ".",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No holistic codebase review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed"
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "resolved by holistic review import",
|
|
"first_seen": "2026-02-23T10:02:25+00:00",
|
|
"last_seen": "2026-02-23T10:09:41+00:00",
|
|
"resolved_at": "2026-02-23T10:11:25+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "agent_import",
|
|
"text": "Holistic review refreshed; coverage marker superseded",
|
|
"attested_at": "2026-02-23T10:11:25+00:00",
|
|
"scan_verified": false
|
|
}
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/astrodocs.go::5aed8009ddb804c8": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/astrodocs.go::5aed8009ddb804c8",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/astrodocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 13 files (window 26 lines): internal/scraper/external/astrodocs.go:72, internal/scraper/external/cloudflaredocs.go:77, internal/scraper/external/dockerdocs.go:72, internal/scraper/external/godocs.go:93, +9 more",
|
|
"detail": {
|
|
"distinct_files": 13,
|
|
"window_size": 26,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/astrodocs.go",
|
|
"line": 72
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/cloudflaredocs.go",
|
|
"line": 77
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/dockerdocs.go",
|
|
"line": 72
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/godocs.go",
|
|
"line": 93
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/javadocs.go",
|
|
"line": 87
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/mcpdocs.go",
|
|
"line": 82
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/nuxtdocs.go",
|
|
"line": 92
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/pythondocs.go",
|
|
"line": 102
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/reactdocs.go",
|
|
"line": 82
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/rustdocs.go",
|
|
"line": 108
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/springdocs.go",
|
|
"line": 82
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/tsdocs.go",
|
|
"line": 87
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/vuedocs.go",
|
|
"line": 87
|
|
}
|
|
],
|
|
"sample": [
|
|
") fetchPage(ctx context.Context, url string) (string, error) {",
|
|
"\treq, err := http.NewRequestWithContext(ctx, \"GET\", url, nil)",
|
|
"\tif err != nil {",
|
|
"\t\treturn \"\", err"
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T10:19:49+00:00",
|
|
"resolved_at": "2026-02-24T10:23:45+00:00",
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:23:45+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/astrodocs.go::5ea934ec38699eba": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/astrodocs.go::5ea934ec38699eba",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/astrodocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 13 files (window 13 lines): internal/scraper/external/astrodocs.go:59, internal/scraper/external/cloudflaredocs.go:64, internal/scraper/external/dockerdocs.go:59, internal/scraper/external/godocs.go:80, +9 more",
|
|
"detail": {
|
|
"distinct_files": 13,
|
|
"window_size": 13,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/astrodocs.go",
|
|
"line": 59
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/cloudflaredocs.go",
|
|
"line": 64
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/dockerdocs.go",
|
|
"line": 59
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/godocs.go",
|
|
"line": 80
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/javadocs.go",
|
|
"line": 74
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/mcpdocs.go",
|
|
"line": 69
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/nuxtdocs.go",
|
|
"line": 79
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/pythondocs.go",
|
|
"line": 89
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/reactdocs.go",
|
|
"line": 69
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/rustdocs.go",
|
|
"line": 95
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/springdocs.go",
|
|
"line": 69
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/tsdocs.go",
|
|
"line": 74
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/vuedocs.go",
|
|
"line": 74
|
|
}
|
|
],
|
|
"sample": [
|
|
") DetectChanges(ctx context.Context, source *Source, lastHash string) (bool, string, error) {",
|
|
"\thtml, err := s.fetchPage(ctx, source.URL)",
|
|
"\tif err != nil {",
|
|
"\t\treturn false, \"\", err"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/astrodocs/parser.go::9d627385e9cbb944": {
|
|
"id": "boilerplate_duplication::pkg/astrodocs/parser.go::9d627385e9cbb944",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/astrodocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 10 files (window 19 lines): pkg/astrodocs/parser.go:159, pkg/cloudflaredocs/parser.go:189, pkg/dockerdocs/parser.go:182, pkg/mcpdocs/parser.go:194, +6 more",
|
|
"detail": {
|
|
"distinct_files": 10,
|
|
"window_size": 19,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/astrodocs/parser.go",
|
|
"line": 159
|
|
},
|
|
{
|
|
"file": "pkg/cloudflaredocs/parser.go",
|
|
"line": 189
|
|
},
|
|
{
|
|
"file": "pkg/dockerdocs/parser.go",
|
|
"line": 182
|
|
},
|
|
{
|
|
"file": "pkg/mcpdocs/parser.go",
|
|
"line": 194
|
|
},
|
|
{
|
|
"file": "pkg/nuxtdocs/parser.go",
|
|
"line": 248
|
|
},
|
|
{
|
|
"file": "pkg/pythondocs/parser.go",
|
|
"line": 537
|
|
},
|
|
{
|
|
"file": "pkg/reactdocs/parser.go",
|
|
"line": 268
|
|
},
|
|
{
|
|
"file": "pkg/springdocs/parser.go",
|
|
"line": 292
|
|
},
|
|
{
|
|
"file": "pkg/tsdocs/parser.go",
|
|
"line": 289
|
|
},
|
|
{
|
|
"file": "pkg/vuedocs/parser.go",
|
|
"line": 315
|
|
}
|
|
],
|
|
"sample": [
|
|
"}",
|
|
"",
|
|
"func resolveURL(base string, href string) string {",
|
|
"\tif strings.HasPrefix(href, \"http\") {"
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-23T10:02:44+00:00",
|
|
"resolved_at": "2026-02-23T10:08:19+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-23T10:08:19+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::pkg/javadocs/parser_test.go::4ee21eb083405284": {
|
|
"id": "boilerplate_duplication::pkg/javadocs/parser_test.go::4ee21eb083405284",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/javadocs/parser_test.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 8 files (window 12 lines): pkg/javadocs/parser_test.go:104, pkg/nuxtdocs/parser_test.go:115, pkg/pythondocs/parser_test.go:250, pkg/reactdocs/parser_test.go:114, +4 more",
|
|
"detail": {
|
|
"distinct_files": 8,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/javadocs/parser_test.go",
|
|
"line": 104
|
|
},
|
|
{
|
|
"file": "pkg/nuxtdocs/parser_test.go",
|
|
"line": 115
|
|
},
|
|
{
|
|
"file": "pkg/pythondocs/parser_test.go",
|
|
"line": 250
|
|
},
|
|
{
|
|
"file": "pkg/reactdocs/parser_test.go",
|
|
"line": 114
|
|
},
|
|
{
|
|
"file": "pkg/rustdocs/parser_test.go",
|
|
"line": 200
|
|
},
|
|
{
|
|
"file": "pkg/springdocs/parser_test.go",
|
|
"line": 92
|
|
},
|
|
{
|
|
"file": "pkg/tsdocs/parser_test.go",
|
|
"line": 86
|
|
},
|
|
{
|
|
"file": "pkg/vuedocs/parser_test.go",
|
|
"line": 101
|
|
}
|
|
],
|
|
"sample": [
|
|
", \"https://example.com/page\", \"https://example.com/page\"},",
|
|
"\t}",
|
|
"",
|
|
"\tfor _, tt := range tests {"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_concerns.py::68ce2d9b6d918946": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_concerns.py::68ce2d9b6d918946",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_concerns.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 4 files (window 12 lines): desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_concerns.py:16, desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_patterns.py:21, desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_props.py:17, desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_react.py:22",
|
|
"detail": {
|
|
"distinct_files": 4,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_concerns.py",
|
|
"line": 16
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_patterns.py",
|
|
"line": 21
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_props.py",
|
|
"line": 17
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_react.py",
|
|
"line": 22
|
|
}
|
|
],
|
|
"sample": [
|
|
", \"PROJECT_ROOT\", tmp_path)",
|
|
" utils_mod._find_source_files_cached.cache_clear()",
|
|
"",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/plugins/go/analyzers/deadcode.go::aee3e4549f34ccba": {
|
|
"id": "boilerplate_duplication::internal/quality/plugins/go/analyzers/deadcode.go::aee3e4549f34ccba",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/plugins/go/analyzers/deadcode.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 4 files (window 10 lines): internal/quality/plugins/go/analyzers/deadcode.go:142, internal/quality/plugins/go/analyzers/detectors.go:36, internal/quality/plugins/go/analyzers/security.go:87, internal/quality/plugins/go/analyzers/test_coverage.go:442",
|
|
"detail": {
|
|
"distinct_files": 4,
|
|
"window_size": 10,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/plugins/go/analyzers/deadcode.go",
|
|
"line": 142
|
|
},
|
|
{
|
|
"file": "internal/quality/plugins/go/analyzers/detectors.go",
|
|
"line": 36
|
|
},
|
|
{
|
|
"file": "internal/quality/plugins/go/analyzers/security.go",
|
|
"line": 87
|
|
},
|
|
{
|
|
"file": "internal/quality/plugins/go/analyzers/test_coverage.go",
|
|
"line": 442
|
|
}
|
|
],
|
|
"sample": [
|
|
") Detect(ctx context.Context, path string, config *quality.Config) ([]quality.Finding, error) {",
|
|
"\tfiles, err := d.FindFiles(path, \"go\")",
|
|
"\tif err != nil {",
|
|
"\t\treturn nil, err"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/javadocs/parser.go::b628d8f7e8a829f0": {
|
|
"id": "boilerplate_duplication::pkg/javadocs/parser.go::b628d8f7e8a829f0",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/javadocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 4 files (window 12 lines): pkg/javadocs/parser.go:39, pkg/rustdocs/parser.go:67, pkg/tsdocs/parser.go:41, pkg/vuedocs/parser.go:39",
|
|
"detail": {
|
|
"distinct_files": 4,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/javadocs/parser.go",
|
|
"line": 39
|
|
},
|
|
{
|
|
"file": "pkg/rustdocs/parser.go",
|
|
"line": 67
|
|
},
|
|
{
|
|
"file": "pkg/tsdocs/parser.go",
|
|
"line": 41
|
|
},
|
|
{
|
|
"file": "pkg/vuedocs/parser.go",
|
|
"line": 39
|
|
}
|
|
],
|
|
"sample": [
|
|
", nil",
|
|
"}",
|
|
"",
|
|
"func (p *Parser) ParseSearchResults(html string) ([]*SearchResult, error) {"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/astrodocs.go::055be5c09f30c6d5": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/astrodocs.go::055be5c09f30c6d5",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/astrodocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 3 files (window 8 lines): internal/scraper/external/astrodocs.go:111, internal/scraper/external/cloudflaredocs.go:120, internal/scraper/external/dockerdocs.go:111",
|
|
"detail": {
|
|
"distinct_files": 3,
|
|
"window_size": 8,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/astrodocs.go",
|
|
"line": 111
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/cloudflaredocs.go",
|
|
"line": 120
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/dockerdocs.go",
|
|
"line": 111
|
|
}
|
|
],
|
|
"sample": [
|
|
".Page, sourceName string) *Document {",
|
|
"\tvar content strings.Builder",
|
|
"\tfmt.Fprintf(&content, \"# %s\\n\\n\", section.Title)",
|
|
"\tfmt.Fprintf(&content, \"%s\\n\", section.Content)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/astrodocs/parser.go::08dadd5b885cb61e": {
|
|
"id": "boilerplate_duplication::pkg/astrodocs/parser.go::08dadd5b885cb61e",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/astrodocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 3 files (window 10 lines): pkg/astrodocs/parser.go:49, pkg/cloudflaredocs/parser.go:51, pkg/dockerdocs/parser.go:50",
|
|
"detail": {
|
|
"distinct_files": 3,
|
|
"window_size": 10,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/astrodocs/parser.go",
|
|
"line": 49
|
|
},
|
|
{
|
|
"file": "pkg/cloudflaredocs/parser.go",
|
|
"line": 51
|
|
},
|
|
{
|
|
"file": "pkg/dockerdocs/parser.go",
|
|
"line": 50
|
|
}
|
|
],
|
|
"sample": [
|
|
").Each(func(_ int, s *goquery.Selection) {",
|
|
"\t\tsection := &Section{}",
|
|
"",
|
|
"\t\tsection.Title = strings.TrimSpace(s.Text())"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/detectors/complexity.go::0ad1e169560f292a": {
|
|
"id": "boilerplate_duplication::internal/quality/detectors/complexity.go::0ad1e169560f292a",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/detectors/complexity.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 3 files (window 7 lines): internal/quality/detectors/complexity.go:112, internal/quality/detectors/duplication.go:47, internal/quality/detectors/naming.go:77",
|
|
"detail": {
|
|
"distinct_files": 3,
|
|
"window_size": 7,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/detectors/complexity.go",
|
|
"line": 112
|
|
},
|
|
{
|
|
"file": "internal/quality/detectors/duplication.go",
|
|
"line": 47
|
|
},
|
|
{
|
|
"file": "internal/quality/detectors/naming.go",
|
|
"line": 77
|
|
}
|
|
],
|
|
"sample": [
|
|
") Detect(ctx context.Context, path string, config *quality.Config) ([]quality.Finding, error) {",
|
|
"\tfiles, err := d.FindFiles(path, config.Language)",
|
|
"\tif err != nil {",
|
|
"\t\treturn nil, fmt.Errorf(\"failed to find files: %w\", err)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/devour_enhanced_v2.py::239547ea496a665a": {
|
|
"id": "boilerplate_duplication::cmd/devour_enhanced_v2.py::239547ea496a665a",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/devour_enhanced_v2.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 9 lines): cmd/devour_enhanced_v2.py:541, cmd/devour_lighthouse.py:333",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/devour_enhanced_v2.py",
|
|
"line": 541
|
|
},
|
|
{
|
|
"file": "cmd/devour_lighthouse.py",
|
|
"line": 333
|
|
}
|
|
],
|
|
"sample": [
|
|
"type_counts = {}",
|
|
" type_scores = {}",
|
|
" ",
|
|
" for finding in findings:"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/pythondocs/parser.go::296d3ee71765aadc": {
|
|
"id": "boilerplate_duplication::pkg/pythondocs/parser.go::296d3ee71765aadc",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/pythondocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 3 files (window 18 lines): pkg/pythondocs/parser.go:19, pkg/springdocs/parser.go:17, pkg/tsdocs/parser.go:17",
|
|
"detail": {
|
|
"distinct_files": 3,
|
|
"window_size": 18,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/pythondocs/parser.go",
|
|
"line": 19
|
|
},
|
|
{
|
|
"file": "pkg/springdocs/parser.go",
|
|
"line": 17
|
|
},
|
|
{
|
|
"file": "pkg/tsdocs/parser.go",
|
|
"line": 17
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
"\t}",
|
|
"}",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/astrodocs.go::461b689d290a5418": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/astrodocs.go::461b689d290a5418",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/astrodocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 3 files (window 9 lines): internal/scraper/external/astrodocs.go:126, internal/scraper/external/cloudflaredocs.go:136, internal/scraper/external/dockerdocs.go:126",
|
|
"detail": {
|
|
"distinct_files": 3,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/astrodocs.go",
|
|
"line": 126
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/cloudflaredocs.go",
|
|
"line": 136
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/dockerdocs.go",
|
|
"line": 126
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
"\t\tTitle: fmt.Sprintf(\"%s - %s\", page.Title, section.Title),",
|
|
"\t\tContent: content.String(),",
|
|
"\t\tURL: section.DocURL,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/nuxtdocs/parser.go::52f3301253825146": {
|
|
"id": "boilerplate_duplication::pkg/nuxtdocs/parser.go::52f3301253825146",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/nuxtdocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 3 files (window 9 lines): pkg/nuxtdocs/parser.go:49, pkg/reactdocs/parser.go:48, pkg/vuedocs/parser.go:50",
|
|
"detail": {
|
|
"distinct_files": 3,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/nuxtdocs/parser.go",
|
|
"line": 49
|
|
},
|
|
{
|
|
"file": "pkg/reactdocs/parser.go",
|
|
"line": 48
|
|
},
|
|
{
|
|
"file": "pkg/vuedocs/parser.go",
|
|
"line": 50
|
|
}
|
|
],
|
|
"sample": [
|
|
").Each(func(i int, s *goquery.Selection) {",
|
|
"\t\tresult := &SearchResult{}",
|
|
"",
|
|
"\t\tresult.Name = strings.TrimSpace(s.Text())"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/astrodocs.go::55ff82aab2964b76": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/astrodocs.go::55ff82aab2964b76",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/astrodocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 3 files (window 12 lines): internal/scraper/external/astrodocs.go:45, internal/scraper/external/cloudflaredocs.go:45, internal/scraper/external/dockerdocs.go:45",
|
|
"detail": {
|
|
"distinct_files": 3,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/astrodocs.go",
|
|
"line": 45
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/cloudflaredocs.go",
|
|
"line": 45
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/dockerdocs.go",
|
|
"line": 45
|
|
}
|
|
],
|
|
"sample": [
|
|
", err)",
|
|
"\t}",
|
|
"",
|
|
"\tmainDoc := s.pageToDocument(page, source.Name)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/pythondocs.go::57721409ed1458ac": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/pythondocs.go::57721409ed1458ac",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/pythondocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 3 files (window 17 lines): internal/scraper/external/pythondocs.go:35, internal/scraper/external/springdocs.go:35, internal/scraper/external/tsdocs.go:35",
|
|
"detail": {
|
|
"distinct_files": 3,
|
|
"window_size": 17,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/pythondocs.go",
|
|
"line": 35
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/springdocs.go",
|
|
"line": 35
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/tsdocs.go",
|
|
"line": 35
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"\t}",
|
|
"",
|
|
"\thtml, err := s.fetchPage(ctx, source.URL)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/nuxtdocs/parser.go::6a48022d7feaac7f": {
|
|
"id": "boilerplate_duplication::pkg/nuxtdocs/parser.go::6a48022d7feaac7f",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/nuxtdocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 3 files (window 16 lines): pkg/nuxtdocs/parser.go:17, pkg/reactdocs/parser.go:17, pkg/vuedocs/parser.go:17",
|
|
"detail": {
|
|
"distinct_files": 3,
|
|
"window_size": 16,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/nuxtdocs/parser.go",
|
|
"line": 17
|
|
},
|
|
{
|
|
"file": "pkg/reactdocs/parser.go",
|
|
"line": 17
|
|
},
|
|
{
|
|
"file": "pkg/vuedocs/parser.go",
|
|
"line": 17
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
"\t}",
|
|
"}",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/devour_enhanced.py::6fdd19d0ba4a6153": {
|
|
"id": "boilerplate_duplication::cmd/devour_enhanced.py::6fdd19d0ba4a6153",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/devour_enhanced.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 3 files (window 20 lines): cmd/devour_enhanced.py:7, cmd/devour_enhanced_v2.py:7, cmd/devour_lighthouse.py:7",
|
|
"detail": {
|
|
"distinct_files": 3,
|
|
"window_size": 20,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/devour_enhanced.py",
|
|
"line": 7
|
|
},
|
|
{
|
|
"file": "cmd/devour_enhanced_v2.py",
|
|
"line": 7
|
|
},
|
|
{
|
|
"file": "cmd/devour_lighthouse.py",
|
|
"line": 7
|
|
}
|
|
],
|
|
"sample": [
|
|
"from __future__ import annotations",
|
|
"",
|
|
"import json",
|
|
"import logging"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/devour_enhanced.py::7a4f6cf79ff1e08c": {
|
|
"id": "boilerplate_duplication::cmd/devour_enhanced.py::7a4f6cf79ff1e08c",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/devour_enhanced.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 3 files (window 20 lines): cmd/devour_enhanced.py:222, cmd/devour_enhanced_v2.py:509, cmd/devour_lighthouse.py:146",
|
|
"detail": {
|
|
"distinct_files": 3,
|
|
"window_size": 20,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/devour_enhanced.py",
|
|
"line": 222
|
|
},
|
|
{
|
|
"file": "cmd/devour_enhanced_v2.py",
|
|
"line": 509
|
|
},
|
|
{
|
|
"file": "cmd/devour_lighthouse.py",
|
|
"line": 146
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"",
|
|
"",
|
|
"def draw_metric_bar("
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/nuxtdocs.go::91ecc3925f04c537": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/nuxtdocs.go::91ecc3925f04c537",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/nuxtdocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 3 files (window 17 lines): internal/scraper/external/nuxtdocs.go:35, internal/scraper/external/reactdocs.go:35, internal/scraper/external/vuedocs.go:35",
|
|
"detail": {
|
|
"distinct_files": 3,
|
|
"window_size": 17,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/nuxtdocs.go",
|
|
"line": 35
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/reactdocs.go",
|
|
"line": 35
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/vuedocs.go",
|
|
"line": 35
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"\t}",
|
|
"",
|
|
"\thtml, err := s.fetchPage(ctx, source.URL)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/analyzers/dataflow.go::93b3c19814e1695f": {
|
|
"id": "boilerplate_duplication::internal/quality/analyzers/dataflow.go::93b3c19814e1695f",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/analyzers/dataflow.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 3 files (window 12 lines): internal/quality/analyzers/dataflow.go:99, internal/quality/plugins/go/analyzers/advanced.go:460, internal/quality/plugins/go/analyzers/deadcode.go:58",
|
|
"detail": {
|
|
"distinct_files": 3,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/analyzers/dataflow.go",
|
|
"line": 99
|
|
},
|
|
{
|
|
"file": "internal/quality/plugins/go/analyzers/advanced.go",
|
|
"line": 460
|
|
},
|
|
{
|
|
"file": "internal/quality/plugins/go/analyzers/deadcode.go",
|
|
"line": 58
|
|
}
|
|
],
|
|
"sample": [
|
|
") Detect(ctx context.Context, path string, config *quality.Config) ([]quality.Finding, error) {",
|
|
"\tcfg := &packages.Config{",
|
|
"\t\tMode: packages.NeedName | packages.NeedTypes | packages.NeedTypesInfo | packages.NeedFiles | packages.NeedSyntax,",
|
|
"\t\tDir: path,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/astrodocs.go::a83dfb94067a4dac": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/astrodocs.go::a83dfb94067a4dac",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/astrodocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 3 files (window 11 lines): internal/scraper/external/astrodocs.go:35, internal/scraper/external/cloudflaredocs.go:35, internal/scraper/external/dockerdocs.go:35",
|
|
"detail": {
|
|
"distinct_files": 3,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/astrodocs.go",
|
|
"line": 35
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/cloudflaredocs.go",
|
|
"line": 35
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/dockerdocs.go",
|
|
"line": 35
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"\t}",
|
|
"",
|
|
"\thtml, err := s.fetchPage(ctx, source.URL)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/nuxtdocs.go::ace0833280b8cd0b": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/nuxtdocs.go::ace0833280b8cd0b",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/nuxtdocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 3 files (window 16 lines): internal/scraper/external/nuxtdocs.go:119, internal/scraper/external/reactdocs.go:136, internal/scraper/external/vuedocs.go:165",
|
|
"detail": {
|
|
"distinct_files": 3,
|
|
"window_size": 16,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/nuxtdocs.go",
|
|
"line": 119
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/reactdocs.go",
|
|
"line": 136
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/vuedocs.go",
|
|
"line": 165
|
|
}
|
|
],
|
|
"sample": [
|
|
".Component, sourceName string) *Document {",
|
|
"\tvar content strings.Builder",
|
|
"\tfmt.Fprintf(&content, \"# <%s />\\n\\n\", comp.Name)",
|
|
"\tfmt.Fprintf(&content, \"%s\\n\", comp.Doc)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/astrodocs/parser.go::b78bcc29753e58ea": {
|
|
"id": "boilerplate_duplication::pkg/astrodocs/parser.go::b78bcc29753e58ea",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/astrodocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 3 files (window 18 lines): pkg/astrodocs/parser.go:17, pkg/cloudflaredocs/parser.go:17, pkg/dockerdocs/parser.go:17",
|
|
"detail": {
|
|
"distinct_files": 3,
|
|
"window_size": 18,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/astrodocs/parser.go",
|
|
"line": 17
|
|
},
|
|
{
|
|
"file": "pkg/cloudflaredocs/parser.go",
|
|
"line": 17
|
|
},
|
|
{
|
|
"file": "pkg/dockerdocs/parser.go",
|
|
"line": 17
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
"\t}",
|
|
"}",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/javadocs/parser.go::c420ebd92db5959d": {
|
|
"id": "boilerplate_duplication::pkg/javadocs/parser.go::c420ebd92db5959d",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/javadocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 3 files (window 11 lines): pkg/javadocs/parser.go:50, pkg/springdocs/parser.go:50, pkg/tsdocs/parser.go:52",
|
|
"detail": {
|
|
"distinct_files": 3,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/javadocs/parser.go",
|
|
"line": 50
|
|
},
|
|
{
|
|
"file": "pkg/springdocs/parser.go",
|
|
"line": 50
|
|
},
|
|
{
|
|
"file": "pkg/tsdocs/parser.go",
|
|
"line": 52
|
|
}
|
|
],
|
|
"sample": [
|
|
").Each(func(i int, s *goquery.Selection) {",
|
|
"\t\tresult := &SearchResult{}",
|
|
"",
|
|
"\t\tlink := s.Find(\"a\").First()"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/devour_enhanced.py::d0f538c3209f4bb2": {
|
|
"id": "boilerplate_duplication::cmd/devour_enhanced.py::d0f538c3209f4bb2",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/devour_enhanced.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 3 files (window 97 lines): cmd/devour_enhanced.py:524, cmd/devour_enhanced_fixed.py:516, cmd/devour_enhanced_v2.py:525",
|
|
"detail": {
|
|
"distinct_files": 3,
|
|
"window_size": 97,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/devour_enhanced.py",
|
|
"line": 524
|
|
},
|
|
{
|
|
"file": "cmd/devour_enhanced_fixed.py",
|
|
"line": 516
|
|
},
|
|
{
|
|
"file": "cmd/devour_enhanced_v2.py",
|
|
"line": 525
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"",
|
|
"",
|
|
"def load_enhanced_devour_data(json_path: str) -> EnhancedScorecardData:"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/detectors/smells.py::d107798e17542211": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/detectors/smells.py::d107798e17542211",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/python/detectors/smells.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 3 files (window 11 lines): desloppify/desloppify/desloppify/languages/python/detectors/smells.py:335, desloppify/desloppify/desloppify/languages/typescript/detectors/react.py:139, desloppify/desloppify/desloppify/languages/typescript/detectors/smells.py:445",
|
|
"detail": {
|
|
"distinct_files": 3,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/python/detectors/smells.py",
|
|
"line": 335
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/react.py",
|
|
"line": 139
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/smells.py",
|
|
"line": 445
|
|
}
|
|
],
|
|
"sample": [
|
|
"try:",
|
|
" p = (",
|
|
" Path(filepath)",
|
|
" if Path(filepath).is_absolute()"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/nuxtdocs/parser.go::e06cae0935a01e1d": {
|
|
"id": "boilerplate_duplication::pkg/nuxtdocs/parser.go::e06cae0935a01e1d",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/nuxtdocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 3 files (window 14 lines): pkg/nuxtdocs/parser.go:36, pkg/reactdocs/parser.go:35, pkg/vuedocs/parser.go:37",
|
|
"detail": {
|
|
"distinct_files": 3,
|
|
"window_size": 14,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/nuxtdocs/parser.go",
|
|
"line": 36
|
|
},
|
|
{
|
|
"file": "pkg/reactdocs/parser.go",
|
|
"line": 35
|
|
},
|
|
{
|
|
"file": "pkg/vuedocs/parser.go",
|
|
"line": 37
|
|
}
|
|
],
|
|
"sample": [
|
|
"(doc, docURL)",
|
|
"",
|
|
"\treturn ref, nil",
|
|
"}"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/fixers/logs.py::fe6abea518d40034": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/fixers/logs.py::fe6abea518d40034",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/fixers/logs.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 3 files (window 13 lines): desloppify/desloppify/desloppify/languages/typescript/fixers/logs.py:87, desloppify/desloppify/desloppify/languages/typescript/fixers/params.py:53, desloppify/desloppify/desloppify/languages/typescript/fixers/vars.py:164",
|
|
"detail": {
|
|
"distinct_files": 3,
|
|
"window_size": 13,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/fixers/logs.py",
|
|
"line": 87
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/fixers/params.py",
|
|
"line": 53
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/fixers/vars.py",
|
|
"line": 164
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" }",
|
|
" )",
|
|
" if not dry_run:"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/move.py::0283e826dc0836ee": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/move.py::0283e826dc0836ee",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/python/move.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 23 lines): desloppify/desloppify/desloppify/languages/python/move.py:159, desloppify/desloppify/desloppify/languages/typescript/move.py:99",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 23,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/python/move.py",
|
|
"line": 159
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/move.py",
|
|
"line": 99
|
|
}
|
|
],
|
|
"sample": [
|
|
"))",
|
|
"",
|
|
" if replacements:",
|
|
" changes[importer] = _dedup(replacements)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::landing/dist/index.html::0424aafa743c47ff": {
|
|
"id": "boilerplate_duplication::landing/dist/index.html::0424aafa743c47ff",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "landing/dist/index.html",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 37 lines): landing/dist/index.html:1, landing/index.html:1",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 37,
|
|
"locations": [
|
|
{
|
|
"file": "landing/dist/index.html",
|
|
"line": 1
|
|
},
|
|
{
|
|
"file": "landing/index.html",
|
|
"line": 1
|
|
}
|
|
],
|
|
"sample": [
|
|
"<!DOCTYPE html>",
|
|
"<html lang=\"en\">",
|
|
" <head>",
|
|
" <meta charset=\"UTF-8\" />"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/_show_terminal.py::062bdd49bd13b018": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/_show_terminal.py::062bdd49bd13b018",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/app/commands/_show_terminal.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 13 lines): desloppify/desloppify/desloppify/app/commands/_show_terminal.py:60, desloppify/desloppify/desloppify/app/commands/show/render.py:97",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 13,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/commands/_show_terminal.py",
|
|
"line": 60
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/commands/show/render.py",
|
|
"line": 97
|
|
}
|
|
],
|
|
"sample": [
|
|
":",
|
|
" status_icon = {",
|
|
" \"open\": \"\u25cb\",",
|
|
" \"fixed\": \"\u2713\","
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/_show_terminal.py::075affa73f393cff": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/_show_terminal.py::075affa73f393cff",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/app/commands/_show_terminal.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 13 lines): desloppify/desloppify/desloppify/app/commands/_show_terminal.py:140, desloppify/desloppify/desloppify/app/commands/show/render.py:145",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 13,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/commands/_show_terminal.py",
|
|
"line": 140
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/commands/show/render.py",
|
|
"line": 145
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" \"dim\",",
|
|
" )",
|
|
" )"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/intelligence/review/importing/holistic.py::07f2f6c708c356f6": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/intelligence/review/importing/holistic.py::07f2f6c708c356f6",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/intelligence/review/importing/holistic.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 14 lines): desloppify/desloppify/desloppify/intelligence/review/importing/holistic.py:110, desloppify/desloppify/desloppify/intelligence/review/importing/per_file.py:77",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 14,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/intelligence/review/importing/holistic.py",
|
|
"line": 110
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/intelligence/review/importing/per_file.py",
|
|
"line": 77
|
|
}
|
|
],
|
|
"sample": [
|
|
":",
|
|
" skipped.append(",
|
|
" {",
|
|
" \"index\": idx,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/intelligence/review/importing/holistic.py::08cc531e07bf0677": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/intelligence/review/importing/holistic.py::08cc531e07bf0677",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/intelligence/review/importing/holistic.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 14 lines): desloppify/desloppify/desloppify/intelligence/review/importing/holistic.py:142, desloppify/desloppify/desloppify/intelligence/review/importing/per_file.py:114",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 14,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/intelligence/review/importing/holistic.py",
|
|
"line": 142
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/intelligence/review/importing/per_file.py",
|
|
"line": 114
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"",
|
|
" diff = merge_scan(",
|
|
" state,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/springdocs.go::0b3b1d80ee6e17a9": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/springdocs.go::0b3b1d80ee6e17a9",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/springdocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 10 lines): internal/scraper/external/springdocs.go:90, internal/scraper/external/tsdocs.go:95",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 10,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/springdocs.go",
|
|
"line": 90
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/tsdocs.go",
|
|
"line": 95
|
|
}
|
|
],
|
|
"sample": [
|
|
".Module, sourceName string) *Document {",
|
|
"\tvar content strings.Builder",
|
|
"\tfmt.Fprintf(&content, \"# %s\\n\\n\", module.Name)",
|
|
"\tfmt.Fprintf(&content, \"%s\\n\", module.Doc)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/plugins/go/fixers/advanced_fixers.go::0c2eecd3d4915e02": {
|
|
"id": "boilerplate_duplication::internal/quality/plugins/go/fixers/advanced_fixers.go::0c2eecd3d4915e02",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/plugins/go/fixers/advanced_fixers.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 16 lines): internal/quality/plugins/go/fixers/advanced_fixers.go:88, internal/quality/plugins/go/fixers/fixers.go:60",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 16,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/plugins/go/fixers/advanced_fixers.go",
|
|
"line": 88
|
|
},
|
|
{
|
|
"file": "internal/quality/plugins/go/fixers/fixers.go",
|
|
"line": 60
|
|
}
|
|
],
|
|
"sample": [
|
|
"),",
|
|
"\t\t}, nil",
|
|
"\t}",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/dockerdocs/parser.go::0caddb4fd18042e9": {
|
|
"id": "boilerplate_duplication::pkg/dockerdocs/parser.go::0caddb4fd18042e9",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/dockerdocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 11 lines): pkg/dockerdocs/parser.go:67, pkg/mcpdocs/parser.go:69",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/dockerdocs/parser.go",
|
|
"line": 67
|
|
},
|
|
{
|
|
"file": "pkg/mcpdocs/parser.go",
|
|
"line": 69
|
|
}
|
|
],
|
|
"sample": [
|
|
"(doc *goquery.Document) string {",
|
|
"\ttitle := doc.Find(\"h1\").First().Text()",
|
|
"\ttitle = strings.TrimSpace(title)",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/devour_scorecard.py::0fdd685c8aba1fb6": {
|
|
"id": "boilerplate_duplication::cmd/devour_scorecard.py::0fdd685c8aba1fb6",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/devour_scorecard.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 254 lines): cmd/devour_scorecard.py:265, cmd/scorecard_generator.py:266",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 254,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/devour_scorecard.py",
|
|
"line": 265
|
|
},
|
|
{
|
|
"file": "cmd/scorecard_generator.py",
|
|
"line": 266
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"",
|
|
"",
|
|
"def draw_right_panel("
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/detectors/_smell_effects.py::145def861d3f1478": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/detectors/_smell_effects.py::145def861d3f1478",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/_smell_effects.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 26 lines): desloppify/desloppify/desloppify/languages/typescript/detectors/_smell_effects.py:31, desloppify/desloppify/desloppify/languages/typescript/detectors/smells.py:310",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 26,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/_smell_effects.py",
|
|
"line": 31
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/smells.py",
|
|
"line": 310
|
|
}
|
|
],
|
|
"sample": [
|
|
") -> None:",
|
|
" \"\"\"Find if/else chains where all branches are empty.\"\"\"",
|
|
" index = 0",
|
|
" while index < len(lines):"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py::148ee0f8aa14654d": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py::148ee0f8aa14654d",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 22 lines): desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py:499, desloppify/desloppify/desloppify/tests/commands/test_cmd_show.py:265",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 22,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py",
|
|
"line": 499
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_show.py",
|
|
"line": 265
|
|
}
|
|
],
|
|
"sample": [
|
|
"\"subjective_integrity\": {",
|
|
" \"status\": \"penalized\",",
|
|
" \"target_score\": 95.0,",
|
|
" \"matched_count\": 2,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/scorecard_generator.py::1521ddf28fadbab0": {
|
|
"id": "boilerplate_duplication::cmd/scorecard_generator.py::1521ddf28fadbab0",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/scorecard_generator.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 18 lines): cmd/scorecard_generator.py:53, desloppify/desloppify/desloppify/app/output/scorecard_parts/theme.py:21",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 18,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/scorecard_generator.py",
|
|
"line": 53
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/output/scorecard_parts/theme.py",
|
|
"line": 21
|
|
}
|
|
],
|
|
"sample": [
|
|
"if score >= 90:",
|
|
" base = (68, 120, 68) # deep sage",
|
|
" elif score >= 70:",
|
|
" base = (120, 140, 72) # olive green"
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::pkg/astrodocs/parser_test.go::15d407d0f53a591b": {
|
|
"id": "boilerplate_duplication::pkg/astrodocs/parser_test.go::15d407d0f53a591b",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/astrodocs/parser_test.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 14 lines): pkg/astrodocs/parser_test.go:32, pkg/dockerdocs/parser_test.go:34",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 14,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/astrodocs/parser_test.go",
|
|
"line": 32
|
|
},
|
|
{
|
|
"file": "pkg/dockerdocs/parser_test.go",
|
|
"line": 34
|
|
}
|
|
],
|
|
"sample": [
|
|
"{",
|
|
"\t\tt.Fatalf(\"unexpected title: %q\", page.Title)",
|
|
"\t}",
|
|
"\tif page.Description == \"\" {"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/pythondocs/parser_test.go::16681458a5b4689e": {
|
|
"id": "boilerplate_duplication::pkg/pythondocs/parser_test.go::16681458a5b4689e",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/pythondocs/parser_test.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): pkg/pythondocs/parser_test.go:216, pkg/tsdocs/parser_test.go:59",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/pythondocs/parser_test.go",
|
|
"line": 216
|
|
},
|
|
{
|
|
"file": "pkg/tsdocs/parser_test.go",
|
|
"line": 59
|
|
}
|
|
],
|
|
"sample": [
|
|
"}",
|
|
"}",
|
|
"",
|
|
"func TestExtractFunctions(t *testing.T) {"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/intelligence/review/importing/holistic.py::1705f46c1c6d265d": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/intelligence/review/importing/holistic.py::1705f46c1c6d265d",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/intelligence/review/importing/holistic.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 7 lines): desloppify/desloppify/desloppify/intelligence/review/importing/holistic.py:88, desloppify/desloppify/desloppify/intelligence/review/importing/per_file.py:55",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 7,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/intelligence/review/importing/holistic.py",
|
|
"line": 88
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/intelligence/review/importing/per_file.py",
|
|
"line": 55
|
|
}
|
|
],
|
|
"sample": [
|
|
"\"dimension\", \"identifier\", \"summary\", \"confidence\")",
|
|
"",
|
|
" review_findings: list[dict[str, Any]] = []",
|
|
" skipped: list[dict[str, Any]] = []"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/reactdocs/parser.go::1930cb01f7357d88": {
|
|
"id": "boilerplate_duplication::pkg/reactdocs/parser.go::1930cb01f7357d88",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/reactdocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 17 lines): pkg/reactdocs/parser.go:180, pkg/vuedocs/parser.go:95",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 17,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/reactdocs/parser.go",
|
|
"line": 180
|
|
},
|
|
{
|
|
"file": "pkg/vuedocs/parser.go",
|
|
"line": 95
|
|
}
|
|
],
|
|
"sample": [
|
|
"{",
|
|
"\t\t\treturn",
|
|
"\t\t}",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::devour_data/docs/docker_compose_-_ask_me_about_docker_1.md::1a5cab72fc1e07d1": {
|
|
"id": "boilerplate_duplication::devour_data/docs/docker_compose_-_ask_me_about_docker_1.md::1a5cab72fc1e07d1",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "devour_data/docs/docker_compose_-_ask_me_about_docker_1.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): devour_data/docs/docker_compose_-_ask_me_about_docker_1.md:5, devour_data/docs/docker_compose_-_why_use_compose?_3.md:5",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "devour_data/docs/docker_compose_-_ask_me_about_docker_1.md",
|
|
"line": 5
|
|
},
|
|
{
|
|
"file": "devour_data/docs/docker_compose_-_why_use_compose?_3.md",
|
|
"line": 5
|
|
}
|
|
],
|
|
"sample": [
|
|
"cker Compose - Ask me about Docker",
|
|
"",
|
|
"## \ud83d\udccb Document Information",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/astrodocs/parser.go::1ac05284ed308f5c": {
|
|
"id": "boilerplate_duplication::pkg/astrodocs/parser.go::1ac05284ed308f5c",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/astrodocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 14 lines): pkg/astrodocs/parser.go:36, pkg/cloudflaredocs/parser.go:38",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 14,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/astrodocs/parser.go",
|
|
"line": 36
|
|
},
|
|
{
|
|
"file": "pkg/cloudflaredocs/parser.go",
|
|
"line": 38
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"",
|
|
"\treturn page, nil",
|
|
"}"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py::1b6b82ff734e17ac": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py::1b6b82ff734e17ac",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py:591, desloppify/desloppify/desloppify/languages/python/commands.py:145",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py",
|
|
"line": 591
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/python/commands.py",
|
|
"line": 145
|
|
}
|
|
],
|
|
"sample": [
|
|
"))",
|
|
" return",
|
|
" if not cycles:",
|
|
" print(c(\"No import cycles found.\", \"green\"))"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/commands.py::1be7d500bbb37b83": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/commands.py::1be7d500bbb37b83",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/commands.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 25 lines): desloppify/desloppify/desloppify/languages/csharp/commands.py:100, desloppify/desloppify/desloppify/languages/typescript/commands.py:128",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 25,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/commands.py",
|
|
"line": 100
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/commands.py",
|
|
"line": 128
|
|
}
|
|
],
|
|
"sample": [
|
|
"detect_duplicates(",
|
|
" functions, threshold=getattr(args, \"threshold\", None) or 0.8",
|
|
" )",
|
|
" if getattr(args, \"json\", False):"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/dockerdocs/parser.go::1c3775c4cb39e3f9": {
|
|
"id": "boilerplate_duplication::pkg/dockerdocs/parser.go::1c3775c4cb39e3f9",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/dockerdocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 15 lines): pkg/dockerdocs/parser.go:77, pkg/mcpdocs/parser.go:76",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 15,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/dockerdocs/parser.go",
|
|
"line": 77
|
|
},
|
|
{
|
|
"file": "pkg/mcpdocs/parser.go",
|
|
"line": 76
|
|
}
|
|
],
|
|
"sample": [
|
|
"); idx > 0 {",
|
|
"\t\t\ttitle = title[:idx]",
|
|
"\t\t}",
|
|
"\t}"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/devour_enhanced_v2.py::1e543b478f4d05a8": {
|
|
"id": "boilerplate_duplication::cmd/devour_enhanced_v2.py::1e543b478f4d05a8",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/devour_enhanced_v2.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 11 lines): cmd/devour_enhanced_v2.py:27, cmd/devour_lighthouse.py:27",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/devour_enhanced_v2.py",
|
|
"line": 27
|
|
},
|
|
{
|
|
"file": "cmd/devour_lighthouse.py",
|
|
"line": 27
|
|
}
|
|
],
|
|
"sample": [
|
|
"SCALE = 2",
|
|
"BG = (248, 248, 246)",
|
|
"FRAME = (222, 222, 220)",
|
|
"BORDER = (200, 200, 198)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/javadocs.go::20dfdcbb0bc33e2c": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/javadocs.go::20dfdcbb0bc33e2c",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/javadocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 11 lines): internal/scraper/external/javadocs.go:142, internal/scraper/external/springdocs.go:137",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/javadocs.go",
|
|
"line": 142
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/springdocs.go",
|
|
"line": 137
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
"\t\tTitle: class.QualifiedName,",
|
|
"\t\tContent: content.String(),",
|
|
"\t\tURL: class.DocURL,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/intelligence/review/importing/holistic.py::249d0e9d8e261b86": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/intelligence/review/importing/holistic.py::249d0e9d8e261b86",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/intelligence/review/importing/holistic.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 17 lines): desloppify/desloppify/desloppify/intelligence/review/importing/holistic.py:94, desloppify/desloppify/desloppify/intelligence/review/importing/per_file.py:61",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 17,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/intelligence/review/importing/holistic.py",
|
|
"line": 94
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/intelligence/review/importing/per_file.py",
|
|
"line": 61
|
|
}
|
|
],
|
|
"sample": [
|
|
"if key not in finding]",
|
|
" if missing:",
|
|
" skipped.append(",
|
|
" {"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/detectors/react.py::2549f18d5be6f4cf": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/detectors/react.py::2549f18d5be6f4cf",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/react.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): desloppify/desloppify/desloppify/languages/typescript/detectors/react.py:197, desloppify/desloppify/desloppify/languages/typescript/extractors_components.py:120",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/react.py",
|
|
"line": 197
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/extractors_components.py",
|
|
"line": 120
|
|
}
|
|
],
|
|
"sample": [
|
|
"for filepath in find_tsx_files(path):",
|
|
" try:",
|
|
" p = (",
|
|
" Path(filepath)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/reactdocs.go::25a4b19b907fdf16": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/reactdocs.go::25a4b19b907fdf16",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/reactdocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 9 lines): internal/scraper/external/reactdocs.go:169, internal/scraper/external/vuedocs.go:198",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/reactdocs.go",
|
|
"line": 169
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/vuedocs.go",
|
|
"line": 198
|
|
}
|
|
],
|
|
"sample": [
|
|
", api.Name)",
|
|
"\tif api.Signature != \"\" {",
|
|
"\t\tfmt.Fprintf(&content, \"```javascript\\n%s\\n```\\n\\n\", api.Signature)",
|
|
"\t}"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/_parse_helpers.py::26ee954e977d161d": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/_parse_helpers.py::26ee954e977d161d",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/_parse_helpers.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 16 lines): desloppify/desloppify/desloppify/languages/csharp/_parse_helpers.py:63, desloppify/desloppify/desloppify/languages/dart/extractors.py:60",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 16,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/_parse_helpers.py",
|
|
"line": 63
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/dart/extractors.py",
|
|
"line": 60
|
|
}
|
|
],
|
|
"sample": [
|
|
", len(content)):",
|
|
" ch = content[i]",
|
|
" if in_string:",
|
|
" if escape:"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_deps.py::29b69be62d9e6607": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_deps.py::29b69be62d9e6607",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_deps.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 11 lines): desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_deps.py:23, desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_smells.py:23",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_deps.py",
|
|
"line": 23
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_smells.py",
|
|
"line": 23
|
|
}
|
|
],
|
|
"sample": [
|
|
".cache_clear()",
|
|
"",
|
|
"",
|
|
"def _write(tmp_path: Path, name: str, content: str) -> Path:"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/devour_enhanced_fixed.py::2bc292630071e423": {
|
|
"id": "boilerplate_duplication::cmd/devour_enhanced_fixed.py::2bc292630071e423",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/devour_enhanced_fixed.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 41 lines): cmd/devour_enhanced_fixed.py:479, cmd/devour_lighthouse.py:90",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 41,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/devour_enhanced_fixed.py",
|
|
"line": 479
|
|
},
|
|
{
|
|
"file": "cmd/devour_lighthouse.py",
|
|
"line": 90
|
|
}
|
|
],
|
|
"sample": [
|
|
"def score_to_color(score: float) -> Tuple[int, int, int]:",
|
|
" \"\"\"Convert score to color.\"\"\"",
|
|
" if score >= 90:",
|
|
" return COLORS['excellent']"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/languages.go::2c7319a8038014fb": {
|
|
"id": "boilerplate_duplication::internal/quality/languages.go::2c7319a8038014fb",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/languages.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): internal/quality/languages.go:104, internal/quality/scanner.go:157",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/languages.go",
|
|
"line": 104
|
|
},
|
|
{
|
|
"file": "internal/quality/scanner.go",
|
|
"line": 157
|
|
}
|
|
],
|
|
"sample": [
|
|
"if info.IsDir() {",
|
|
"\t\t\t// Skip hidden directories and common exclude dirs",
|
|
"\t\t\tbase := filepath.Base(filePath)",
|
|
"\t\t\tif strings.HasPrefix(base, \".\") || base == \"node_modules\" || base == \"vendor\" {"
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/deps/fallback.py::2c9b8cf585618e39": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/deps/fallback.py::2c9b8cf585618e39",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/deps/fallback.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 10 lines): desloppify/desloppify/desloppify/languages/csharp/deps/fallback.py:154, desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py:434",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 10,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/deps/fallback.py",
|
|
"line": 154
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py",
|
|
"line": 434
|
|
}
|
|
],
|
|
"sample": [
|
|
"graph: dict[str, dict] = defaultdict(lambda: {\"imports\": set(), \"importers\": set()})",
|
|
"",
|
|
" cs_files = find_csharp_files(path)",
|
|
" if not cs_files:"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/deps/cli.py::2e5a1a559544def1": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/deps/cli.py::2e5a1a559544def1",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/deps/cli.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 38 lines): desloppify/desloppify/desloppify/languages/csharp/deps/cli.py:14, desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py:522",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 38,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/deps/cli.py",
|
|
"line": 14
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py",
|
|
"line": 522
|
|
}
|
|
],
|
|
"sample": [
|
|
"(args))",
|
|
"",
|
|
" if getattr(args, \"file\", None):",
|
|
" coupling = get_coupling_score(args.file, graph)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/_shared/phases_common.py::3100d8b4e64ebee4": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/_shared/phases_common.py::3100d8b4e64ebee4",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/_shared/phases_common.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 9 lines): desloppify/desloppify/desloppify/languages/_shared/phases_common.py:10, desloppify/desloppify/desloppify/languages/csharp/phases.py:12",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/_shared/phases_common.py",
|
|
"line": 10
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/phases.py",
|
|
"line": 12
|
|
}
|
|
],
|
|
"sample": [
|
|
"from desloppify.engine.detectors.graph import detect_cycles",
|
|
"from desloppify.engine.detectors.large import detect_large_files",
|
|
"from desloppify.engine.detectors.orphaned import (",
|
|
" OrphanedDetectionOptions,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/deps/fallback.py::315b3e08fc3b9134": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/deps/fallback.py::315b3e08fc3b9134",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/deps/fallback.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 39 lines): desloppify/desloppify/desloppify/languages/csharp/deps/fallback.py:18, desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py:29",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 39,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/deps/fallback.py",
|
|
"line": 18
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py",
|
|
"line": 29
|
|
}
|
|
],
|
|
"sample": [
|
|
"_USING_RE = re.compile(r\"(?m)^\\s*(?:global\\s+)?using\\s+([A-Za-z_]\\w*(?:\\.[A-Za-z_]\\w*)*)\\s*;\")",
|
|
"_USING_ALIAS_RE = re.compile(",
|
|
" r\"(?m)^\\s*(?:global\\s+)?using\\s+[A-Za-z_]\\w*\\s*=\\s*([A-Za-z_]\\w*(?:\\.[A-Za-z_]\\w*)*)\\s*;\"",
|
|
")"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/intelligence/review/dimensions/data.py::32ec6b004bd8e480": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/intelligence/review/dimensions/data.py::32ec6b004bd8e480",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/intelligence/review/dimensions/data.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 10 lines): desloppify/desloppify/desloppify/intelligence/review/dimensions/data.py:61, desloppify/desloppify/desloppify/intelligence/review/dimensions/validation.py:32",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 10,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/intelligence/review/dimensions/data.py",
|
|
"line": 61
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/intelligence/review/dimensions/validation.py",
|
|
"line": 32
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
" out: list[str] = []",
|
|
" for idx, item in enumerate(value):",
|
|
" if not isinstance(item, str) or not item.strip():"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/astrodocs/parser.go::3489636578dd8a62": {
|
|
"id": "boilerplate_duplication::pkg/astrodocs/parser.go::3489636578dd8a62",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/astrodocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 10 lines): pkg/astrodocs/parser.go:140, pkg/cloudflaredocs/parser.go:147",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 10,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/astrodocs/parser.go",
|
|
"line": 140
|
|
},
|
|
{
|
|
"file": "pkg/cloudflaredocs/parser.go",
|
|
"line": 147
|
|
}
|
|
],
|
|
"sample": [
|
|
".Attr(\"class\"); exists {",
|
|
"\t\t\t\tparts := strings.Split(classes, \" \")",
|
|
"\t\t\t\tfor _, part := range parts {",
|
|
"\t\t\t\t\tif strings.HasPrefix(part, \"language-\") {"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/resolve/selection.py::349e8ced50b983c0": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/resolve/selection.py::349e8ced50b983c0",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/app/commands/resolve/selection.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): desloppify/desloppify/desloppify/app/commands/resolve/selection.py:90, desloppify/desloppify/desloppify/app/commands/scan/scan_reporting_llm.py:21",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/commands/resolve/selection.py",
|
|
"line": 90
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/commands/scan/scan_reporting_llm.py",
|
|
"line": 21
|
|
}
|
|
],
|
|
"sample": [
|
|
"(",
|
|
" state: dict,",
|
|
") -> tuple[float | None, float | None, float | None, float | None]:",
|
|
" return ("
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::AGENTS.md::353eb2d286a2c3da": {
|
|
"id": "boilerplate_duplication::AGENTS.md::353eb2d286a2c3da",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "AGENTS.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 46 lines): AGENTS.md:84, desloppify/desloppify/docs/SKILL.md:79",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 46,
|
|
"locations": [
|
|
{
|
|
"file": "AGENTS.md",
|
|
"line": 84
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/docs/SKILL.md",
|
|
"line": 79
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
" and findings, then import:",
|
|
" ```bash",
|
|
" desloppify review --import findings.json"
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/__init__.py::35e3ba539e5896b0": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/__init__.py::35e3ba539e5896b0",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/python/__init__.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 11 lines): desloppify/desloppify/desloppify/languages/python/__init__.py:6, desloppify/desloppify/desloppify/languages/typescript/__init__.py:5",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/python/__init__.py",
|
|
"line": 6
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/__init__.py",
|
|
"line": 5
|
|
}
|
|
],
|
|
"sample": [
|
|
"from pathlib import Path",
|
|
"",
|
|
"from desloppify.engine.policy.zones import COMMON_ZONE_RULES, Zone, ZoneRule",
|
|
"from desloppify.hook_registry import register_lang_hooks"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/languages_test.go::35fcaa7914639e34": {
|
|
"id": "boilerplate_duplication::internal/quality/languages_test.go::35fcaa7914639e34",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/languages_test.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 10 lines): internal/quality/languages_test.go:266, internal/quality/scanner_test.go:337",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 10,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/languages_test.go",
|
|
"line": 266
|
|
},
|
|
{
|
|
"file": "internal/quality/scanner_test.go",
|
|
"line": 337
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
"\t\t\tsetup: func() string {",
|
|
"\t\t\t\tdir, _ := os.MkdirTemp(\"\", \"go_test\")",
|
|
"\t\t\t\tos.WriteFile(filepath.Join(dir, \"go.mod\"), []byte(\"module test\"), 0644)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/devour_enhanced_v2.py::3623874fc56f1e2c": {
|
|
"id": "boilerplate_duplication::cmd/devour_enhanced_v2.py::3623874fc56f1e2c",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/devour_enhanced_v2.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 7 lines): cmd/devour_enhanced_v2.py:41, cmd/devour_lighthouse.py:39",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 7,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/devour_enhanced_v2.py",
|
|
"line": 41
|
|
},
|
|
{
|
|
"file": "cmd/devour_lighthouse.py",
|
|
"line": 39
|
|
}
|
|
],
|
|
"sample": [
|
|
"COLORS = {",
|
|
" 'excellent': (68, 120, 68), # deep sage",
|
|
" 'good': (120, 140, 72), # olive green ",
|
|
" 'moderate': (145, 155, 80), # yellow-green"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/plugins/go/analyzers/detectors.go::36580fba901fceee": {
|
|
"id": "boilerplate_duplication::internal/quality/plugins/go/analyzers/detectors.go::36580fba901fceee",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/plugins/go/analyzers/detectors.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 13 lines): internal/quality/plugins/go/analyzers/detectors.go:155, internal/quality/plugins/go/plugin.go:198",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 13,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/plugins/go/analyzers/detectors.go",
|
|
"line": 155
|
|
},
|
|
{
|
|
"file": "internal/quality/plugins/go/plugin.go",
|
|
"line": 198
|
|
}
|
|
],
|
|
"sample": [
|
|
"for _, decl := range node.Decls {",
|
|
"\t\tgen, ok := decl.(*ast.GenDecl)",
|
|
"\t\tif !ok || gen.Tok != token.TYPE {",
|
|
"\t\t\tcontinue"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/_shared/review_data/dimensions.json::37b0e9041b173701": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/_shared/review_data/dimensions.json::37b0e9041b173701",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/_shared/review_data/dimensions.json",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 46 lines): desloppify/desloppify/desloppify/languages/_shared/review_data/dimensions.json:229, desloppify/desloppify/desloppify/tests/snapshots/cli_smoke/query.json:96",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 46,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/_shared/review_data/dimensions.json",
|
|
"line": 229
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/snapshots/cli_smoke/query.json",
|
|
"line": 96
|
|
}
|
|
],
|
|
"sample": [
|
|
"]",
|
|
" },",
|
|
" \"dependency_health\": {",
|
|
" \"description\": \"Unused deps, version conflicts, multiple libs for same purpose, heavy deps\","
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/springdocs.go::39ac1639c0eb7bfd": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/springdocs.go::39ac1639c0eb7bfd",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/springdocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 11 lines): internal/scraper/external/springdocs.go:105, internal/scraper/external/tsdocs.go:110",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/springdocs.go",
|
|
"line": 105
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/tsdocs.go",
|
|
"line": 110
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
"\t\tTitle: module.Name,",
|
|
"\t\tContent: content.String(),",
|
|
"\t\tURL: module.DocURL,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::AGENTS.md::3ad4818f3d28ce44": {
|
|
"id": "boilerplate_duplication::AGENTS.md::3ad4818f3d28ce44",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "AGENTS.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 8 lines): AGENTS.md:3, desloppify/desloppify/docs/SKILL.md:1",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 8,
|
|
"locations": [
|
|
{
|
|
"file": "AGENTS.md",
|
|
"line": 3
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/docs/SKILL.md",
|
|
"line": 1
|
|
}
|
|
],
|
|
"sample": [
|
|
"---",
|
|
"name: desloppify",
|
|
"description: >",
|
|
" Codebase health scanner and technical debt tracker. Use when the user asks"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/astrodocs.go::3bf181fa343f7fe4": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/astrodocs.go::3bf181fa343f7fe4",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/astrodocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 16 lines): internal/scraper/external/astrodocs.go:80, internal/scraper/external/dockerdocs.go:80",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 16,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/astrodocs.go",
|
|
"line": 80
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/dockerdocs.go",
|
|
"line": 80
|
|
}
|
|
],
|
|
"sample": [
|
|
".Page, sourceName string) *Document {",
|
|
"\tvar content strings.Builder",
|
|
"\tfmt.Fprintf(&content, \"# %s\\n\\n\", page.Title)",
|
|
"\tfmt.Fprintf(&content, \"%s\\n\", page.Description)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/commands.py::3cd15f2351329f0d": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/commands.py::3cd15f2351329f0d",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/python/commands.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): desloppify/desloppify/desloppify/languages/python/commands.py:74, desloppify/desloppify/desloppify/languages/typescript/commands.py:77",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/python/commands.py",
|
|
"line": 74
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/commands.py",
|
|
"line": 77
|
|
}
|
|
],
|
|
"sample": [
|
|
"),",
|
|
" \", \".join(e[\"reasons\"]),",
|
|
" ],",
|
|
" )"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/devour_enhanced_fixed.py::3dc8d5915c88f498": {
|
|
"id": "boilerplate_duplication::cmd/devour_enhanced_fixed.py::3dc8d5915c88f498",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/devour_enhanced_fixed.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 20 lines): cmd/devour_enhanced_fixed.py:460, cmd/devour_enhanced_v2.py:509",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 20,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/devour_enhanced_fixed.py",
|
|
"line": 460
|
|
},
|
|
{
|
|
"file": "cmd/devour_enhanced_v2.py",
|
|
"line": 509
|
|
}
|
|
],
|
|
"sample": [
|
|
"draw.text((x, y + scale(5), info_text, fill=DIM, font=font_footer)",
|
|
"",
|
|
"",
|
|
"def draw_metric_bar("
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/fixers/common.py::3fdbe3640a4c72e6": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/fixers/common.py::3fdbe3640a4c72e6",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/fixers/common.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 16 lines): desloppify/desloppify/desloppify/languages/typescript/fixers/common.py:196, desloppify/desloppify/desloppify/languages/typescript/fixers/imports.py:113",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 16,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/fixers/common.py",
|
|
"line": 196
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/fixers/imports.py",
|
|
"line": 113
|
|
}
|
|
],
|
|
"sample": [
|
|
"def _normalize_binding_name(token: str) -> str:",
|
|
" normalized = token.strip().rstrip(\",\")",
|
|
" if normalized.startswith(\"type \"):",
|
|
" normalized = normalized[len(\"type \"):].strip()"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/engine/scoring_internal/subjective/core.py::41614c71cbf0650e": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/engine/scoring_internal/subjective/core.py::41614c71cbf0650e",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/engine/scoring_internal/subjective/core.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 16 lines): desloppify/desloppify/desloppify/engine/scoring_internal/subjective/core.py:11, desloppify/desloppify/desloppify/intelligence/review/dimensions/metadata.py:15",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 16,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/engine/scoring_internal/subjective/core.py",
|
|
"line": 11
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/intelligence/review/dimensions/metadata.py",
|
|
"line": 15
|
|
}
|
|
],
|
|
"sample": [
|
|
"\"cross_module_architecture\": \"Cross-Module Arch\",",
|
|
" \"initialization_coupling\": \"Init Coupling\",",
|
|
" \"convention_outlier\": \"Convention Drift\",",
|
|
" \"error_consistency\": \"Error Consistency\","
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/detectors/exports.py::421aec6fd820dbdf": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/detectors/exports.py::421aec6fd820dbdf",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/exports.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 10 lines): desloppify/desloppify/desloppify/languages/typescript/detectors/exports.py:106, desloppify/desloppify/desloppify/languages/typescript/detectors/unused.py:352",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 10,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/exports.py",
|
|
"line": 106
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/unused.py",
|
|
"line": 352
|
|
}
|
|
],
|
|
"sample": [
|
|
"))",
|
|
"",
|
|
" sorted_files = sorted(by_file.items(), key=lambda x: -len(x[1]))",
|
|
" rows = []"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/dart/commands.py::43d9c692d51ed8ce": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/dart/commands.py::43d9c692d51ed8ce",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/dart/commands.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 37 lines): desloppify/desloppify/desloppify/languages/dart/commands.py:44, desloppify/desloppify/desloppify/languages/gdscript/commands.py:40",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 37,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/dart/commands.py",
|
|
"line": 44
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/gdscript/commands.py",
|
|
"line": 40
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
")",
|
|
"_cmd_dupes_impl = make_cmd_dupes(extract_functions_fn=extract_functions)",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/resolve/selection.py::43efac19f577164d": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/resolve/selection.py::43efac19f577164d",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/app/commands/resolve/selection.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 9 lines): desloppify/desloppify/desloppify/app/commands/resolve/selection.py:68, desloppify/desloppify/desloppify/engine/state_internal/scoring.py:33",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/commands/resolve/selection.py",
|
|
"line": 68
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/engine/state_internal/scoring.py",
|
|
"line": 33
|
|
}
|
|
],
|
|
"sample": [
|
|
"raw = value.get(\"score\", 0) if isinstance(value, dict) else value",
|
|
" try:",
|
|
" score = float(raw)",
|
|
" except (TypeError, ValueError):"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/_parse_helpers.py::44682ce64ea514c8": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/_parse_helpers.py::44682ce64ea514c8",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/_parse_helpers.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 16 lines): desloppify/desloppify/desloppify/languages/csharp/_parse_helpers.py:28, desloppify/desloppify/desloppify/languages/dart/extractors.py:30",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 16,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/_parse_helpers.py",
|
|
"line": 28
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/dart/extractors.py",
|
|
"line": 30
|
|
}
|
|
],
|
|
"sample": [
|
|
"depth = 0",
|
|
" in_string: str | None = None",
|
|
" escape = False",
|
|
" for i in range(open_pos, len(content)):"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::devour_data/docs/docker_compose_-_docker_compose_2.md::4742f11c24fb9b23": {
|
|
"id": "boilerplate_duplication::devour_data/docs/docker_compose_-_docker_compose_2.md::4742f11c24fb9b23",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "devour_data/docs/docker_compose_-_docker_compose_2.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): devour_data/docs/docker_compose_-_docker_compose_2.md:5, devour_data/docs/docker_compose_-_view_the_release_notes_7.md:5",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "devour_data/docs/docker_compose_-_docker_compose_2.md",
|
|
"line": 5
|
|
},
|
|
{
|
|
"file": "devour_data/docs/docker_compose_-_view_the_release_notes_7.md",
|
|
"line": 5
|
|
}
|
|
],
|
|
"sample": [
|
|
"cker Compose - Docker Compose",
|
|
"",
|
|
"## \ud83d\udccb Document Information",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/detectors/_smell_effects.py::4845dcd5bb720da1": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/detectors/_smell_effects.py::4845dcd5bb720da1",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/_smell_effects.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 17 lines): desloppify/desloppify/desloppify/languages/typescript/detectors/_smell_effects.py:84, desloppify/desloppify/desloppify/languages/typescript/detectors/smells.py:357",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 17,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/_smell_effects.py",
|
|
"line": 84
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/smells.py",
|
|
"line": 357
|
|
}
|
|
],
|
|
"sample": [
|
|
"continue",
|
|
" cursor += 1",
|
|
" break",
|
|
" elif current == \"\":"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/phases.py::484d30f55c5a4cb5": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/phases.py::484d30f55c5a4cb5",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/python/phases.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 8 lines): desloppify/desloppify/desloppify/languages/python/phases.py:129, desloppify/desloppify/desloppify/languages/typescript/phases.py:163",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 8,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/python/phases.py",
|
|
"line": 129
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/phases.py",
|
|
"line": 163
|
|
}
|
|
],
|
|
"sample": [
|
|
"def _phase_unused(path: Path, lang: LangConfig) -> tuple[list[dict], dict[str, int]]:",
|
|
" entries, total_files = unused_detector_mod.detect_unused(path)",
|
|
" return make_unused_findings(entries, log), {",
|
|
" \"unused\": adjust_potential(lang.zone_map, total_files),"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/astrodocs/parser_test.go::486c8b24541ebb8c": {
|
|
"id": "boilerplate_duplication::pkg/astrodocs/parser_test.go::486c8b24541ebb8c",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/astrodocs/parser_test.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 9 lines): pkg/astrodocs/parser_test.go:66, pkg/cloudflaredocs/parser_test.go:70",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/astrodocs/parser_test.go",
|
|
"line": 66
|
|
},
|
|
{
|
|
"file": "pkg/cloudflaredocs/parser_test.go",
|
|
"line": 70
|
|
}
|
|
],
|
|
"sample": [
|
|
"sections, err := parser.ParseSidebar(html)",
|
|
"\tif err != nil {",
|
|
"\t\tt.Fatalf(\"ParseSidebar failed: %v\", err)",
|
|
"\t}"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/devour_enhanced.py::48b0d85c62a66eb3": {
|
|
"id": "boilerplate_duplication::cmd/devour_enhanced.py::48b0d85c62a66eb3",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/devour_enhanced.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 79 lines): cmd/devour_enhanced.py:238, cmd/devour_enhanced_v2.py:222",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 79,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/devour_enhanced.py",
|
|
"line": 238
|
|
},
|
|
{
|
|
"file": "cmd/devour_enhanced_v2.py",
|
|
"line": 222
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"",
|
|
"",
|
|
"def generate_enhanced_scorecard(data: EnhancedScorecardData, output_path: str | Path) -> Path:"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/status_parts/render.py::48cd2cd429d12628": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/status_parts/render.py::48cd2cd429d12628",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/app/commands/status_parts/render.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 14 lines): desloppify/desloppify/desloppify/app/commands/status_parts/render.py:127, desloppify/desloppify/desloppify/app/commands/status_parts/transparency.py:41",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 14,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/commands/status_parts/render.py",
|
|
"line": 127
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/commands/status_parts/transparency.py",
|
|
"line": 41
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
" )",
|
|
" elif suppression.get(\"recent_scans\", 0):",
|
|
" print(colorize(\" Ignore suppression (last scan): 0 findings hidden\", \"dim\"))"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/commands.py::49de8530b94e0eff": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/commands.py::49de8530b94e0eff",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/python/commands.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 11 lines): desloppify/desloppify/desloppify/languages/python/commands.py:169, desloppify/desloppify/desloppify/languages/typescript/commands.py:127",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/python/commands.py",
|
|
"line": 169
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/commands.py",
|
|
"line": 127
|
|
}
|
|
],
|
|
"sample": [
|
|
"(filepath))",
|
|
" entries, _ = dupes_detector_mod.detect_duplicates(",
|
|
" functions, threshold=getattr(args, \"threshold\", None) or 0.8",
|
|
" )"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::devour_data/docs/docker_compose_-_browse_common_faqs_10.md::51527eef546410f0": {
|
|
"id": "boilerplate_duplication::devour_data/docs/docker_compose_-_browse_common_faqs_10.md::51527eef546410f0",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "devour_data/docs/docker_compose_-_browse_common_faqs_10.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): devour_data/docs/docker_compose_-_browse_common_faqs_10.md:5, devour_data/docs/docker_compose_-_quickstart_6.md:5",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "devour_data/docs/docker_compose_-_browse_common_faqs_10.md",
|
|
"line": 5
|
|
},
|
|
{
|
|
"file": "devour_data/docs/docker_compose_-_quickstart_6.md",
|
|
"line": 5
|
|
}
|
|
],
|
|
"sample": [
|
|
"cker Compose - Browse common FAQs",
|
|
"",
|
|
"## \ud83d\udccb Document Information",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/commands.py::53cbebb9c2f2c77f": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/commands.py::53cbebb9c2f2c77f",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/commands.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 27 lines): desloppify/desloppify/desloppify/languages/csharp/commands.py:69, desloppify/desloppify/desloppify/languages/python/commands.py:88",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 27,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/commands.py",
|
|
"line": 69
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/python/commands.py",
|
|
"line": 88
|
|
}
|
|
],
|
|
"sample": [
|
|
"},",
|
|
" ),",
|
|
" )",
|
|
" if getattr(args, \"json\", False):"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/godocs/parser.go::5454e51504800524": {
|
|
"id": "boilerplate_duplication::pkg/godocs/parser.go::5454e51504800524",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/godocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): pkg/godocs/parser.go:25, pkg/javadocs/parser.go:21",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/godocs/parser.go",
|
|
"line": 25
|
|
},
|
|
{
|
|
"file": "pkg/javadocs/parser.go",
|
|
"line": 21
|
|
}
|
|
],
|
|
"sample": [
|
|
"func (p *Parser) ParsePackagePage(html string, docURL string) (*Package, error) {",
|
|
"\tdoc, err := goquery.NewDocumentFromReader(strings.NewReader(html))",
|
|
"\tif err != nil {",
|
|
"\t\treturn nil, err"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/devour_enhanced_v2.py::54b5d1cd62a75dd9": {
|
|
"id": "boilerplate_duplication::cmd/devour_enhanced_v2.py::54b5d1cd62a75dd9",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/devour_enhanced_v2.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 27 lines): cmd/devour_enhanced_v2.py:83, cmd/devour_lighthouse.py:282",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 27,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/devour_enhanced_v2.py",
|
|
"line": 83
|
|
},
|
|
{
|
|
"file": "cmd/devour_lighthouse.py",
|
|
"line": 282
|
|
}
|
|
],
|
|
"sample": [
|
|
"def load_font(size: int, *, bold: bool = False) -> ImageFont.ImageFont:",
|
|
" \"\"\"Load font with fallback.\"\"\"",
|
|
" size = size * SCALE",
|
|
" candidates = ["
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/nuxtdocs/parser_test.go::55a2678da5c13352": {
|
|
"id": "boilerplate_duplication::pkg/nuxtdocs/parser_test.go::55a2678da5c13352",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/nuxtdocs/parser_test.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 13 lines): pkg/nuxtdocs/parser_test.go:81, pkg/reactdocs/parser_test.go:80",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 13,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/nuxtdocs/parser_test.go",
|
|
"line": 81
|
|
},
|
|
{
|
|
"file": "pkg/reactdocs/parser_test.go",
|
|
"line": 80
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"\t}",
|
|
"}",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/detectors/_smell_effects.py::57ab2e96189b378a": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/detectors/_smell_effects.py::57ab2e96189b378a",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/_smell_effects.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 21 lines): desloppify/desloppify/desloppify/languages/typescript/detectors/_smell_effects.py:57, desloppify/desloppify/desloppify/languages/typescript/detectors/smells.py:332",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 21,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/_smell_effects.py",
|
|
"line": 57
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/smells.py",
|
|
"line": 332
|
|
}
|
|
],
|
|
"sample": [
|
|
"}",
|
|
" )",
|
|
" index = cursor",
|
|
" continue"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/detectors/_smell_detectors.py::599c6dce8b6f78d6": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/detectors/_smell_detectors.py::599c6dce8b6f78d6",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/_smell_detectors.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 17 lines): desloppify/desloppify/desloppify/languages/typescript/detectors/_smell_detectors.py:226, desloppify/desloppify/desloppify/languages/typescript/detectors/react.py:65",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 17,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/_smell_detectors.py",
|
|
"line": 226
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/react.py",
|
|
"line": 65
|
|
}
|
|
],
|
|
"sample": [
|
|
", len(content))",
|
|
" ):",
|
|
" if in_s:",
|
|
" continue"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/languages_test.go::59fc564ff0c7b9b6": {
|
|
"id": "boilerplate_duplication::internal/quality/languages_test.go::59fc564ff0c7b9b6",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/languages_test.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 13 lines): internal/quality/languages_test.go:385, internal/quality/scanner_test.go:384",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 13,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/languages_test.go",
|
|
"line": 385
|
|
},
|
|
{
|
|
"file": "internal/quality/scanner_test.go",
|
|
"line": 384
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"\t\t\t\treturn dir",
|
|
"\t\t\t},",
|
|
"\t\t\texpected: \"go\","
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/intelligence/review/__init__.py::5a4d5d8af5c44253": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/intelligence/review/__init__.py::5a4d5d8af5c44253",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/intelligence/review/__init__.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 16 lines): desloppify/desloppify/desloppify/intelligence/review/__init__.py:19, desloppify/desloppify/desloppify/intelligence/review/dimensions/__init__.py:5",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 16,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/intelligence/review/__init__.py",
|
|
"line": 19
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/intelligence/review/dimensions/__init__.py",
|
|
"line": 5
|
|
}
|
|
],
|
|
"sample": [
|
|
"from desloppify.intelligence.review.dimensions.file import (",
|
|
" DEFAULT_DIMENSIONS,",
|
|
" DIMENSION_PROMPTS,",
|
|
" REVIEW_SYSTEM_PROMPT,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py::5ab2b4eeb993b2f7": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py::5ab2b4eeb993b2f7",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 8 lines): desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py:527, desloppify/desloppify/desloppify/languages/typescript/detectors/deps.py:287",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 8,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py",
|
|
"line": 527
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/deps.py",
|
|
"line": 287
|
|
}
|
|
],
|
|
"sample": [
|
|
":",
|
|
" print(json.dumps({\"file\": rel(args.file), **coupling}, indent=2))",
|
|
" return",
|
|
" print(c(f\"\\nDependency info: {rel(args.file)}\\n\", \"bold\"))"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/dart/extractors.py::5b1894873d4d11c6": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/dart/extractors.py::5b1894873d4d11c6",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/dart/extractors.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 21 lines): desloppify/desloppify/desloppify/languages/dart/extractors.py:138, desloppify/desloppify/desloppify/languages/gdscript/extractors.py:78",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 21,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/dart/extractors.py",
|
|
"line": 138
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/gdscript/extractors.py",
|
|
"line": 78
|
|
}
|
|
],
|
|
"sample": [
|
|
"normalized = _normalize_body(body)",
|
|
" body_hash = hashlib.md5(normalized.encode(\"utf-8\")).hexdigest()[:12]",
|
|
" functions.append(",
|
|
" FunctionInfo("
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/gdscript/__init__.py::5f026e9dbdbd0601": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/gdscript/__init__.py::5f026e9dbdbd0601",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/gdscript/__init__.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 9 lines): desloppify/desloppify/desloppify/languages/gdscript/__init__.py:5, desloppify/desloppify/desloppify/languages/typescript/__init__.py:7",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/gdscript/__init__.py",
|
|
"line": 5
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/__init__.py",
|
|
"line": 7
|
|
}
|
|
],
|
|
"sample": [
|
|
"from desloppify.engine.policy.zones import COMMON_ZONE_RULES, Zone, ZoneRule",
|
|
"from desloppify.hook_registry import register_lang_hooks",
|
|
"from desloppify.languages import register_lang",
|
|
"from desloppify.languages.framework.base.phase_builders import ("
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/nuxtdocs/parser.go::614b307b584cb619": {
|
|
"id": "boilerplate_duplication::pkg/nuxtdocs/parser.go::614b307b584cb619",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/nuxtdocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 17 lines): pkg/nuxtdocs/parser.go:98, pkg/vuedocs/parser.go:267",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 17,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/nuxtdocs/parser.go",
|
|
"line": 98
|
|
},
|
|
{
|
|
"file": "pkg/vuedocs/parser.go",
|
|
"line": 267
|
|
}
|
|
],
|
|
"sample": [
|
|
") {",
|
|
"\t\t\t\t\tif next.Is(\"p\") && comp.Doc == \"\" {",
|
|
"\t\t\t\t\t\tcomp.Doc = strings.TrimSpace(next.Text())",
|
|
"\t\t\t\t\t}"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/next.py::6326a5f588bb47c6": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/next.py::6326a5f588bb47c6",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/app/commands/next.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 6 lines): desloppify/desloppify/desloppify/app/commands/next.py:9, desloppify/desloppify/desloppify/app/commands/show/cmd.py:5",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 6,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/commands/next.py",
|
|
"line": 9
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/commands/show/cmd.py",
|
|
"line": 5
|
|
}
|
|
],
|
|
"sample": [
|
|
"from desloppify.app.commands.helpers.lang import resolve_lang",
|
|
"from desloppify.app.commands.helpers.query import write_query",
|
|
"from desloppify.app.commands.helpers.runtime import command_runtime",
|
|
"from desloppify.app.commands.helpers.score import target_strict_score_from_config"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/_shared/scaffold_detect_commands.py::64eafbca2efb6cd8": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/_shared/scaffold_detect_commands.py::64eafbca2efb6cd8",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/_shared/scaffold_detect_commands.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): desloppify/desloppify/desloppify/languages/_shared/scaffold_detect_commands.py:152, desloppify/desloppify/desloppify/languages/typescript/commands.py:130",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/_shared/scaffold_detect_commands.py",
|
|
"line": 152
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/commands.py",
|
|
"line": 130
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"",
|
|
" if getattr(args, \"json\", False):",
|
|
" print(json.dumps({\"count\": len(entries), \"entries\": entries}, indent=2))"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/dart/__init__.py::6d24c6140e68b860": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/dart/__init__.py::6d24c6140e68b860",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/dart/__init__.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 8 lines): desloppify/desloppify/desloppify/languages/dart/__init__.py:36, desloppify/desloppify/desloppify/languages/gdscript/__init__.py:36",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 8,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/dart/__init__.py",
|
|
"line": 36
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/gdscript/__init__.py",
|
|
"line": 36
|
|
}
|
|
],
|
|
"sample": [
|
|
"(filepath: str) -> str:",
|
|
" parts = [part for part in filepath.replace(\"\\\\\", \"/\").split(\"/\") if part]",
|
|
" if len(parts) > 1:",
|
|
" return \"/\".join(parts[:2])"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/plugins/go/analyzers/detectors.go::711b1a65622169d5": {
|
|
"id": "boilerplate_duplication::internal/quality/plugins/go/analyzers/detectors.go::711b1a65622169d5",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/plugins/go/analyzers/detectors.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 28 lines): internal/quality/plugins/go/analyzers/detectors.go:467, internal/quality/plugins/go/analyzers/security.go:378",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 28,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/plugins/go/analyzers/detectors.go",
|
|
"line": 467
|
|
},
|
|
{
|
|
"file": "internal/quality/plugins/go/analyzers/security.go",
|
|
"line": 378
|
|
}
|
|
],
|
|
"sample": [
|
|
"(fn *ast.FuncDecl) int {",
|
|
"\tmaxDepth := 0",
|
|
"",
|
|
"\tvar visit func(n ast.Node, depth int)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/cloudflaredocs/parser_test.go::7146de9e1d4e77be": {
|
|
"id": "boilerplate_duplication::pkg/cloudflaredocs/parser_test.go::7146de9e1d4e77be",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/cloudflaredocs/parser_test.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): pkg/cloudflaredocs/parser_test.go:39, pkg/dockerdocs/parser_test.go:35",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/cloudflaredocs/parser_test.go",
|
|
"line": 39
|
|
},
|
|
{
|
|
"file": "pkg/dockerdocs/parser_test.go",
|
|
"line": 35
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"\t}",
|
|
"\tif page.Description == \"\" {",
|
|
"\t\tt.Fatal(\"expected non-empty description\")"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/cloudflaredocs/parser.go::71c4eba2b017eba8": {
|
|
"id": "boilerplate_duplication::pkg/cloudflaredocs/parser.go::71c4eba2b017eba8",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/cloudflaredocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 16 lines): pkg/cloudflaredocs/parser.go:60, pkg/dockerdocs/parser.go:59",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 16,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/cloudflaredocs/parser.go",
|
|
"line": 60
|
|
},
|
|
{
|
|
"file": "pkg/dockerdocs/parser.go",
|
|
"line": 59
|
|
}
|
|
],
|
|
"sample": [
|
|
"!= \"\" {",
|
|
"\t\t\tsections = append(sections, section)",
|
|
"\t\t}",
|
|
"\t})"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/detectors/security.py::763357b7de08ddbe": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/detectors/security.py::763357b7de08ddbe",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/python/detectors/security.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 9 lines): desloppify/desloppify/desloppify/languages/python/detectors/security.py:66, desloppify/desloppify/desloppify/languages/typescript/detectors/security.py:100",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/python/detectors/security.py",
|
|
"line": 66
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/security.py",
|
|
"line": 100
|
|
}
|
|
],
|
|
"sample": [
|
|
"if zone_map is not None:",
|
|
" zone = zone_map.get(filepath)",
|
|
" if zone in (Zone.TEST, Zone.CONFIG, Zone.GENERATED, Zone.VENDOR):",
|
|
" continue"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/javadocs/parser.go::7c4d83f5b7554ce4": {
|
|
"id": "boilerplate_duplication::pkg/javadocs/parser.go::7c4d83f5b7554ce4",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/javadocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 22 lines): pkg/javadocs/parser.go:348, pkg/rustdocs/parser.go:606",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 22,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/javadocs/parser.go",
|
|
"line": 348
|
|
},
|
|
{
|
|
"file": "pkg/rustdocs/parser.go",
|
|
"line": 606
|
|
}
|
|
],
|
|
"sample": [
|
|
"}",
|
|
"\t}",
|
|
"\treturn \"\"",
|
|
"}"
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-23T10:02:44+00:00",
|
|
"resolved_at": "2026-02-23T10:08:19+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-23T10:08:19+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/phases.py::7cfde93ce953792c": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/phases.py::7cfde93ce953792c",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/python/phases.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): desloppify/desloppify/desloppify/languages/python/phases.py:221, desloppify/desloppify/desloppify/languages/typescript/phases.py:477",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/python/phases.py",
|
|
"line": 221
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/phases.py",
|
|
"line": 477
|
|
}
|
|
],
|
|
"sample": [
|
|
"cycle_entries, _ = graph_detector_mod.detect_cycles(graph)",
|
|
" cycle_entries = filter_entries(zm, cycle_entries, \"cycles\", file_key=\"files\")",
|
|
" results.extend(make_cycle_findings(cycle_entries, log))",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/deps/fallback.py::7da38dafcc7e12bd": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/deps/fallback.py::7da38dafcc7e12bd",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/deps/fallback.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 21 lines): desloppify/desloppify/desloppify/languages/csharp/deps/fallback.py:166, desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py:446",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 21,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/deps/fallback.py",
|
|
"line": 166
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py",
|
|
"line": 446
|
|
}
|
|
],
|
|
"sample": [
|
|
"] = root_ns",
|
|
"",
|
|
" file_to_project = _map_file_to_project(cs_files, projects)",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_exports.py::7df57095b0e2df69": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_exports.py::7df57095b0e2df69",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_exports.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_exports.py:21, desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_react.py:22",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_exports.py",
|
|
"line": 21
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_react.py",
|
|
"line": 22
|
|
}
|
|
],
|
|
"sample": [
|
|
", tmp_path)",
|
|
" utils_mod._find_source_files_cached.cache_clear()",
|
|
"",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/godocs/parser_test.go::7e0e0d4a04bff326": {
|
|
"id": "boilerplate_duplication::pkg/godocs/parser_test.go::7e0e0d4a04bff326",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/godocs/parser_test.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 17 lines): pkg/godocs/parser_test.go:141, pkg/pythondocs/parser_test.go:162",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 17,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/godocs/parser_test.go",
|
|
"line": 141
|
|
},
|
|
{
|
|
"file": "pkg/pythondocs/parser_test.go",
|
|
"line": 162
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"\t}",
|
|
"}",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/astrodocs.go::8265bceb97ab4c5b": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/astrodocs.go::8265bceb97ab4c5b",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/astrodocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 11 lines): internal/scraper/external/astrodocs.go:101, internal/scraper/external/dockerdocs.go:101",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/astrodocs.go",
|
|
"line": 101
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/dockerdocs.go",
|
|
"line": 101
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
"\t\tTitle: page.Title,",
|
|
"\t\tContent: content.String(),",
|
|
"\t\tURL: page.URL,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/test_coverage.py::827df6a99ad24d7d": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/test_coverage.py::827df6a99ad24d7d",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/test_coverage.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 18 lines): desloppify/desloppify/desloppify/languages/csharp/test_coverage.py:94, desloppify/desloppify/desloppify/languages/typescript/test_coverage.py:211",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 18,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/test_coverage.py",
|
|
"line": 94
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/test_coverage.py",
|
|
"line": 211
|
|
}
|
|
],
|
|
"sample": [
|
|
"and parent:",
|
|
" candidates.append(os.path.join(parent, basename))",
|
|
"",
|
|
" for prod in production_set:"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/scorecard_generator.py::842bdd7e06af7a02": {
|
|
"id": "boilerplate_duplication::cmd/scorecard_generator.py::842bdd7e06af7a02",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/scorecard_generator.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 13 lines): cmd/scorecard_generator.py:374, desloppify/desloppify/desloppify/app/output/scorecard.py:64",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 13,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/scorecard_generator.py",
|
|
"line": 374
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/output/scorecard.py",
|
|
"line": 64
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
" row_h = scale(20)",
|
|
" width = scale(780)",
|
|
" divider_x = scale(260)"
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/dart/detectors/deps.py::863836605c615542": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/dart/detectors/deps.py::863836605c615542",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/dart/detectors/deps.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 8 lines): desloppify/desloppify/desloppify/languages/dart/detectors/deps.py:78, desloppify/desloppify/desloppify/languages/gdscript/detectors/deps.py:44",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 8,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/dart/detectors/deps.py",
|
|
"line": 78
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/gdscript/detectors/deps.py",
|
|
"line": 44
|
|
}
|
|
],
|
|
"sample": [
|
|
"(path)",
|
|
" abs_files = [str(Path(resolve_path(filepath)).resolve()) for filepath in files]",
|
|
" graph = {filepath: {\"imports\": set(), \"importers\": set()} for filepath in abs_files}",
|
|
" if not graph:"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/fixers/common.py::872f848321a82583": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/fixers/common.py::872f848321a82583",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/fixers/common.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 74 lines): desloppify/desloppify/desloppify/languages/typescript/fixers/common.py:219, desloppify/desloppify/desloppify/languages/typescript/fixers/imports.py:138",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 74,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/fixers/common.py",
|
|
"line": 219
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/fixers/imports.py",
|
|
"line": 138
|
|
}
|
|
],
|
|
"sample": [
|
|
"stmt = import_stmt.strip()",
|
|
" from_match = re.search(",
|
|
" r\"\"\"from\\s+(?P<module>['\"][^'\"]+['\"])(?P<attrs>\\s+(?:assert|with)\\s*\\{.*?\\})?\\s*;?(?P<trailing>\\s*(?://.*|/\\*.*?\\*/\\s*)?)$\"\"\",",
|
|
" stmt,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/devour_enhanced_fixed.py::87db2686522c0da3": {
|
|
"id": "boilerplate_duplication::cmd/devour_enhanced_fixed.py::87db2686522c0da3",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/devour_enhanced_fixed.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 103 lines): cmd/devour_enhanced_fixed.py:255, cmd/devour_enhanced_v2.py:301",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 103,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/devour_enhanced_fixed.py",
|
|
"line": 255
|
|
},
|
|
{
|
|
"file": "cmd/devour_enhanced_v2.py",
|
|
"line": 301
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"",
|
|
"",
|
|
"def draw_enhanced_left_panel("
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py::89e66e6442fd2d6d": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py::89e66e6442fd2d6d",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 17 lines): desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py:580, desloppify/desloppify/desloppify/languages/typescript/detectors/deps.py:347",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 17,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py",
|
|
"line": 580
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/deps.py",
|
|
"line": 347
|
|
}
|
|
],
|
|
"sample": [
|
|
":",
|
|
" print(",
|
|
" json.dumps(",
|
|
" {"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/devour_enhanced.py::8aa89681fcf3a11d": {
|
|
"id": "boilerplate_duplication::cmd/devour_enhanced.py::8aa89681fcf3a11d",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/devour_enhanced.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 211 lines): cmd/devour_enhanced.py:317, cmd/devour_enhanced_v2.py:301",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 211,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/devour_enhanced.py",
|
|
"line": 317
|
|
},
|
|
{
|
|
"file": "cmd/devour_enhanced_v2.py",
|
|
"line": 301
|
|
}
|
|
],
|
|
"sample": [
|
|
"))",
|
|
"",
|
|
"",
|
|
"def draw_enhanced_left_panel("
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/scorecard_generator.py::8b0767b16cf9d139": {
|
|
"id": "boilerplate_duplication::cmd/scorecard_generator.py::8b0767b16cf9d139",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/scorecard_generator.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 90 lines): cmd/scorecard_generator.py:280, desloppify/desloppify/desloppify/app/output/scorecard_parts/draw.py:33",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 90,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/scorecard_generator.py",
|
|
"line": 280
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/output/scorecard_parts/draw.py",
|
|
"line": 33
|
|
}
|
|
],
|
|
"sample": [
|
|
"font_row = load_font(11, mono=True)",
|
|
" font_strict = load_font(9, mono=True)",
|
|
" row_count = len(active_dims)",
|
|
" "
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/fixers/logs.py::8b391058cc4aa747": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/fixers/logs.py::8b391058cc4aa747",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/fixers/logs.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): desloppify/desloppify/desloppify/languages/typescript/fixers/logs.py:37, desloppify/desloppify/desloppify/languages/typescript/fixers/vars.py:125",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/fixers/logs.py",
|
|
"line": 37
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/fixers/vars.py",
|
|
"line": 125
|
|
}
|
|
],
|
|
"sample": [
|
|
"skipped_files: list[tuple[str, str]] = []",
|
|
" for filepath, file_entries in sorted(by_file.items()):",
|
|
" try:",
|
|
" p = ("
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/reactdocs.go::8e36ef027b4a92f5": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/reactdocs.go::8e36ef027b4a92f5",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/reactdocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 11 lines): internal/scraper/external/reactdocs.go:157, internal/scraper/external/vuedocs.go:131",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/reactdocs.go",
|
|
"line": 157
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/vuedocs.go",
|
|
"line": 131
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
"\t\tTitle: comp.Name,",
|
|
"\t\tContent: content.String(),",
|
|
"\t\tURL: comp.DocURL,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/devour_scorecard.py::8eb28195cd70afc3": {
|
|
"id": "boilerplate_duplication::cmd/devour_scorecard.py::8eb28195cd70afc3",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/devour_scorecard.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 255 lines): cmd/devour_scorecard.py:1, cmd/scorecard_generator.py:1",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 255,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/devour_scorecard.py",
|
|
"line": 1
|
|
},
|
|
{
|
|
"file": "cmd/scorecard_generator.py",
|
|
"line": 1
|
|
}
|
|
],
|
|
"sample": [
|
|
"#!/usr/bin/env python3",
|
|
"\"\"\"",
|
|
"Devour Scorecard Generator - 1:1 recreation of desloppify scorecard style.",
|
|
"Generates visual health summary PNG with the exact same data structure and visual design."
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::devour_data/docs/docker_compose_-_install_compose_5.md::9084b276dabcc270": {
|
|
"id": "boilerplate_duplication::devour_data/docs/docker_compose_-_install_compose_5.md::9084b276dabcc270",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "devour_data/docs/docker_compose_-_install_compose_5.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): devour_data/docs/docker_compose_-_install_compose_5.md:5, devour_data/docs/docker_compose_-_why_use_compose?_3.md:5",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "devour_data/docs/docker_compose_-_install_compose_5.md",
|
|
"line": 5
|
|
},
|
|
{
|
|
"file": "devour_data/docs/docker_compose_-_why_use_compose?_3.md",
|
|
"line": 5
|
|
}
|
|
],
|
|
"sample": [
|
|
"cker Compose - Install Compose",
|
|
"",
|
|
"## \ud83d\udccb Document Information",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/cloudflaredocs/parser.go::91e9eea04c3a481f": {
|
|
"id": "boilerplate_duplication::pkg/cloudflaredocs/parser.go::91e9eea04c3a481f",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/cloudflaredocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): pkg/cloudflaredocs/parser.go:102, pkg/dockerdocs/parser.go:96",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/cloudflaredocs/parser.go",
|
|
"line": 102
|
|
},
|
|
{
|
|
"file": "pkg/dockerdocs/parser.go",
|
|
"line": 96
|
|
}
|
|
],
|
|
"sample": [
|
|
").First()",
|
|
"\tif content.Length() == 0 {",
|
|
"\t\tcontent = doc.Find(\"body\")",
|
|
"\t}"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/javadocs/parser.go::936e7ae0c86a2e0d": {
|
|
"id": "boilerplate_duplication::pkg/javadocs/parser.go::936e7ae0c86a2e0d",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/javadocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 13 lines): pkg/javadocs/parser.go:341, pkg/springdocs/parser.go:273",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 13,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/javadocs/parser.go",
|
|
"line": 341
|
|
},
|
|
{
|
|
"file": "pkg/springdocs/parser.go",
|
|
"line": 273
|
|
}
|
|
],
|
|
"sample": [
|
|
"(sig string) string {",
|
|
"\tsig = strings.TrimSpace(sig)",
|
|
"\tif idx := strings.Index(sig, \"(\"); idx > 0 {",
|
|
"\t\tprefix := sig[:idx]"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/fix/apply_flow.py::94606e300b5b4fa2": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/fix/apply_flow.py::94606e300b5b4fa2",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/app/commands/fix/apply_flow.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 8 lines): desloppify/desloppify/desloppify/app/commands/fix/apply_flow.py:6, desloppify/desloppify/desloppify/app/commands/fix/review_flow.py:5",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 8,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/commands/fix/apply_flow.py",
|
|
"line": 6
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/commands/fix/review_flow.py",
|
|
"line": 5
|
|
}
|
|
],
|
|
"sample": [
|
|
"import sys",
|
|
"from pathlib import Path",
|
|
"",
|
|
"from desloppify import state as state_mod"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/javadocs/parser.go::94edefd5791eff6e": {
|
|
"id": "boilerplate_duplication::pkg/javadocs/parser.go::94edefd5791eff6e",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/javadocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 13 lines): pkg/javadocs/parser.go:217, pkg/springdocs/parser.go:176",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 13,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/javadocs/parser.go",
|
|
"line": 217
|
|
},
|
|
{
|
|
"file": "pkg/springdocs/parser.go",
|
|
"line": 176
|
|
}
|
|
],
|
|
"sample": [
|
|
"}",
|
|
"",
|
|
"func (p *Parser) ParseClassPage(html string, docURL string) (*Class, error) {",
|
|
"\tdoc, err := goquery.NewDocumentFromReader(strings.NewReader(html))"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/nuxtdocs.go::9558724b2bb4fcc0": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/nuxtdocs.go::9558724b2bb4fcc0",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/nuxtdocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 11 lines): internal/scraper/external/nuxtdocs.go:141, internal/scraper/external/vuedocs.go:131",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/nuxtdocs.go",
|
|
"line": 141
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/vuedocs.go",
|
|
"line": 131
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
"\t\tTitle: comp.Name,",
|
|
"\t\tContent: content.String(),",
|
|
"\t\tURL: comp.DocURL,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/phases.py::99f97b4b32d9290d": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/phases.py::99f97b4b32d9290d",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/phases.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 17 lines): desloppify/desloppify/desloppify/languages/csharp/phases.py:226, desloppify/desloppify/desloppify/languages/typescript/phases.py:274",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 17,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/phases.py",
|
|
"line": 226
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/phases.py",
|
|
"line": 274
|
|
}
|
|
],
|
|
"sample": [
|
|
"detect_flat_dirs(path, file_finder=lang.file_finder)",
|
|
" for e in flat_entries:",
|
|
" results.append(",
|
|
" make_finding("
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/devour_enhanced_fixed.py::9add22ec0a12e220": {
|
|
"id": "boilerplate_duplication::cmd/devour_enhanced_fixed.py::9add22ec0a12e220",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/devour_enhanced_fixed.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 64 lines): cmd/devour_enhanced_fixed.py:1, cmd/devour_enhanced_v2.py:1",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 64,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/devour_enhanced_fixed.py",
|
|
"line": 1
|
|
},
|
|
{
|
|
"file": "cmd/devour_enhanced_v2.py",
|
|
"line": 1
|
|
}
|
|
],
|
|
"sample": [
|
|
"#!/usr/bin/env python3",
|
|
"\"\"\"",
|
|
"Enhanced Devour Scorecard Generator - Extended version with more visual elements.",
|
|
"Enhanced data visualization with additional metrics and improved layout."
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/devour_lighthouse.py::9baff20b59166411": {
|
|
"id": "boilerplate_duplication::cmd/devour_lighthouse.py::9baff20b59166411",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/devour_lighthouse.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 15 lines): cmd/devour_lighthouse.py:12, cmd/scorecard_generator.py:11",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 15,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/devour_lighthouse.py",
|
|
"line": 12
|
|
},
|
|
{
|
|
"file": "cmd/scorecard_generator.py",
|
|
"line": 11
|
|
}
|
|
],
|
|
"sample": [
|
|
"import os",
|
|
"import sys",
|
|
"from dataclasses import dataclass",
|
|
"from pathlib import Path"
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::pkg/cloudflaredocs/parser.go::9d9c2b304e1e0708": {
|
|
"id": "boilerplate_duplication::pkg/cloudflaredocs/parser.go::9d9c2b304e1e0708",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/cloudflaredocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 16 lines): pkg/cloudflaredocs/parser.go:133, pkg/dockerdocs/parser.go:128",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 16,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/cloudflaredocs/parser.go",
|
|
"line": 133
|
|
},
|
|
{
|
|
"file": "pkg/dockerdocs/parser.go",
|
|
"line": 128
|
|
}
|
|
],
|
|
"sample": [
|
|
"if section.Title != \"\" {",
|
|
"\t\t\tsections = append(sections, section)",
|
|
"\t\t}",
|
|
"\t})"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_deprecated.py::9db620b472643ab8": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_deprecated.py::9db620b472643ab8",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_deprecated.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_deprecated.py:16, desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_exports.py:21",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_deprecated.py",
|
|
"line": 16
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_exports.py",
|
|
"line": 21
|
|
}
|
|
],
|
|
"sample": [
|
|
", \"SRC_PATH\", tmp_path)",
|
|
" utils_mod._find_source_files_cached.cache_clear()",
|
|
"",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_logs.py::a082fc2de6a44f36": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_logs.py::a082fc2de6a44f36",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_logs.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 11 lines): desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_logs.py:15, desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_unused.py:26",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_logs.py",
|
|
"line": 15
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_unused.py",
|
|
"line": 26
|
|
}
|
|
],
|
|
"sample": [
|
|
", \"PROJECT_ROOT\", tmp_path)",
|
|
"",
|
|
"",
|
|
"def _write(tmp_path: Path, name: str, content: str) -> Path:"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/cloudflaredocs.go::a140791fa798f5c5": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/cloudflaredocs.go::a140791fa798f5c5",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/cloudflaredocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 11 lines): internal/scraper/external/cloudflaredocs.go:110, internal/scraper/external/dockerdocs.go:101",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/cloudflaredocs.go",
|
|
"line": 110
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/dockerdocs.go",
|
|
"line": 101
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
"\t\tTitle: page.Title,",
|
|
"\t\tContent: content.String(),",
|
|
"\t\tURL: page.URL,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/springdocs/parser.go::a21cfabc7cc4870c": {
|
|
"id": "boilerplate_duplication::pkg/springdocs/parser.go::a21cfabc7cc4870c",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/springdocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 14 lines): pkg/springdocs/parser.go:37, pkg/tsdocs/parser.go:39",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 14,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/springdocs/parser.go",
|
|
"line": 37
|
|
},
|
|
{
|
|
"file": "pkg/tsdocs/parser.go",
|
|
"line": 39
|
|
}
|
|
],
|
|
"sample": [
|
|
", docURL)",
|
|
"",
|
|
"\treturn module, nil",
|
|
"}"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/godocs.go::a3c07696112f3508": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/godocs.go::a3c07696112f3508",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/godocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 10 lines): internal/scraper/external/godocs.go:279, internal/scraper/external/rustdocs.go:388",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 10,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/godocs.go",
|
|
"line": 279
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/rustdocs.go",
|
|
"line": 388
|
|
}
|
|
],
|
|
"sample": [
|
|
", len(t.Methods)))",
|
|
"\t\tfor _, m := range t.Methods {",
|
|
"\t\t\tparts = append(parts, fmt.Sprintf(\"- `%s`\", m.Signature))",
|
|
"\t\t}"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/javadocs/parser.go::a50d6d0bf1d8b484": {
|
|
"id": "boilerplate_duplication::pkg/javadocs/parser.go::a50d6d0bf1d8b484",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/javadocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 10 lines): pkg/javadocs/parser.go:250, pkg/springdocs/parser.go:204",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 10,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/javadocs/parser.go",
|
|
"line": 250
|
|
},
|
|
{
|
|
"file": "pkg/springdocs/parser.go",
|
|
"line": 204
|
|
}
|
|
],
|
|
"sample": [
|
|
").Each(func(_ int, s *goquery.Selection) {",
|
|
"\t\tmethod := &Method{",
|
|
"\t\t\tIsConstructor: false,",
|
|
"\t\t}"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/fixers/if_chain.py::a5dc715acc9c79d5": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/fixers/if_chain.py::a5dc715acc9c79d5",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/fixers/if_chain.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): desloppify/desloppify/desloppify/languages/typescript/fixers/if_chain.py:27, desloppify/desloppify/desloppify/languages/typescript/fixers/useeffect.py:27",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/fixers/if_chain.py",
|
|
"line": 27
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/fixers/useeffect.py",
|
|
"line": 27
|
|
}
|
|
],
|
|
"sample": [
|
|
"def transform(",
|
|
" lines: list[str],",
|
|
" file_entries: list[dict[str, Any]],",
|
|
" ) -> tuple[list[str], list[str]]:"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::AGENTS.md::a6eac79af4d17066": {
|
|
"id": "boilerplate_duplication::AGENTS.md::a6eac79af4d17066",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "AGENTS.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 20 lines): AGENTS.md:135, desloppify/desloppify/docs/CODEX.md:3",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 20,
|
|
"locations": [
|
|
{
|
|
"file": "AGENTS.md",
|
|
"line": 135
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/docs/CODEX.md",
|
|
"line": 3
|
|
}
|
|
],
|
|
"sample": [
|
|
"ite",
|
|
"",
|
|
"`command -v desloppify >/dev/null 2>&1 && echo \"desloppify: installed\" || echo \"NOT INSTALLED \u2014 run: pip install --upgrade git+https://github.com/peteromallet/desloppify.git\"`",
|
|
""
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/commands.py::a7448d65f1acd9e9": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/commands.py::a7448d65f1acd9e9",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/python/commands.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 27 lines): desloppify/desloppify/desloppify/languages/python/commands.py:88, desloppify/desloppify/desloppify/languages/typescript/commands.py:91",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 27,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/python/commands.py",
|
|
"line": 88
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/commands.py",
|
|
"line": 91
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" ),",
|
|
" )",
|
|
" if getattr(args, \"json\", False):"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/devour_enhanced_v2.py::a8b3f2451c1304a2": {
|
|
"id": "boilerplate_duplication::cmd/devour_enhanced_v2.py::a8b3f2451c1304a2",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/devour_enhanced_v2.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 20 lines): cmd/devour_enhanced_v2.py:64, cmd/devour_lighthouse.py:85",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 20,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/devour_enhanced_v2.py",
|
|
"line": 64
|
|
},
|
|
{
|
|
"file": "cmd/devour_lighthouse.py",
|
|
"line": 85
|
|
}
|
|
],
|
|
"sample": [
|
|
"def scale(value: int) -> int:",
|
|
" \"\"\"Scale value by retina factor.\"\"\"",
|
|
" return value * SCALE",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/_parse_helpers.py::a8e10bc6a1c4c907": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/_parse_helpers.py::a8e10bc6a1c4c907",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/_parse_helpers.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 16 lines): desloppify/desloppify/desloppify/languages/csharp/_parse_helpers.py:60, desloppify/desloppify/desloppify/languages/dart/extractors.py:58",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 16,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/_parse_helpers.py",
|
|
"line": 60
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/dart/extractors.py",
|
|
"line": 58
|
|
}
|
|
],
|
|
"sample": [
|
|
"in_string: str | None = None",
|
|
" escape = False",
|
|
"",
|
|
" for i in range(start_pos, len(content)):"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/nuxtdocs/types.go::a8f23b2262c9dad1": {
|
|
"id": "boilerplate_duplication::pkg/nuxtdocs/types.go::a8f23b2262c9dad1",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/nuxtdocs/types.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 23 lines): pkg/nuxtdocs/types.go:132, pkg/vuedocs/types.go:128",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 23,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/nuxtdocs/types.go",
|
|
"line": 132
|
|
},
|
|
{
|
|
"file": "pkg/vuedocs/types.go",
|
|
"line": 128
|
|
}
|
|
],
|
|
"sample": [
|
|
"}",
|
|
"",
|
|
"// Parameter represents a function parameter.",
|
|
"type Parameter struct {"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/pythondocs/parser.go::aadfe997f8af8b52": {
|
|
"id": "boilerplate_duplication::pkg/pythondocs/parser.go::aadfe997f8af8b52",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/pythondocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 14 lines): pkg/pythondocs/parser.go:43, pkg/tsdocs/parser.go:39",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 14,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/pythondocs/parser.go",
|
|
"line": 43
|
|
},
|
|
{
|
|
"file": "pkg/tsdocs/parser.go",
|
|
"line": 39
|
|
}
|
|
],
|
|
"sample": [
|
|
"(doc, module.Name, docURL)",
|
|
"",
|
|
"\treturn module, nil",
|
|
"}"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/cloudflaredocs.go::ad79887850bec1d2": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/cloudflaredocs.go::ad79887850bec1d2",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/cloudflaredocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): internal/scraper/external/cloudflaredocs.go:91, internal/scraper/external/dockerdocs.go:83",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/cloudflaredocs.go",
|
|
"line": 91
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/dockerdocs.go",
|
|
"line": 83
|
|
}
|
|
],
|
|
"sample": [
|
|
"fmt.Fprintf(&content, \"%s\\n\", page.Description)",
|
|
"",
|
|
"\tif len(page.CodeBlocks) > 0 {",
|
|
"\t\tfmt.Fprintf(&content, \"\\n## Code Examples\\n\")"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::devour_data/docs/docker_compose_-_use_compose_bridge_9.md::afe766dbaa12546a": {
|
|
"id": "boilerplate_duplication::devour_data/docs/docker_compose_-_use_compose_bridge_9.md::afe766dbaa12546a",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "devour_data/docs/docker_compose_-_use_compose_bridge_9.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): devour_data/docs/docker_compose_-_use_compose_bridge_9.md:5, devour_data/docs/docker_compose_-_why_use_compose?_3.md:5",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "devour_data/docs/docker_compose_-_use_compose_bridge_9.md",
|
|
"line": 5
|
|
},
|
|
{
|
|
"file": "devour_data/docs/docker_compose_-_why_use_compose?_3.md",
|
|
"line": 5
|
|
}
|
|
],
|
|
"sample": [
|
|
"cker Compose - Use Compose Bridge",
|
|
"",
|
|
"## \ud83d\udccb Document Information",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::devour_data/docs/docker_compose_-_explore_the_compose_file_referenc_8.md::affed86ba41c27bf": {
|
|
"id": "boilerplate_duplication::devour_data/docs/docker_compose_-_explore_the_compose_file_referenc_8.md::affed86ba41c27bf",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "devour_data/docs/docker_compose_-_explore_the_compose_file_referenc_8.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): devour_data/docs/docker_compose_-_explore_the_compose_file_referenc_8.md:5, devour_data/docs/docker_compose_-_why_use_compose?_3.md:5",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "devour_data/docs/docker_compose_-_explore_the_compose_file_referenc_8.md",
|
|
"line": 5
|
|
},
|
|
{
|
|
"file": "devour_data/docs/docker_compose_-_why_use_compose?_3.md",
|
|
"line": 5
|
|
}
|
|
],
|
|
"sample": [
|
|
"cker Compose - Explore the Compose file reference",
|
|
"",
|
|
"## \ud83d\udccb Document Information",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/springdocs/parser.go::b023da781681f447": {
|
|
"id": "boilerplate_duplication::pkg/springdocs/parser.go::b023da781681f447",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/springdocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 13 lines): pkg/springdocs/parser.go:66, pkg/tsdocs/parser.go:72",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 13,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/springdocs/parser.go",
|
|
"line": 66
|
|
},
|
|
{
|
|
"file": "pkg/tsdocs/parser.go",
|
|
"line": 72
|
|
}
|
|
],
|
|
"sample": [
|
|
"} else {",
|
|
"\t\t\tresult.Kind = \"doc\"",
|
|
"\t\t}",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/nuxtdocs.go::b1960b037c76ea6b": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/nuxtdocs.go::b1960b037c76ea6b",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/nuxtdocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 9 lines): internal/scraper/external/nuxtdocs.go:151, internal/scraper/external/vuedocs.go:113",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/nuxtdocs.go",
|
|
"line": 151
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/vuedocs.go",
|
|
"line": 113
|
|
}
|
|
],
|
|
"sample": [
|
|
", sourceName string) *Document {",
|
|
"\tvar content strings.Builder",
|
|
"\tfmt.Fprintf(&content, \"# %s\\n\\n\", comp.Name)",
|
|
"\tif comp.Signature != \"\" {"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/gdscript/detectors/deps.py::b1a0ac695ccbb386": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/gdscript/detectors/deps.py::b1a0ac695ccbb386",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/gdscript/detectors/deps.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 9 lines): desloppify/desloppify/desloppify/languages/gdscript/detectors/deps.py:14, desloppify/desloppify/desloppify/languages/gdscript/test_coverage.py:20",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/gdscript/detectors/deps.py",
|
|
"line": 14
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/gdscript/test_coverage.py",
|
|
"line": 20
|
|
}
|
|
],
|
|
"sample": [
|
|
"def _find_project_root(path: Path) -> Path:",
|
|
" cursor = path if path.is_dir() else path.parent",
|
|
" for candidate in (cursor, *cursor.parents):",
|
|
" if (candidate / \"project.godot\").is_file():"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/deps/fallback.py::b45693be28100238": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/deps/fallback.py::b45693be28100238",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/deps/fallback.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 14 lines): desloppify/desloppify/desloppify/languages/csharp/deps/fallback.py:69, desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py:91",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 14,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/deps/fallback.py",
|
|
"line": 69
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py",
|
|
"line": 91
|
|
}
|
|
],
|
|
"sample": [
|
|
"refs: set[Path] = set()",
|
|
" root_ns: str | None = None",
|
|
" try:",
|
|
" root = ET.parse(csproj_file).getroot()"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/reactdocs.go::b4757a8b4e95f4dc": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/reactdocs.go::b4757a8b4e95f4dc",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/reactdocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 10 lines): internal/scraper/external/reactdocs.go:52, internal/scraper/external/vuedocs.go:57",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 10,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/reactdocs.go",
|
|
"line": 52
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/vuedocs.go",
|
|
"line": 57
|
|
}
|
|
],
|
|
"sample": [
|
|
", source.Name)",
|
|
"\t\tdocuments = append(documents, doc)",
|
|
"\t}",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/phases.py::b520256fcbd8cccc": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/phases.py::b520256fcbd8cccc",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/python/phases.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 15 lines): desloppify/desloppify/desloppify/languages/python/phases.py:152, desloppify/desloppify/desloppify/languages/typescript/phases.py:235",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 15,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/python/phases.py",
|
|
"line": 152
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/phases.py",
|
|
"line": 235
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" file_finder=lang.file_finder,",
|
|
" threshold=lang.complexity_threshold,",
|
|
" )"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/plugins/go/fixers/advanced_fixers.go::b7613fcc4b406178": {
|
|
"id": "boilerplate_duplication::internal/quality/plugins/go/fixers/advanced_fixers.go::b7613fcc4b406178",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/plugins/go/fixers/advanced_fixers.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 10 lines): internal/quality/plugins/go/fixers/advanced_fixers.go:41, internal/quality/plugins/go/fixers/fixers.go:98",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 10,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/plugins/go/fixers/advanced_fixers.go",
|
|
"line": 41
|
|
},
|
|
{
|
|
"file": "internal/quality/plugins/go/fixers/fixers.go",
|
|
"line": 98
|
|
}
|
|
],
|
|
"sample": [
|
|
"fset := token.NewFileSet()",
|
|
"\tnode, err := parser.ParseFile(fset, finding.File, nil, parser.ParseComments)",
|
|
"\tif err != nil {",
|
|
"\t\treturn nil, fmt.Errorf(\"parse error: %w\", err)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/reactdocs/parser.go::b88b60b2d7c9a5c8": {
|
|
"id": "boilerplate_duplication::pkg/reactdocs/parser.go::b88b60b2d7c9a5c8",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/reactdocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 17 lines): pkg/reactdocs/parser.go:233, pkg/vuedocs/parser.go:233",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 17,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/reactdocs/parser.go",
|
|
"line": 233
|
|
},
|
|
{
|
|
"file": "pkg/vuedocs/parser.go",
|
|
"line": 233
|
|
}
|
|
],
|
|
"sample": [
|
|
") {",
|
|
"\t\t\t\t\tif next.Is(\"p\") && dir.Doc == \"\" {",
|
|
"\t\t\t\t\t\tdir.Doc = strings.TrimSpace(next.Text())",
|
|
"\t\t\t\t\t}"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/scorecard_generator.py::bb877e36f59ce500": {
|
|
"id": "boilerplate_duplication::cmd/scorecard_generator.py::bb877e36f59ce500",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/scorecard_generator.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 16 lines): cmd/scorecard_generator.py:388, desloppify/desloppify/desloppify/app/output/scorecard.py:77",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 16,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/scorecard_generator.py",
|
|
"line": 388
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/output/scorecard.py",
|
|
"line": 77
|
|
}
|
|
],
|
|
"sample": [
|
|
".Draw(img)",
|
|
" ",
|
|
" # Double frame",
|
|
" draw.rectangle((0, 0, width - 1, height - 1), outline=FRAME, width=scale(2))"
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::internal/quality/plugins/go/fixers/advanced_fixers.go::bdbe992e7b84440d": {
|
|
"id": "boilerplate_duplication::internal/quality/plugins/go/fixers/advanced_fixers.go::bdbe992e7b84440d",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/plugins/go/fixers/advanced_fixers.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 14 lines): internal/quality/plugins/go/fixers/advanced_fixers.go:158, internal/quality/plugins/go/fixers/fixers.go:62",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 14,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/plugins/go/fixers/advanced_fixers.go",
|
|
"line": 158
|
|
},
|
|
{
|
|
"file": "internal/quality/plugins/go/fixers/fixers.go",
|
|
"line": 62
|
|
}
|
|
],
|
|
"sample": [
|
|
"}",
|
|
"",
|
|
"\tvar output strings.Builder",
|
|
"\tif err := format.Node(&output, fset, node); err != nil {"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/devour_enhanced_fixed.py::c04d6fd00573c977": {
|
|
"id": "boilerplate_duplication::cmd/devour_enhanced_fixed.py::c04d6fd00573c977",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/devour_enhanced_fixed.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 191 lines): cmd/devour_enhanced_fixed.py:64, cmd/devour_enhanced_v2.py:109",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 191,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/devour_enhanced_fixed.py",
|
|
"line": 64
|
|
},
|
|
{
|
|
"file": "cmd/devour_enhanced_v2.py",
|
|
"line": 109
|
|
}
|
|
],
|
|
"sample": [
|
|
"def draw_mini_sparkline(",
|
|
" draw: ImageDraw.ImageDraw,",
|
|
" x: int, y: int, width: int, height: int,",
|
|
" values: List[float], color: Tuple[int, int, int]"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/fixers/logs.py::c0b4427af69f8334": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/fixers/logs.py::c0b4427af69f8334",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/fixers/logs.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 9 lines): desloppify/desloppify/desloppify/languages/typescript/fixers/logs.py:32, desloppify/desloppify/desloppify/languages/typescript/fixers/params.py:28",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/fixers/logs.py",
|
|
"line": 32
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/fixers/params.py",
|
|
"line": 28
|
|
}
|
|
],
|
|
"sample": [
|
|
"by_file: dict[str, list[dict]] = defaultdict(list)",
|
|
" for e in entries:",
|
|
" by_file[e[\"file\"]].append(e)",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/astrodocs/parser.go::c1310f6ca90e7069": {
|
|
"id": "boilerplate_duplication::pkg/astrodocs/parser.go::c1310f6ca90e7069",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/astrodocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 22 lines): pkg/astrodocs/parser.go:140, pkg/dockerdocs/parser.go:143",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 22,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/astrodocs/parser.go",
|
|
"line": 140
|
|
},
|
|
{
|
|
"file": "pkg/dockerdocs/parser.go",
|
|
"line": 143
|
|
}
|
|
],
|
|
"sample": [
|
|
"{",
|
|
"\t\t\t\tparts := strings.Split(classes, \" \")",
|
|
"\t\t\t\tfor _, part := range parts {",
|
|
"\t\t\t\t\tif strings.HasPrefix(part, \"language-\") {"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/phases.py::c17a1ece9ec90342": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/csharp/phases.py::c17a1ece9ec90342",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/phases.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): desloppify/desloppify/desloppify/languages/csharp/phases.py:207, desloppify/desloppify/desloppify/languages/typescript/phases.py:237",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/phases.py",
|
|
"line": 207
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/phases.py",
|
|
"line": 237
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" )",
|
|
" for e in complexity_entries:",
|
|
" add_structural_signal("
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/dart/detectors/deps.py::c3088998c2b573c3": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/dart/detectors/deps.py::c3088998c2b573c3",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/dart/detectors/deps.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 8 lines): desloppify/desloppify/desloppify/languages/dart/detectors/deps.py:49, desloppify/desloppify/desloppify/languages/dart/test_coverage.py:80",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 8,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/dart/detectors/deps.py",
|
|
"line": 49
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/dart/test_coverage.py",
|
|
"line": 80
|
|
}
|
|
],
|
|
"sample": [
|
|
".parent / cleaned).resolve())",
|
|
" elif cleaned.startswith(\"/\"):",
|
|
" candidates.append((project_root / cleaned.lstrip(\"/\")).resolve())",
|
|
" else:"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_deps.py::c4b5cf6f2b30091c": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_deps.py::c4b5cf6f2b30091c",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_deps.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 17 lines): desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_deps.py:269, desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_scan.py:210",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 17,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_deps.py",
|
|
"line": 269
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_scan.py",
|
|
"line": 210
|
|
}
|
|
],
|
|
"sample": [
|
|
"]}).encode(",
|
|
" \"utf-8\"",
|
|
" )",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/godocs/parser.go::c4f8f52fee532b31": {
|
|
"id": "boilerplate_duplication::pkg/godocs/parser.go::c4f8f52fee532b31",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/godocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 9 lines): pkg/godocs/parser.go:80, pkg/vuedocs/parser.go:42",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/godocs/parser.go",
|
|
"line": 80
|
|
},
|
|
{
|
|
"file": "pkg/vuedocs/parser.go",
|
|
"line": 42
|
|
}
|
|
],
|
|
"sample": [
|
|
"func (p *Parser) ParseSearchResults(html string) ([]*SearchResult, error) {",
|
|
"\tdoc, err := goquery.NewDocumentFromReader(strings.NewReader(html))",
|
|
"\tif err != nil {",
|
|
"\t\treturn nil, err"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/devour_enhanced_fixed.py::c70c7dbd6fa669e6": {
|
|
"id": "boilerplate_duplication::cmd/devour_enhanced_fixed.py::c70c7dbd6fa669e6",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/devour_enhanced_fixed.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 49 lines): cmd/devour_enhanced_fixed.py:357, cmd/devour_enhanced_v2.py:404",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 49,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/devour_enhanced_fixed.py",
|
|
"line": 357
|
|
},
|
|
{
|
|
"file": "cmd/devour_enhanced_v2.py",
|
|
"line": 404
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
" ",
|
|
" # Score bar",
|
|
" score = data.get('score', 0)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/lang/dart/test_dart_deps.py::c7277f1f1053fc3e": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/lang/dart/test_dart_deps.py::c7277f1f1053fc3e",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/lang/dart/test_dart_deps.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 11 lines): desloppify/desloppify/desloppify/tests/lang/dart/test_dart_deps.py:8, desloppify/desloppify/desloppify/tests/lang/gdscript/test_gdscript_deps.py:8",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/lang/dart/test_dart_deps.py",
|
|
"line": 8
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/lang/gdscript/test_gdscript_deps.py",
|
|
"line": 8
|
|
}
|
|
],
|
|
"sample": [
|
|
".detectors.deps import build_dep_graph",
|
|
"",
|
|
"",
|
|
"def _write(path: Path, relpath: str, content: str) -> Path:"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/pythondocs/parser.go::c75671be8980ceab": {
|
|
"id": "boilerplate_duplication::pkg/pythondocs/parser.go::c75671be8980ceab",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/pythondocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 8 lines): pkg/pythondocs/parser.go:66, pkg/tsdocs/parser.go:53",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 8,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/pythondocs/parser.go",
|
|
"line": 66
|
|
},
|
|
{
|
|
"file": "pkg/tsdocs/parser.go",
|
|
"line": 53
|
|
}
|
|
],
|
|
"sample": [
|
|
"}",
|
|
"",
|
|
"\t\tlink := s.Find(\"a\").First()",
|
|
"\t\tresult.Name = strings.TrimSpace(link.Text())"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/dart/move.py::ca041429363b605d": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/dart/move.py::ca041429363b605d",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/dart/move.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 25 lines): desloppify/desloppify/desloppify/languages/dart/move.py:1, desloppify/desloppify/desloppify/languages/gdscript/move.py:1",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 25,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/dart/move.py",
|
|
"line": 1
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/gdscript/move.py",
|
|
"line": 1
|
|
}
|
|
],
|
|
"sample": [
|
|
"\"\"\"Move helpers for language plugin scaffolding.\"\"\"",
|
|
"",
|
|
"from __future__ import annotations",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/phases.py::cbbb5083bb7dd943": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/phases.py::cbbb5083bb7dd943",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/python/phases.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 13 lines): desloppify/desloppify/desloppify/languages/python/phases.py:14, desloppify/desloppify/desloppify/languages/typescript/phases.py:20",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 13,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/python/phases.py",
|
|
"line": 14
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/phases.py",
|
|
"line": 20
|
|
}
|
|
],
|
|
"sample": [
|
|
"from desloppify.engine.detectors import single_use as single_use_detector_mod",
|
|
"from desloppify.engine.detectors.base import ComplexitySignal, GodRule",
|
|
"from desloppify.engine.policy.zones import adjust_potential, filter_entries",
|
|
"from desloppify.languages.framework.base.structural import ("
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/_shared/phases_common.py::cc8ae6eadc10b840": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/_shared/phases_common.py::cc8ae6eadc10b840",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/_shared/phases_common.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 9 lines): desloppify/desloppify/desloppify/languages/_shared/phases_common.py:17, desloppify/desloppify/desloppify/languages/typescript/phases.py:22",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/_shared/phases_common.py",
|
|
"line": 17
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/phases.py",
|
|
"line": 22
|
|
}
|
|
],
|
|
"sample": [
|
|
"from desloppify.engine.policy.zones import adjust_potential, filter_entries",
|
|
"from desloppify.languages.framework.base.structural import (",
|
|
" add_structural_signal,",
|
|
" merge_structural_signals,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/_shared/review_data/dimensions.json::d41acdbf38a5368a": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/_shared/review_data/dimensions.json::d41acdbf38a5368a",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/_shared/review_data/dimensions.json",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 24 lines): desloppify/desloppify/desloppify/languages/_shared/review_data/dimensions.json:199, desloppify/desloppify/desloppify/tests/snapshots/cli_smoke/query.json:37",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 24,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/_shared/review_data/dimensions.json",
|
|
"line": 199
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/snapshots/cli_smoke/query.json",
|
|
"line": 37
|
|
}
|
|
],
|
|
"sample": [
|
|
"]",
|
|
" },",
|
|
" \"initialization_coupling\": {",
|
|
" \"description\": \"Boot-order dependencies, import-time side effects, global singletons\","
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/status_parts/render.py::d831329280cee91c": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/status_parts/render.py::d831329280cee91c",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/app/commands/status_parts/render.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): desloppify/desloppify/desloppify/app/commands/status_parts/render.py:115, desloppify/desloppify/desloppify/app/commands/status_parts/transparency.py:34",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/commands/status_parts/render.py",
|
|
"line": 115
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/commands/status_parts/transparency.py",
|
|
"line": 34
|
|
}
|
|
],
|
|
"sample": [
|
|
", \"dim\"))",
|
|
"",
|
|
" last_ignored = int(suppression.get(\"last_ignored\", 0) or 0)",
|
|
" last_raw = int(suppression.get(\"last_raw_findings\", 0) or 0)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/lang/common/test_lang_contract_validation.py::dceb4ac8eadeaaf6": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/lang/common/test_lang_contract_validation.py::dceb4ac8eadeaaf6",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/lang/common/test_lang_contract_validation.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 9 lines): desloppify/desloppify/desloppify/tests/lang/common/test_lang_contract_validation.py:14, desloppify/desloppify/desloppify/tests/lang/common/test_lang_init.py:360",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/lang/common/test_lang_contract_validation.py",
|
|
"line": 14
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/lang/common/test_lang_init.py",
|
|
"line": 360
|
|
}
|
|
],
|
|
"sample": [
|
|
"],",
|
|
" exclusions=[],",
|
|
" default_src=\".\",",
|
|
" build_dep_graph=lambda _p: {},"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/astrodocs/parser.go::dee0a20863dc6718": {
|
|
"id": "boilerplate_duplication::pkg/astrodocs/parser.go::dee0a20863dc6718",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/astrodocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 28 lines): pkg/astrodocs/parser.go:87, pkg/cloudflaredocs/parser.go:98",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 28,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/astrodocs/parser.go",
|
|
"line": 87
|
|
},
|
|
{
|
|
"file": "pkg/cloudflaredocs/parser.go",
|
|
"line": 98
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"}",
|
|
"",
|
|
"func (p *Parser) extractContent(doc *goquery.Document) string {"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/test_coverage.py::dee5224a3f5d9265": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/test_coverage.py::dee5224a3f5d9265",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/python/test_coverage.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 17 lines): desloppify/desloppify/desloppify/languages/python/test_coverage.py:106, desloppify/desloppify/desloppify/languages/typescript/test_coverage.py:212",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 17,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/python/test_coverage.py",
|
|
"line": 106
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/test_coverage.py",
|
|
"line": 212
|
|
}
|
|
],
|
|
"sample": [
|
|
"))",
|
|
"",
|
|
" for prod in production_set:",
|
|
" prod_base = os.path.basename(prod)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/tests/test_py_facade.py::df1f5d7b89bf2a48": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/tests/test_py_facade.py::df1f5d7b89bf2a48",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/python/tests/test_py_facade.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 11 lines): desloppify/desloppify/desloppify/languages/python/tests/test_py_facade.py:105, desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_facade.py:89",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/python/tests/test_py_facade.py",
|
|
"line": 105
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_facade.py",
|
|
"line": 89
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"",
|
|
" graph = {str(f): _make_graph_entry(importer_count=3)}",
|
|
" entries, total = detect_reexport_facades(graph, max_importers=3)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::devour_data/docs/docker_compose_-_how_compose_works_4.md::e2752b06a6ab4817": {
|
|
"id": "boilerplate_duplication::devour_data/docs/docker_compose_-_how_compose_works_4.md::e2752b06a6ab4817",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "devour_data/docs/docker_compose_-_how_compose_works_4.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): devour_data/docs/docker_compose_-_how_compose_works_4.md:5, devour_data/docs/docker_compose_-_why_use_compose?_3.md:5",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "devour_data/docs/docker_compose_-_how_compose_works_4.md",
|
|
"line": 5
|
|
},
|
|
{
|
|
"file": "devour_data/docs/docker_compose_-_why_use_compose?_3.md",
|
|
"line": 5
|
|
}
|
|
],
|
|
"sample": [
|
|
"cker Compose - How Compose works",
|
|
"",
|
|
"## \ud83d\udccb Document Information",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/_shared/phases_common.py::e38818baa137e75c": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/_shared/phases_common.py::e38818baa137e75c",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/_shared/phases_common.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 14 lines): desloppify/desloppify/desloppify/languages/_shared/phases_common.py:18, desloppify/desloppify/desloppify/languages/csharp/phases.py:22",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 14,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/_shared/phases_common.py",
|
|
"line": 18
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/csharp/phases.py",
|
|
"line": 22
|
|
}
|
|
],
|
|
"sample": [
|
|
"from desloppify.languages.framework.base.structural import (",
|
|
" add_structural_signal,",
|
|
" merge_structural_signals,",
|
|
")"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_coupling.py::e5328ee2cc86ea39": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_coupling.py::e5328ee2cc86ea39",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_coupling.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 23 lines): desloppify/desloppify/desloppify/tests/detectors/test_coupling.py:23, desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py:19",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 23,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_coupling.py",
|
|
"line": 23
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py",
|
|
"line": 19
|
|
}
|
|
],
|
|
"sample": [
|
|
"def _graph_entry(",
|
|
" *,",
|
|
" imports: set[str] | None = None,",
|
|
" importer_count: int = 0,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_react.py::e62e8e60d12f6401": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_react.py::e62e8e60d12f6401",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_react.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 11 lines): desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_react.py:23, desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_smells.py:23",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_react.py",
|
|
"line": 23
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_smells.py",
|
|
"line": 23
|
|
}
|
|
],
|
|
"sample": [
|
|
"utils_mod._find_source_files_cached.cache_clear()",
|
|
"",
|
|
"",
|
|
"def _write(tmp_path: Path, name: str, content: str) -> Path:"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/dart/extractors.py::e8481afa8dd7fe02": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/dart/extractors.py::e8481afa8dd7fe02",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/dart/extractors.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 7 lines): desloppify/desloppify/desloppify/languages/dart/extractors.py:80, desloppify/desloppify/desloppify/languages/gdscript/extractors.py:28",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 7,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/dart/extractors.py",
|
|
"line": 80
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/gdscript/extractors.py",
|
|
"line": 28
|
|
}
|
|
],
|
|
"sample": [
|
|
"def _extract_params(raw_params: str) -> list[str]:",
|
|
" names: list[str] = []",
|
|
" for chunk in raw_params.split(\",\"):",
|
|
" token = chunk.strip().split(\"=\")[0].strip()"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/dart/detectors/deps.py::ef39954ef886ac8d": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/dart/detectors/deps.py::ef39954ef886ac8d",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/dart/detectors/deps.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 5 lines): desloppify/desloppify/desloppify/languages/dart/detectors/deps.py:45, desloppify/desloppify/desloppify/languages/dart/test_coverage.py:76",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 5,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/dart/detectors/deps.py",
|
|
"line": 45
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/dart/test_coverage.py",
|
|
"line": 76
|
|
}
|
|
],
|
|
"sample": [
|
|
"package, rel_path = package_ref.split(\"/\", 1)",
|
|
" if package_name and package == package_name:",
|
|
" candidates.append((project_root / \"lib\" / rel_path).resolve())",
|
|
" elif cleaned.startswith(\"./\") or cleaned.startswith(\"../\"):"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/detectors/smells.py::f04838564de3b81b": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/detectors/smells.py::f04838564de3b81b",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/python/detectors/smells.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 15 lines): desloppify/desloppify/desloppify/languages/python/detectors/smells.py:389, desloppify/desloppify/desloppify/languages/typescript/detectors/smells.py:505",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 15,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/python/detectors/smells.py",
|
|
"line": 389
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/smells.py",
|
|
"line": 505
|
|
}
|
|
],
|
|
"sample": [
|
|
":",
|
|
" matches = smell_counts[check[\"id\"]]",
|
|
" if matches:",
|
|
" entries.append("
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/devour_enhanced_fixed.py::f142a9a28aa87d0e": {
|
|
"id": "boilerplate_duplication::cmd/devour_enhanced_fixed.py::f142a9a28aa87d0e",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/devour_enhanced_fixed.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 59 lines): cmd/devour_enhanced_fixed.py:401, cmd/devour_enhanced_v2.py:448",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 59,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/devour_enhanced_fixed.py",
|
|
"line": 401
|
|
},
|
|
{
|
|
"file": "cmd/devour_enhanced_v2.py",
|
|
"line": 448
|
|
}
|
|
],
|
|
"sample": [
|
|
"draw_mini_sparkline(draw, chart_x, chart_y, chart_width, chart_height, ",
|
|
" values, COLORS['info'])",
|
|
"",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/move.py::f2ec3bd68e6b23cb": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/python/move.py::f2ec3bd68e6b23cb",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/python/move.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 15 lines): desloppify/desloppify/desloppify/languages/python/move.py:14, desloppify/desloppify/desloppify/languages/typescript/move.py:13",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 15,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/python/move.py",
|
|
"line": 14
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/move.py",
|
|
"line": 13
|
|
}
|
|
],
|
|
"sample": [
|
|
"logger = logging.getLogger(__name__)",
|
|
"",
|
|
"",
|
|
"def _dedup(replacements: list[tuple[str, str]]) -> list[tuple[str, str]]:"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/godocs.go::f4612de02d936eb2": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/godocs.go::f4612de02d936eb2",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/godocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 17 lines): internal/scraper/external/godocs.go:36, internal/scraper/external/javadocs.go:35",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 17,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/godocs.go",
|
|
"line": 36
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/javadocs.go",
|
|
"line": 35
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"\t}",
|
|
"",
|
|
"\thtml, err := s.fetchPage(ctx, source.URL)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::AGENTS.md::f5082312cb4cc769": {
|
|
"id": "boilerplate_duplication::AGENTS.md::f5082312cb4cc769",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "AGENTS.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 52 lines): AGENTS.md:17, desloppify/desloppify/docs/SKILL.md:15",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 52,
|
|
"locations": [
|
|
{
|
|
"file": "AGENTS.md",
|
|
"line": 17
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/docs/SKILL.md",
|
|
"line": 15
|
|
}
|
|
],
|
|
"sample": [
|
|
"d-tools: Bash(desloppify *)",
|
|
"---",
|
|
"",
|
|
"# Desloppify"
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_show.py::f50c752fb27628d9": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_show.py::f50c752fb27628d9",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_show.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 15 lines): desloppify/desloppify/desloppify/tests/commands/test_cmd_show.py:272, desloppify/desloppify/desloppify/tests/scan/test_scan_reporting_direct.py:648",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 15,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_show.py",
|
|
"line": 272
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/scan/test_scan_reporting_direct.py",
|
|
"line": 648
|
|
}
|
|
],
|
|
"sample": [
|
|
"{",
|
|
" \"Naming Quality\": {",
|
|
" \"score\": 0.0,",
|
|
" \"strict\": 0.0,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/status_parts/render.py::f5eb690b05279595": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/status_parts/render.py::f5eb690b05279595",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/app/commands/status_parts/render.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 26 lines): desloppify/desloppify/desloppify/app/commands/status_parts/render.py:410, desloppify/desloppify/desloppify/app/commands/status_parts/sections.py:147",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 26,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/commands/status_parts/render.py",
|
|
"line": 410
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/commands/status_parts/sections.py",
|
|
"line": 147
|
|
}
|
|
],
|
|
"sample": [
|
|
"),",
|
|
" ]",
|
|
" )",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/engine/state_internal/resolution.py::fba961aa69224db3": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/engine/state_internal/resolution.py::fba961aa69224db3",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/engine/state_internal/resolution.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 11 lines): desloppify/desloppify/desloppify/engine/state_internal/resolution.py:16, desloppify/desloppify/desloppify/engine/state_internal/scoring.py:31",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/engine/state_internal/resolution.py",
|
|
"line": 16
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/engine/state_internal/scoring.py",
|
|
"line": 31
|
|
}
|
|
],
|
|
"sample": [
|
|
") -> float:",
|
|
" \"\"\"Normalize a subjective assessment score payload to a 0-100 float.\"\"\"",
|
|
" raw = value.get(\"score\", 0) if isinstance(value, dict) else value",
|
|
" try:"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/rustdocs/parser.go::fc021c0bc6db75eb": {
|
|
"id": "boilerplate_duplication::pkg/rustdocs/parser.go::fc021c0bc6db75eb",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/rustdocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 21 lines): pkg/rustdocs/parser.go:607, pkg/springdocs/parser.go:290",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 21,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/rustdocs/parser.go",
|
|
"line": 607
|
|
},
|
|
{
|
|
"file": "pkg/springdocs/parser.go",
|
|
"line": 290
|
|
}
|
|
],
|
|
"sample": [
|
|
"}",
|
|
"\treturn \"\"",
|
|
"}",
|
|
""
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-23T10:02:44+00:00",
|
|
"resolved_at": "2026-02-23T10:08:19+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-23T10:08:19+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/javadocs.go::ffc6769d6a49c728": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/javadocs.go::ffc6769d6a49c728",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/javadocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): internal/scraper/external/javadocs.go:122, internal/scraper/external/springdocs.go:117",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/javadocs.go",
|
|
"line": 122
|
|
},
|
|
{
|
|
"file": "internal/scraper/external/springdocs.go",
|
|
"line": 117
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"\tfmt.Fprintf(&content, \"%s\\n\", class.Doc)",
|
|
"",
|
|
"\tif len(class.Methods) > 0 {"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_show.py::01c32b67a11cd62d": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_show.py::01c32b67a11cd62d",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_show.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 9 lines): desloppify/desloppify/desloppify/tests/commands/test_cmd_show.py:152",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_show.py",
|
|
"line": 152
|
|
}
|
|
],
|
|
"sample": [
|
|
"def _make_finding(self, fid, *, file=\"a.ts\", detector=\"unused\",",
|
|
" tier=2, confidence=\"high\"):",
|
|
" return {",
|
|
" \"id\": fid, \"file\": file, \"detector\": detector,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::landing/src/components/sections/Footer.tsx::076f1572105c12cd": {
|
|
"id": "boilerplate_duplication::landing/src/components/sections/Footer.tsx::076f1572105c12cd",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "landing/src/components/sections/Footer.tsx",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 15 lines): landing/src/components/sections/Footer.tsx:97",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 15,
|
|
"locations": [
|
|
{
|
|
"file": "landing/src/components/sections/Footer.tsx",
|
|
"line": 97
|
|
}
|
|
],
|
|
"sample": [
|
|
".map((link, i) => (",
|
|
" <li key={i}>",
|
|
" <a",
|
|
" href={link.href}"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/framework/commands_base.py::0880d9b6108f556f": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/framework/commands_base.py::0880d9b6108f556f",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/framework/commands_base.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 9 lines): desloppify/desloppify/desloppify/languages/framework/commands_base.py:295",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/framework/commands_base.py",
|
|
"line": 295
|
|
}
|
|
],
|
|
"sample": [
|
|
"(",
|
|
" *,",
|
|
" cmd_deps: Callable[[argparse.Namespace], None],",
|
|
" cmd_cycles: Callable[[argparse.Namespace], None],"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_naming.py::0e029fe47e4ccf26": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_naming.py::0e029fe47e4ccf26",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_naming.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 11 lines): desloppify/desloppify/desloppify/tests/detectors/test_naming.py:188",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_naming.py",
|
|
"line": 188
|
|
}
|
|
],
|
|
"sample": [
|
|
")]",
|
|
" files = self._build_files(tmp_path, \"src\", kebab_files + pascal_files)",
|
|
"",
|
|
" monkeypatch.setattr(naming_mod, \"rel\", lambda p: os.path.relpath(p, tmp_path))"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/plugins/go/fixers/advanced_fixers.go::13371acfae870bf9": {
|
|
"id": "boilerplate_duplication::internal/quality/plugins/go/fixers/advanced_fixers.go::13371acfae870bf9",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/plugins/go/fixers/advanced_fixers.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 13 lines): internal/quality/plugins/go/fixers/advanced_fixers.go:128",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 13,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/plugins/go/fixers/advanced_fixers.go",
|
|
"line": 128
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"\t}",
|
|
"",
|
|
"\tfset := token.NewFileSet()"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/plugins/go/analyzers/deadcode.go::14d9cc047590b673": {
|
|
"id": "boilerplate_duplication::internal/quality/plugins/go/analyzers/deadcode.go::14d9cc047590b673",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/plugins/go/analyzers/deadcode.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 11 lines): internal/quality/plugins/go/analyzers/deadcode.go:188",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/plugins/go/analyzers/deadcode.go",
|
|
"line": 188
|
|
}
|
|
],
|
|
"sample": [
|
|
"for _, imp := range node.Imports {",
|
|
"\t\tpkgPath := strings.Trim(imp.Path.Value, `\"`)",
|
|
"\t\tname := \"\"",
|
|
"\t\tif imp.Name != nil {"
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_coupling.py::155a25f7258e0ac2": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_coupling.py::155a25f7258e0ac2",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_coupling.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 13 lines): desloppify/desloppify/desloppify/tests/detectors/test_coupling.py:332",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 13,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_coupling.py",
|
|
"line": 332
|
|
}
|
|
],
|
|
"sample": [
|
|
"),",
|
|
" }",
|
|
"",
|
|
" with patch("
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/analyzers/dataflow.go::178b32be7909edec": {
|
|
"id": "boilerplate_duplication::internal/quality/analyzers/dataflow.go::178b32be7909edec",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/analyzers/dataflow.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 9 lines): internal/quality/analyzers/dataflow.go:346",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/analyzers/dataflow.go",
|
|
"line": 346
|
|
}
|
|
],
|
|
"sample": [
|
|
"{",
|
|
"\t\treturn",
|
|
"\t}",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_coupling.py::17afc4436e334912": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_coupling.py::17afc4436e334912",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_coupling.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 17 lines): desloppify/desloppify/desloppify/tests/detectors/test_coupling.py:556",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 17,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_coupling.py",
|
|
"line": 556
|
|
}
|
|
],
|
|
"sample": [
|
|
": _graph_entry(",
|
|
" imports={f\"{TOOLS_PREFIX}editor/a.ts\"},",
|
|
" ),",
|
|
" }"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_scan.py::17c944aa3885190f": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_scan.py::17c944aa3885190f",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_scan.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 12 lines): desloppify/desloppify/desloppify/tests/commands/test_cmd_scan.py:700",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_scan.py",
|
|
"line": 700
|
|
}
|
|
],
|
|
"sample": [
|
|
"],",
|
|
" },",
|
|
" )",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/scoring_test.go::1e8a35877ed1e13e": {
|
|
"id": "boilerplate_duplication::internal/quality/scoring_test.go::1e8a35877ed1e13e",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/scoring_test.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 6 lines): internal/quality/scoring_test.go:503",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 6,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/scoring_test.go",
|
|
"line": 503
|
|
}
|
|
],
|
|
"sample": [
|
|
"[]Finding{",
|
|
"\t\t{Score: 5, Severity: SeverityT1, Status: StatusOpen},",
|
|
"\t\t{Score: 10, Severity: SeverityT2, Status: StatusOpen},",
|
|
"\t\t{Score: 15, Severity: SeverityT3, Status: StatusOpen},"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/vuedocs/parser.go::22cfbe5d29b5df88": {
|
|
"id": "boilerplate_duplication::pkg/vuedocs/parser.go::22cfbe5d29b5df88",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/vuedocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 9 lines): pkg/vuedocs/parser.go:266",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/vuedocs/parser.go",
|
|
"line": 266
|
|
}
|
|
],
|
|
"sample": [
|
|
"next := s.Next()",
|
|
"\t\t\t\tfor next.Length() > 0 && !next.Is(\"h2, h3, h4\") {",
|
|
"\t\t\t\t\tif next.Is(\"p\") && comp.Doc == \"\" {",
|
|
"\t\t\t\t\t\tcomp.Doc = strings.TrimSpace(next.Text())"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_scan.py::25753399fa1c64a0": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_scan.py::25753399fa1c64a0",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_scan.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 20 lines): desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_scan.py:177",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 20,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_scan.py",
|
|
"line": 177
|
|
}
|
|
],
|
|
"sample": [
|
|
"}",
|
|
" lang = SimpleNamespace(",
|
|
" complexity_map={\"src/Foo.cs\": 25},",
|
|
" large_threshold=500,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/detectors/unused.py::25c14863c082e138": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/detectors/unused.py::25c14863c082e138",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/unused.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 10 lines): desloppify/desloppify/desloppify/languages/typescript/detectors/unused.py:143",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 10,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/unused.py",
|
|
"line": 143
|
|
}
|
|
],
|
|
"sample": [
|
|
"name.startswith(\"_\"):",
|
|
" continue",
|
|
" if _identifier_occurrences(code, name) <= 1:",
|
|
" entries.append("
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/plugins/go/analyzers/test_coverage.go::286a940e6d06e952": {
|
|
"id": "boilerplate_duplication::internal/quality/plugins/go/analyzers/test_coverage.go::286a940e6d06e952",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/plugins/go/analyzers/test_coverage.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 15 lines): internal/quality/plugins/go/analyzers/test_coverage.go:291",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 15,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/plugins/go/analyzers/test_coverage.go",
|
|
"line": 291
|
|
}
|
|
],
|
|
"sample": [
|
|
") parseRange(s string) (start, end int) {",
|
|
"\tparts := strings.Split(s, \",\")",
|
|
"\tif len(parts) != 2 {",
|
|
"\t\treturn 0, 0"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/scoring/test_scorecard.py::293f03e19e3161ed": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/scoring/test_scorecard.py::293f03e19e3161ed",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/scoring/test_scorecard.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 18 lines): desloppify/desloppify/desloppify/tests/scoring/test_scorecard.py:421",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 18,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/scoring/test_scorecard.py",
|
|
"line": 421
|
|
}
|
|
],
|
|
"sample": [
|
|
"):",
|
|
" active_dims = [",
|
|
" (\"File health\", _mk_dim(99, subjective=False)),",
|
|
" (\"Code quality\", _mk_dim(95, subjective=False)),"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_detect.py::2a781420be515a5d": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_detect.py::2a781420be515a5d",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_detect.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 14 lines): desloppify/desloppify/desloppify/tests/commands/test_cmd_detect.py:149",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 14,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_detect.py",
|
|
"line": 149
|
|
}
|
|
],
|
|
"sample": [
|
|
"captured_args = []",
|
|
"",
|
|
" class FakeLang(_FakeLangBase):",
|
|
" name = \"typescript\""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_coupling.py::2c1fb3289d5db95e": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_coupling.py::2c1fb3289d5db95e",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_coupling.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 14 lines): desloppify/desloppify/desloppify/tests/detectors/test_coupling.py:100",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 14,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_coupling.py",
|
|
"line": 100
|
|
}
|
|
],
|
|
"sample": [
|
|
"},",
|
|
" ),",
|
|
" }",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/scan/test_flat_dirs.py::2dadd72e175bc032": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/scan/test_flat_dirs.py::2dadd72e175bc032",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/scan/test_flat_dirs.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 15 lines): desloppify/desloppify/desloppify/tests/scan/test_flat_dirs.py:130",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 15,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/scan/test_flat_dirs.py",
|
|
"line": 130
|
|
}
|
|
],
|
|
"sample": [
|
|
"(self, tmp_path):",
|
|
" d = tmp_path / \"components\"",
|
|
" d.mkdir()",
|
|
" files = []"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/scan/test_scan_reporting_direct.py::3168817e4647c2d2": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/scan/test_scan_reporting_direct.py::3168817e4647c2d2",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/scan/test_scan_reporting_direct.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 14 lines): desloppify/desloppify/desloppify/tests/scan/test_scan_reporting_direct.py:99",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 14,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/scan/test_scan_reporting_direct.py",
|
|
"line": 99
|
|
}
|
|
],
|
|
"sample": [
|
|
"(",
|
|
" monkeypatch, capsys",
|
|
"):",
|
|
" import desloppify.state as state_mod"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/intelligence/review/context_internal/structure.py::316b41331b42f159": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/intelligence/review/context_internal/structure.py::316b41331b42f159",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/intelligence/review/context_internal/structure.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 8 lines): desloppify/desloppify/desloppify/intelligence/review/context_internal/structure.py:65",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 8,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/intelligence/review/context_internal/structure.py",
|
|
"line": 65
|
|
}
|
|
],
|
|
"sample": [
|
|
", set()):",
|
|
" imp_rel = rel(imp)",
|
|
" imp_parts = Path(imp_rel).parts",
|
|
" imp_dir = ("
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::.github/workflows/ci.yml::31ef55e2753fcfa8": {
|
|
"id": "boilerplate_duplication::.github/workflows/ci.yml::31ef55e2753fcfa8",
|
|
"detector": "boilerplate_duplication",
|
|
"file": ".github/workflows/ci.yml",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 23 lines): .github/workflows/ci.yml:101",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 23,
|
|
"locations": [
|
|
{
|
|
"file": ".github/workflows/ci.yml",
|
|
"line": 101
|
|
}
|
|
],
|
|
"sample": [
|
|
"steps:",
|
|
" - name: Checkout code",
|
|
" uses: actions/checkout@v4",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_coupling.py::36cae1eabe4d1f18": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_coupling.py::36cae1eabe4d1f18",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_coupling.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 13 lines): desloppify/desloppify/desloppify/tests/detectors/test_coupling.py:284",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 13,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_coupling.py",
|
|
"line": 284
|
|
}
|
|
],
|
|
"sample": [
|
|
"f\"{tp}editor/b.ts\"],",
|
|
" ),",
|
|
" }",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/scan/test_scan_workflow_wontfix_direct.py::38dcdcc7ec76f64c": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/scan/test_scan_workflow_wontfix_direct.py::38dcdcc7ec76f64c",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/scan/test_scan_workflow_wontfix_direct.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 21 lines): desloppify/desloppify/desloppify/tests/scan/test_scan_workflow_wontfix_direct.py:84",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 21,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/scan/test_scan_workflow_wontfix_direct.py",
|
|
"line": 84
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" \"detail\": {\"loc\": 220, \"complexity_score\": 35},",
|
|
" },",
|
|
" }"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/narrative_test.go::3a4f9f0ea29e70e2": {
|
|
"id": "boilerplate_duplication::internal/quality/narrative_test.go::3a4f9f0ea29e70e2",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/narrative_test.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 6 lines): internal/quality/narrative_test.go:55",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 6,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/narrative_test.go",
|
|
"line": 55
|
|
}
|
|
],
|
|
"sample": [
|
|
"{Status: StatusOpen, Severity: SeverityT3},",
|
|
"\t\t\t\t{Status: StatusOpen, Severity: SeverityT3},",
|
|
"\t\t\t\t{Status: StatusOpen, Severity: SeverityT3},",
|
|
"\t\t\t\t{Status: StatusOpen, Severity: SeverityT3},"
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::internal/quality/narrative_test.go::3d908f1705c395ad": {
|
|
"id": "boilerplate_duplication::internal/quality/narrative_test.go::3d908f1705c395ad",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/narrative_test.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 9 lines): internal/quality/narrative_test.go:556",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/narrative_test.go",
|
|
"line": 556
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
"\t\t\tfindings: func() []Finding {",
|
|
"\t\t\t\tvar f []Finding",
|
|
"\t\t\t\tfor i := 0; i < 25; i++ {"
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_fixers.py::424e025bee9ff0fc": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_fixers.py::424e025bee9ff0fc",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_fixers.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 7 lines): desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_fixers.py:428",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 7,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_fixers.py",
|
|
"line": 428
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
" entries = [{\"file\": str(ts_file), \"name\": \"unused\", \"line\": 1}]",
|
|
" results, skips = fix_unused_vars(entries, dry_run=False)",
|
|
" assert len(results) == 1"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/vuedocs.go::429e37f86bfea253": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/vuedocs.go::429e37f86bfea253",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/vuedocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 11 lines): internal/scraper/external/vuedocs.go:186",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/vuedocs.go",
|
|
"line": 186
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
"\t\tTitle: comp.Name,",
|
|
"\t\tContent: content.String(),",
|
|
"\t\tURL: comp.DocURL,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_config_cmd.py::42a0430530eefc4b": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_config_cmd.py::42a0430530eefc4b",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_config_cmd.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 9 lines): desloppify/desloppify/desloppify/tests/commands/test_config_cmd.py:28",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_config_cmd.py",
|
|
"line": 28
|
|
}
|
|
],
|
|
"sample": [
|
|
"(monkeypatch):",
|
|
" calls: list[str] = []",
|
|
" monkeypatch.setattr(config_cmd, \"_config_set\", lambda _args: calls.append(\"set\"))",
|
|
" monkeypatch.setattr("
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_coupling.py::4372dccbe8b7a1dd": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_coupling.py::4372dccbe8b7a1dd",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_coupling.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 14 lines): desloppify/desloppify/desloppify/tests/detectors/test_coupling.py:355",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 14,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_coupling.py",
|
|
"line": 355
|
|
}
|
|
],
|
|
"sample": [
|
|
"],",
|
|
" ),",
|
|
" }",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/external/rustdocs.go::441ec9018f338d32": {
|
|
"id": "boilerplate_duplication::internal/scraper/external/rustdocs.go::441ec9018f338d32",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/external/rustdocs.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 10 lines): internal/scraper/external/rustdocs.go:458",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 10,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/external/rustdocs.go",
|
|
"line": 458
|
|
}
|
|
],
|
|
"sample": [
|
|
", crate.Name, m.Name),",
|
|
"\t\tContent: content.String(),",
|
|
"\t\tURL: m.DocURL,",
|
|
"\t\tMetadata: metadata,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/state/test_state_internal_direct.py::46b126e206b7fb06": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/state/test_state_internal_direct.py::46b126e206b7fb06",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/state/test_state_internal_direct.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 15 lines): desloppify/desloppify/desloppify/tests/state/test_state_internal_direct.py:157",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 15,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/state/test_state_internal_direct.py",
|
|
"line": 157
|
|
}
|
|
],
|
|
"sample": [
|
|
"():",
|
|
" state = schema_mod.empty_state()",
|
|
" review_finding = filtering_mod.make_finding(",
|
|
" \"review\","
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/review/test_review_dimensions_direct.py::46f956271f3141a5": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/review/test_review_dimensions_direct.py::46f956271f3141a5",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/review/test_review_dimensions_direct.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 20 lines): desloppify/desloppify/desloppify/tests/review/test_review_dimensions_direct.py:236",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 20,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/review/test_review_dimensions_direct.py",
|
|
"line": 236
|
|
}
|
|
],
|
|
"sample": [
|
|
"(",
|
|
" tmp_path, monkeypatch",
|
|
"):",
|
|
" shared_dir = tmp_path / \"review_data\""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/engine/detectors/security/rules.py::486d7b468f189b40": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/engine/detectors/security/rules.py::486d7b468f189b40",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/engine/detectors/security/rules.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 9 lines): desloppify/desloppify/desloppify/engine/detectors/security/rules.py:98",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/engine/detectors/security/rules.py",
|
|
"line": 98
|
|
}
|
|
],
|
|
"sample": [
|
|
"(",
|
|
" filepath: str,",
|
|
" line_num: int,",
|
|
" line: str,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py::4b185603c23402d9": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py::4b185603c23402d9",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 12 lines): desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py:180",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py",
|
|
"line": 180
|
|
}
|
|
],
|
|
"sample": [
|
|
"),",
|
|
" str(f2): _graph_entry(importer_count=0),",
|
|
" }",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/app/output/scorecard_parts/projection.py::4bcded3ef5cbbe7d": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/app/output/scorecard_parts/projection.py::4bcded3ef5cbbe7d",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/app/output/scorecard_parts/projection.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 8 lines): desloppify/desloppify/desloppify/app/output/scorecard_parts/projection.py:166",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 8,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/output/scorecard_parts/projection.py",
|
|
"line": 166
|
|
}
|
|
],
|
|
"sample": [
|
|
"{",
|
|
" \"name\": name,",
|
|
" \"score\": score,",
|
|
" \"strict\": strict,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/localsearch_test.go::4d8a061c47cec3b5": {
|
|
"id": "boilerplate_duplication::internal/scraper/localsearch_test.go::4d8a061c47cec3b5",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/localsearch_test.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 5 lines): internal/scraper/localsearch_test.go:165",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 5,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/localsearch_test.go",
|
|
"line": 165
|
|
}
|
|
],
|
|
"sample": [
|
|
"mux.HandleFunc(\"/search\", func(w http.ResponseWriter, r *http.Request) {",
|
|
"\t\t_ = json.NewEncoder(w).Encode(map[string]interface{}{",
|
|
"\t\t\t\"results\": []map[string]interface{}{",
|
|
"\t\t\t\t{"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py::4da6348b9346fe20": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py::4da6348b9346fe20",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 12 lines): desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py:206",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py",
|
|
"line": 206
|
|
}
|
|
],
|
|
"sample": [
|
|
"): _graph_entry(importer_count=0),",
|
|
" }",
|
|
"",
|
|
" with patch("
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/review/test_review_dimensions_direct.py::4e7344c6f594f56e": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/review/test_review_dimensions_direct.py::4e7344c6f594f56e",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/review/test_review_dimensions_direct.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 15 lines): desloppify/desloppify/desloppify/tests/review/test_review_dimensions_direct.py:388",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 15,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/review/test_review_dimensions_direct.py",
|
|
"line": 388
|
|
}
|
|
],
|
|
"sample": [
|
|
"}",
|
|
" (shared_dir / \"dimensions.json\").write_text(json.dumps(shared_payload))",
|
|
" (",
|
|
" lang_dir / \"python\" / \"review_data\" / \"dimensions.override.json\""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/plugins/go/analyzers/security.go::5386d67496f67919": {
|
|
"id": "boilerplate_duplication::internal/quality/plugins/go/analyzers/security.go::5386d67496f67919",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/plugins/go/analyzers/security.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 13 lines): internal/quality/plugins/go/analyzers/security.go:229",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 13,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/plugins/go/analyzers/security.go",
|
|
"line": 229
|
|
}
|
|
],
|
|
"sample": [
|
|
"finding := quality.Finding{",
|
|
"\t\t\t\t\t\tID: fmt.Sprintf(\"security::%s::%d\", file, pos.Line),",
|
|
"\t\t\t\t\t\tType: \"security\",",
|
|
"\t\t\t\t\t\tTitle: pattern.Name,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/languages.go::5536046d68094a82": {
|
|
"id": "boilerplate_duplication::internal/quality/languages.go::5536046d68094a82",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/languages.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 18 lines): internal/quality/languages.go:129",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 18,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/languages.go",
|
|
"line": 129
|
|
}
|
|
],
|
|
"sample": [
|
|
"{",
|
|
"\tlanguages := GetSupportedLanguages()",
|
|
"\tvar extensions []string",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/state/test_state.py::570dd82c539ab51f": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/state/test_state.py::570dd82c539ab51f",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/state/test_state.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 13 lines): desloppify/desloppify/desloppify/tests/state/test_state.py:818",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 13,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/state/test_state.py",
|
|
"line": 818
|
|
}
|
|
],
|
|
"sample": [
|
|
"):",
|
|
" st = empty_state()",
|
|
" st[\"subjective_assessments\"] = {",
|
|
" \"naming_quality\": {\"score\": 95},"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_coupling.py::59a85880fd240216": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_coupling.py::59a85880fd240216",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_coupling.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 11 lines): desloppify/desloppify/desloppify/tests/detectors/test_coupling.py:409",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_coupling.py",
|
|
"line": 409
|
|
}
|
|
],
|
|
"sample": [
|
|
"): _graph_entry(",
|
|
" importer_count=1,",
|
|
" importers=[f\"{tp}editor/b.ts\"],",
|
|
" ),"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/plugins/go/analyzers/detectors.go::5e78205dbc78e101": {
|
|
"id": "boilerplate_duplication::internal/quality/plugins/go/analyzers/detectors.go::5e78205dbc78e101",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/plugins/go/analyzers/detectors.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 16 lines): internal/quality/plugins/go/analyzers/detectors.go:330",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 16,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/plugins/go/analyzers/detectors.go",
|
|
"line": 330
|
|
}
|
|
],
|
|
"sample": [
|
|
", callStr),",
|
|
"\t\t\t\t\tFile: path,",
|
|
"\t\t\t\t\tLine: pos.Line,",
|
|
"\t\t\t\t\tSeverity: quality.SeverityT1,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/localsearch_test.go::5fe388c58b198848": {
|
|
"id": "boilerplate_duplication::internal/scraper/localsearch_test.go::5fe388c58b198848",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/localsearch_test.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 10 lines): internal/scraper/localsearch_test.go:111",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 10,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/localsearch_test.go",
|
|
"line": 111
|
|
}
|
|
],
|
|
"sample": [
|
|
"s := NewLocalSearchScraper(&Config{",
|
|
"\t\tUserAgent: \"DevourTest/1.0\",",
|
|
"\t\tTimeout: 2 * time.Second,",
|
|
"\t})"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py::663c7ac3787b497d": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py::663c7ac3787b497d",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 39 lines): desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py:399",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 39,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py",
|
|
"line": 399
|
|
}
|
|
],
|
|
"sample": [
|
|
"},",
|
|
" \"overall_score\": 90.0,",
|
|
" \"objective_score\": 95.0,",
|
|
" \"strict_score\": 90.0,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/detectors/deps.py::699201ff0ffc66d5": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/detectors/deps.py::699201ff0ffc66d5",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/deps.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 17 lines): desloppify/desloppify/desloppify/languages/typescript/detectors/deps.py:261",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 17,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/detectors/deps.py",
|
|
"line": 261
|
|
}
|
|
],
|
|
"sample": [
|
|
":",
|
|
" source_resolved = resolve_path(filepath)",
|
|
" graph[source_resolved] # ensure entry exists",
|
|
" for module_path in _extract_module_specifiers(content):"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_coupling.py::6a56d569a4415519": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_coupling.py::6a56d569a4415519",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_coupling.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 14 lines): desloppify/desloppify/desloppify/tests/detectors/test_coupling.py:659",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 14,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_coupling.py",
|
|
"line": 659
|
|
}
|
|
],
|
|
"sample": [
|
|
": _graph_entry(",
|
|
" imports={f\"{TOOLS_PREFIX}editor/helpers.ts\"},",
|
|
" ),",
|
|
" }"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_fixers.py::731c3a6da45c455f": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_fixers.py::731c3a6da45c455f",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_fixers.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 9 lines): desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_fixers.py:181",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/languages/typescript/tests/test_ts_fixers.py",
|
|
"line": 181
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"",
|
|
" entries = [{\"file\": str(ts_file), \"target\": \"line_b\"}]",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/plugins/go/fixers/fixers.go::7510b2a508ad54a6": {
|
|
"id": "boilerplate_duplication::internal/quality/plugins/go/fixers/fixers.go::7510b2a508ad54a6",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/plugins/go/fixers/fixers.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 8 lines): internal/quality/plugins/go/fixers/fixers.go:97",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 8,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/plugins/go/fixers/fixers.go",
|
|
"line": 97
|
|
}
|
|
],
|
|
"sample": [
|
|
") Fix(ctx context.Context, finding quality.Finding, dryRun bool) (*plugins.FixResult, error) {",
|
|
"\tfset := token.NewFileSet()",
|
|
"\tnode, err := parser.ParseFile(fset, finding.File, nil, parser.ParseComments)",
|
|
"\tif err != nil {"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/state_test.go::7657e4ffe2b2aeca": {
|
|
"id": "boilerplate_duplication::internal/quality/state_test.go::7657e4ffe2b2aeca",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/state_test.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 11 lines): internal/quality/state_test.go:417",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/state_test.go",
|
|
"line": 417
|
|
}
|
|
],
|
|
"sample": [
|
|
"(t *testing.T) {",
|
|
"\tsm := NewStateManager(\"/tmp\")",
|
|
"",
|
|
"\tstate := &State{"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/web.go::77101ae63ee37a1f": {
|
|
"id": "boilerplate_duplication::internal/scraper/web.go::77101ae63ee37a1f",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/web.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 8 lines): internal/scraper/web.go:229",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 8,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/web.go",
|
|
"line": 229
|
|
}
|
|
],
|
|
"sample": [
|
|
"{",
|
|
"\t\t\terrText := strings.ToLower(err.Error())",
|
|
"\t\t\tif strings.Contains(errText, \"already visited\") {",
|
|
"\t\t\t\treturn"
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/review/test_review_coverage.py::79936512cf2e4576": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/review/test_review_coverage.py::79936512cf2e4576",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/review/test_review_coverage.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 11 lines): desloppify/desloppify/desloppify/tests/review/test_review_coverage.py:190",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/review/test_review_coverage.py",
|
|
"line": 190
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" \"reviewed_at\": now,",
|
|
" \"finding_count\": 0,",
|
|
" }"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py::7f5a6d4f36420730": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py::7f5a6d4f36420730",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 34 lines): desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py:458",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 34,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py",
|
|
"line": 458
|
|
}
|
|
],
|
|
"sample": [
|
|
"},",
|
|
" )",
|
|
" monkeypatch.setattr(next_mod, \"write_query\", lambda _payload: None)",
|
|
" monkeypatch.setattr("
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/status_parts/render.py::7fc62e1d83a16795": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/status_parts/render.py::7fc62e1d83a16795",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/app/commands/status_parts/render.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 13 lines): desloppify/desloppify/desloppify/app/commands/status_parts/render.py:223",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 13,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/commands/status_parts/render.py",
|
|
"line": 223
|
|
}
|
|
],
|
|
"sample": [
|
|
"filled = round(score_val / 100 * bar_len)",
|
|
" if score_val >= 98:",
|
|
" bar = colorize(\"\u2588\" * filled + \"\u2591\" * (bar_len - filled), \"green\")",
|
|
" elif score_val >= 93:"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/review/test_review_dimensions_direct.py::820cb23807b3af44": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/review/test_review_dimensions_direct.py::820cb23807b3af44",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/review/test_review_dimensions_direct.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 11 lines): desloppify/desloppify/desloppify/tests/review/test_review_dimensions_direct.py:222",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/review/test_review_dimensions_direct.py",
|
|
"line": 222
|
|
}
|
|
],
|
|
"sample": [
|
|
"))",
|
|
"",
|
|
" monkeypatch.setattr(dimensions_data_mod, \"_DATA_DIR\", shared_dir)",
|
|
" monkeypatch.setattr(dimensions_data_mod, \"_LANG_DIR\", lang_dir)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/nuxtdocs/parser.go::89f1d41949046666": {
|
|
"id": "boilerplate_duplication::pkg/nuxtdocs/parser.go::89f1d41949046666",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/nuxtdocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 15 lines): pkg/nuxtdocs/parser.go:125",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 15,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/nuxtdocs/parser.go",
|
|
"line": 125
|
|
}
|
|
],
|
|
"sample": [
|
|
"{",
|
|
"\t\t\t\t\tName: name,",
|
|
"\t\t\t\t}",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/quality.go::8bde3802edaa20fc": {
|
|
"id": "boilerplate_duplication::cmd/quality.go::8bde3802edaa20fc",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/quality.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 19 lines): cmd/quality.go:534",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 19,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/quality.go",
|
|
"line": 534
|
|
}
|
|
],
|
|
"sample": [
|
|
"dataDir := filepath.Join(\".\", \"devour_data\", \"quality\")",
|
|
"\tstatusFile := filepath.Join(dataDir, \"status.json\")",
|
|
"",
|
|
"\tvar findings []quality.Finding"
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_coupling.py::95e3aa0997e8f430": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_coupling.py::95e3aa0997e8f430",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_coupling.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 14 lines): desloppify/desloppify/desloppify/tests/detectors/test_coupling.py:124",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 14,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_coupling.py",
|
|
"line": 124
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" },",
|
|
" ),",
|
|
" }"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::landing/src/index.css::96bdd7ca264e41f5": {
|
|
"id": "boilerplate_duplication::landing/src/index.css::96bdd7ca264e41f5",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "landing/src/index.css",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 21 lines): landing/src/index.css:50",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 21,
|
|
"locations": [
|
|
{
|
|
"file": "landing/src/index.css",
|
|
"line": 50
|
|
}
|
|
],
|
|
"sample": [
|
|
"{",
|
|
" --background: 222.2 84% 4.9%;",
|
|
" --foreground: 210 40% 98%;",
|
|
" --card: 222.2 84% 4.9%;"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_scan.py::96cb4b15680801ee": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_scan.py::96cb4b15680801ee",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_scan.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 15 lines): desloppify/desloppify/desloppify/tests/commands/test_cmd_scan.py:607",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 15,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_scan.py",
|
|
"line": 607
|
|
}
|
|
],
|
|
"sample": [
|
|
"(self, monkeypatch, capsys):",
|
|
" import desloppify.intelligence.narrative as narrative_mod",
|
|
" monkeypatch.setattr(narrative_mod, \"compute_narrative\",",
|
|
" lambda state, **kw: {\"headline\": None, \"actions\": []})"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/plugins/go/fixers/fixers.go::9c2ae622909976dc": {
|
|
"id": "boilerplate_duplication::internal/quality/plugins/go/fixers/fixers.go::9c2ae622909976dc",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/plugins/go/fixers/fixers.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 16 lines): internal/quality/plugins/go/fixers/fixers.go:107",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 16,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/plugins/go/fixers/fixers.go",
|
|
"line": 107
|
|
}
|
|
],
|
|
"sample": [
|
|
", finding.File),",
|
|
"\t\t}, nil",
|
|
"\t}",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/state/test_state.py::9f06edb52a9cf89c": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/state/test_state.py::9f06edb52a9cf89c",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/state/test_state.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 8 lines): desloppify/desloppify/desloppify/tests/state/test_state.py:447",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 8,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/state/test_state.py",
|
|
"line": 447
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
" old[\"resolved_at\"] = \"2025-03-01T00:00:00+00:00\"",
|
|
" existing = {\"det::a.py::fn\": old}",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py::a37a044ea1b67518": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py::a37a044ea1b67518",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 11 lines): desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py:283",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py",
|
|
"line": 283
|
|
}
|
|
],
|
|
"sample": [
|
|
"),",
|
|
" }",
|
|
"",
|
|
" with patch("
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py::a42fcb14106b0afa": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py::a42fcb14106b0afa",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 37 lines): desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py:343",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 37,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py",
|
|
"line": 343
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" \"strict_score\": 90.0,",
|
|
" \"scan_path\": \".\",",
|
|
" },"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_deps.py::a672418ca6f647c6": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_deps.py::a672418ca6f647c6",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_deps.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 19 lines): desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_deps.py:302",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 19,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_deps.py",
|
|
"line": 302
|
|
}
|
|
],
|
|
"sample": [
|
|
"(tmp_path, monkeypatch):",
|
|
" source = (tmp_path / \"Program.cs\").resolve()",
|
|
" payload = json.dumps({\"files\": [{\"file\": str(source), \"imports\": []}]}).encode(",
|
|
" \"utf-8\""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/detector_test.go::a83b9c1e2cbfbd2c": {
|
|
"id": "boilerplate_duplication::internal/quality/detector_test.go::a83b9c1e2cbfbd2c",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/detector_test.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 14 lines): internal/quality/detector_test.go:223",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 14,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/detector_test.go",
|
|
"line": 223
|
|
}
|
|
],
|
|
"sample": [
|
|
"},",
|
|
"\t}",
|
|
"",
|
|
"\tfor _, tt := range tests {"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py::aa2e0ba3006b5ac0": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py::aa2e0ba3006b5ac0",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 11 lines): desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py:393",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_orphaned.py",
|
|
"line": 393
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"",
|
|
" graph = {",
|
|
" str(f1): _graph_entry(importer_count=0),"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py::aaa1566546bab6d6": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py::aaa1566546bab6d6",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 26 lines): desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py:288",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 26,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py",
|
|
"line": 288
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" \"scan_path\": \".\",",
|
|
" },",
|
|
" )"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_architecture_boundaries.py::b1ce271e2761d5c6": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_architecture_boundaries.py::b1ce271e2761d5c6",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_architecture_boundaries.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 7 lines): desloppify/desloppify/desloppify/tests/detectors/test_architecture_boundaries.py:55",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 7,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_architecture_boundaries.py",
|
|
"line": 55
|
|
}
|
|
],
|
|
"sample": [
|
|
"() -> None:",
|
|
" offenders: list[str] = []",
|
|
"",
|
|
" for file_path in _detector_files():"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/review/test_work_queue.py::b3b27c2fe7575c23": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/review/test_work_queue.py::b3b27c2fe7575c23",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/review/test_work_queue.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 11 lines): desloppify/desloppify/desloppify/tests/review/test_work_queue.py:236",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/review/test_work_queue.py",
|
|
"line": 236
|
|
}
|
|
],
|
|
"sample": [
|
|
"},",
|
|
" },",
|
|
" )",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/ai/openai.go::b475990f0cb16413": {
|
|
"id": "boilerplate_duplication::internal/ai/openai.go::b475990f0cb16413",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/ai/openai.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 9 lines): internal/ai/openai.go:251",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "internal/ai/openai.go",
|
|
"line": 251
|
|
}
|
|
],
|
|
"sample": [
|
|
", fmt.Errorf(\"failed to create request: %w\", err)",
|
|
"\t}",
|
|
"",
|
|
"\thttpReq.Header.Set(\"Content-Type\", \"application/json\")"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_fix.py::b88ff40f3066263d": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_fix.py::b88ff40f3066263d",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_fix.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 12 lines): desloppify/desloppify/desloppify/tests/commands/test_cmd_fix.py:203",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_fix.py",
|
|
"line": 203
|
|
}
|
|
],
|
|
"sample": [
|
|
"(self, monkeypatch, capsys):",
|
|
" monkeypatch.setattr(fix_apply_mod, \"rel\", lambda p: p)",
|
|
"",
|
|
" fixer = FixerConfig("
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/state_test.go::b9b12f4f40d1a3d9": {
|
|
"id": "boilerplate_duplication::internal/quality/state_test.go::b9b12f4f40d1a3d9",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/state_test.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 11 lines): internal/quality/state_test.go:160",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/state_test.go",
|
|
"line": 160
|
|
}
|
|
],
|
|
"sample": [
|
|
"(t *testing.T) {",
|
|
"\ttmpDir, err := os.MkdirTemp(\"\", \"state_test\")",
|
|
"\tif err != nil {",
|
|
"\t\tt.Fatalf(\"Failed to create temp dir: %v\", err)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_complexity.py::bbf7d787c4024638": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_complexity.py::bbf7d787c4024638",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_complexity.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 12 lines): desloppify/desloppify/desloppify/tests/detectors/test_complexity.py:54",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_complexity.py",
|
|
"line": 54
|
|
}
|
|
],
|
|
"sample": [
|
|
", content)",
|
|
"",
|
|
" signals = [",
|
|
" ComplexitySignal(name=\"conditionals\", pattern=r\"^if\\b\", weight=1, threshold=5)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/snapshots/cli_smoke/state-python.json::bfd808b8c32635ff": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/snapshots/cli_smoke/state-python.json::bfd808b8c32635ff",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/snapshots/cli_smoke/state-python.json",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 19 lines): desloppify/desloppify/desloppify/tests/snapshots/cli_smoke/state-python.json:241",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 19,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/snapshots/cli_smoke/state-python.json",
|
|
"line": 241
|
|
}
|
|
],
|
|
"sample": [
|
|
": {",
|
|
" \"score\": 0.0,",
|
|
" \"strict_score\": 0.0,",
|
|
" \"checks\": 10,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/scraper/web_integration_test.go::c3c04a8881c6ff49": {
|
|
"id": "boilerplate_duplication::internal/scraper/web_integration_test.go::c3c04a8881c6ff49",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/scraper/web_integration_test.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 13 lines): internal/scraper/web_integration_test.go:38",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 13,
|
|
"locations": [
|
|
{
|
|
"file": "internal/scraper/web_integration_test.go",
|
|
"line": 38
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"\t}))",
|
|
"\tdefer srv.Close()",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_deps.py::c4b624b311f3020e": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_deps.py::c4b624b311f3020e",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_deps.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 12 lines): desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_deps.py:362",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/lang/csharp/test_csharp_deps.py",
|
|
"line": 362
|
|
}
|
|
],
|
|
"sample": [
|
|
"(",
|
|
" tmp_path, monkeypatch",
|
|
"):",
|
|
" program = tmp_path / \"Program.cs\""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_scan.py::c896abd6036395a3": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_scan.py::c896abd6036395a3",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_scan.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 12 lines): desloppify/desloppify/desloppify/tests/commands/test_cmd_scan.py:621",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_scan.py",
|
|
"line": 621
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" \"dimension_scores\": {",
|
|
" \"Naming Quality\": {",
|
|
" \"score\": 88.0,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_scan.py::c908aaca139c9778": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_scan.py::c908aaca139c9778",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_scan.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 14 lines): desloppify/desloppify/desloppify/tests/commands/test_cmd_scan.py:504",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 14,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_scan.py",
|
|
"line": 504
|
|
}
|
|
],
|
|
"sample": [
|
|
"(self, monkeypatch, capsys):",
|
|
" monkeypatch.setattr(",
|
|
" narrative_mod,",
|
|
" \"compute_narrative\","
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/issues_cmd.py::cd6ff0ed8a2a8602": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/issues_cmd.py::cd6ff0ed8a2a8602",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/app/commands/issues_cmd.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 17 lines): desloppify/desloppify/desloppify/app/commands/issues_cmd.py:173",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 17,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/commands/issues_cmd.py",
|
|
"line": 173
|
|
}
|
|
],
|
|
"sample": [
|
|
"narrative = compute_narrative(state, context=NarrativeContext(command=\"issues\"))",
|
|
" items = list_open_review_findings(state)",
|
|
" number = args.number",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/fix/test_cmd_fix_review.py::cf3f6d3640ce8133": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/fix/test_cmd_fix_review.py::cf3f6d3640ce8133",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/fix/test_cmd_fix_review.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 7 lines): desloppify/desloppify/desloppify/tests/commands/fix/test_cmd_fix_review.py:156",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 7,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/fix/test_cmd_fix_review.py",
|
|
"line": 156
|
|
}
|
|
],
|
|
"sample": [
|
|
"(self, capsys):",
|
|
" args = _FakeArgs()",
|
|
" patches = _patch_all(_make_prepare_result())",
|
|
" with patches[0], patches[1], patches[2], patches[3], patches[4]:"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_coupling.py::d33c91ff1263b171": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_coupling.py::d33c91ff1263b171",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_coupling.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 13 lines): desloppify/desloppify/desloppify/tests/detectors/test_coupling.py:215",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 13,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_coupling.py",
|
|
"line": 215
|
|
}
|
|
],
|
|
"sample": [
|
|
"},",
|
|
" ),",
|
|
" }",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py::da5e50d86ed0f431": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py::da5e50d86ed0f431",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 14 lines): desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py:181",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 14,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/commands/test_cmd_next.py",
|
|
"line": 181
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" \"scan_path\": \".\",",
|
|
" },",
|
|
" )"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_naming.py::db637528cadb595f": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_naming.py::db637528cadb595f",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_naming.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 11 lines): desloppify/desloppify/desloppify/tests/detectors/test_naming.py:111",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_naming.py",
|
|
"line": 111
|
|
}
|
|
],
|
|
"sample": [
|
|
"files = self._build_files(tmp_path, \"components\", kebab_files + pascal_files)",
|
|
"",
|
|
" monkeypatch.setattr(naming_mod, \"rel\", lambda p: os.path.relpath(p, tmp_path))",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/scan/scan_reporting_llm.py::e00c3c8569382cc3": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/app/commands/scan/scan_reporting_llm.py::e00c3c8569382cc3",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/app/commands/scan/scan_reporting_llm.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 6 lines): desloppify/desloppify/desloppify/app/commands/scan/scan_reporting_llm.py:101",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 6,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/commands/scan/scan_reporting_llm.py",
|
|
"line": 101
|
|
}
|
|
],
|
|
"sample": [
|
|
", key=lambda item: item[0]):",
|
|
" score = data.get(\"score\", 100)",
|
|
" strict = data.get(\"strict\", score)",
|
|
" issues = data.get(\"issues\", 0)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/rustdocs/parser.go::e4770b9a1f5221b4": {
|
|
"id": "boilerplate_duplication::pkg/rustdocs/parser.go::e4770b9a1f5221b4",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/rustdocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 14 lines): pkg/rustdocs/parser.go:497",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 14,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/rustdocs/parser.go",
|
|
"line": 497
|
|
}
|
|
],
|
|
"sample": [
|
|
").Text())",
|
|
"\t\tif st.Name == \"\" {",
|
|
"\t\t\tst.Name = strings.TrimSpace(s.Find(\"a\").First().Text())",
|
|
"\t\t}"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/quality.go::e5e7cda605431453": {
|
|
"id": "boilerplate_duplication::cmd/quality.go::e5e7cda605431453",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/quality.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 17 lines): cmd/quality.go:644",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 17,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/quality.go",
|
|
"line": 644
|
|
}
|
|
],
|
|
"sample": [
|
|
", \"status.json\")",
|
|
"",
|
|
"\tvar findings []quality.Finding",
|
|
"\tvar lastScan time.Time"
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/scoring/test_scorecard.py::efe0717c5912d9dc": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/scoring/test_scorecard.py::efe0717c5912d9dc",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/scoring/test_scorecard.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 15 lines): desloppify/desloppify/desloppify/tests/scoring/test_scorecard.py:475",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 15,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/scoring/test_scorecard.py",
|
|
"line": 475
|
|
}
|
|
],
|
|
"sample": [
|
|
"(self):",
|
|
" state = {",
|
|
" \"scan_history\": [{\"lang\": \"typescript\"}],",
|
|
" \"dimension_scores\": {"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/scoring/test_scorecard_draw_direct.py::f3e7bd16b29101e7": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/scoring/test_scorecard_draw_direct.py::f3e7bd16b29101e7",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/scoring/test_scorecard_draw_direct.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 8 lines): desloppify/desloppify/desloppify/tests/scoring/test_scorecard_draw_direct.py:46",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 8,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/scoring/test_scorecard_draw_direct.py",
|
|
"line": 46
|
|
}
|
|
],
|
|
"sample": [
|
|
"=50, line_fill=\"line\", ornament_fill=\"orn\"",
|
|
" )",
|
|
"",
|
|
" assert len(draw.rectangles) == 2"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/godocs/parser.go::f6c5fd94822f153a": {
|
|
"id": "boilerplate_duplication::pkg/godocs/parser.go::f6c5fd94822f153a",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/godocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 22 lines): pkg/godocs/parser.go:631",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 22,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/godocs/parser.go",
|
|
"line": 631
|
|
}
|
|
],
|
|
"sample": [
|
|
".Find(\".Documentation-example\").Each(func(_ int, s *goquery.Selection) {",
|
|
"\t\tex := &Example{}",
|
|
"",
|
|
"\t\t// Extract example name"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/review/test_review_dimensions_direct.py::f7f24205b7ceb06e": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/review/test_review_dimensions_direct.py::f7f24205b7ceb06e",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/review/test_review_dimensions_direct.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 12 lines): desloppify/desloppify/desloppify/tests/review/test_review_dimensions_direct.py:264",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/review/test_review_dimensions_direct.py",
|
|
"line": 264
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" }",
|
|
" (shared_dir / \"dimensions.json\").write_text(json.dumps(shared_payload))",
|
|
" ("
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/scoring_test.go::f9e114aa90cd11b0": {
|
|
"id": "boilerplate_duplication::internal/quality/scoring_test.go::f9e114aa90cd11b0",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/scoring_test.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 6 lines): internal/quality/scoring_test.go:458",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 6,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/scoring_test.go",
|
|
"line": 458
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
"\t\t\tfindings: []Finding{",
|
|
"\t\t\t\t{Score: 5, Severity: SeverityT1, Status: StatusOpen},",
|
|
"\t\t\t\t{Score: 10, Severity: SeverityT2, Status: StatusOpen},"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/app/output/scorecard_parts/projection.py::fac40a0480cda8df": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/app/output/scorecard_parts/projection.py::fac40a0480cda8df",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/app/output/scorecard_parts/projection.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 10 lines): desloppify/desloppify/desloppify/app/output/scorecard_parts/projection.py:82",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 10,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/app/output/scorecard_parts/projection.py",
|
|
"line": 82
|
|
}
|
|
],
|
|
"sample": [
|
|
"):",
|
|
" components = (",
|
|
" data.get(\"detectors\", {})",
|
|
" .get(\"subjective_assessment\", {})"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/review/test_review_coverage.py::fcb2a26acfda6af8": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/review/test_review_coverage.py::fcb2a26acfda6af8",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/review/test_review_coverage.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 11 lines): desloppify/desloppify/desloppify/tests/review/test_review_coverage.py:214",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/review/test_review_coverage.py",
|
|
"line": 214
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" \"finding_count\": 0,",
|
|
" }",
|
|
" }"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_gods.py::ff8d07e8176f7e01": {
|
|
"id": "boilerplate_duplication::desloppify/desloppify/desloppify/tests/detectors/test_gods.py::ff8d07e8176f7e01",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_gods.py",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 11 lines): desloppify/desloppify/desloppify/tests/detectors/test_gods.py:131",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/detectors/test_gods.py",
|
|
"line": 131
|
|
}
|
|
],
|
|
"sample": [
|
|
"methods = [",
|
|
" FunctionInfo(",
|
|
" name=f\"m_{i}\", file=\"a.py\", line=i, end_line=i + 5, loc=5, body=\"pass\"",
|
|
" )"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:02:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"dupes::pkg/astrodocs/parser.go::resolveURL::pkg/cloudflaredocs/parser.go::resolveURL": {
|
|
"id": "dupes::pkg/astrodocs/parser.go::resolveURL::pkg/cloudflaredocs/parser.go::resolveURL",
|
|
"detector": "dupes",
|
|
"file": "pkg/astrodocs/parser.go",
|
|
"tier": 2,
|
|
"confidence": "high",
|
|
"summary": "Exact dupe cluster (12 functions, 100% similar): resolveURL (pkg/astrodocs/parser.go:161), resolveURL (pkg/cloudflaredocs/parser.go:191), ...",
|
|
"detail": {
|
|
"fn_a": {
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/astrodocs/parser.go",
|
|
"name": "resolveURL",
|
|
"line": 161,
|
|
"loc": 17
|
|
},
|
|
"fn_b": {
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/cloudflaredocs/parser.go",
|
|
"name": "resolveURL",
|
|
"line": 191,
|
|
"loc": 17
|
|
},
|
|
"similarity": 1.0,
|
|
"kind": "exact",
|
|
"cluster_size": 12,
|
|
"cluster": [
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/astrodocs/parser.go",
|
|
"name": "resolveURL",
|
|
"line": 161,
|
|
"loc": 17
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/cloudflaredocs/parser.go",
|
|
"name": "resolveURL",
|
|
"line": 191,
|
|
"loc": 17
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/dockerdocs/parser.go",
|
|
"name": "resolveURL",
|
|
"line": 184,
|
|
"loc": 17
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/javadocs/parser.go",
|
|
"name": "resolveURL",
|
|
"line": 353,
|
|
"loc": 17
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/mcpdocs/parser.go",
|
|
"name": "resolveURL",
|
|
"line": 196,
|
|
"loc": 17
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/nuxtdocs/parser.go",
|
|
"name": "resolveURL",
|
|
"line": 250,
|
|
"loc": 17
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/pythondocs/parser.go",
|
|
"name": "resolveURL",
|
|
"line": 539,
|
|
"loc": 17
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/reactdocs/parser.go",
|
|
"name": "resolveURL",
|
|
"line": 270,
|
|
"loc": 17
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/rustdocs/parser.go",
|
|
"name": "resolveURL",
|
|
"line": 611,
|
|
"loc": 17
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/springdocs/parser.go",
|
|
"name": "resolveURL",
|
|
"line": 294,
|
|
"loc": 17
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/tsdocs/parser.go",
|
|
"name": "resolveURL",
|
|
"line": 291,
|
|
"loc": 17
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/vuedocs/parser.go",
|
|
"name": "resolveURL",
|
|
"line": 317,
|
|
"loc": 17
|
|
}
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:45+00:00",
|
|
"last_seen": "2026-02-23T10:02:45+00:00",
|
|
"resolved_at": "2026-02-23T10:08:19+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-23T10:08:19+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"dupes::pkg/astrodocs/parser.go::extractSections::pkg/cloudflaredocs/parser.go::extractSections": {
|
|
"id": "dupes::pkg/astrodocs/parser.go::extractSections::pkg/cloudflaredocs/parser.go::extractSections",
|
|
"detector": "dupes",
|
|
"file": "pkg/astrodocs/parser.go",
|
|
"tier": 2,
|
|
"confidence": "high",
|
|
"summary": "Exact dupe: extractSections (pkg/astrodocs/parser.go:99) <-> extractSections (pkg/cloudflaredocs/parser.go:110) [100%]",
|
|
"detail": {
|
|
"fn_a": {
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/astrodocs/parser.go",
|
|
"name": "extractSections",
|
|
"line": 99,
|
|
"loc": 22
|
|
},
|
|
"fn_b": {
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/cloudflaredocs/parser.go",
|
|
"name": "extractSections",
|
|
"line": 110,
|
|
"loc": 22
|
|
},
|
|
"similarity": 1.0,
|
|
"kind": "exact",
|
|
"cluster_size": 2,
|
|
"cluster": [
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/astrodocs/parser.go",
|
|
"name": "extractSections",
|
|
"line": 99,
|
|
"loc": 22
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/cloudflaredocs/parser.go",
|
|
"name": "extractSections",
|
|
"line": 110,
|
|
"loc": 22
|
|
}
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:45+00:00",
|
|
"last_seen": "2026-02-23T10:02:45+00:00",
|
|
"resolved_at": "2026-02-23T10:08:19+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-23T10:08:19+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"dupes::pkg/astrodocs/parser.go::ParsePage::pkg/dockerdocs/parser.go::ParsePage": {
|
|
"id": "dupes::pkg/astrodocs/parser.go::ParsePage::pkg/dockerdocs/parser.go::ParsePage",
|
|
"detector": "dupes",
|
|
"file": "pkg/astrodocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "low",
|
|
"summary": "Near dupe cluster (3 functions, 97% similar): ParsePage (pkg/astrodocs/parser.go:21), ParsePage (pkg/dockerdocs/parser.go:21), ...",
|
|
"detail": {
|
|
"fn_a": {
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/astrodocs/parser.go",
|
|
"name": "ParsePage",
|
|
"line": 21,
|
|
"loc": 19
|
|
},
|
|
"fn_b": {
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/dockerdocs/parser.go",
|
|
"name": "ParsePage",
|
|
"line": 21,
|
|
"loc": 20
|
|
},
|
|
"similarity": 0.97,
|
|
"kind": "near-duplicate",
|
|
"cluster_size": 3,
|
|
"cluster": [
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/astrodocs/parser.go",
|
|
"name": "ParsePage",
|
|
"line": 21,
|
|
"loc": 19
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/cloudflaredocs/parser.go",
|
|
"name": "ParsePage",
|
|
"line": 21,
|
|
"loc": 21
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/dockerdocs/parser.go",
|
|
"name": "ParsePage",
|
|
"line": 21,
|
|
"loc": 20
|
|
}
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:45+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"dupes::pkg/cloudflaredocs/parser.go::extractCodeBlocks::pkg/dockerdocs/parser.go::extractCodeBlocks": {
|
|
"id": "dupes::pkg/cloudflaredocs/parser.go::extractCodeBlocks::pkg/dockerdocs/parser.go::extractCodeBlocks",
|
|
"detector": "dupes",
|
|
"file": "pkg/cloudflaredocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "low",
|
|
"summary": "Near dupe: extractCodeBlocks (pkg/cloudflaredocs/parser.go:141) <-> extractCodeBlocks (pkg/dockerdocs/parser.go:136) [95%]",
|
|
"detail": {
|
|
"fn_a": {
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/cloudflaredocs/parser.go",
|
|
"name": "extractCodeBlocks",
|
|
"line": 141,
|
|
"loc": 25
|
|
},
|
|
"fn_b": {
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/dockerdocs/parser.go",
|
|
"name": "extractCodeBlocks",
|
|
"line": 136,
|
|
"loc": 27
|
|
},
|
|
"similarity": 0.952,
|
|
"kind": "near-duplicate",
|
|
"cluster_size": 2,
|
|
"cluster": [
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/cloudflaredocs/parser.go",
|
|
"name": "extractCodeBlocks",
|
|
"line": 141,
|
|
"loc": 25
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/dockerdocs/parser.go",
|
|
"name": "extractCodeBlocks",
|
|
"line": 136,
|
|
"loc": 27
|
|
}
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:45+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"dupes::internal/scraper/external/astrodocs.go::fetchPage::internal/scraper/external/cloudflaredocs.go::fetchPage": {
|
|
"id": "dupes::internal/scraper/external/astrodocs.go::fetchPage::internal/scraper/external/cloudflaredocs.go::fetchPage",
|
|
"detector": "dupes",
|
|
"file": "internal/scraper/external/astrodocs.go",
|
|
"tier": 3,
|
|
"confidence": "low",
|
|
"summary": "Near dupe cluster (13 functions, 95% similar): fetchPage (internal/scraper/external/astrodocs.go:72), fetchPage (internal/scraper/external/cloudflaredocs.go:77), ...",
|
|
"detail": {
|
|
"fn_a": {
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/internal/scraper/external/astrodocs.go",
|
|
"name": "fetchPage",
|
|
"line": 72,
|
|
"loc": 24
|
|
},
|
|
"fn_b": {
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/internal/scraper/external/cloudflaredocs.go",
|
|
"name": "fetchPage",
|
|
"line": 77,
|
|
"loc": 24
|
|
},
|
|
"similarity": 0.95,
|
|
"kind": "near-duplicate",
|
|
"cluster_size": 13,
|
|
"cluster": [
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/internal/scraper/external/astrodocs.go",
|
|
"name": "fetchPage",
|
|
"line": 72,
|
|
"loc": 24
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/internal/scraper/external/cloudflaredocs.go",
|
|
"name": "fetchPage",
|
|
"line": 77,
|
|
"loc": 24
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/internal/scraper/external/dockerdocs.go",
|
|
"name": "fetchPage",
|
|
"line": 72,
|
|
"loc": 24
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/internal/scraper/external/godocs.go",
|
|
"name": "fetchPage",
|
|
"line": 93,
|
|
"loc": 24
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/internal/scraper/external/javadocs.go",
|
|
"name": "fetchPage",
|
|
"line": 87,
|
|
"loc": 24
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/internal/scraper/external/mcpdocs.go",
|
|
"name": "fetchPage",
|
|
"line": 82,
|
|
"loc": 24
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/internal/scraper/external/nuxtdocs.go",
|
|
"name": "fetchPage",
|
|
"line": 92,
|
|
"loc": 24
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/internal/scraper/external/pythondocs.go",
|
|
"name": "fetchPage",
|
|
"line": 102,
|
|
"loc": 24
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/internal/scraper/external/reactdocs.go",
|
|
"name": "fetchPage",
|
|
"line": 82,
|
|
"loc": 24
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/internal/scraper/external/rustdocs.go",
|
|
"name": "fetchPage",
|
|
"line": 108,
|
|
"loc": 24
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/internal/scraper/external/springdocs.go",
|
|
"name": "fetchPage",
|
|
"line": 82,
|
|
"loc": 24
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/internal/scraper/external/tsdocs.go",
|
|
"name": "fetchPage",
|
|
"line": 87,
|
|
"loc": 24
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/internal/scraper/external/vuedocs.go",
|
|
"name": "fetchPage",
|
|
"line": 87,
|
|
"loc": 24
|
|
}
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:02:45+00:00",
|
|
"last_seen": "2026-02-24T10:19:49+00:00",
|
|
"resolved_at": "2026-02-24T10:23:45+00:00",
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:23:45+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"dupes::pkg/astrodocs/parser.go::ParseSidebar::pkg/cloudflaredocs/parser.go::ParseSidebar": {
|
|
"id": "dupes::pkg/astrodocs/parser.go::ParseSidebar::pkg/cloudflaredocs/parser.go::ParseSidebar",
|
|
"detector": "dupes",
|
|
"file": "pkg/astrodocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "low",
|
|
"summary": "Near dupe: ParseSidebar (pkg/astrodocs/parser.go:41) <-> ParseSidebar (pkg/cloudflaredocs/parser.go:43) [94%]",
|
|
"detail": {
|
|
"fn_a": {
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/astrodocs/parser.go",
|
|
"name": "ParseSidebar",
|
|
"line": 41,
|
|
"loc": 24
|
|
},
|
|
"fn_b": {
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/cloudflaredocs/parser.go",
|
|
"name": "ParseSidebar",
|
|
"line": 43,
|
|
"loc": 24
|
|
},
|
|
"similarity": 0.944,
|
|
"kind": "near-duplicate",
|
|
"cluster_size": 2,
|
|
"cluster": [
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/astrodocs/parser.go",
|
|
"name": "ParseSidebar",
|
|
"line": 41,
|
|
"loc": 24
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/pkg/cloudflaredocs/parser.go",
|
|
"name": "ParseSidebar",
|
|
"line": 43,
|
|
"loc": 24
|
|
}
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:45+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"dupes::internal/quality/plugins/go/analyzers/deadcode.go::Detect::internal/quality/plugins/go/analyzers/security.go::Detect": {
|
|
"id": "dupes::internal/quality/plugins/go/analyzers/deadcode.go::Detect::internal/quality/plugins/go/analyzers/security.go::Detect",
|
|
"detector": "dupes",
|
|
"file": "internal/quality/plugins/go/analyzers/deadcode.go",
|
|
"tier": 3,
|
|
"confidence": "low",
|
|
"summary": "Near dupe cluster (3 functions, 93% similar): Detect (internal/quality/plugins/go/analyzers/deadcode.go:142), Detect (internal/quality/plugins/go/analyzers/security.go:87), ...",
|
|
"detail": {
|
|
"fn_a": {
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/internal/quality/plugins/go/analyzers/deadcode.go",
|
|
"name": "Detect",
|
|
"line": 142,
|
|
"loc": 18
|
|
},
|
|
"fn_b": {
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/internal/quality/plugins/go/analyzers/security.go",
|
|
"name": "Detect",
|
|
"line": 87,
|
|
"loc": 18
|
|
},
|
|
"similarity": 0.933,
|
|
"kind": "near-duplicate",
|
|
"cluster_size": 3,
|
|
"cluster": [
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/internal/quality/plugins/go/analyzers/deadcode.go",
|
|
"name": "Detect",
|
|
"line": 142,
|
|
"loc": 18
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/internal/quality/plugins/go/analyzers/security.go",
|
|
"name": "Detect",
|
|
"line": 87,
|
|
"loc": 18
|
|
},
|
|
{
|
|
"file": "/home/tdvorak/Desktop/PROG_projekty/GOLANG/Devour/internal/quality/plugins/go/analyzers/security.go",
|
|
"name": "Detect",
|
|
"line": 280,
|
|
"loc": 18
|
|
}
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:02:45+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"structural::internal/search/engine.go": {
|
|
"id": "structural::internal/search/engine.go",
|
|
"detector": "structural",
|
|
"file": "internal/search/engine.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Needs decomposition: large (551 LOC) / complexity score 34",
|
|
"detail": {
|
|
"loc": 551,
|
|
"complexity_score": 34,
|
|
"complexity_signals": [
|
|
"59 if/else branches"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:08:03+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"structural::cmd/scrape.go": {
|
|
"id": "structural::cmd/scrape.go",
|
|
"detector": "structural",
|
|
"file": "cmd/scrape.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Needs decomposition: complexity score 43",
|
|
"detail": {
|
|
"complexity_score": 43,
|
|
"complexity_signals": [
|
|
"51 if/else branches",
|
|
"27 switch/case"
|
|
],
|
|
"loc": 449
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:08:03+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"vet_error::cmd/scrape.go::vet_error::254": {
|
|
"id": "vet_error::cmd/scrape.go::vet_error::254",
|
|
"detector": "vet_error",
|
|
"file": "cmd/scrape.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "cannot use fmt.Printf (value of type func(format string, a ...any) (n int, err error)) as func(string, ...any) value in struct literal",
|
|
"detail": {},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:08:04+00:00",
|
|
"last_seen": "2026-02-23T10:11:40+00:00",
|
|
"resolved_at": "2026-02-23T10:14:10+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-23T10:14:10+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"vet_error::vet: cmd/scrape.go::vet_error::254": {
|
|
"id": "vet_error::vet: cmd/scrape.go::vet_error::254",
|
|
"detector": "vet_error",
|
|
"file": "vet: cmd/scrape.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "cannot use fmt.Printf (value of type func(format string, a ...any) (n int, err error)) as func(string, ...any) value in struct literal",
|
|
"detail": {},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:08:04+00:00",
|
|
"last_seen": "2026-02-23T10:09:41+00:00",
|
|
"resolved_at": "2026-02-23T10:11:40+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-23T10:11:40+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"signature::internal/indexer/indexer.go::signature_variance::Search": {
|
|
"id": "signature::internal/indexer/indexer.go::signature_variance::Search",
|
|
"detector": "signature",
|
|
"file": "internal/indexer/indexer.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "'Search' has 3 different signatures across 3 files",
|
|
"detail": {},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:08:04+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"signature::internal/config/config.go::signature_variance::Load": {
|
|
"id": "signature::internal/config/config.go::signature_variance::Load",
|
|
"detector": "signature",
|
|
"file": "internal/config/config.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "'Load' has 3 different signatures across 3 files",
|
|
"detail": {},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:08:04+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:07:57+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:07:57+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"test_coverage::cmd/runtime_helpers.go::untested_module": {
|
|
"id": "test_coverage::cmd/runtime_helpers.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "cmd/runtime_helpers.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (81 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 81,
|
|
"importer_count": 0,
|
|
"loc_weight": 9.0
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:08:04+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::pkg/parserutil/url.go::untested_module": {
|
|
"id": "test_coverage::pkg/parserutil/url.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "pkg/parserutil/url.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (25 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 25,
|
|
"importer_count": 0,
|
|
"loc_weight": 5.0
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:08:04+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/config/config.go::untested_module": {
|
|
"id": "test_coverage::internal/config/config.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/config/config.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (368 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 368,
|
|
"importer_count": 0,
|
|
"loc_weight": 19.183326093250876
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:08:04+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/storage/writer.go::untested_module": {
|
|
"id": "test_coverage::internal/storage/writer.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/storage/writer.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (149 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 149,
|
|
"importer_count": 0,
|
|
"loc_weight": 12.206555615733702
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:08:04+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::internal/search/engine.go::untested_critical": {
|
|
"id": "test_coverage::internal/search/engine.go::untested_critical",
|
|
"detector": "test_coverage",
|
|
"file": "internal/search/engine.go",
|
|
"tier": 2,
|
|
"confidence": "high",
|
|
"summary": "Untested critical module (528 LOC, 0 importers) \u2014 high blast radius",
|
|
"detail": {
|
|
"kind": "untested_critical",
|
|
"loc": 528,
|
|
"importer_count": 0,
|
|
"loc_weight": 22.978250586152114,
|
|
"complexity_score": 28
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:08:04+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:07:57+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:07:57+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"test_coverage::internal/projectstate/state.go::untested_module": {
|
|
"id": "test_coverage::internal/projectstate/state.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/projectstate/state.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (130 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 130,
|
|
"importer_count": 0,
|
|
"loc_weight": 11.40175425099138
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:08:04+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::cmd/runtime_helpers.go::unreviewed": {
|
|
"id": "subjective_review::cmd/runtime_helpers.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cmd/runtime_helpers.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 81
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:08:05+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/config/config.go::unreviewed": {
|
|
"id": "subjective_review::internal/config/config.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/config/config.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 368
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:08:05+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/projectstate/state.go::unreviewed": {
|
|
"id": "subjective_review::internal/projectstate/state.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/projectstate/state.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 130
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:08:05+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/search/engine.go::unreviewed": {
|
|
"id": "subjective_review::internal/search/engine.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/search/engine.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 551
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:08:05+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/storage/writer.go::unreviewed": {
|
|
"id": "subjective_review::internal/storage/writer.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/storage/writer.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 149
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:08:05+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::pkg/parserutil/url.go::unreviewed": {
|
|
"id": "subjective_review::pkg/parserutil/url.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "pkg/parserutil/url.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 25
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:08:05+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::pkg/astrodocs/parser.go::d08d6f6ba4512a2c": {
|
|
"id": "boilerplate_duplication::pkg/astrodocs/parser.go::d08d6f6ba4512a2c",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "pkg/astrodocs/parser.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 27 lines): pkg/astrodocs/parser.go:112, pkg/cloudflaredocs/parser.go:131",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 27,
|
|
"locations": [
|
|
{
|
|
"file": "pkg/astrodocs/parser.go",
|
|
"line": 112
|
|
},
|
|
{
|
|
"file": "pkg/cloudflaredocs/parser.go",
|
|
"line": 131
|
|
}
|
|
],
|
|
"sample": [
|
|
"}",
|
|
"",
|
|
"\t\tif section.Title != \"\" {",
|
|
"\t\t\tsections = append(sections, section)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:08:18+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::.desloppify/query.json::d6982eac9f9495cf": {
|
|
"id": "boilerplate_duplication::.desloppify/query.json::d6982eac9f9495cf",
|
|
"detector": "boilerplate_duplication",
|
|
"file": ".desloppify/query.json",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 16 lines): .desloppify/query.json:297, desloppify/desloppify/desloppify/tests/snapshots/cli_smoke/query.json:425",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 16,
|
|
"locations": [
|
|
{
|
|
"file": ".desloppify/query.json",
|
|
"line": 297
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/snapshots/cli_smoke/query.json",
|
|
"line": 425
|
|
}
|
|
],
|
|
"sample": [
|
|
"},",
|
|
" \"tools\": {",
|
|
" \"fixers\": [],",
|
|
" \"move\": {"
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:08:18+00:00",
|
|
"last_seen": "2026-02-23T10:17:09+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"review::.::holistic::abstraction_fitness::language_catalog_scattered_switches::56578a6e": {
|
|
"id": "review::.::holistic::abstraction_fitness::language_catalog_scattered_switches::56578a6e",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Language routing logic is duplicated across CLI flows instead of one catalog abstraction",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "abstraction_fitness",
|
|
"related_files": [
|
|
"cmd/get.go",
|
|
"cmd/ask.go"
|
|
],
|
|
"evidence": [
|
|
"cmd/get.go:78-173 defines a large language switch for URL building; cmd/get.go:175-205 defines a second switch for source type mapping.",
|
|
"cmd/ask.go:205-260+ adds a third language switch for term heuristics, creating three independent sources of truth for one domain model."
|
|
],
|
|
"suggestion": "Introduce a single `LanguageSpec` registry (aliases, source type, URL builder, optional query-term strategy) in one package and have both `get` and `ask` consume it; keep per-language behavior as data/functions attached to that registry.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:11:25+00:00",
|
|
"last_seen": "2026-02-23T10:11:25+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"review::.::holistic::abstraction_fitness::external_scraper_scaffold_duplication::07cb7040": {
|
|
"id": "review::.::holistic::abstraction_fitness::external_scraper_scaffold_duplication::07cb7040",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "External scraper adapters reimplement the same transport/hash lifecycle repeatedly",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "abstraction_fitness",
|
|
"related_files": [
|
|
"internal/scraper/external/godocs.go",
|
|
"internal/scraper/external/javadocs.go",
|
|
"internal/scraper/external/nuxtdocs.go",
|
|
"internal/scraper/external/cloudflaredocs.go"
|
|
],
|
|
"evidence": [
|
|
"Each file defines near-identical struct fields (`config`, `parser`, `client`), constructor wiring, URL-required guard, `fetchPage`, `generateHash`, and `DetectChanges` flow (e.g., godocs.go:17-121 and javadocs.go:16-115).",
|
|
"Duplication scales linearly with each new source adapter, increasing edit surface for cross-cutting behavior (timeouts, headers, error mapping)."
|
|
],
|
|
"suggestion": "Extract a shared `HTTPDocScraperBase` (or composable helper functions) for request execution, status handling, hashing, and change detection; keep each adapter focused on parser invocation and domain-specific document mapping.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:11:25+00:00",
|
|
"last_seen": "2026-02-23T10:11:25+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"review::.::holistic::abstraction_fitness::default_selects_unimplemented_store::befc6b1a": {
|
|
"id": "review::.::holistic::abstraction_fitness::default_selects_unimplemented_store::befc6b1a",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Store interface contract is dishonest because default backend is not operational",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "abstraction_fitness",
|
|
"related_files": [
|
|
"internal/vector/store.go",
|
|
"internal/config/config.go"
|
|
],
|
|
"evidence": [
|
|
"internal/config/config.go:121-125 sets default vector DB type to `chromem`.",
|
|
"internal/vector/store.go:221-243 returns `chromem store not implemented` for all `Store` operations after `NewStore` can select that backend (store.go:63-72)."
|
|
],
|
|
"suggestion": "Either implement `ChromemStore` before exposing it as default, or switch default to a working backend and gate chromem behind explicit opt-in plus capability check at startup.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:11:25+00:00",
|
|
"last_seen": "2026-02-23T10:11:25+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"review::.::holistic::abstraction_fitness::config_defaults_double_encoded::daf1b064": {
|
|
"id": "review::.::holistic::abstraction_fitness::config_defaults_double_encoded::daf1b064",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Initialization defaults are encoded twice with different abstractions",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "abstraction_fitness",
|
|
"related_files": [
|
|
"cmd/init.go",
|
|
"internal/config/config.go"
|
|
],
|
|
"evidence": [
|
|
"cmd/init.go:92-149 hardcodes YAML defaults as a template string.",
|
|
"internal/config/config.go:104-160 hardcodes defaults again in typed structs, requiring synchronized updates across two representations."
|
|
],
|
|
"suggestion": "Generate init YAML from `config.Default()` via marshal + small post-processing/comments, or maintain a single canonical defaults schema consumed by both loader and init command.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:11:25+00:00",
|
|
"last_seen": "2026-02-23T10:11:25+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"review::.::holistic::cross_module_architecture::status_contract_string_map_boundary::31eaab56": {
|
|
"id": "review::.::holistic::cross_module_architecture::status_contract_string_map_boundary::31eaab56",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Scorecard state uses string keys instead of shared Status type, weakening module contracts.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "cross_module_architecture",
|
|
"related_files": [
|
|
"internal/quality/types.go",
|
|
"internal/quality/scoring_test.go",
|
|
"README.md"
|
|
],
|
|
"evidence": [
|
|
"`internal/quality/types.go` defines `Status` constants but `Scorecard.StatusByType` is `map[string]int`.",
|
|
"`internal/quality/scoring_test.go` asserts `card.StatusByType[\"open\"]` and `card.StatusByType[\"fixed\"]` directly.",
|
|
"README promises resolution-state tracking, but this boundary is not type-safe."
|
|
],
|
|
"suggestion": "Change `Scorecard.StatusByType` to `map[Status]int` (or a dedicated typed struct), update serialization adapters if needed, and update tests to assert using `StatusOpen`/`StatusFixed` constants.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:11:25+00:00",
|
|
"last_seen": "2026-02-23T10:11:25+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"review::.::holistic::test_strategy::brittle_private_and_copy_assertions_in_quality_tests::67b25cf1": {
|
|
"id": "review::.::holistic::test_strategy::brittle_private_and_copy_assertions_in_quality_tests::67b25cf1",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Quality tests are tightly coupled to private helpers and exact copy text, reducing refactor safety.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "test_strategy",
|
|
"related_files": [
|
|
"internal/quality/narrative_test.go",
|
|
"internal/quality/scoring_test.go"
|
|
],
|
|
"evidence": [
|
|
"`narrative_test.go` directly asserts exact strings for generated headlines/actions and tests helper internals rather than stable external behavior.",
|
|
"`scoring_test.go` anchors on specific internal weighting outputs and literal status strings, which can fail on benign internal redesigns."
|
|
],
|
|
"suggestion": "Shift to contract-level tests against exported APIs with invariant assertions (phase category, presence of required fields, monotonic score behavior), and keep only a small set of snapshot/copy tests for user-facing text.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:11:25+00:00",
|
|
"last_seen": "2026-02-23T10:11:25+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"review::.::holistic::test_strategy::rust_parser_missing_negative_and_boundary_cases::3ae67479": {
|
|
"id": "review::.::holistic::test_strategy::rust_parser_missing_negative_and_boundary_cases::3ae67479",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Rust parser tests miss malformed-input and degradation-path coverage.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "test_strategy",
|
|
"related_files": [
|
|
"pkg/rustdocs/parser_test.go",
|
|
"README.md"
|
|
],
|
|
"evidence": [
|
|
"`parser_test.go` cases are successful parses with valid fixture HTML and only basic assertions.",
|
|
"No tests verify behavior for malformed HTML, missing selectors, empty documents, or unsupported result rows.",
|
|
"README positions docs ingestion as core functionality, so parser failure behavior is a critical path."
|
|
],
|
|
"suggestion": "Add table-driven negative tests for malformed/partial HTML, empty search blocks, and missing headings; assert stable fallback behavior (explicit error or safe zero-value output) for each parser entrypoint.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:11:25+00:00",
|
|
"last_seen": "2026-02-23T10:11:25+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"review::.::holistic::design_coherence::scorecard_variant_sprawl::f05674a3": {
|
|
"id": "review::.::holistic::design_coherence::scorecard_variant_sprawl::f05674a3",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Scorecard generation is maintained as multiple copy-variants instead of one composable pipeline.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "design_coherence",
|
|
"related_files": [
|
|
"cmd/devour_scorecard.py",
|
|
"cmd/scorecard_generator.py",
|
|
"cmd/devour_enhanced.py",
|
|
"cmd/devour_enhanced_fixed.py",
|
|
"cmd/devour_enhanced_v2.py"
|
|
],
|
|
"evidence": [
|
|
"Both `cmd/devour_scorecard.py` and `cmd/scorecard_generator.py` declare the same major functions and data model in the same order with only minor stylistic deltas.",
|
|
"Enhanced variants repeat the same section render functions and data loading flow, then diverge by ad-hoc edits, increasing change fan-out for any layout or scoring rule update."
|
|
],
|
|
"suggestion": "Extract a shared rendering core module (palette/fonts/layout primitives + data normalization), keep one canonical CLI entrypoint, and convert variant behavior into explicit theme/feature flags rather than duplicated files.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:11:25+00:00",
|
|
"last_seen": "2026-02-23T10:11:25+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"review::.::holistic::design_coherence::external_scraper_template_duplication::2df72e4d": {
|
|
"id": "review::.::holistic::design_coherence::external_scraper_template_duplication::2df72e4d",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Provider scrapers repeat the same orchestration flow with per-provider copy/paste adapters.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "design_coherence",
|
|
"related_files": [
|
|
"internal/scraper/external/astrodocs.go",
|
|
"internal/scraper/external/cloudflaredocs.go",
|
|
"internal/scraper/external/reactdocs.go",
|
|
"internal/scraper/external/godocs.go",
|
|
"internal/scraper/external/vuedocs.go"
|
|
],
|
|
"evidence": [
|
|
"Each scraper reimplements nearly identical `Scrape`, `DetectChanges`, `fetchPage`, and `generateHash` scaffolding, then inlines provider-specific conversion methods.",
|
|
"The repeated constructor/client/parser wiring pattern appears across multiple files, indicating systemic pattern duplication rather than isolated differences."
|
|
],
|
|
"suggestion": "Introduce a shared `DocAdapter` contract and a generic `HTTPDocScraper` that owns fetch/hash/change-detect; keep provider files focused on mapping parsed domain objects to `Document`.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:11:25+00:00",
|
|
"last_seen": "2026-02-23T10:11:25+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"review::.::holistic::design_coherence::utility_ownership_drift_in_lighthouse_script::fb269d47": {
|
|
"id": "review::.::holistic::design_coherence::utility_ownership_drift_in_lighthouse_script::fb269d47",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Duplicate utility definition in one file shows mixed responsibility boundaries.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "design_coherence",
|
|
"related_files": [
|
|
"cmd/devour_lighthouse.py",
|
|
"cmd/devour_enhanced.py"
|
|
],
|
|
"evidence": [
|
|
"`cmd/devour_lighthouse.py` defines `load_font` twice with effectively the same fallback behavior, creating hidden override risk and unclear source of truth.",
|
|
"Comparable font utility exists in other renderer scripts, reinforcing that shared utility concerns are spread instead of centralized."
|
|
],
|
|
"suggestion": "Remove the duplicate in `cmd/devour_lighthouse.py` and move font-loading helpers into a shared module imported by all renderer scripts.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:11:25+00:00",
|
|
"last_seen": "2026-02-23T10:11:25+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"review::.::holistic::error_consistency::mixed_error_wrapping_in_scrape_and_search_paths::c8e6bc64": {
|
|
"id": "review::.::holistic::error_consistency::mixed_error_wrapping_in_scrape_and_search_paths::c8e6bc64",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Related scrape/search paths mix raw passthrough and contextual wrapping.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"internal/search/engine.go",
|
|
"internal/scraper/openapi.go",
|
|
"internal/scraper/localsearch.go",
|
|
"cmd/scrape.go"
|
|
],
|
|
"evidence": [
|
|
"`internal/search/engine.go` frequently returns raw errors (`:114`, `:117`, `:122`, `:170`) but also uses contextual errors (`:111`, `:230`).",
|
|
"`internal/scraper/openapi.go` propagates raw errors from `readSpec`/`parseOpenAPISpec` (`:45`, `:50`, `:123`, `:141`, `:149`, `:157`, `:164`) while also defining wrapped errors (`:135`, `:153`, `:217`).",
|
|
"`internal/scraper/localsearch.go` returns raw errors from helper boundaries (`:79`, `:164`, `:191`, `:222`) mixed with rich wrapped messages in the same workflow (`:196`, `:203`, `:209`, `:217`)."
|
|
],
|
|
"suggestion": "Define a package-level rule: public methods must wrap downstream errors with operation context (using `%w`), and helper internals may return raw errors. Apply this consistently to `Rebuild/EnsureIndexed`, `OpenAPIScraper.Scrape/DetectChanges/readSpec`, and `LocalSearchScraper` methods.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:11:25+00:00",
|
|
"last_seen": "2026-02-23T10:11:25+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"review::.::holistic::error_consistency::inconsistent_failure_channel_panic_vs_error_vs_warning::2e80c6a5": {
|
|
"id": "review::.::holistic::error_consistency::inconsistent_failure_channel_panic_vs_error_vs_warning::2e80c6a5",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Failure signaling varies between panic, error return, and warning-only logging.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"internal/quality/plugins/go/plugin.go",
|
|
"internal/indexer/indexer.go",
|
|
"cmd/scrape.go"
|
|
],
|
|
"evidence": [
|
|
"`internal/quality/plugins/go/plugin.go:363` panics on plugin registration failure.",
|
|
"`internal/indexer/indexer.go:239` prints a warning and suppresses deletion errors instead of returning them.",
|
|
"`cmd/scrape.go` is structured around returned errors (`:131`, `:145`, `:207`) and has no panic-based handling, creating inconsistent contracts across subsystems."
|
|
],
|
|
"suggestion": "Standardize on explicit error returns for recoverable startup/runtime failures; replace plugin `panic` with registration error propagation or controlled process-exit at the command entrypoint, and make indexer deletion behavior explicit (either aggregate and return partial-failure errors or document/encode best-effort mode).",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:11:25+00:00",
|
|
"last_seen": "2026-02-23T10:11:25+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"review::.::holistic::error_consistency::command_boundary_context_loss::3bd8e5bf": {
|
|
"id": "review::.::holistic::error_consistency::command_boundary_context_loss::3bd8e5bf",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "CLI command boundaries sometimes return raw errors without command context.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"cmd/get.go",
|
|
"cmd/scrape.go",
|
|
"internal/config/config.go"
|
|
],
|
|
"evidence": [
|
|
"`cmd/get.go:59` and `cmd/scrape.go:90`/`:125` return raw errors directly from downstream calls.",
|
|
"Other branches in the same command wrap with explicit context (`cmd/scrape.go:131`, `cmd/scrape.go:145`, `cmd/scrape.go:154`).",
|
|
"Config layer already emits contextual wrapped errors (`internal/config/config.go:177`, `internal/config/config.go:181`), so command-layer inconsistency creates uneven user-facing diagnostics."
|
|
],
|
|
"suggestion": "At CLI entrypoints, wrap all returned downstream errors with command/action context (e.g., `run get`, `load config`, `scrape source`) and preserve root cause with `%w`; keep user-readable validation errors as direct messages.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:11:25+00:00",
|
|
"last_seen": "2026-02-23T10:11:25+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"review::.::holistic::cross_module_architecture::init_side_effect_registration_coupling::0b09d6ae": {
|
|
"id": "review::.::holistic::cross_module_architecture::init_side_effect_registration_coupling::0b09d6ae",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Scraper registration depends on import-time side effects and global mutable registry state.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "cross_module_architecture",
|
|
"related_files": [
|
|
"cmd/root.go",
|
|
"internal/scraper/external/register.go",
|
|
"internal/scraper/registry_simple.go"
|
|
],
|
|
"evidence": [
|
|
"Blank import in root command triggers registration implicitly rather than explicit bootstrap wiring.",
|
|
"Registration happens in `init()` and mutates shared global registry."
|
|
],
|
|
"suggestion": "Replace import-time registration with explicit bootstrap registration (e.g., `RegisterExternalScrapers()` called from startup), and pass registry instances through constructors to remove hidden global coupling.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:11:25+00:00",
|
|
"last_seen": "2026-02-23T10:11:25+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"review::.::holistic::error_consistency::mixed_process_termination_and_error_propagation::2742c01c": {
|
|
"id": "review::.::holistic::error_consistency::mixed_process_termination_and_error_propagation::2742c01c",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Error handling mixes panic/log.Fatal/os.Exit with returned errors across adjacent layers.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"cmd/root.go",
|
|
"cmd/scorecard.go",
|
|
"internal/quality/plugins/go/plugin.go",
|
|
"cleanup_unused.go"
|
|
],
|
|
"evidence": [
|
|
"`Execute()` exits process directly; scorecard helper exits inside utility flow; plugin registration panics on failure.",
|
|
"Most other command paths return wrapped errors, creating inconsistent failure semantics."
|
|
],
|
|
"suggestion": "Standardize on returning errors from library/command internals and only perform process exit in one top-level entrypoint; replace panic/log.Fatal in shared code with typed/wrapped errors.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:11:25+00:00",
|
|
"last_seen": "2026-02-23T10:11:25+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"review::.::holistic::abstraction_fitness::external_scraper_boilerplate_without_shared_base::4badbfa5": {
|
|
"id": "review::.::holistic::abstraction_fitness::external_scraper_boilerplate_without_shared_base::4badbfa5",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "External scraper implementations duplicate fetch/hash/error/document plumbing instead of sharing a base abstraction.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "abstraction_fitness",
|
|
"related_files": [
|
|
"internal/scraper/external/godocs.go",
|
|
"internal/scraper/external/rustdocs.go",
|
|
"internal/scraper/external/reactdocs.go",
|
|
"internal/scraper/external/nuxtdocs.go",
|
|
"internal/scraper/external/cloudflaredocs.go",
|
|
"internal/scraper/external/types.go"
|
|
],
|
|
"evidence": [
|
|
"Each scraper repeats `fetchPage`, status code checks, hash generation, and near-identical scrape control flow.",
|
|
"Alias-only types file adds indirection without behavior."
|
|
],
|
|
"suggestion": "Introduce a shared external-scraper base/helper for HTTP fetch, retries, hashing, and common error mapping; keep only parser-specific extraction and document shaping in each language scraper.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:11:25+00:00",
|
|
"last_seen": "2026-02-23T10:11:25+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"review::.::holistic::test_strategy::untested_unimplemented_runtime_paths::f0fc1d51": {
|
|
"id": "review::.::holistic::test_strategy::untested_unimplemented_runtime_paths::f0fc1d51",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Core runtime paths are both under-tested and partially stubbed, leaving high-risk behavior unvalidated.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "test_strategy",
|
|
"related_files": [
|
|
"internal/server/server.go",
|
|
"pkg/client/client.go",
|
|
"internal/vector/store.go",
|
|
"internal/search/engine.go",
|
|
"internal/indexer/indexer.go"
|
|
],
|
|
"evidence": [
|
|
"Server/client/store contain TODO or not-implemented branches without direct tests.",
|
|
"No direct test files exist for several core modules that govern querying, indexing, and serving."
|
|
],
|
|
"suggestion": "Add table-driven tests for client/server/store/indexer contracts first (error behavior and non-nil results), then implement missing paths behind those tests; prioritize integration tests that exercise scrape->index->query flow.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:11:25+00:00",
|
|
"last_seen": "2026-02-23T10:11:25+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"review::.::holistic::design_coherence::command_files_mix_multiple_responsibilities::e5b7b2d5": {
|
|
"id": "review::.::holistic::design_coherence::command_files_mix_multiple_responsibilities::e5b7b2d5",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Large CLI command files blend orchestration, domain logic, persistence, and formatting concerns.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "design_coherence",
|
|
"related_files": [
|
|
"cmd/quality.go",
|
|
"cmd/scrape.go",
|
|
"cmd/ask.go"
|
|
],
|
|
"evidence": [
|
|
"`cmd/quality.go` combines scan setup, scoring/status persistence, resolve/fix/review workflows.",
|
|
"`cmd/scrape.go` combines config parsing, source detection/profiling, scrape execution, indexing, and source-state updates.",
|
|
"`cmd/ask.go` includes query derivation, source URL heuristics, ranking, summarization, and output formatting in one command module."
|
|
],
|
|
"suggestion": "Split command files into focused packages (transport/CLI binding vs service layer vs persistence helpers) and keep Cobra handlers as thin adapters invoking composable use-case functions.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:11:25+00:00",
|
|
"last_seen": "2026-02-23T10:11:25+00:00",
|
|
"resolved_at": "2026-02-24T10:11:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:11:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"vet_error::vet: cmd/serve.go::vet_error::13": {
|
|
"id": "vet_error::vet: cmd/serve.go::vet_error::13",
|
|
"detector": "vet_error",
|
|
"file": "vet: cmd/serve.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "could not import github.com/yourorg/devour/internal/server (can't resolve import \"\")",
|
|
"detail": {},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:11:26+00:00",
|
|
"last_seen": "2026-02-23T10:11:26+00:00",
|
|
"resolved_at": "2026-02-23T10:14:10+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-23T10:14:10+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::.desloppify/subagents/runs/20260223_100953/prompts/batch-2.md::9a3364c77a94261b": {
|
|
"id": "boilerplate_duplication::.desloppify/subagents/runs/20260223_100953/prompts/batch-2.md::9a3364c77a94261b",
|
|
"detector": "boilerplate_duplication",
|
|
"file": ".desloppify/subagents/runs/20260223_100953/prompts/batch-2.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 12 files (window 34 lines): .desloppify/subagents/runs/20260223_100953/prompts/batch-2.md:44, .desloppify/subagents/runs/20260223_100953/prompts/batch-4.md:163, .desloppify/subagents/runs/20260223_100953/prompts/batch-5.md:92, .desloppify/subagents/runs/20260224_101201/prompts/batch-2.md:43, +8 more",
|
|
"detail": {
|
|
"distinct_files": 12,
|
|
"window_size": 34,
|
|
"locations": [
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260223_100953/prompts/batch-2.md",
|
|
"line": 44
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260223_100953/prompts/batch-4.md",
|
|
"line": 163
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260223_100953/prompts/batch-5.md",
|
|
"line": 92
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_101201/prompts/batch-2.md",
|
|
"line": 43
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_101201/prompts/batch-3.md",
|
|
"line": 17
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_101201/prompts/batch-4.md",
|
|
"line": 106
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_101201/prompts/batch-5.md",
|
|
"line": 92
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_101201/prompts/batch-6.md",
|
|
"line": 128
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_101740/prompts/batch-1.md",
|
|
"line": 92
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_102123/prompts/batch-1.md",
|
|
"line": 92
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_105325/prompts/batch-1.md",
|
|
"line": 92
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_110336/prompts/batch-1.md",
|
|
"line": 92
|
|
}
|
|
],
|
|
"sample": [
|
|
"Task requirements:",
|
|
"1. Read the immutable packet and follow `system_prompt` constraints exactly.",
|
|
"2. Evaluate ONLY listed files and ONLY listed dimensions for this batch.",
|
|
"3. Return 0-10 high-quality findings for this batch (empty array allowed)."
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:11:40+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/scrape.go::09f6598df110e819": {
|
|
"id": "boilerplate_duplication::cmd/scrape.go::09f6598df110e819",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/scrape.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 11 lines): cmd/scrape.go:173, cmd/sync.go:77",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 11,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/scrape.go",
|
|
"line": 173
|
|
},
|
|
{
|
|
"file": "cmd/sync.go",
|
|
"line": 77
|
|
}
|
|
],
|
|
"sample": [
|
|
"source := sourceFromConfig(srcCfg)",
|
|
"\t\tif source.Type == \"\" {",
|
|
"\t\t\tif source.URL != \"\" {",
|
|
"\t\t\t\tsource.Type = detectSourceType(source.URL)"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:11:40+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::.desloppify/subagents/runs/20260223_100953/prompts/batch-1.md::3151be6f0730bf94": {
|
|
"id": "boilerplate_duplication::.desloppify/subagents/runs/20260223_100953/prompts/batch-1.md::3151be6f0730bf94",
|
|
"detector": "boilerplate_duplication",
|
|
"file": ".desloppify/subagents/runs/20260223_100953/prompts/batch-1.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 40 lines): .desloppify/subagents/runs/20260223_100953/prompts/batch-1.md:11, .desloppify/subagents/runs/20260223_100953/prompts/batch-3.md:12",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 40,
|
|
"locations": [
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260223_100953/prompts/batch-1.md",
|
|
"line": 11
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260223_100953/prompts/batch-3.md",
|
|
"line": 12
|
|
}
|
|
],
|
|
"sample": [
|
|
"- internal/quality/enhanced_types.go",
|
|
"- internal/quality/narrative_test.go",
|
|
"- internal/quality/scoring_test.go",
|
|
"- internal/quality/types.go"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:11:40+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::.desloppify/subagents/runs/20260223_100953/prompts/batch-2.md::6f7c2bc945ed302f": {
|
|
"id": "boilerplate_duplication::.desloppify/subagents/runs/20260223_100953/prompts/batch-2.md::6f7c2bc945ed302f",
|
|
"detector": "boilerplate_duplication",
|
|
"file": ".desloppify/subagents/runs/20260223_100953/prompts/batch-2.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 34 lines): .desloppify/subagents/runs/20260223_100953/prompts/batch-2.md:11, .desloppify/subagents/runs/20260223_100953/prompts/batch-5.md:16",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 34,
|
|
"locations": [
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260223_100953/prompts/batch-2.md",
|
|
"line": 11
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260223_100953/prompts/batch-5.md",
|
|
"line": 16
|
|
}
|
|
],
|
|
"sample": [
|
|
"- cmd/scrape.go",
|
|
"- internal/quality/plugins/go/analyzers/detectors.go",
|
|
"- internal/quality/plugins/go/analyzers/advanced.go",
|
|
"- internal/scraper/web.go"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:11:40+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::.desloppify/subagents/runs/20260223_100953/prompts/batch-4.md::9d66dfc2b50e425e": {
|
|
"id": "boilerplate_duplication::.desloppify/subagents/runs/20260223_100953/prompts/batch-4.md::9d66dfc2b50e425e",
|
|
"detector": "boilerplate_duplication",
|
|
"file": ".desloppify/subagents/runs/20260223_100953/prompts/batch-4.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 103 lines): .desloppify/subagents/runs/20260223_100953/prompts/batch-4.md:11, .desloppify/subagents/runs/20260223_100953/prompts/batch-5.md:49",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 103,
|
|
"locations": [
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260223_100953/prompts/batch-4.md",
|
|
"line": 11
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260223_100953/prompts/batch-5.md",
|
|
"line": 49
|
|
}
|
|
],
|
|
"sample": [
|
|
"- .desloppify/query.json",
|
|
"- .github/workflows/ci.yml",
|
|
"- AGENTS.md",
|
|
"- cmd/devour_enhanced.py"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:11:40+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/server/server.go::6c2fae77c55ad056": {
|
|
"id": "boilerplate_duplication::internal/server/server.go::6c2fae77c55ad056",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/server/server.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 12 lines): internal/server/server.go:197",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "internal/server/server.go",
|
|
"line": 197
|
|
}
|
|
],
|
|
"sample": [
|
|
") Start(ctx context.Context) error {",
|
|
"\ts.mu.Lock()",
|
|
"\tdefer s.mu.Unlock()",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": "Reopened (\u00d71) \u2014 reappeared in scan (was auto_resolved)",
|
|
"first_seen": "2026-02-23T10:11:40+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 1,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"structural::cmd/get.go": {
|
|
"id": "structural::cmd/get.go",
|
|
"detector": "structural",
|
|
"file": "cmd/get.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Needs decomposition: complexity score 41",
|
|
"detail": {
|
|
"complexity_score": 41,
|
|
"complexity_signals": [
|
|
"51 switch/case"
|
|
],
|
|
"loc": 304
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:13:55+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"vet_error::cmd/root.go::vet_error::68": {
|
|
"id": "vet_error::cmd/root.go::vet_error::68",
|
|
"detector": "vet_error",
|
|
"file": "cmd/root.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "undefined: autoCmd",
|
|
"detail": {},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:13:56+00:00",
|
|
"last_seen": "2026-02-23T10:14:38+00:00",
|
|
"resolved_at": "2026-02-23T10:15:41+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-23T10:15:41+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"vet_error::cmd/root.go::vet_error::69": {
|
|
"id": "vet_error::cmd/root.go::vet_error::69",
|
|
"detector": "vet_error",
|
|
"file": "cmd/root.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "undefined: verifyCmd",
|
|
"detail": {},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:13:56+00:00",
|
|
"last_seen": "2026-02-23T10:14:38+00:00",
|
|
"resolved_at": "2026-02-23T10:15:41+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-23T10:15:41+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"vet_error::vet: cmd/ask.go::vet_error::121": {
|
|
"id": "vet_error::vet: cmd/ask.go::vet_error::121",
|
|
"detector": "vet_error",
|
|
"file": "vet: cmd/ask.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "undefined: gatherLocalAskDocs",
|
|
"detail": {},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:13:56+00:00",
|
|
"last_seen": "2026-02-23T10:13:56+00:00",
|
|
"resolved_at": "2026-02-23T10:14:38+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-23T10:14:38+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"vet_error::vet: cmd/root.go::vet_error::68": {
|
|
"id": "vet_error::vet: cmd/root.go::vet_error::68",
|
|
"detector": "vet_error",
|
|
"file": "vet: cmd/root.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "undefined: autoCmd",
|
|
"detail": {},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:14:23+00:00",
|
|
"last_seen": "2026-02-23T10:14:23+00:00",
|
|
"resolved_at": "2026-02-23T10:15:41+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-23T10:15:41+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"test_coverage::internal/quality/docs_evidence.go::untested_module": {
|
|
"id": "test_coverage::internal/quality/docs_evidence.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/quality/docs_evidence.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (79 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 79,
|
|
"importer_count": 0,
|
|
"loc_weight": 8.888194417315589
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:15:27+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::internal/quality/docs_evidence.go::unreviewed": {
|
|
"id": "subjective_review::internal/quality/docs_evidence.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "internal/quality/docs_evidence.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 79
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:15:28+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::cmd/quality.go::202cd3e37c8b912c": {
|
|
"id": "boilerplate_duplication::cmd/quality.go::202cd3e37c8b912c",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/quality.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 17 lines): cmd/quality.go:629",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 17,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/quality.go",
|
|
"line": 629
|
|
}
|
|
],
|
|
"sample": [
|
|
"ors:\\n\")",
|
|
"\t\tfor _, e := range errors {",
|
|
"\t\t\tfmt.Printf(\" \u2022 %s\\n\", e)",
|
|
"\t\t}"
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:15:41+00:00",
|
|
"last_seen": "2026-02-23T10:15:41+00:00",
|
|
"resolved_at": "2026-02-23T10:17:09+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-23T10:17:09+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"boilerplate_duplication::cmd/quality.go::cea10cf59a7d2c8e": {
|
|
"id": "boilerplate_duplication::cmd/quality.go::cea10cf59a7d2c8e",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "cmd/quality.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 19 lines): cmd/quality.go:519",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 19,
|
|
"locations": [
|
|
{
|
|
"file": "cmd/quality.go",
|
|
"line": 519
|
|
}
|
|
],
|
|
"sample": [
|
|
" bySeverity[severity]",
|
|
"\t\tif len(findings) == 0 {",
|
|
"\t\t\tcontinue",
|
|
"\t\t}"
|
|
]
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:15:41+00:00",
|
|
"last_seen": "2026-02-23T10:15:41+00:00",
|
|
"resolved_at": "2026-02-23T10:17:09+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-23T10:17:09+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"test_coverage::cmd/auto.go::untested_module": {
|
|
"id": "test_coverage::cmd/auto.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "cmd/auto.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (147 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 147,
|
|
"importer_count": 0,
|
|
"loc_weight": 12.12435565298214
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "Disappeared from scan \u2014 likely fixed",
|
|
"first_seen": "2026-02-23T10:16:54+00:00",
|
|
"last_seen": "2026-02-23T10:16:54+00:00",
|
|
"resolved_at": "2026-02-24T10:07:57+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "scan_verified",
|
|
"text": "Disappeared from detector output",
|
|
"attested_at": "2026-02-24T10:07:57+00:00",
|
|
"scan_verified": true
|
|
}
|
|
},
|
|
"subjective_review::cmd/auto.go::unreviewed": {
|
|
"id": "subjective_review::cmd/auto.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cmd/auto.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 181
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-23T10:16:54+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"structural::internal/quality/plugins/go/analyzers/detectors.go": {
|
|
"id": "structural::internal/quality/plugins/go/analyzers/detectors.go",
|
|
"detector": "structural",
|
|
"file": "internal/quality/plugins/go/analyzers/detectors.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Needs decomposition: large (525 LOC) / complexity score 16",
|
|
"detail": {
|
|
"loc": 525,
|
|
"complexity_score": 16,
|
|
"complexity_signals": [
|
|
"40 if/else branches",
|
|
"11 switch/case"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:07:56+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"flat_dirs::cmd": {
|
|
"id": "flat_dirs::cmd",
|
|
"detector": "flat_dirs",
|
|
"file": "cmd",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Flat directory: 27 files \u2014 consider grouping by domain",
|
|
"detail": {
|
|
"file_count": 27
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:07:56+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::cmd/quality.go::untested_module": {
|
|
"id": "test_coverage::cmd/quality.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "cmd/quality.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (20 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 20,
|
|
"importer_count": 0,
|
|
"loc_weight": 4.47213595499958
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:07:57+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::cmd/review.go::untested_module": {
|
|
"id": "test_coverage::cmd/review.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "cmd/review.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (27 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 27,
|
|
"importer_count": 0,
|
|
"loc_weight": 5.196152422706632
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:07:57+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"test_coverage::cmd/verify.go::untested_module": {
|
|
"id": "test_coverage::cmd/verify.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "cmd/verify.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (169 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 169,
|
|
"importer_count": 0,
|
|
"loc_weight": 13.0
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:07:57+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::cmd/desloppify_proxy.go::unreviewed": {
|
|
"id": "subjective_review::cmd/desloppify_proxy.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cmd/desloppify_proxy.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 101
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:07:57+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::cmd/review.go::unreviewed": {
|
|
"id": "subjective_review::cmd/review.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cmd/review.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 27
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:07:57+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"subjective_review::cmd/verify.go::unreviewed": {
|
|
"id": "subjective_review::cmd/verify.go::unreviewed",
|
|
"detector": "subjective_review",
|
|
"file": "cmd/verify.go",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "No design review on record \u2014 run `desloppify review --prepare`",
|
|
"detail": {
|
|
"reason": "unreviewed",
|
|
"loc": 169
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:07:57+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"stale_exclude::.venv::.venv": {
|
|
"id": "stale_exclude::.venv::.venv",
|
|
"detector": "stale_exclude",
|
|
"file": ".venv",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "Excluded directory '.venv' has 0 references from scanned code \u2014 may be stale",
|
|
"detail": {
|
|
"directory": ".venv",
|
|
"references": 0
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:11:28+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"stale_exclude::cmd/devour_data::cmd/devour_data": {
|
|
"id": "stale_exclude::cmd/devour_data::cmd/devour_data",
|
|
"detector": "stale_exclude",
|
|
"file": "cmd/devour_data",
|
|
"tier": 4,
|
|
"confidence": "low",
|
|
"summary": "Excluded directory 'cmd/devour_data' has 0 references from scanned code \u2014 may be stale",
|
|
"detail": {
|
|
"directory": "cmd/devour_data",
|
|
"references": 0
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:11:28+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::cross_module_architecture::quality_package_contract_hub_coupling::51ba95ae": {
|
|
"id": "review::.::holistic::cross_module_architecture::quality_package_contract_hub_coupling::51ba95ae",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Quality contracts are concentrated in broad type hubs, creating a coupling hotspot.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "cross_module_architecture",
|
|
"related_files": [
|
|
"internal/quality/enhanced_types.go",
|
|
"internal/quality/types.go",
|
|
"internal/quality/scoring_test.go"
|
|
],
|
|
"evidence": [
|
|
"`enhanced_types.go` and `types.go` both define large cross-cutting models for multiple concerns (analysis narrative, scoring, detector stats, config, extraction metadata) under one package boundary.",
|
|
"The two files blur subdomain ownership, so edits to one concern can force unrelated consumers in the same package to track evolving shared structs.",
|
|
"Scoring tests rely on shared package contracts rather than a tighter scorer-local contract, indicating broad internal API exposure."
|
|
],
|
|
"suggestion": "Split `internal/quality` contracts by bounded concern (for example: `qualitycore` findings/scan types, `qualityscore` scorecard/metrics, `qualitynarrative` narrative/report DTOs) and keep scorer-facing types in a narrow subpackage/API. Migrate tests to import only scorer-relevant types to reduce transitive coupling.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:14:02+00:00",
|
|
"last_seen": "2026-02-24T10:14:02+00:00",
|
|
"resolved_at": "2026-02-24T10:19:22+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::abstraction_fitness::duplicated_external_scraper_skeleton::77746855": {
|
|
"id": "review::.::holistic::abstraction_fitness::duplicated_external_scraper_skeleton::77746855",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "External docs scrapers duplicate the same orchestration instead of sharing one adapter base",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "abstraction_fitness",
|
|
"related_files": [
|
|
"internal/scraper/external/astrodocs.go",
|
|
"internal/scraper/external/cloudflaredocs.go",
|
|
"internal/scraper/external/dockerdocs.go",
|
|
"internal/scraper/external/nuxtdocs.go"
|
|
],
|
|
"evidence": [
|
|
"Each scraper defines near-identical `fetchPage`, `DetectChanges`, and `generateHash` logic.",
|
|
"Each `Scrape` method repeats the same flow: validate URL -> fetch HTML -> parser call -> append main doc + sub-doc loop(s).",
|
|
"Differences are mostly parser/model-specific mapping, but transport/error/hash logic is copy-pasted."
|
|
],
|
|
"suggestion": "Introduce a shared docs-scraper base (or helper pipeline) for HTTP fetch + hashing + standard error handling, and keep only parser-specific mapping in per-provider adapters.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:14:02+00:00",
|
|
"last_seen": "2026-02-24T10:14:02+00:00",
|
|
"resolved_at": "2026-02-24T10:19:22+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::abstraction_fitness::scrape_api_leaks_cli_state::eb2b582f": {
|
|
"id": "review::.::holistic::abstraction_fitness::scrape_api_leaks_cli_state::eb2b582f",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Server scrape RPC depends on mutable CLI globals to reuse scrape pipeline",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "abstraction_fitness",
|
|
"related_files": [
|
|
"cmd/serve.go",
|
|
"cmd/scrape.go",
|
|
"cmd/get.go"
|
|
],
|
|
"evidence": [
|
|
"`handleServeMethod` temporarily rewrites `scrapeFormat`, `scrapeOutput`, and `scrapeAllowEmpty` before calling `scrapeOne`, then restores them.",
|
|
"`scrapeOne` is not a pure service API; it is coupled to CLI-level shared state and output behavior.",
|
|
"`cmd/get.go` also routes through `runScrape`, reinforcing that scraping orchestration is command-centric rather than a reusable application service."
|
|
],
|
|
"suggestion": "Extract a stateless scrape service function (explicit request struct + options) used by both CLI commands and RPC handlers; keep CLI flags as translation-only at command boundary.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:14:02+00:00",
|
|
"last_seen": "2026-02-24T10:14:02+00:00",
|
|
"resolved_at": "2026-02-24T10:19:22+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::abstraction_fitness::vector_store_interface_overpromises::4841a1a0": {
|
|
"id": "review::.::holistic::abstraction_fitness::vector_store_interface_overpromises::4841a1a0",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Vector store abstraction exposes backends that are selectable but not actually implemented",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "abstraction_fitness",
|
|
"related_files": [
|
|
"internal/vector/store.go",
|
|
"internal/indexer/indexer.go"
|
|
],
|
|
"evidence": [
|
|
"`NewStore` can return `ChromemStore` when config type is `chromem`.",
|
|
"All `ChromemStore` interface methods currently return `not implemented` errors.",
|
|
"`Indexer` depends only on `vector.Store`, so backend failure appears at runtime after abstraction selection instead of at wiring/validation time."
|
|
],
|
|
"suggestion": "Make backend capabilities explicit: either remove/guard `chromem` selection until complete, or return an initialization error type from store construction and enforce backend readiness before indexing starts.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:14:02+00:00",
|
|
"last_seen": "2026-02-24T10:14:02+00:00",
|
|
"resolved_at": "2026-02-24T10:19:22+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::cross_module_architecture::docs_runtime_quality_contract_drift::280ef6c8": {
|
|
"id": "review::.::holistic::cross_module_architecture::docs_runtime_quality_contract_drift::280ef6c8",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Quality dimensions/statuses drift between public docs and runtime model contracts.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "cross_module_architecture",
|
|
"related_files": [
|
|
"README.md",
|
|
"internal/quality/enhanced_types.go",
|
|
"internal/quality/types.go"
|
|
],
|
|
"evidence": [
|
|
"README.md frames score interpretation around a specific dimension set and user workflow.",
|
|
"internal/quality/enhanced_types.go includes extra dimension constants not represented in README contract text.",
|
|
"internal/quality/types.go includes StatusIgnored while README resolution examples only expose fixed/wontfix/false_positive paths."
|
|
],
|
|
"suggestion": "Define a single versioned public quality contract (dimensions + statuses) as source-of-truth, generate README contract tables from it, and add a CI check that fails when exported enums and published docs diverge.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:14:02+00:00",
|
|
"last_seen": "2026-02-24T10:14:02+00:00",
|
|
"resolved_at": "2026-02-24T10:19:22+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::test_strategy::missing_public_contract_compat_tests::9cc0a60c": {
|
|
"id": "review::.::holistic::test_strategy::missing_public_contract_compat_tests::9cc0a60c",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Published CLI/RPC governance contracts are not protected by compatibility tests.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "test_strategy",
|
|
"related_files": [
|
|
"README.md",
|
|
"internal/quality/scoring_test.go",
|
|
"internal/quality/types.go"
|
|
],
|
|
"evidence": [
|
|
"README.md documents stable command and RPC method surfaces for users.",
|
|
"internal/quality/scoring_test.go covers scoring behavior but not end-to-end contract assertions tied to documented surfaces.",
|
|
"No assigned test verifies that externally documented score/status semantics remain compatible with exported model types."
|
|
],
|
|
"suggestion": "Add contract tests that parse/validate documented command and RPC surface claims against runtime registration/types, and add schema-level golden tests for serialized quality/status payloads.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:14:02+00:00",
|
|
"last_seen": "2026-02-24T10:14:02+00:00",
|
|
"resolved_at": "2026-02-24T10:19:22+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::test_strategy::brittle_assertions_on_order_and_formatting::f9eb54ac": {
|
|
"id": "review::.::holistic::test_strategy::brittle_assertions_on_order_and_formatting::f9eb54ac",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Tests are fragile due to strict ordering and presentation-string coupling.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "test_strategy",
|
|
"related_files": [
|
|
"internal/quality/scoring_test.go",
|
|
"pkg/rustdocs/parser_test.go"
|
|
],
|
|
"evidence": [
|
|
"pkg/rustdocs/parser_test.go asserts semantic expectations through fixed indexes (results[0], results[1], results[2]) rather than identity-based matching.",
|
|
"internal/quality/scoring_test.go asserts many exact output substrings in FormatScorecard, coupling tests to formatting text that can change without behavioral regressions."
|
|
],
|
|
"suggestion": "Refactor tests to assert semantic invariants (presence by key/kind, normalized structured fields) and reserve strict golden-output checks for explicitly versioned presentation contracts.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:14:02+00:00",
|
|
"last_seen": "2026-02-24T10:14:02+00:00",
|
|
"resolved_at": "2026-02-24T10:19:22+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::design_coherence::passthrough_command_wrappers_add_low_leverage_layers::e3496477": {
|
|
"id": "review::.::holistic::design_coherence::passthrough_command_wrappers_add_low_leverage_layers::e3496477",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Language command modules include thin forwarding wrappers with no behavioral value.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "design_coherence",
|
|
"related_files": [
|
|
"desloppify/desloppify/desloppify/languages/dart/commands.py",
|
|
"desloppify/desloppify/desloppify/languages/csharp/commands.py",
|
|
"desloppify/desloppify/desloppify/languages/framework/commands_base.py"
|
|
],
|
|
"evidence": [
|
|
"`languages/dart/commands.py` creates `_cmd_*_impl` callables and then defines six `cmd_*` functions that only call the corresponding impl.",
|
|
"`languages/csharp/commands.py` also keeps thin wrappers (`cmd_large`, `cmd_complexity`, `cmd_deps`, `cmd_cycles`) that forward directly to other callables.",
|
|
"The framework already provides factory-returned callables; wrapper layers increase symbol count and call depth without adding policy."
|
|
],
|
|
"suggestion": "Assign factory outputs directly to exported command names (or build the registry directly from generated callables) and keep wrappers only where they add language-specific behavior, validation, or formatting.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:14:02+00:00",
|
|
"last_seen": "2026-02-24T10:14:02+00:00",
|
|
"resolved_at": "2026-02-24T10:19:22+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::design_coherence::csharp_deps_module_blends_core_and_cli_responsibilities::619d98c6": {
|
|
"id": "review::.::holistic::design_coherence::csharp_deps_module_blends_core_and_cli_responsibilities::619d98c6",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "C# dependency detector file combines analysis engine logic with CLI presentation.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "design_coherence",
|
|
"related_files": [
|
|
"desloppify/desloppify/desloppify/languages/csharp/detectors/deps.py",
|
|
"desloppify/desloppify/desloppify/languages/csharp/commands.py",
|
|
"desloppify/desloppify/desloppify/languages/_shared/scaffold_detect_commands.py"
|
|
],
|
|
"evidence": [
|
|
"`languages/csharp/detectors/deps.py` includes internal graph/parsing functions (`_parse_project_assets_references`, `_build_dep_graph_roslyn`, `build_dep_graph`) and command handlers (`cmd_deps`, `cmd_cycles`) in the same module.",
|
|
"`languages/csharp/commands.py` forwards to `cmd_deps_direct`/`cmd_cycles_deps`, meaning command routing depends on detector-module UI functions instead of a clean detector API.",
|
|
"Other language paths use shared command scaffolding (`languages/_shared/scaffold_detect_commands.py`) that separates command shell concerns from graph/detection logic."
|
|
],
|
|
"suggestion": "Split C# deps into `detectors/deps_core.py` (graph/parsing only) and command-facing adapters in `commands.py` (or scaffold factories), so detectors expose data and command modules own JSON/table rendering.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:14:02+00:00",
|
|
"last_seen": "2026-02-24T10:14:02+00:00",
|
|
"resolved_at": "2026-02-24T10:19:22+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::design_coherence::status_bar_render_logic_duplicated_in_two_paths::bb7d01ed": {
|
|
"id": "review::.::holistic::design_coherence::status_bar_render_logic_duplicated_in_two_paths::bb7d01ed",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Status renderer repeats identical score-bar construction for mechanical and subjective rows.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "design_coherence",
|
|
"related_files": [
|
|
"desloppify/desloppify/desloppify/app/commands/status_parts/render.py",
|
|
"desloppify/desloppify/desloppify/app/output/scorecard_parts/projection.py"
|
|
],
|
|
"evidence": [
|
|
"`show_dimension_table` in `status_parts/render.py` computes `filled`, score thresholds, and colored bar in one loop for mechanical dimensions and repeats the same logic in a second loop for subjective entries.",
|
|
"Duplicated threshold constants (`>=98`, `>=93`) and color composition appear in both blocks, creating a two-site maintenance point for one rendering policy."
|
|
],
|
|
"suggestion": "Extract a shared `render_score_bar(score_val, bar_len)` helper (or move the row formatting policy into scorecard projection/output helpers) and reuse it for both loops to keep display semantics consistent.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:14:02+00:00",
|
|
"last_seen": "2026-02-24T10:14:02+00:00",
|
|
"resolved_at": "2026-02-24T10:19:22+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::error_consistency::rpc_decode_and_response_contract_drift::49ba6c33": {
|
|
"id": "review::.::holistic::error_consistency::rpc_decode_and_response_contract_drift::49ba6c33",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "RPC methods use inconsistent decode and error-response contracts",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"cmd/serve.go",
|
|
"internal/server/server.go"
|
|
],
|
|
"evidence": [
|
|
"`cmd/serve.go` ignores JSON decode errors in `devour_query`/`devour_sync` but returns decode errors in `devour_scrape`/`devour_ask`.",
|
|
"`internal/server/server.go` returns raw `err.Error()` in RPC payloads and maps all RPC errors to HTTP 400 in `writeRPC`."
|
|
],
|
|
"suggestion": "Define one RPC error policy: always validate/decode params the same way, map known classes to stable RPC codes/messages, and map transport HTTP statuses by error class (client input vs internal failure).",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:14:02+00:00",
|
|
"last_seen": "2026-02-24T10:14:02+00:00",
|
|
"resolved_at": "2026-02-24T10:19:22+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::error_consistency::serve_status_swallows_errors_then_dereferences_nil::6f8376e8": {
|
|
"id": "review::.::holistic::error_consistency::serve_status_swallows_errors_then_dereferences_nil::6f8376e8",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Status handler ignores errors and can panic from nil stats",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"cmd/serve.go",
|
|
"internal/search/engine.go"
|
|
],
|
|
"evidence": [
|
|
"`cmd/serve.go` uses `state, _ := projectstate.LoadSourceState(...)` and `idxStats, _ := engine.EnsureIndexed(ctx)` in `devour_status`.",
|
|
"The same block unconditionally reads `idxStats.Documents` and `idxStats.LastIndexedAt`, which is unsafe if `EnsureIndexed` returned an error."
|
|
],
|
|
"suggestion": "Handle both errors explicitly in `devour_status`; return structured partial-status with an error field or fail the method uniformly, but do not ignore and dereference.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "fixed",
|
|
"note": "Updated devour_status to handle LoadSourceState/EnsureIndexed errors explicitly and fail with wrapped context instead of ignoring errors.",
|
|
"first_seen": "2026-02-24T10:14:02+00:00",
|
|
"last_seen": "2026-02-24T10:14:02+00:00",
|
|
"resolved_at": "2026-02-24T10:17:27+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "manual",
|
|
"text": "I have actually changed cmd/serve.go to propagate status/state/index errors and avoid nil dereference paths, and I am not gaming the score by resolving without fixing.",
|
|
"attested_at": "2026-02-24T10:17:27+00:00",
|
|
"scan_verified": false
|
|
}
|
|
},
|
|
"review::.::holistic::error_consistency::openai_http_error_path_not_normalized::e219ddde": {
|
|
"id": "review::.::holistic::error_consistency::openai_http_error_path_not_normalized::e219ddde",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "OpenAI client lacks explicit HTTP status error handling",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"internal/ai/openai.go",
|
|
"internal/scraper/openapi.go",
|
|
"internal/scraper/external/astrodocs.go"
|
|
],
|
|
"evidence": [
|
|
"`internal/ai/openai.go` decodes response bodies directly and only checks `embeddingResp.Error`/`chatResp.Error`; non-2xx responses without expected JSON become generic decode errors.",
|
|
"`internal/scraper/openapi.go` and external scrapers explicitly validate HTTP status before body parsing and return explicit HTTP status errors."
|
|
],
|
|
"suggestion": "Add explicit non-2xx handling in both OpenAI request paths: include status code, bounded response body excerpt, and endpoint context before JSON decode.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "fixed",
|
|
"note": "Added explicit non-2xx handling in OpenAI embeddings/chat paths with endpoint+status+bounded-body context.",
|
|
"first_seen": "2026-02-24T10:14:02+00:00",
|
|
"last_seen": "2026-02-24T10:14:02+00:00",
|
|
"resolved_at": "2026-02-24T10:17:20+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "manual",
|
|
"text": "I have actually implemented explicit HTTP status handling in internal/ai/openai.go for embeddings and chat/completions and I am not gaming the score by resolving without fixing.",
|
|
"attested_at": "2026-02-24T10:17:20+00:00",
|
|
"scan_verified": false
|
|
}
|
|
},
|
|
"review::.::holistic::error_consistency::mixed_wrapping_vs_passthrough_in_core_flows::2c58745b": {
|
|
"id": "review::.::holistic::error_consistency::mixed_wrapping_vs_passthrough_in_core_flows::2c58745b",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Adjacent paths alternate between wrapped and raw error returns",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"internal/search/engine.go",
|
|
"internal/scraper/openapi.go",
|
|
"internal/config/config.go"
|
|
],
|
|
"evidence": [
|
|
"`internal/search/engine.go` frequently returns raw errors (`return nil, err`) from filesystem/index operations.",
|
|
"`internal/scraper/openapi.go` similarly passes through request/file errors raw in `readSpec`, while other branches wrap with operation context.",
|
|
"`internal/config/config.go` demonstrates contextual wrapping style (`read config`, `parse config`), creating drift against less-informative paths."
|
|
],
|
|
"suggestion": "Adopt a package-level rule: wrap external boundary failures with operation context (read/write/parse/network) and preserve `%w`; apply consistently across search/openapi paths.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:14:02+00:00",
|
|
"last_seen": "2026-02-24T10:14:02+00:00",
|
|
"resolved_at": "2026-02-24T10:19:22+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::error_consistency::scanner_pipeline_fail_open_is_inconsistent::22a62d19": {
|
|
"id": "review::.::holistic::error_consistency::scanner_pipeline_fail_open_is_inconsistent::22a62d19",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Quality scan path mixes fail-open and fail-fast behaviors",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"internal/quality/scanner.go",
|
|
"internal/quality/plugins/go/analyzers/test_coverage.go",
|
|
"internal/quality/plugins/go/analyzers/detectors.go"
|
|
],
|
|
"evidence": [
|
|
"`internal/quality/scanner.go` logs detector failures and continues, silently reducing coverage of reported findings.",
|
|
"`test_coverage.go` returns `(nil, nil)` for missing `go` tool or missing generated coverage file, while other detector failures return explicit errors.",
|
|
"`detectors.go` has parse/count paths that silently `continue` on per-file errors, further mixing behavior."
|
|
],
|
|
"suggestion": "Standardize detector error semantics with typed outcomes (hard error, soft-skip with reason, per-file skip count) and surface these in scan results so degraded scans are explicit.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:14:02+00:00",
|
|
"last_seen": "2026-02-24T10:14:02+00:00",
|
|
"resolved_at": "2026-02-24T10:19:22+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::cross_module_architecture::rpc_cli_global_state_coupling::27b5a412": {
|
|
"id": "review::.::holistic::cross_module_architecture::rpc_cli_global_state_coupling::27b5a412",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "RPC handlers mutate CLI global flags to execute workflows across command boundaries.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "cross_module_architecture",
|
|
"related_files": [
|
|
"cmd/serve.go",
|
|
"cmd/scrape.go",
|
|
"cmd/sync.go"
|
|
],
|
|
"evidence": [
|
|
"cmd/serve.go sets scrapeFormat/scrapeOutput/scrapeAllowEmpty before calling scrapeOne and restores afterward.",
|
|
"cmd/serve.go sets syncForce/syncRebuild/syncSource before calling runSync and restores afterward."
|
|
],
|
|
"suggestion": "Extract scrape/sync/query use-cases into stateless service functions (input structs + return structs), call them from both Cobra commands and RPC handlers, and remove shared mutable command globals from runtime execution paths.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:14:02+00:00",
|
|
"last_seen": "2026-02-24T10:14:02+00:00",
|
|
"resolved_at": "2026-02-24T10:19:22+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::error_consistency::silent_error_drops_in_rpc_paths::3d5e1d88": {
|
|
"id": "review::.::holistic::error_consistency::silent_error_drops_in_rpc_paths::3d5e1d88",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Several RPC paths ignore parse/index/state errors, producing inconsistent failure contracts.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"cmd/serve.go",
|
|
"internal/search/engine.go",
|
|
"internal/projectstate/state.go"
|
|
],
|
|
"evidence": [
|
|
"cmd/serve.go ignores JSON unmarshal errors for devour_query/devour_sync (`_ = json.Unmarshal(...)`).",
|
|
"cmd/serve.go ignores errors from LoadSourceState and EnsureIndexed, yet reads fields from returned values.",
|
|
"Other command paths generally propagate wrapped errors with `%w`."
|
|
],
|
|
"suggestion": "Treat request decode, source-state load, and index-check failures uniformly: return explicit wrapped errors from each branch and avoid underscore-discarded errors in RPC handlers.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:14:02+00:00",
|
|
"last_seen": "2026-02-24T10:14:02+00:00",
|
|
"resolved_at": "2026-02-24T10:19:22+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::abstraction_fitness::external_scraper_transport_duplication::45f89742": {
|
|
"id": "review::.::holistic::abstraction_fitness::external_scraper_transport_duplication::45f89742",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "External scrapers duplicate the same HTTP fetch/hash/change-detection boilerplate.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "abstraction_fitness",
|
|
"related_files": [
|
|
"internal/scraper/external/reactdocs.go",
|
|
"internal/scraper/external/tsdocs.go",
|
|
"internal/scraper/external/godocs.go",
|
|
"internal/scraper/external/rustdocs.go",
|
|
"internal/scraper/external/cloudflaredocs.go"
|
|
],
|
|
"evidence": [
|
|
"Each scraper reimplements equivalent `fetchPage` with identical request/header/response-body flow.",
|
|
"Each scraper reimplements nearly identical `DetectChanges` and `generateHash` logic."
|
|
],
|
|
"suggestion": "Introduce a shared base helper (e.g., `fetchPage`, `contentHash`, `detectChanges`) in internal/scraper/external/types.go or a dedicated internal transport module, then keep per-scraper files focused on parser-to-document mapping.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:14:02+00:00",
|
|
"last_seen": "2026-02-24T10:14:02+00:00",
|
|
"resolved_at": "2026-02-24T10:19:22+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::test_strategy::missing_tests_on_orchestration_and_adapters::54f5254e": {
|
|
"id": "review::.::holistic::test_strategy::missing_tests_on_orchestration_and_adapters::54f5254e",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Critical orchestration commands and most external adapters have no direct tests.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "test_strategy",
|
|
"related_files": [
|
|
"cmd/serve.go",
|
|
"cmd/sync.go",
|
|
"cmd/query.go",
|
|
"internal/scraper/external/godocs.go",
|
|
"internal/scraper/external/reactdocs.go"
|
|
],
|
|
"evidence": [
|
|
"No *_test.go peers for cmd/serve.go, cmd/sync.go, cmd/query.go despite high-risk orchestration behavior.",
|
|
"Only one external scraper has direct tests while many adapter implementations contain custom mapping and error-path logic."
|
|
],
|
|
"suggestion": "Add table-driven tests for RPC method branches and error propagation in cmd/serve.go, plus httptest-based adapter contract tests covering fetch failures, parser errors, and document mapping for each external scraper family.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:14:02+00:00",
|
|
"last_seen": "2026-02-24T10:14:02+00:00",
|
|
"resolved_at": "2026-02-24T10:19:22+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::design_coherence::serve_handler_multi_responsibility_switch::362b2449": {
|
|
"id": "review::.::holistic::design_coherence::serve_handler_multi_responsibility_switch::362b2449",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Single handler function mixes transport, parsing, orchestration, and mutable state management.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "design_coherence",
|
|
"related_files": [
|
|
"cmd/serve.go",
|
|
"cmd/scrape.go",
|
|
"cmd/sync.go",
|
|
"cmd/query.go"
|
|
],
|
|
"evidence": [
|
|
"handleServeMethod contains method routing plus per-method request schemas, domain calls, and response shaping in one body.",
|
|
"The function coordinates temporary mutation of command globals to reuse CLI code paths."
|
|
],
|
|
"suggestion": "Split each RPC method into dedicated handler functions (e.g., handleQueryRPC, handleScrapeRPC, handleSyncRPC) that depend on explicit service interfaces instead of command globals.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:14:02+00:00",
|
|
"last_seen": "2026-02-24T10:14:02+00:00",
|
|
"resolved_at": "2026-02-24T10:19:22+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::devour_data/docs/action---remix.json::af756ce15a179b71": {
|
|
"id": "boilerplate_duplication::devour_data/docs/action---remix.json::af756ce15a179b71",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "devour_data/docs/action---remix.json",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 19 files (window 154 lines): devour_data/docs/action---remix.json:12, devour_data/docs/asset-imports---remix.json:12, devour_data/docs/client-modules---remix.json:12, devour_data/docs/clientaction---remix.json:16, +15 more",
|
|
"detail": {
|
|
"distinct_files": 19,
|
|
"window_size": 154,
|
|
"locations": [
|
|
{
|
|
"file": "devour_data/docs/action---remix.json",
|
|
"line": 12
|
|
},
|
|
{
|
|
"file": "devour_data/docs/asset-imports---remix.json",
|
|
"line": 12
|
|
},
|
|
{
|
|
"file": "devour_data/docs/client-modules---remix.json",
|
|
"line": 12
|
|
},
|
|
{
|
|
"file": "devour_data/docs/clientaction---remix.json",
|
|
"line": 16
|
|
},
|
|
{
|
|
"file": "devour_data/docs/community---remix.json",
|
|
"line": 12
|
|
},
|
|
{
|
|
"file": "devour_data/docs/entry.client---remix.json",
|
|
"line": 12
|
|
},
|
|
{
|
|
"file": "devour_data/docs/entry.server---remix.json",
|
|
"line": 16
|
|
},
|
|
{
|
|
"file": "devour_data/docs/form-resubmissions---remix.json",
|
|
"line": 16
|
|
},
|
|
{
|
|
"file": "devour_data/docs/hot-module-replacement---remix.json",
|
|
"line": 18
|
|
},
|
|
{
|
|
"file": "devour_data/docs/network-concurrency-management---remix.json",
|
|
"line": 17
|
|
},
|
|
{
|
|
"file": "devour_data/docs/progressive-enhancement---remix.json",
|
|
"line": 15
|
|
},
|
|
{
|
|
"file": "devour_data/docs/quick-start--5m----remix.json",
|
|
"line": 20
|
|
},
|
|
{
|
|
"file": "devour_data/docs/react-router---remix.json",
|
|
"line": 14
|
|
},
|
|
{
|
|
"file": "devour_data/docs/root---remix.json",
|
|
"line": 13
|
|
},
|
|
{
|
|
"file": "devour_data/docs/route-configuration---remix.json",
|
|
"line": 17
|
|
},
|
|
{
|
|
"file": "devour_data/docs/runtimes--adapters--templates--and-deployment---remix.json",
|
|
"line": 16
|
|
},
|
|
{
|
|
"file": "devour_data/docs/server-modules---remix.json",
|
|
"line": 12
|
|
},
|
|
{
|
|
"file": "devour_data/docs/server-vs.-client-code-execution---remix.json",
|
|
"line": 16
|
|
},
|
|
{
|
|
"file": "devour_data/docs/vite.config.ts---remix.json",
|
|
"line": 25
|
|
}
|
|
],
|
|
"sample": [
|
|
"],",
|
|
" \"images\": [",
|
|
" \"/assets/icons-CZ8v8NWl.svg\"",
|
|
" ],"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::.desloppify/subagents/runs/20260223_100953/prompts/batch-5.md::233c49fa61849366": {
|
|
"id": "boilerplate_duplication::.desloppify/subagents/runs/20260223_100953/prompts/batch-5.md::233c49fa61849366",
|
|
"detector": "boilerplate_duplication",
|
|
"file": ".desloppify/subagents/runs/20260223_100953/prompts/batch-5.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 4 files (window 23 lines): .desloppify/subagents/runs/20260223_100953/prompts/batch-5.md:59, .desloppify/subagents/runs/20260224_101201/prompts/batch-4.md:11, .desloppify/subagents/runs/20260224_101201/prompts/batch-5.md:47, .desloppify/subagents/runs/20260224_110336/prompts/batch-1.md:72",
|
|
"detail": {
|
|
"distinct_files": 4,
|
|
"window_size": 23,
|
|
"locations": [
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260223_100953/prompts/batch-5.md",
|
|
"line": 59
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_101201/prompts/batch-4.md",
|
|
"line": 11
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_101201/prompts/batch-5.md",
|
|
"line": 47
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_110336/prompts/batch-1.md",
|
|
"line": 72
|
|
}
|
|
],
|
|
"sample": [
|
|
"- desloppify/desloppify/desloppify/app/commands/_show_terminal.py",
|
|
"- desloppify/desloppify/desloppify/app/commands/fix/apply_flow.py",
|
|
"- desloppify/desloppify/desloppify/app/commands/issues_cmd.py",
|
|
"- desloppify/desloppify/desloppify/app/commands/next.py"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::devour_data/docs/fullstack-data-flow---remix.json::10c1099c5b6af28f": {
|
|
"id": "boilerplate_duplication::devour_data/docs/fullstack-data-flow---remix.json::10c1099c5b6af28f",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "devour_data/docs/fullstack-data-flow---remix.json",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 152 lines): devour_data/docs/fullstack-data-flow---remix.json:21, devour_data/docs/vite.config.ts---remix.json:27",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 152,
|
|
"locations": [
|
|
{
|
|
"file": "devour_data/docs/fullstack-data-flow---remix.json",
|
|
"line": 21
|
|
},
|
|
{
|
|
"file": "devour_data/docs/vite.config.ts---remix.json",
|
|
"line": 27
|
|
}
|
|
],
|
|
"sample": [
|
|
"\"/assets/icons-CZ8v8NWl.svg\"",
|
|
" ],",
|
|
" \"links\": [",
|
|
" \"/\","
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::devour_data/docs/vite.config.ts---remix-dbbf2811.json::1bfb5e1988982bed": {
|
|
"id": "boilerplate_duplication::devour_data/docs/vite.config.ts---remix-dbbf2811.json::1bfb5e1988982bed",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "devour_data/docs/vite.config.ts---remix-dbbf2811.json",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 191 lines): devour_data/docs/vite.config.ts---remix-dbbf2811.json:3, devour_data/docs/vite.config.ts---remix.json:3",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 191,
|
|
"locations": [
|
|
{
|
|
"file": "devour_data/docs/vite.config.ts---remix-dbbf2811.json",
|
|
"line": 3
|
|
},
|
|
{
|
|
"file": "devour_data/docs/vite.config.ts---remix.json",
|
|
"line": 3
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" \"type\": \"html\",",
|
|
" \"title\": \"vite.config.ts | Remix\",",
|
|
" \"content\": \"DocsBlogResourcesReact Router v7 has been released. View the docsDocsBlogResourcesView code on GitHubChat on DiscordReact Router v7 has been released. View the docsvite.config.tsGetting StartedQuick Start (5m) Tutorial (30m) Upgrading to v2 Community Future Flags Changelog Discussion TopicsIntroduction, Technical Explanation Runtimes, Adapters, Templates, and Deployment Route Configuration Fullstack Data Flow Server vs. Client Code Execution React Router Progressive Enhancement Pending UI State Management Network Concurrency Management Form vs. fetcher Hot Module Replacement Form Resubmissions File Conventions.client modules .server modules Asset Imports entry.client entry.server root Route File Naming vite.config.ts Route Moduleaction clientAction clientLoader Component ErrorBoundary handle headers HydrateFallback links loader meta shouldRevalidate ComponentsAwait Form Link Links LiveReload Meta NavLink Outlet PrefetchPageLinks Scripts ScrollRestoration HooksuseActionData useAsyncError \ud83c\udd95useAsyncValue \ud83c\udd95useBeforeUnload useBlocker useFetcher useFetchers useFormAction useHref useLoaderData useLocation useMatches useNavigate useNavigation useNavigationType useOutlet useOutletContext useParams unstable_usePrompt useResolvedPath useRevalidator \ud83c\udd95useRouteError \ud83c\udd95useRouteLoaderData useSearchParams useSubmit useViewTransitionState UtilitiesCookies createRemixStub data defer isRouteErrorResponse json unstable_parseMultipartFormData redirect redirectDocument replace Sessions unstable_createFileUploadHandler unstable_createMemoryUploadHandler StylingCSS Bundling Regular CSS CSS Imports CSS in JS CSS Modules PostCSS Tailwind Vanilla Extract Other API@remix-run/dev CLI \ud83c\udd95@remix-run/{adapter} @remix-run/serve create-remix (CLI) @remix-run/node @remix-run/testing GuidesAccessibility Development Strategy API Routes Backend For Frontend Breadcrumbs Guide Browser Support Client Data Module Constraints Contributing CSS Files Data Loading Data Writes Dependency optimization Deployment Disabling JavaScript Environment Variables Error Handling FAQs File Uploads Form Validation Gotchas Index Query Param Lazy Route Discovery Local TLS Manual Dev Server MDX Migrating from React Router Not Found Handling Performance Presets Resource Routes Server Bundles Single Fetch SPA Mode Streaming Templates TypeScript Vite Getting StartedQuick Start (5m) Tutorial (30m) Upgrading to v2 Community Future Flags Changelog Discussion TopicsIntroduction, Technical Explanation Runtimes, Adapters, Templates, and Deployment Route Configuration Fullstack Data Flow Server vs. Client Code Execution React Router Progressive Enhancement Pending UI State Management Network Concurrency Management Form vs. fetcher Hot Module Replacement Form Resubmissions File Conventions.client modules .server modules Asset Imports entry.client entry.server root Route File Naming vite.config.ts Route Moduleaction clientAction clientLoader Component ErrorBoundary handle headers HydrateFallback links loader meta shouldRevalidate ComponentsAwait Form Link Links LiveReload Meta NavLink Outlet PrefetchPageLinks Scripts ScrollRestoration HooksuseActionData useAsyncError \ud83c\udd95useAsyncValue \ud83c\udd95useBeforeUnload useBlocker useFetcher useFetchers useFormAction useHref useLoaderData useLocation useMatches useNavigate useNavigation useNavigationType useOutlet useOutletContext useParams unstable_usePrompt useResolvedPath useRevalidator \ud83c\udd95useRouteError \ud83c\udd95useRouteLoaderData useSearchParams useSubmit useViewTransitionState UtilitiesCookies createRemixStub data defer isRouteErrorResponse json unstable_parseMultipartFormData redirect redirectDocument replace Sessions unstable_createFileUploadHandler unstable_createMemoryUploadHandler StylingCSS Bundling Regular CSS CSS Imports CSS in JS CSS Modules PostCSS Tailwind Vanilla Extract Other API@remix-run/dev CLI \ud83c\udd95@remix-run/{adapter} @remix-run/serve create-remix (CLI) @remix-run/node @remix-run/testing GuidesAccessibility Development Strategy API Routes Backend For Frontend Breadcrumbs Guide Browser Support Client Data Module Constraints Contributing CSS Files Data Loading Data Writes Dependency optimization Deployment Disabling JavaScript Environment Variables Error Handling FAQs File Uploads Form Validation Gotchas Index Query Param Lazy Route Discovery Local TLS Manual Dev Server MDX Migrating from React Router Not Found Handling Performance Presets Resource Routes Server Bundles Single Fetch SPA Mode Streaming Templates TypeScript Vite vite.config.ts If your project is still using the Classic Remix Compiler, you should refer to the remix.config.js documentation instead. Remix uses Vite to compile your application. You'll need to provide a Vite config file with the Remix Vite plugin. Here's the minimum configuration you'll need: import { vitePlugin as remix } from \\\"@remix-run/dev\\\"; import { defineConfig } from \\\"vite\\\"; export default defineConfig({ plugins: [remix()], }); Vite supports using a .js file for your config, but we recommend using TypeScript to help ensure your configuration is valid. Remix Vite Plugin Config import { vitePlugin as remix } from \\\"@remix-run/dev\\\"; import { defineConfig } from \\\"vite\\\"; export default defineConfig({ plugins: [ remix({ basename: \\\"/\\\", buildDirectory: \\\"build\\\", future: { /* any enabled future flags */ }, ignoredRouteFiles: [\\\"**/*.css\\\"], routes(defineRoutes) { return defineRoutes((route) =\\u003e { route(\\\"/somewhere/cool/*\\\", \\\"catchall.tsx\\\"); }); }, serverBuildFile: \\\"index.js\\\", }), ], }); appDirectory The path to the app directory, relative to the project root. Defaults to \\\"app\\\". future The future config lets you opt-into future breaking changes via Future Flags. ignoredRouteFiles This is an array of globs (via minimatch) that Remix will match to files while reading your app/routes directory. If a file matches, it will be ignored rather than treated like a route module. This is useful for ignoring CSS/test files you wish to colocate. routes A function for defining custom routes, in addition to those already defined using the filesystem convention in app/routes. Both sets of routes will be merged. import { vitePlugin as remix } from \\\"@remix-run/dev\\\"; import { defineConfig } from \\\"vite\\\"; export default defineConfig({ plugins: [ remix({ routes: async (defineRoutes) =\\u003e { // If you need to do async work, do it before calling `defineRoutes`, we use // the call stack of `route` inside to set nesting. return defineRoutes((route) =\\u003e { // A common use for this is catchall routes. // - The first argument is the React Router path to match against // - The second is the relative filename of the route handler route(\\\"/some/path/*\\\", \\\"catchall.tsx\\\"); // if you want to nest routes, use the optional callback argument route(\\\"some/:path\\\", \\\"some/route/file.js\\\", () =\\u003e { // - path is relative to parent path // - filenames are still relative to the app directory route(\\\"relative/path\\\", \\\"some/other/file\\\"); }); }); }, }), ], }); serverModuleFormat The output format of the server build, which can either be \\\"cjs\\\" or \\\"esm\\\". Defaults to \\\"esm\\\". buildDirectory The path to the build directory, relative to the project root. Defaults to \\\"build\\\". basename An optional basename for your route paths, passed through to the React Router \\\"basename\\\" option. Please note that this is different from your asset paths. You can configure the base public path for your assets via the Vite \\\"base\\\" option. buildEnd A function that is called after the full Remix build is complete. manifest Whether to write a .remix/manifest.json file to the build directory. Defaults to false. presets An array of presets to ease integration with other tools and hosting providers. serverBuildFile The name of the server file is generated in the server build directory. Defaults to \\\"index.js\\\". serverBundles A function for assigning addressable routes to server bundles. You may also want to enable the manifest option since, when server bundles are enabled, it contains mappings between routes and server bundles.\u00a9 Shopify, Inc.\u2022Docs and examples licensed under MITEdit((storageKey2, restoreKey) =\\u003e { if (!window.history.state || !window.history.state.key) { let key = Math.random().toString(32).slice(2); window.history.replaceState({ key }, \\\"\\\"); } try { let positions = JSON.parse(sessionStorage.getItem(storageKey2) || \\\"{}\\\"); let storedY = positions[restoreKey || window.history.state.key]; if (typeof storedY === \\\"number\\\") { window.scrollTo(0, storedY); } } catch (error) { console.error(error); sessionStorage.removeItem(storageKey2); } })(\\\"react-router-scroll-positions\\\", null)window.__reactRouterContext = {\\\"basename\\\":\\\"/\\\",\\\"future\\\":{\\\"unstable_optimizeDeps\\\":true,\\\"unstable_subResourceIntegrity\\\":false,\\\"v8_middleware\\\":true,\\\"v8_splitRouteModules\\\":true,\\\"v8_viteEnvironmentApi\\\":true},\\\"routeDiscovery\\\":{\\\"mode\\\":\\\"initial\\\"},\\\"ssr\\\":true,\\\"isSpaMode\\\":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());import \\\"/assets/manifest-b010e014.js\\\"; import * as route0 from \\\"/assets/root-CtUYAfRS.js\\\"; import * as route1 from \\\"/assets/docs-DauuYQK6.js\\\"; import * as route2 from \\\"/assets/docs._-B4dRXAHv.js\\\"; window.__reactRouterRouteModules = {\\\"root\\\":route0,\\\"routes/docs\\\":route1,\\\"routes/docs.$\\\":route2}; import(\\\"/assets/entry.client-q2ogymM2.js\\\");window.__reactRouterContext.streamController.enqueue(\\\"[{\\\\\\\"_1\\\\\\\":2,\\\\\\\"_966\\\\\\\":-5,\\\\\\\"_967\\\\\\\":-5},\\\\\\\"loaderData\\\\\\\",{\\\\\\\"_3\\\\\\\":4,\\\\\\\"_11\\\\\\\":12,\\\\\\\"_949\\\\\\\":950},\\\\\\\"root\\\\\\\",{\\\\\\\"_5\\\\\\\":6,\\\\\\\"_7\\\\\\\":8,\\\\\\\"_9\\\\\\\":10},\\\\\\\"host\\\\\\\",\\\\\\\"localhost\\\\\\\",\\\\\\\"siteUrl\\\\\\\",\\\\\\\"https://v2.remix.run\\\\\\\",\\\\\\\"noIndex\\\\\\\",false,\\\\\\\"routes/docs\\\\\\\",{\\\\\\\"_13\\\\\\\":14},\\\\\\\"menu\\\\\\\",[15,72,160,214,292,364,527,611,665,707],{\\\\\\\"_16\\\\\\\":17,\\\\\\\"_22\\\\\\\":23,\\\\\\\"_24\\\\\\\":25,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":28},\\\\\\\"attrs\\\\\\\",{\\\\\\\"_18\\\\\\\":19,\\\\\\\"_20\\\\\\\":21},\\\\\\\"title\\\\\\\",\\\\\\\"Getting Started\\\\\\\",\\\\\\\"order\\\\\\\",1,\\\\\\\"filename\\\\\\\",\\\\\\\"start/index.md\\\\\\\",\\\\\\\"slug\\\\\\\",\\\\\\\"start\\\\\\\",\\\\\\\"hasContent\\\\\\\",\\\\\\\"children\\\\\\\",[29,36,43,50,59,66],{\\\\\\\"_16\\\\\\\":30,\\\\\\\"_22\\\\\\\":32,\\\\\\\"_24\\\\\\\":33,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":35},{\\\\\\\"_18\\\\\\\":31,\\\\\\\"_20\\\\\\\":21},\\\\\\\"Quick Start (5m)\\\\\\\",\\\\\\\"start/quickstart.md\\\\\\\",\\\\\\\"start/quickstart\\\\\\\",true,[],{\\\\\\\"_16\\\\\\\":37,\\\\\\\"_22\\\\\\\":40,\\\\\\\"_24\\\\\\\":41,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":42},{\\\\\\\"_18\\\\\\\":38,\\\\\\\"_20\\\\\\\":39},\\\\\\\"Tutorial (30m)\\\\\\\",2,\\\\\\\"start/tutorial.md\\\\\\\",\\\\\\\"start/tutorial\\\\\\\",[],{\\\\\\\"_16\\\\\\\":44,\\\\\\\"_22\\\\\\\":47,\\\\\\\"_24\\\\\\\":48,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":49},{\\\\\\\"_18\\\\\\\":45,\\\\\\\"_20\\\\\\\":46},\\\\\\\"Upgrading to v2\\\\\\\",3,\\\\\\\"start/v2.md\\\\\\\",\\\\\\\"start/v2\\\\\\\",[],{\\\\\\\"_16\\\\\\\":51,\\\\\\\"_22\\\\\\\":56,\\\\\\\"_24\\\\\\\":57,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":58},{\\\\\\\"_18\\\\\\\":52,\\\\\\\"_53\\\\\\\":54,\\\\\\\"_20\\\\\\\":55},\\\\\\\"Community\\\\\\\",\\\\\\\"description\\\\\\\",\\\\\\\"Community resources for learning Remix and related technologies\\\\\\\",4,\\\\\\\"start/community.md\\\\\\\",\\\\\\\"start/community\\\\\\\",[],{\\\\\\\"_16\\\\\\\":60,\\\\\\\"_22\\\\\\\":63,\\\\\\\"_24\\\\\\\":64,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":65},{\\\\\\\"_18\\\\\\\":61,\\\\\\\"_20\\\\\\\":62},\\\\\\\"Future Flags\\\\\\\",5,\\\\\\\"start/future-flags.md\\\\\\\",\\\\\\\"start/future-flags\\\\\\\",[],{\\\\\\\"_16\\\\\\\":67,\\\\\\\"_22\\\\\\\":69,\\\\\\\"_24\\\\\\\":70,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":71},{\\\\\\\"_18\\\\\\\":68},\\\\\\\"Changelog\\\\\\\",\\\\\\\"start/changelog.md\\\\\\\",\\\\\\\"start/changelog\\\\\\\",[],{\\\\\\\"_16\\\\\\\":73,\\\\\\\"_22\\\\\\\":75,\\\\\\\"_24\\\\\\\":76,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":77},{\\\\\\\"_18\\\\\\\":74,\\\\\\\"_20\\\\\\\":39},\\\\\\\"Discussion Topics\\\\\\\",\\\\\\\"discussion/index.md\\\\\\\",\\\\\\\"discussion\\\\\\\",[78,84,90,96,102,108,115,122,129,136,142,148,154],{\\\\\\\"_16\\\\\\\":79,\\\\\\\"_22\\\\\\\":81,\\\\\\\"_24\\\\\\\":82,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":83},{\\\\\\\"_18\\\\\\\":80,\\\\\\\"_20\\\\\\\":21},\\\\\\\"Introduction, Technical Explanation\\\\\\\",\\\\\\\"discussion/introduction.md\\\\\\\",\\\\\\\"discussion/introduction\\\\\\\",[],{\\\\\\\"_16\\\\\\\":85,\\\\\\\"_22\\\\\\\":87,\\\\\\\"_24\\\\\\\":88,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":89},{\\\\\\\"_18\\\\\\\":86,\\\\\\\"_20\\\\\\\":39},\\\\\\\"Runtimes, Adapters, Templates, and Deployment\\\\\\\",\\\\\\\"discussion/runtimes.md\\\\\\\",\\\\\\\"discussion/runtimes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":91,\\\\\\\"_22\\\\\\\":93,\\\\\\\"_24\\\\\\\":94,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":95},{\\\\\\\"_18\\\\\\\":92,\\\\\\\"_20\\\\\\\":46},\\\\\\\"Route Configuration\\\\\\\",\\\\\\\"discussion/routes.md\\\\\\\",\\\\\\\"discussion/routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":97,\\\\\\\"_22\\\\\\\":99,\\\\\\\"_24\\\\\\\":100,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":101},{\\\\\\\"_18\\\\\\\":98,\\\\\\\"_20\\\\\\\":55},\\\\\\\"Fullstack Data Flow\\\\\\\",\\\\\\\"discussion/data-flow.md\\\\\\\",\\\\\\\"discussion/data-flow\\\\\\\",[],{\\\\\\\"_16\\\\\\\":103,\\\\\\\"_22\\\\\\\":105,\\\\\\\"_24\\\\\\\":106,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":107},{\\\\\\\"_18\\\\\\\":104,\\\\\\\"_20\\\\\\\":62},\\\\\\\"Server vs. Client Code Execution\\\\\\\",\\\\\\\"discussion/server-vs-client.md\\\\\\\",\\\\\\\"discussion/server-vs-client\\\\\\\",[],{\\\\\\\"_16\\\\\\\":109,\\\\\\\"_22\\\\\\\":112,\\\\\\\"_24\\\\\\\":113,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":114},{\\\\\\\"_18\\\\\\\":110,\\\\\\\"_20\\\\\\\":111},\\\\\\\"React Router\\\\\\\",6,\\\\\\\"discussion/react-router.md\\\\\\\",\\\\\\\"discussion/react-router\\\\\\\",[],{\\\\\\\"_16\\\\\\\":116,\\\\\\\"_22\\\\\\\":119,\\\\\\\"_24\\\\\\\":120,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":121},{\\\\\\\"_18\\\\\\\":117,\\\\\\\"_20\\\\\\\":118},\\\\\\\"Progressive Enhancement\\\\\\\",7,\\\\\\\"discussion/progressive-enhancement.md\\\\\\\",\\\\\\\"discussion/progressive-enhancement\\\\\\\",[],{\\\\\\\"_16\\\\\\\":123,\\\\\\\"_22\\\\\\\":126,\\\\\\\"_24\\\\\\\":127,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":128},{\\\\\\\"_18\\\\\\\":124,\\\\\\\"_20\\\\\\\":125},\\\\\\\"Pending UI\\\\\\\",8,\\\\\\\"discussion/pending-ui.md\\\\\\\",\\\\\\\"discussion/pending-ui\\\\\\\",[],{\\\\\\\"_16\\\\\\\":130,\\\\\\\"_22\\\\\\\":133,\\\\\\\"_24\\\\\\\":134,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":135},{\\\\\\\"_18\\\\\\\":131,\\\\\\\"_20\\\\\\\":132},\\\\\\\"State Management\\\\\\\",9,\\\\\\\"discussion/state-management.md\\\\\\\",\\\\\\\"discussion/state-management\\\\\\\",[],{\\\\\\\"_16\\\\\\\":137,\\\\\\\"_22\\\\\\\":139,\\\\\\\"_24\\\\\\\":140,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":141},{\\\\\\\"_18\\\\\\\":138},\\\\\\\"Network Concurrency Management\\\\\\\",\\\\\\\"discussion/concurrency.md\\\\\\\",\\\\\\\"discussion/concurrency\\\\\\\",[],{\\\\\\\"_16\\\\\\\":143,\\\\\\\"_22\\\\\\\":145,\\\\\\\"_24\\\\\\\":146,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":147},{\\\\\\\"_18\\\\\\\":144},\\\\\\\"Form vs. fetcher\\\\\\\",\\\\\\\"discussion/form-vs-fetcher.md\\\\\\\",\\\\\\\"discussion/form-vs-fetcher\\\\\\\",[],{\\\\\\\"_16\\\\\\\":149,\\\\\\\"_22\\\\\\\":151,\\\\\\\"_24\\\\\\\":152,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":153},{\\\\\\\"_18\\\\\\\":150},\\\\\\\"Hot Module Replacement\\\\\\\",\\\\\\\"discussion/hot-module-replacement.md\\\\\\\",\\\\\\\"discussion/hot-module-replacement\\\\\\\",[],{\\\\\\\"_16\\\\\\\":155,\\\\\\\"_22\\\\\\\":157,\\\\\\\"_24\\\\\\\":158,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":159},{\\\\\\\"_18\\\\\\\":156},\\\\\\\"Form Resubmissions\\\\\\\",\\\\\\\"discussion/resubmissions.md\\\\\\\",\\\\\\\"discussion/resubmissions\\\\\\\",[],{\\\\\\\"_16\\\\\\\":161,\\\\\\\"_22\\\\\\\":163,\\\\\\\"_24\\\\\\\":164,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":165},{\\\\\\\"_18\\\\\\\":162,\\\\\\\"_20\\\\\\\":46},\\\\\\\"File Conventions\\\\\\\",\\\\\\\"file-conventions/index.md\\\\\\\",\\\\\\\"file-conventions\\\\\\\",[166,173,179,185,191,197,202,208],{\\\\\\\"_16\\\\\\\":167,\\\\\\\"_22\\\\\\\":170,\\\\\\\"_24\\\\\\\":171,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":172},{\\\\\\\"_18\\\\\\\":168,\\\\\\\"_169\\\\\\\":10},\\\\\\\".client modules\\\\\\\",\\\\\\\"toc\\\\\\\",\\\\\\\"file-conventions/-client.md\\\\\\\",\\\\\\\"file-conventions/-client\\\\\\\",[],{\\\\\\\"_16\\\\\\\":174,\\\\\\\"_22\\\\\\\":176,\\\\\\\"_24\\\\\\\":177,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":178},{\\\\\\\"_18\\\\\\\":175,\\\\\\\"_169\\\\\\\":10},\\\\\\\".server modules\\\\\\\",\\\\\\\"file-conventions/-server.md\\\\\\\",\\\\\\\"file-conventions/-server\\\\\\\",[],{\\\\\\\"_16\\\\\\\":180,\\\\\\\"_22\\\\\\\":182,\\\\\\\"_24\\\\\\\":183,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":184},{\\\\\\\"_18\\\\\\\":181,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Asset Imports\\\\\\\",\\\\\\\"file-conventions/asset-imports.md\\\\\\\",\\\\\\\"file-conventions/asset-imports\\\\\\\",[],{\\\\\\\"_16\\\\\\\":186,\\\\\\\"_22\\\\\\\":188,\\\\\\\"_24\\\\\\\":189,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":190},{\\\\\\\"_18\\\\\\\":187,\\\\\\\"_169\\\\\\\":10},\\\\\\\"entry.client\\\\\\\",\\\\\\\"file-conventions/entry.client.md\\\\\\\",\\\\\\\"file-conventions/entry.client\\\\\\\",[],{\\\\\\\"_16\\\\\\\":192,\\\\\\\"_22\\\\\\\":194,\\\\\\\"_24\\\\\\\":195,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":196},{\\\\\\\"_18\\\\\\\":193,\\\\\\\"_169\\\\\\\":10},\\\\\\\"entry.server\\\\\\\",\\\\\\\"file-conventions/entry.server.md\\\\\\\",\\\\\\\"file-conventions/entry.server\\\\\\\",[],{\\\\\\\"_16\\\\\\\":198,\\\\\\\"_22\\\\\\\":199,\\\\\\\"_24\\\\\\\":200,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":201},{\\\\\\\"_18\\\\\\\":3,\\\\\\\"_169\\\\\\\":10},\\\\\\\"file-conventions/root.md\\\\\\\",\\\\\\\"file-conventions/root\\\\\\\",[],{\\\\\\\"_16\\\\\\\":203,\\\\\\\"_22\\\\\\\":205,\\\\\\\"_24\\\\\\\":206,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":207},{\\\\\\\"_18\\\\\\\":204},\\\\\\\"Route File Naming\\\\\\\",\\\\\\\"file-conventions/routes.md\\\\\\\",\\\\\\\"file-conventions/routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":209,\\\\\\\"_22\\\\\\\":211,\\\\\\\"_24\\\\\\\":212,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":213},{\\\\\\\"_18\\\\\\\":210},\\\\\\\"vite.config.ts\\\\\\\",\\\\\\\"file-conventions/vite-config.md\\\\\\\",\\\\\\\"file-conventions/vite-config\\\\\\\",[],{\\\\\\\"_16\\\\\\\":215,\\\\\\\"_22\\\\\\\":217,\\\\\\\"_24\\\\\\\":218,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":219},{\\\\\\\"_18\\\\\\\":216,\\\\\\\"_20\\\\\\\":55},\\\\\\\"Route Module\\\\\\\",\\\\\\\"route/index.md\\\\\\\",\\\\\\\"route\\\\\\\",[220,226,232,238,244,250,256,262,268,274,280,286],{\\\\\\\"_16\\\\\\\":221,\\\\\\\"_22\\\\\\\":223,\\\\\\\"_24\\\\\\\":224,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":225},{\\\\\\\"_18\\\\\\\":222},\\\\\\\"action\\\\\\\",\\\\\\\"route/action.md\\\\\\\",\\\\\\\"route/action\\\\\\\",[],{\\\\\\\"_16\\\\\\\":227,\\\\\\\"_22\\\\\\\":229,\\\\\\\"_24\\\\\\\":230,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":231},{\\\\\\\"_18\\\\\\\":228},\\\\\\\"clientAction\\\\\\\",\\\\\\\"route/client-action.md\\\\\\\",\\\\\\\"route/client-action\\\\\\\",[],{\\\\\\\"_16\\\\\\\":233,\\\\\\\"_22\\\\\\\":235,\\\\\\\"_24\\\\\\\":236,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":237},{\\\\\\\"_18\\\\\\\":234},\\\\\\\"clientLoader\\\\\\\",\\\\\\\"route/client-loader.md\\\\\\\",\\\\\\\"route/client-loader\\\\\\\",[],{\\\\\\\"_16\\\\\\\":239,\\\\\\\"_22\\\\\\\":241,\\\\\\\"_24\\\\\\\":242,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":243},{\\\\\\\"_18\\\\\\\":240},\\\\\\\"Component\\\\\\\",\\\\\\\"route/component.md\\\\\\\",\\\\\\\"route/component\\\\\\\",[],{\\\\\\\"_16\\\\\\\":245,\\\\\\\"_22\\\\\\\":247,\\\\\\\"_24\\\\\\\":248,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":249},{\\\\\\\"_18\\\\\\\":246},\\\\\\\"ErrorBoundary\\\\\\\",\\\\\\\"route/error-boundary.md\\\\\\\",\\\\\\\"route/error-boundary\\\\\\\",[],{\\\\\\\"_16\\\\\\\":251,\\\\\\\"_22\\\\\\\":253,\\\\\\\"_24\\\\\\\":254,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":255},{\\\\\\\"_18\\\\\\\":252},\\\\\\\"handle\\\\\\\",\\\\\\\"route/handle.md\\\\\\\",\\\\\\\"route/handle\\\\\\\",[],{\\\\\\\"_16\\\\\\\":257,\\\\\\\"_22\\\\\\\":259,\\\\\\\"_24\\\\\\\":260,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":261},{\\\\\\\"_18\\\\\\\":258},\\\\\\\"headers\\\\\\\",\\\\\\\"route/headers.md\\\\\\\",\\\\\\\"route/headers\\\\\\\",[],{\\\\\\\"_16\\\\\\\":263,\\\\\\\"_22\\\\\\\":265,\\\\\\\"_24\\\\\\\":266,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":267},{\\\\\\\"_18\\\\\\\":264},\\\\\\\"HydrateFallback\\\\\\\",\\\\\\\"route/hydrate-fallback.md\\\\\\\",\\\\\\\"route/hydrate-fallback\\\\\\\",[],{\\\\\\\"_16\\\\\\\":269,\\\\\\\"_22\\\\\\\":271,\\\\\\\"_24\\\\\\\":272,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":273},{\\\\\\\"_18\\\\\\\":270},\\\\\\\"links\\\\\\\",\\\\\\\"route/links.md\\\\\\\",\\\\\\\"route/links\\\\\\\",[],{\\\\\\\"_16\\\\\\\":275,\\\\\\\"_22\\\\\\\":277,\\\\\\\"_24\\\\\\\":278,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":279},{\\\\\\\"_18\\\\\\\":276},\\\\\\\"loader\\\\\\\",\\\\\\\"route/loader.md\\\\\\\",\\\\\\\"route/loader\\\\\\\",[],{\\\\\\\"_16\\\\\\\":281,\\\\\\\"_22\\\\\\\":283,\\\\\\\"_24\\\\\\\":284,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":285},{\\\\\\\"_18\\\\\\\":282},\\\\\\\"meta\\\\\\\",\\\\\\\"route/meta.md\\\\\\\",\\\\\\\"route/meta\\\\\\\",[],{\\\\\\\"_16\\\\\\\":287,\\\\\\\"_22\\\\\\\":289,\\\\\\\"_24\\\\\\\":290,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":291},{\\\\\\\"_18\\\\\\\":288},\\\\\\\"shouldRevalidate\\\\\\\",\\\\\\\"route/should-revalidate.md\\\\\\\",\\\\\\\"route/should-revalidate\\\\\\\",[],{\\\\\\\"_16\\\\\\\":293,\\\\\\\"_22\\\\\\\":295,\\\\\\\"_24\\\\\\\":296,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":297},{\\\\\\\"_18\\\\\\\":294,\\\\\\\"_20\\\\\\\":62},\\\\\\\"Components\\\\\\\",\\\\\\\"components/index.md\\\\\\\",\\\\\\\"components\\\\\\\",[298,304,310,316,322,328,334,340,346,352,358],{\\\\\\\"_16\\\\\\\":299,\\\\\\\"_22\\\\\\\":301,\\\\\\\"_24\\\\\\\":302,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":303},{\\\\\\\"_18\\\\\\\":300},\\\\\\\"Await\\\\\\\",\\\\\\\"components/await.md\\\\\\\",\\\\\\\"components/await\\\\\\\",[],{\\\\\\\"_16\\\\\\\":305,\\\\\\\"_22\\\\\\\":307,\\\\\\\"_24\\\\\\\":308,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":309},{\\\\\\\"_18\\\\\\\":306},\\\\\\\"Form\\\\\\\",\\\\\\\"components/form.md\\\\\\\",\\\\\\\"components/form\\\\\\\",[],{\\\\\\\"_16\\\\\\\":311,\\\\\\\"_22\\\\\\\":313,\\\\\\\"_24\\\\\\\":314,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":315},{\\\\\\\"_18\\\\\\\":312},\\\\\\\"Link\\\\\\\",\\\\\\\"components/link.md\\\\\\\",\\\\\\\"components/link\\\\\\\",[],{\\\\\\\"_16\\\\\\\":317,\\\\\\\"_22\\\\\\\":319,\\\\\\\"_24\\\\\\\":320,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":321},{\\\\\\\"_18\\\\\\\":318,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Links\\\\\\\",\\\\\\\"components/links.md\\\\\\\",\\\\\\\"components/links\\\\\\\",[],{\\\\\\\"_16\\\\\\\":323,\\\\\\\"_22\\\\\\\":325,\\\\\\\"_24\\\\\\\":326,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":327},{\\\\\\\"_18\\\\\\\":324,\\\\\\\"_169\\\\\\\":10},\\\\\\\"LiveReload\\\\\\\",\\\\\\\"components/live-reload.md\\\\\\\",\\\\\\\"components/live-reload\\\\\\\",[],{\\\\\\\"_16\\\\\\\":329,\\\\\\\"_22\\\\\\\":331,\\\\\\\"_24\\\\\\\":332,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":333},{\\\\\\\"_18\\\\\\\":330,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Meta\\\\\\\",\\\\\\\"components/meta.md\\\\\\\",\\\\\\\"components/meta\\\\\\\",[],{\\\\\\\"_16\\\\\\\":335,\\\\\\\"_22\\\\\\\":337,\\\\\\\"_24\\\\\\\":338,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":339},{\\\\\\\"_18\\\\\\\":336},\\\\\\\"NavLink\\\\\\\",\\\\\\\"components/nav-link.md\\\\\\\",\\\\\\\"components/nav-link\\\\\\\",[],{\\\\\\\"_16\\\\\\\":341,\\\\\\\"_22\\\\\\\":343,\\\\\\\"_24\\\\\\\":344,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":345},{\\\\\\\"_18\\\\\\\":342},\\\\\\\"Outlet\\\\\\\",\\\\\\\"components/outlet.md\\\\\\\",\\\\\\\"components/outlet\\\\\\\",[],{\\\\\\\"_16\\\\\\\":347,\\\\\\\"_22\\\\\\\":349,\\\\\\\"_24\\\\\\\":350,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":351},{\\\\\\\"_18\\\\\\\":348,\\\\\\\"_169\\\\\\\":10},\\\\\\\"PrefetchPageLinks\\\\\\\",\\\\\\\"components/prefetch-page-links.md\\\\\\\",\\\\\\\"components/prefetch-page-links\\\\\\\",[],{\\\\\\\"_16\\\\\\\":353,\\\\\\\"_22\\\\\\\":355,\\\\\\\"_24\\\\\\\":356,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":357},{\\\\\\\"_18\\\\\\\":354,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Scripts\\\\\\\",\\\\\\\"components/scripts.md\\\\\\\",\\\\\\\"components/scripts\\\\\\\",[],{\\\\\\\"_16\\\\\\\":359,\\\\\\\"_22\\\\\\\":361,\\\\\\\"_24\\\\\\\":362,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":363},{\\\\\\\"_18\\\\\\\":360},\\\\\\\"ScrollRestoration\\\\\\\",\\\\\\\"components/scroll-restoration.md\\\\\\\",\\\\\\\"components/scroll-restoration\\\\\\\",[],{\\\\\\\"_16\\\\\\\":365,\\\\\\\"_22\\\\\\\":367,\\\\\\\"_24\\\\\\\":368,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":369},{\\\\\\\"_18\\\\\\\":366,\\\\\\\"_20\\\\\\\":111},\\\\\\\"Hooks\\\\\\\",\\\\\\\"hooks/index.md\\\\\\\",\\\\\\\"hooks\\\\\\\",[370,376,383,389,395,401,407,413,419,425,431,437,443,449,455,461,467,473,479,485,491,497,503,509,515,521],{\\\\\\\"_16\\\\\\\":371,\\\\\\\"_22\\\\\\\":373,\\\\\\\"_24\\\\\\\":374,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":375},{\\\\\\\"_18\\\\\\\":372,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useActionData\\\\\\\",\\\\\\\"hooks/use-action-data.md\\\\\\\",\\\\\\\"hooks/use-action-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":377,\\\\\\\"_22\\\\\\\":380,\\\\\\\"_24\\\\\\\":381,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":382},{\\\\\\\"_18\\\\\\\":378,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useAsyncError\\\\\\\",\\\\\\\"new\\\\\\\",\\\\\\\"hooks/use-async-error.md\\\\\\\",\\\\\\\"hooks/use-async-error\\\\\\\",[],{\\\\\\\"_16\\\\\\\":384,\\\\\\\"_22\\\\\\\":386,\\\\\\\"_24\\\\\\\":387,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":388},{\\\\\\\"_18\\\\\\\":385,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useAsyncValue\\\\\\\",\\\\\\\"hooks/use-async-value.md\\\\\\\",\\\\\\\"hooks/use-async-value\\\\\\\",[],{\\\\\\\"_16\\\\\\\":390,\\\\\\\"_22\\\\\\\":392,\\\\\\\"_24\\\\\\\":393,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":394},{\\\\\\\"_18\\\\\\\":391,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useBeforeUnload\\\\\\\",\\\\\\\"hooks/use-before-unload.md\\\\\\\",\\\\\\\"hooks/use-before-unload\\\\\\\",[],{\\\\\\\"_16\\\\\\\":396,\\\\\\\"_22\\\\\\\":398,\\\\\\\"_24\\\\\\\":399,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":400},{\\\\\\\"_18\\\\\\\":397},\\\\\\\"useBlocker\\\\\\\",\\\\\\\"hooks/use-blocker.md\\\\\\\",\\\\\\\"hooks/use-blocker\\\\\\\",[],{\\\\\\\"_16\\\\\\\":402,\\\\\\\"_22\\\\\\\":404,\\\\\\\"_24\\\\\\\":405,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":406},{\\\\\\\"_18\\\\\\\":403},\\\\\\\"useFetcher\\\\\\\",\\\\\\\"hooks/use-fetcher.md\\\\\\\",\\\\\\\"hooks/use-fetcher\\\\\\\",[],{\\\\\\\"_16\\\\\\\":408,\\\\\\\"_22\\\\\\\":410,\\\\\\\"_24\\\\\\\":411,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":412},{\\\\\\\"_18\\\\\\\":409,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useFetchers\\\\\\\",\\\\\\\"hooks/use-fetchers.md\\\\\\\",\\\\\\\"hooks/use-fetchers\\\\\\\",[],{\\\\\\\"_16\\\\\\\":414,\\\\\\\"_22\\\\\\\":416,\\\\\\\"_24\\\\\\\":417,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":418},{\\\\\\\"_18\\\\\\\":415},\\\\\\\"useFormAction\\\\\\\",\\\\\\\"hooks/use-form-action.md\\\\\\\",\\\\\\\"hooks/use-form-action\\\\\\\",[],{\\\\\\\"_16\\\\\\\":420,\\\\\\\"_22\\\\\\\":422,\\\\\\\"_24\\\\\\\":423,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":424},{\\\\\\\"_18\\\\\\\":421},\\\\\\\"useHref\\\\\\\",\\\\\\\"hooks/use-href.md\\\\\\\",\\\\\\\"hooks/use-href\\\\\\\",[],{\\\\\\\"_16\\\\\\\":426,\\\\\\\"_22\\\\\\\":428,\\\\\\\"_24\\\\\\\":429,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":430},{\\\\\\\"_18\\\\\\\":427},\\\\\\\"useLoaderData\\\\\\\",\\\\\\\"hooks/use-loader-data.md\\\\\\\",\\\\\\\"hooks/use-loader-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":432,\\\\\\\"_22\\\\\\\":434,\\\\\\\"_24\\\\\\\":435,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":436},{\\\\\\\"_18\\\\\\\":433},\\\\\\\"useLocation\\\\\\\",\\\\\\\"hooks/use-location.md\\\\\\\",\\\\\\\"hooks/use-location\\\\\\\",[],{\\\\\\\"_16\\\\\\\":438,\\\\\\\"_22\\\\\\\":440,\\\\\\\"_24\\\\\\\":441,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":442},{\\\\\\\"_18\\\\\\\":439,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useMatches\\\\\\\",\\\\\\\"hooks/use-matches.md\\\\\\\",\\\\\\\"hooks/use-matches\\\\\\\",[],{\\\\\\\"_16\\\\\\\":444,\\\\\\\"_22\\\\\\\":446,\\\\\\\"_24\\\\\\\":447,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":448},{\\\\\\\"_18\\\\\\\":445},\\\\\\\"useNavigate\\\\\\\",\\\\\\\"hooks/use-navigate.md\\\\\\\",\\\\\\\"hooks/use-navigate\\\\\\\",[],{\\\\\\\"_16\\\\\\\":450,\\\\\\\"_22\\\\\\\":452,\\\\\\\"_24\\\\\\\":453,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":454},{\\\\\\\"_18\\\\\\\":451},\\\\\\\"useNavigation\\\\\\\",\\\\\\\"hooks/use-navigation.md\\\\\\\",\\\\\\\"hooks/use-navigation\\\\\\\",[],{\\\\\\\"_16\\\\\\\":456,\\\\\\\"_22\\\\\\\":458,\\\\\\\"_24\\\\\\\":459,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":460},{\\\\\\\"_18\\\\\\\":457},\\\\\\\"useNavigationType\\\\\\\",\\\\\\\"hooks/use-navigation-type.md\\\\\\\",\\\\\\\"hooks/use-navigation-type\\\\\\\",[],{\\\\\\\"_16\\\\\\\":462,\\\\\\\"_22\\\\\\\":464,\\\\\\\"_24\\\\\\\":465,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":466},{\\\\\\\"_18\\\\\\\":463},\\\\\\\"useOutlet\\\\\\\",\\\\\\\"hooks/use-outlet.md\\\\\\\",\\\\\\\"hooks/use-outlet\\\\\\\",[],{\\\\\\\"_16\\\\\\\":468,\\\\\\\"_22\\\\\\\":470,\\\\\\\"_24\\\\\\\":471,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":472},{\\\\\\\"_18\\\\\\\":469},\\\\\\\"useOutletContext\\\\\\\",\\\\\\\"hooks/use-outlet-context.md\\\\\\\",\\\\\\\"hooks/use-outlet-context\\\\\\\",[],{\\\\\\\"_16\\\\\\\":474,\\\\\\\"_22\\\\\\\":476,\\\\\\\"_24\\\\\\\":477,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":478},{\\\\\\\"_18\\\\\\\":475},\\\\\\\"useParams\\\\\\\",\\\\\\\"hooks/use-params.md\\\\\\\",\\\\\\\"hooks/use-params\\\\\\\",[],{\\\\\\\"_16\\\\\\\":480,\\\\\\\"_22\\\\\\\":482,\\\\\\\"_24\\\\\\\":483,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":484},{\\\\\\\"_18\\\\\\\":481},\\\\\\\"unstable_usePrompt\\\\\\\",\\\\\\\"hooks/use-prompt.md\\\\\\\",\\\\\\\"hooks/use-prompt\\\\\\\",[],{\\\\\\\"_16\\\\\\\":486,\\\\\\\"_22\\\\\\\":488,\\\\\\\"_24\\\\\\\":489,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":490},{\\\\\\\"_18\\\\\\\":487},\\\\\\\"useResolvedPath\\\\\\\",\\\\\\\"hooks/use-resolved-path.md\\\\\\\",\\\\\\\"hooks/use-resolved-path\\\\\\\",[],{\\\\\\\"_16\\\\\\\":492,\\\\\\\"_22\\\\\\\":494,\\\\\\\"_24\\\\\\\":495,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":496},{\\\\\\\"_18\\\\\\\":493,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useRevalidator\\\\\\\",\\\\\\\"hooks/use-revalidator.md\\\\\\\",\\\\\\\"hooks/use-revalidator\\\\\\\",[],{\\\\\\\"_16\\\\\\\":498,\\\\\\\"_22\\\\\\\":500,\\\\\\\"_24\\\\\\\":501,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":502},{\\\\\\\"_18\\\\\\\":499,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useRouteError\\\\\\\",\\\\\\\"hooks/use-route-error.md\\\\\\\",\\\\\\\"hooks/use-route-error\\\\\\\",[],{\\\\\\\"_16\\\\\\\":504,\\\\\\\"_22\\\\\\\":506,\\\\\\\"_24\\\\\\\":507,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":508},{\\\\\\\"_18\\\\\\\":505,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useRouteLoaderData\\\\\\\",\\\\\\\"hooks/use-route-loader-data.md\\\\\\\",\\\\\\\"hooks/use-route-loader-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":510,\\\\\\\"_22\\\\\\\":512,\\\\\\\"_24\\\\\\\":513,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":514},{\\\\\\\"_18\\\\\\\":511},\\\\\\\"useSearchParams\\\\\\\",\\\\\\\"hooks/use-search-params.md\\\\\\\",\\\\\\\"hooks/use-search-params\\\\\\\",[],{\\\\\\\"_16\\\\\\\":516,\\\\\\\"_22\\\\\\\":518,\\\\\\\"_24\\\\\\\":519,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":520},{\\\\\\\"_18\\\\\\\":517},\\\\\\\"useSubmit\\\\\\\",\\\\\\\"hooks/use-submit.md\\\\\\\",\\\\\\\"hooks/use-submit\\\\\\\",[],{\\\\\\\"_16\\\\\\\":522,\\\\\\\"_22\\\\\\\":524,\\\\\\\"_24\\\\\\\":525,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":526},{\\\\\\\"_18\\\\\\\":523,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useViewTransitionState\\\\\\\",\\\\\\\"hooks/use-view-transition-state.md\\\\\\\",\\\\\\\"hooks/use-view-transition-state\\\\\\\",[],{\\\\\\\"_16\\\\\\\":528,\\\\\\\"_22\\\\\\\":530,\\\\\\\"_24\\\\\\\":531,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":532},{\\\\\\\"_18\\\\\\\":529,\\\\\\\"_20\\\\\\\":111},\\\\\\\"Utilities\\\\\\\",\\\\\\\"utils/index.md\\\\\\\",\\\\\\\"utils\\\\\\\",[533,539,545,551,557,563,569,575,581,587,593,599,605],{\\\\\\\"_16\\\\\\\":534,\\\\\\\"_22\\\\\\\":536,\\\\\\\"_24\\\\\\\":537,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":538},{\\\\\\\"_18\\\\\\\":535},\\\\\\\"Cookies\\\\\\\",\\\\\\\"utils/cookies.md\\\\\\\",\\\\\\\"utils/cookies\\\\\\\",[],{\\\\\\\"_16\\\\\\\":540,\\\\\\\"_22\\\\\\\":542,\\\\\\\"_24\\\\\\\":543,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":544},{\\\\\\\"_18\\\\\\\":541},\\\\\\\"createRemixStub\\\\\\\",\\\\\\\"utils/create-remix-stub.md\\\\\\\",\\\\\\\"utils/create-remix-stub\\\\\\\",[],{\\\\\\\"_16\\\\\\\":546,\\\\\\\"_22\\\\\\\":548,\\\\\\\"_24\\\\\\\":549,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":550},{\\\\\\\"_18\\\\\\\":547,\\\\\\\"_169\\\\\\\":10},\\\\\\\"data\\\\\\\",\\\\\\\"utils/data.md\\\\\\\",\\\\\\\"utils/data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":552,\\\\\\\"_22\\\\\\\":554,\\\\\\\"_24\\\\\\\":555,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":556},{\\\\\\\"_18\\\\\\\":553,\\\\\\\"_169\\\\\\\":10},\\\\\\\"defer\\\\\\\",\\\\\\\"utils/defer.md\\\\\\\",\\\\\\\"utils/defer\\\\\\\",[],{\\\\\\\"_16\\\\\\\":558,\\\\\\\"_22\\\\\\\":560,\\\\\\\"_24\\\\\\\":561,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":562},{\\\\\\\"_18\\\\\\\":559,\\\\\\\"_169\\\\\\\":10},\\\\\\\"isRouteErrorResponse\\\\\\\",\\\\\\\"utils/is-route-error-response.md\\\\\\\",\\\\\\\"utils/is-route-error-response\\\\\\\",[],{\\\\\\\"_16\\\\\\\":564,\\\\\\\"_22\\\\\\\":566,\\\\\\\"_24\\\\\\\":567,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":568},{\\\\\\\"_18\\\\\\\":565,\\\\\\\"_169\\\\\\\":10},\\\\\\\"json\\\\\\\",\\\\\\\"utils/json.md\\\\\\\",\\\\\\\"utils/json\\\\\\\",[],{\\\\\\\"_16\\\\\\\":570,\\\\\\\"_22\\\\\\\":572,\\\\\\\"_24\\\\\\\":573,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":574},{\\\\\\\"_18\\\\\\\":571},\\\\\\\"unstable_parseMultipartFormData\\\\\\\",\\\\\\\"utils/parse-multipart-form-data.md\\\\\\\",\\\\\\\"utils/parse-multipart-form-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":576,\\\\\\\"_22\\\\\\\":578,\\\\\\\"_24\\\\\\\":579,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":580},{\\\\\\\"_18\\\\\\\":577,\\\\\\\"_169\\\\\\\":10},\\\\\\\"redirect\\\\\\\",\\\\\\\"utils/redirect.md\\\\\\\",\\\\\\\"utils/redirect\\\\\\\",[],{\\\\\\\"_16\\\\\\\":582,\\\\\\\"_22\\\\\\\":584,\\\\\\\"_24\\\\\\\":585,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":586},{\\\\\\\"_18\\\\\\\":583,\\\\\\\"_169\\\\\\\":10},\\\\\\\"redirectDocument\\\\\\\",\\\\\\\"utils/redirectDocument.md\\\\\\\",\\\\\\\"utils/redirectDocument\\\\\\\",[],{\\\\\\\"_16\\\\\\\":588,\\\\\\\"_22\\\\\\\":590,\\\\\\\"_24\\\\\\\":591,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":592},{\\\\\\\"_18\\\\\\\":589,\\\\\\\"_169\\\\\\\":10},\\\\\\\"replace\\\\\\\",\\\\\\\"utils/replace.md\\\\\\\",\\\\\\\"utils/replace\\\\\\\",[],{\\\\\\\"_16\\\\\\\":594,\\\\\\\"_22\\\\\\\":596,\\\\\\\"_24\\\\\\\":597,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":598},{\\\\\\\"_18\\\\\\\":595},\\\\\\\"Sessions\\\\\\\",\\\\\\\"utils/sessions.md\\\\\\\",\\\\\\\"utils/sessions\\\\\\\",[],{\\\\\\\"_16\\\\\\\":600,\\\\\\\"_22\\\\\\\":602,\\\\\\\"_24\\\\\\\":603,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":604},{\\\\\\\"_18\\\\\\\":601,\\\\\\\"_169\\\\\\\":10},\\\\\\\"unstable_createFileUploadHandler\\\\\\\",\\\\\\\"utils/unstable-create-file-upload-handler.md\\\\\\\",\\\\\\\"utils/unstable-create-file-upload-handler\\\\\\\",[],{\\\\\\\"_16\\\\\\\":606,\\\\\\\"_22\\\\\\\":608,\\\\\\\"_24\\\\\\\":609,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":610},{\\\\\\\"_18\\\\\\\":607,\\\\\\\"_169\\\\\\\":10},\\\\\\\"unstable_createMemoryUploadHandler\\\\\\\",\\\\\\\"utils/unstable-create-memory-upload-handler.md\\\\\\\",\\\\\\\"utils/unstable-create-memory-upload-handler\\\\\\\",[],{\\\\\\\"_16\\\\\\\":612,\\\\\\\"_22\\\\\\\":614,\\\\\\\"_24\\\\\\\":615,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":616},{\\\\\\\"_18\\\\\\\":613,\\\\\\\"_20\\\\\\\":118},\\\\\\\"Styling\\\\\\\",\\\\\\\"styling/index.md\\\\\\\",\\\\\\\"styling\\\\\\\",[617,623,629,635,641,647,653,659],{\\\\\\\"_16\\\\\\\":618,\\\\\\\"_22\\\\\\\":620,\\\\\\\"_24\\\\\\\":621,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":622},{\\\\\\\"_18\\\\\\\":619},\\\\\\\"CSS Bundling\\\\\\\",\\\\\\\"styling/bundling.md\\\\\\\",\\\\\\\"styling/bundling\\\\\\\",[],{\\\\\\\"_16\\\\\\\":624,\\\\\\\"_22\\\\\\\":626,\\\\\\\"_24\\\\\\\":627,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":628},{\\\\\\\"_18\\\\\\\":625},\\\\\\\"Regular CSS\\\\\\\",\\\\\\\"styling/css.md\\\\\\\",\\\\\\\"styling/css\\\\\\\",[],{\\\\\\\"_16\\\\\\\":630,\\\\\\\"_22\\\\\\\":632,\\\\\\\"_24\\\\\\\":633,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":634},{\\\\\\\"_18\\\\\\\":631},\\\\\\\"CSS Imports\\\\\\\",\\\\\\\"styling/css-imports.md\\\\\\\",\\\\\\\"styling/css-imports\\\\\\\",[],{\\\\\\\"_16\\\\\\\":636,\\\\\\\"_22\\\\\\\":638,\\\\\\\"_24\\\\\\\":639,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":640},{\\\\\\\"_18\\\\\\\":637},\\\\\\\"CSS in JS\\\\\\\",\\\\\\\"styling/css-in-js.md\\\\\\\",\\\\\\\"styling/css-in-js\\\\\\\",[],{\\\\\\\"_16\\\\\\\":642,\\\\\\\"_22\\\\\\\":644,\\\\\\\"_24\\\\\\\":645,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":646},{\\\\\\\"_18\\\\\\\":643},\\\\\\\"CSS Modules\\\\\\\",\\\\\\\"styling/css-modules.md\\\\\\\",\\\\\\\"styling/css-modules\\\\\\\",[],{\\\\\\\"_16\\\\\\\":648,\\\\\\\"_22\\\\\\\":650,\\\\\\\"_24\\\\\\\":651,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":652},{\\\\\\\"_18\\\\\\\":649},\\\\\\\"PostCSS\\\\\\\",\\\\\\\"styling/postcss.md\\\\\\\",\\\\\\\"styling/postcss\\\\\\\",[],{\\\\\\\"_16\\\\\\\":654,\\\\\\\"_22\\\\\\\":656,\\\\\\\"_24\\\\\\\":657,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":658},{\\\\\\\"_18\\\\\\\":655},\\\\\\\"Tailwind\\\\\\\",\\\\\\\"styling/tailwind.md\\\\\\\",\\\\\\\"styling/tailwind\\\\\\\",[],{\\\\\\\"_16\\\\\\\":660,\\\\\\\"_22\\\\\\\":662,\\\\\\\"_24\\\\\\\":663,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":664},{\\\\\\\"_18\\\\\\\":661},\\\\\\\"Vanilla Extract\\\\\\\",\\\\\\\"styling/vanilla-extract.md\\\\\\\",\\\\\\\"styling/vanilla-extract\\\\\\\",[],{\\\\\\\"_16\\\\\\\":666,\\\\\\\"_22\\\\\\\":668,\\\\\\\"_24\\\\\\\":669,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":670},{\\\\\\\"_18\\\\\\\":667,\\\\\\\"_20\\\\\\\":132},\\\\\\\"Other API\\\\\\\",\\\\\\\"other-api/index.md\\\\\\\",\\\\\\\"other-api\\\\\\\",[671,677,683,689,695,701],{\\\\\\\"_16\\\\\\\":672,\\\\\\\"_22\\\\\\\":674,\\\\\\\"_24\\\\\\\":675,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":676},{\\\\\\\"_18\\\\\\\":673,\\\\\\\"_20\\\\\\\":39,\\\\\\\"_379\\\\\\\":34},\\\\\\\"@remix-run/dev CLI\\\\\\\",\\\\\\\"other-api/dev.md\\\\\\\",\\\\\\\"other-api/dev\\\\\\\",[],{\\\\\\\"_16\\\\\\\":678,\\\\\\\"_22\\\\\\\":680,\\\\\\\"_24\\\\\\\":681,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":682},{\\\\\\\"_18\\\\\\\":679,\\\\\\\"_20\\\\\\\":46},\\\\\\\"@remix-run/{adapter}\\\\\\\",\\\\\\\"other-api/adapter.md\\\\\\\",\\\\\\\"other-api/adapter\\\\\\\",[],{\\\\\\\"_16\\\\\\\":684,\\\\\\\"_22\\\\\\\":686,\\\\\\\"_24\\\\\\\":687,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":688},{\\\\\\\"_18\\\\\\\":685,\\\\\\\"_20\\\\\\\":46},\\\\\\\"@remix-run/serve\\\\\\\",\\\\\\\"other-api/serve.md\\\\\\\",\\\\\\\"other-api/serve\\\\\\\",[],{\\\\\\\"_16\\\\\\\":690,\\\\\\\"_22\\\\\\\":692,\\\\\\\"_24\\\\\\\":693,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":694},{\\\\\\\"_18\\\\\\\":691},\\\\\\\"create-remix (CLI)\\\\\\\",\\\\\\\"other-api/create-remix.md\\\\\\\",\\\\\\\"other-api/create-remix\\\\\\\",[],{\\\\\\\"_16\\\\\\\":696,\\\\\\\"_22\\\\\\\":698,\\\\\\\"_24\\\\\\\":699,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":700},{\\\\\\\"_18\\\\\\\":697},\\\\\\\"@remix-run/node\\\\\\\",\\\\\\\"other-api/node.md\\\\\\\",\\\\\\\"other-api/node\\\\\\\",[],{\\\\\\\"_16\\\\\\\":702,\\\\\\\"_22\\\\\\\":704,\\\\\\\"_24\\\\\\\":705,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":706},{\\\\\\\"_18\\\\\\\":703},\\\\\\\"@remix-run/testing\\\\\\\",\\\\\\\"other-api/testing.md\\\\\\\",\\\\\\\"other-api/testing\\\\\\\",[],{\\\\\\\"_16\\\\\\\":708,\\\\\\\"_22\\\\\\\":711,\\\\\\\"_24\\\\\\\":712,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":713},{\\\\\\\"_18\\\\\\\":709,\\\\\\\"_20\\\\\\\":710},\\\\\\\"Guides\\\\\\\",10,\\\\\\\"guides/index.md\\\\\\\",\\\\\\\"guides\\\\\\\",[714,720,726,732,738,744,750,756,762,769,775,782,788,794,800,806,812,818,825,831,837,843,849,855,861,867,874,881,887,893,899,905,911,917,923,930,937,943],{\\\\\\\"_16\\\\\\\":715,\\\\\\\"_22\\\\\\\":717,\\\\\\\"_24\\\\\\\":718,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":719},{\\\\\\\"_18\\\\\\\":716},\\\\\\\"Accessibility\\\\\\\",\\\\\\\"guides/accessibility.md\\\\\\\",\\\\\\\"guides/accessibility\\\\\\\",[],{\\\\\\\"_16\\\\\\\":721,\\\\\\\"_22\\\\\\\":723,\\\\\\\"_24\\\\\\\":724,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":725},{\\\\\\\"_18\\\\\\\":722},\\\\\\\"Development Strategy\\\\\\\",\\\\\\\"guides/api-development-strategy.md\\\\\\\",\\\\\\\"guides/api-development-strategy\\\\\\\",[],{\\\\\\\"_16\\\\\\\":727,\\\\\\\"_22\\\\\\\":729,\\\\\\\"_24\\\\\\\":730,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":731},{\\\\\\\"_18\\\\\\\":728},\\\\\\\"API Routes\\\\\\\",\\\\\\\"guides/api-routes.md\\\\\\\",\\\\\\\"guides/api-routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":733,\\\\\\\"_22\\\\\\\":735,\\\\\\\"_24\\\\\\\":736,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":737},{\\\\\\\"_18\\\\\\\":734,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Backend For Frontend\\\\\\\",\\\\\\\"guides/bff.md\\\\\\\",\\\\\\\"guides/bff\\\\\\\",[],{\\\\\\\"_16\\\\\\\":739,\\\\\\\"_22\\\\\\\":741,\\\\\\\"_24\\\\\\\":742,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":743},{\\\\\\\"_18\\\\\\\":740},\\\\\\\"Breadcrumbs Guide\\\\\\\",\\\\\\\"guides/breadcrumbs.md\\\\\\\",\\\\\\\"guides/breadcrumbs\\\\\\\",[],{\\\\\\\"_16\\\\\\\":745,\\\\\\\"_22\\\\\\\":747,\\\\\\\"_24\\\\\\\":748,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":749},{\\\\\\\"_18\\\\\\\":746},\\\\\\\"Browser Support\\\\\\\",\\\\\\\"guides/browser-support.md\\\\\\\",\\\\\\\"guides/browser-support\\\\\\\",[],{\\\\\\\"_16\\\\\\\":751,\\\\\\\"_22\\\\\\\":753,\\\\\\\"_24\\\\\\\":754,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":755},{\\\\\\\"_18\\\\\\\":752},\\\\\\\"Client Data\\\\\\\",\\\\\\\"guides/client-data.md\\\\\\\",\\\\\\\"guides/client-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":757,\\\\\\\"_22\\\\\\\":759,\\\\\\\"_24\\\\\\\":760,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":761},{\\\\\\\"_18\\\\\\\":758},\\\\\\\"Module Constraints\\\\\\\",\\\\\\\"guides/constraints.md\\\\\\\",\\\\\\\"guides/constraints\\\\\\\",[],{\\\\\\\"_16\\\\\\\":763,\\\\\\\"_22\\\\\\\":766,\\\\\\\"_24\\\\\\\":767,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":768},{\\\\\\\"_18\\\\\\\":764,\\\\\\\"_53\\\\\\\":765},\\\\\\\"Contributing\\\\\\\",\\\\\\\"Thank you for contributing to Remix! Here's everything you need to know before you open a pull request.\\\\\\\",\\\\\\\"guides/contributing.md\\\\\\\",\\\\\\\"guides/contributing\\\\\\\",[],{\\\\\\\"_16\\\\\\\":770,\\\\\\\"_22\\\\\\\":772,\\\\\\\"_24\\\\\\\":773,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":774},{\\\\\\\"_18\\\\\\\":771},\\\\\\\"CSS Files\\\\\\\",\\\\\\\"guides/css-files.md\\\\\\\",\\\\\\\"guides/css-files\\\\\\\",[],{\\\\\\\"_16\\\\\\\":776,\\\\\\\"_22\\\\\\\":779,\\\\\\\"_24\\\\\\\":780,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":781},{\\\\\\\"_18\\\\\\\":777,\\\\\\\"_53\\\\\\\":778},\\\\\\\"Data Loading\\\\\\\",\\\\\\\"One of the primary features of Remix is simplifying interactions with the server to get data into components. This document will help you get the most out of data loading in Remix.\\\\\\\",\\\\\\\"guides/data-loading.md\\\\\\\",\\\\\\\"guides/data-loading\\\\\\\",[],{\\\\\\\"_16\\\\\\\":783,\\\\\\\"_22\\\\\\\":785,\\\\\\\"_24\\\\\\\":786,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":787},{\\\\\\\"_18\\\\\\\":784},\\\\\\\"Data Writes\\\\\\\",\\\\\\\"guides/data-writes.md\\\\\\\",\\\\\\\"guides/data-writes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":789,\\\\\\\"_22\\\\\\\":791,\\\\\\\"_24\\\\\\\":792,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":793},{\\\\\\\"_18\\\\\\\":790},\\\\\\\"Dependency optimization\\\\\\\",\\\\\\\"guides/dependency-optimization.md\\\\\\\",\\\\\\\"guides/dependency-optimization\\\\\\\",[],{\\\\\\\"_16\\\\\\\":795,\\\\\\\"_22\\\\\\\":797,\\\\\\\"_24\\\\\\\":798,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":799},{\\\\\\\"_18\\\\\\\":796,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Deployment\\\\\\\",\\\\\\\"guides/deployment.md\\\\\\\",\\\\\\\"guides/deployment\\\\\\\",[],{\\\\\\\"_16\\\\\\\":801,\\\\\\\"_22\\\\\\\":803,\\\\\\\"_24\\\\\\\":804,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":805},{\\\\\\\"_18\\\\\\\":802,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Disabling JavaScript\\\\\\\",\\\\\\\"guides/disabling-javascript.md\\\\\\\",\\\\\\\"guides/disabling-javascript\\\\\\\",[],{\\\\\\\"_16\\\\\\\":807,\\\\\\\"_22\\\\\\\":809,\\\\\\\"_24\\\\\\\":810,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":811},{\\\\\\\"_18\\\\\\\":808},\\\\\\\"Environment Variables\\\\\\\",\\\\\\\"guides/envvars.md\\\\\\\",\\\\\\\"guides/envvars\\\\\\\",[],{\\\\\\\"_16\\\\\\\":813,\\\\\\\"_22\\\\\\\":815,\\\\\\\"_24\\\\\\\":816,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":817},{\\\\\\\"_18\\\\\\\":814},\\\\\\\"Error Handling\\\\\\\",\\\\\\\"guides/errors.md\\\\\\\",\\\\\\\"guides/errors\\\\\\\",[],{\\\\\\\"_16\\\\\\\":819,\\\\\\\"_22\\\\\\\":822,\\\\\\\"_24\\\\\\\":823,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":824},{\\\\\\\"_18\\\\\\\":820,\\\\\\\"_53\\\\\\\":821},\\\\\\\"FAQs\\\\\\\",\\\\\\\"Frequently Asked Questions about Remix\\\\\\\",\\\\\\\"guides/faq.md\\\\\\\",\\\\\\\"guides/faq\\\\\\\",[],{\\\\\\\"_16\\\\\\\":826,\\\\\\\"_22\\\\\\\":828,\\\\\\\"_24\\\\\\\":829,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":830},{\\\\\\\"_18\\\\\\\":827},\\\\\\\"File Uploads\\\\\\\",\\\\\\\"guides/file-uploads.md\\\\\\\",\\\\\\\"guides/file-uploads\\\\\\\",[],{\\\\\\\"_16\\\\\\\":832,\\\\\\\"_22\\\\\\\":834,\\\\\\\"_24\\\\\\\":835,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":836},{\\\\\\\"_18\\\\\\\":833},\\\\\\\"Form Validation\\\\\\\",\\\\\\\"guides/form-validation.md\\\\\\\",\\\\\\\"guides/form-validation\\\\\\\",[],{\\\\\\\"_16\\\\\\\":838,\\\\\\\"_22\\\\\\\":840,\\\\\\\"_24\\\\\\\":841,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":842},{\\\\\\\"_18\\\\\\\":839},\\\\\\\"Gotchas\\\\\\\",\\\\\\\"guides/gotchas.md\\\\\\\",\\\\\\\"guides/gotchas\\\\\\\",[],{\\\\\\\"_16\\\\\\\":844,\\\\\\\"_22\\\\\\\":846,\\\\\\\"_24\\\\\\\":847,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":848},{\\\\\\\"_18\\\\\\\":845,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Index Query Param\\\\\\\",\\\\\\\"guides/index-query-param.md\\\\\\\",\\\\\\\"guides/index-query-param\\\\\\\",[],{\\\\\\\"_16\\\\\\\":850,\\\\\\\"_22\\\\\\\":852,\\\\\\\"_24\\\\\\\":853,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":854},{\\\\\\\"_18\\\\\\\":851},\\\\\\\"Lazy Route Discovery\\\\\\\",\\\\\\\"guides/lazy-route-discovery.md\\\\\\\",\\\\\\\"guides/lazy-route-discovery\\\\\\\",[],{\\\\\\\"_16\\\\\\\":856,\\\\\\\"_22\\\\\\\":858,\\\\\\\"_24\\\\\\\":859,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":860},{\\\\\\\"_18\\\\\\\":857},\\\\\\\"Local TLS\\\\\\\",\\\\\\\"guides/local-tls.md\\\\\\\",\\\\\\\"guides/local-tls\\\\\\\",[],{\\\\\\\"_16\\\\\\\":862,\\\\\\\"_22\\\\\\\":864,\\\\\\\"_24\\\\\\\":865,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":866},{\\\\\\\"_18\\\\\\\":863},\\\\\\\"Manual Dev Server\\\\\\\",\\\\\\\"guides/manual-mode.md\\\\\\\",\\\\\\\"guides/manual-mode\\\\\\\",[],{\\\\\\\"_16\\\\\\\":868,\\\\\\\"_22\\\\\\\":871,\\\\\\\"_24\\\\\\\":872,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":873},{\\\\\\\"_18\\\\\\\":869,\\\\\\\"_53\\\\\\\":870},\\\\\\\"MDX\\\\\\\",\\\\\\\"Remix makes integrating MDX into your project a breeze with built in routes and \\\\\\\\\\\\\\\"import\\\\\\\\\\\\\\\" support.\\\\\\\",\\\\\\\"guides/mdx.md\\\\\\\",\\\\\\\"guides/mdx\\\\\\\",[],{\\\\\\\"_16\\\\\\\":875,\\\\\\\"_22\\\\\\\":878,\\\\\\\"_24\\\\\\\":879,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":880},{\\\\\\\"_18\\\\\\\":876,\\\\\\\"_53\\\\\\\":877},\\\\\\\"Migrating from React Router\\\\\\\",\\\\\\\"Migrating your React Router app to Remix can be done all at once or in stages. This guide will walk you through an iterative approach to get your app running quickly.\\\\\\\",\\\\\\\"guides/migrating-react-router-app.md\\\\\\\",\\\\\\\"guides/migrating-react-router-app\\\\\\\",[],{\\\\\\\"_16\\\\\\\":882,\\\\\\\"_22\\\\\\\":884,\\\\\\\"_24\\\\\\\":885,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":886},{\\\\\\\"_18\\\\\\\":883},\\\\\\\"Not Found Handling\\\\\\\",\\\\\\\"guides/not-found.md\\\\\\\",\\\\\\\"guides/not-found\\\\\\\",[],{\\\\\\\"_16\\\\\\\":888,\\\\\\\"_22\\\\\\\":890,\\\\\\\"_24\\\\\\\":891,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":892},{\\\\\\\"_18\\\\\\\":889},\\\\\\\"Performance\\\\\\\",\\\\\\\"guides/performance.md\\\\\\\",\\\\\\\"guides/performance\\\\\\\",[],{\\\\\\\"_16\\\\\\\":894,\\\\\\\"_22\\\\\\\":896,\\\\\\\"_24\\\\\\\":897,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":898},{\\\\\\\"_18\\\\\\\":895},\\\\\\\"Presets\\\\\\\",\\\\\\\"guides/presets.md\\\\\\\",\\\\\\\"guides/presets\\\\\\\",[],{\\\\\\\"_16\\\\\\\":900,\\\\\\\"_22\\\\\\\":902,\\\\\\\"_24\\\\\\\":903,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":904},{\\\\\\\"_18\\\\\\\":901},\\\\\\\"Resource Routes\\\\\\\",\\\\\\\"guides/resource-routes.md\\\\\\\",\\\\\\\"guides/resource-routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":906,\\\\\\\"_22\\\\\\\":908,\\\\\\\"_24\\\\\\\":909,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":910},{\\\\\\\"_18\\\\\\\":907},\\\\\\\"Server Bundles\\\\\\\",\\\\\\\"guides/server-bundles.md\\\\\\\",\\\\\\\"guides/server-bundles\\\\\\\",[],{\\\\\\\"_16\\\\\\\":912,\\\\\\\"_22\\\\\\\":914,\\\\\\\"_24\\\\\\\":915,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":916},{\\\\\\\"_18\\\\\\\":913},\\\\\\\"Single Fetch\\\\\\\",\\\\\\\"guides/single-fetch.md\\\\\\\",\\\\\\\"guides/single-fetch\\\\\\\",[],{\\\\\\\"_16\\\\\\\":918,\\\\\\\"_22\\\\\\\":920,\\\\\\\"_24\\\\\\\":921,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":922},{\\\\\\\"_18\\\\\\\":919},\\\\\\\"SPA Mode\\\\\\\",\\\\\\\"guides/spa-mode.md\\\\\\\",\\\\\\\"guides/spa-mode\\\\\\\",[],{\\\\\\\"_16\\\\\\\":924,\\\\\\\"_22\\\\\\\":927,\\\\\\\"_24\\\\\\\":928,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":929},{\\\\\\\"_18\\\\\\\":925,\\\\\\\"_53\\\\\\\":926},\\\\\\\"Streaming\\\\\\\",\\\\\\\"When, why, and how to stream with React 18 and Remix's deferred API.\\\\\\\",\\\\\\\"guides/streaming.md\\\\\\\",\\\\\\\"guides/streaming\\\\\\\",[],{\\\\\\\"_16\\\\\\\":931,\\\\\\\"_22\\\\\\\":934,\\\\\\\"_24\\\\\\\":935,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":936},{\\\\\\\"_18\\\\\\\":932,\\\\\\\"_53\\\\\\\":933},\\\\\\\"Templates\\\\\\\",\\\\\\\"The quickest way to get rocking and rolling with Remix\\\\\\\",\\\\\\\"guides/templates.md\\\\\\\",\\\\\\\"guides/templates\\\\\\\",[],{\\\\\\\"_16\\\\\\\":938,\\\\\\\"_22\\\\\\\":940,\\\\\\\"_24\\\\\\\":941,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":942},{\\\\\\\"_18\\\\\\\":939,\\\\\\\"_169\\\\\\\":10},\\\\\\\"TypeScript\\\\\\\",\\\\\\\"guides/typescript.md\\\\\\\",\\\\\\\"guides/typescript\\\\\\\",[],{\\\\\\\"_16\\\\\\\":944,\\\\\\\"_22\\\\\\\":946,\\\\\\\"_24\\\\\\\":947,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":948},{\\\\\\\"_18\\\\\\\":945},\\\\\\\"Vite\\\\\\\",\\\\\\\"guides/vite.md\\\\\\\",\\\\\\\"guides/vite\\\\\\\",[],\\\\\\\"routes/docs.$\\\\\\\",{\\\\\\\"_951\\\\\\\":952},\\\\\\\"doc\\\\\\\",{\\\\\\\"_16\\\\\\\":953,\\\\\\\"_22\\\\\\\":954,\\\\\\\"_955\\\\\\\":956,\\\\\\\"_24\\\\\\\":957,\\\\\\\"_958\\\\\\\":959,\\\\\\\"_27\\\\\\\":965},{\\\\\\\"_18\\\\\\\":210},\\\\\\\"docs/file-conventions/vite-config.md\\\\\\\",\\\\\\\"html\\\\\\\",\\\\\\\"\\\\u003ch1 id=\\\\\\\\\\\\\\\"viteconfigts\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#viteconfigts\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003evite.config.ts\\\\u003c/h1\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003e\\\\u003cdocs-warning\\\\u003eIf your project is still using the \\\\u003ca href=\\\\\\\\\\\\\\\"../guides/vite#classic-remix-compiler-vs-remix-vite\\\\\\\\\\\\\\\"\\\\u003eClassic Remix Compiler\\\\u003c/a\\\\u003e, you should refer to the \\\\u003ca href=\\\\\\\\\\\\\\\"./remix-config\\\\\\\\\\\\\\\"\\\\u003eremix.config.js documentation\\\\u003c/a\\\\u003e instead.\\\\u003c/docs-warning\\\\u003e\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eRemix uses \\\\u003ca href=\\\\\\\\\\\\\\\"https://vitejs.dev\\\\\\\\\\\\\\\"\\\\u003eVite\\\\u003c/a\\\\u003e to compile your application. You'll need to provide a Vite config file with the Remix Vite plugin. Here's the minimum configuration you'll need:\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cdiv data-code-block=\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\" data-filename=\\\\\\\\\\\\\\\"vite.config.ts\\\\\\\\\\\\\\\" data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"typescript\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cpre data-filename=\\\\\\\\\\\\\\\"vite.config.ts\\\\\\\\\\\\\\\" data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"typescript\\\\\\\\\\\\\\\" style=\\\\\\\\\\\\\\\"color: var(--base05);\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"1\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eimport\\\\u003c/span\\\\u003e { \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003evitePlugin\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eas\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eremix\\\\u003c/span\\\\u003e } \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003efrom\\\\u003c/span\\\\u003e \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e@remix-run/dev\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\";\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"2\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eimport\\\\u003c/span\\\\u003e { \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003edefineConfig\\\\u003c/span\\\\u003e } \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003efrom\\\\u003c/span\\\\u003e \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003evite\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\";\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"3\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"4\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eexport\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003edefault\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003edefineConfig\\\\u003c/span\\\\u003e({\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"5\\\\\\\\\\\\\\\"\\\\u003e plugins: [\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003eremix\\\\u003c/span\\\\u003e()],\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"6\\\\\\\\\\\\\\\"\\\\u003e});\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003c/code\\\\u003e\\\\u003c/pre\\\\u003e\\\\u003c/div\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003e\\\\u003cdocs-info\\\\u003eVite supports using a \\\\u003ccode\\\\u003e.js\\\\u003c/code\\\\u003e file for your config, but we recommend using TypeScript to help ensure your configuration is valid.\\\\u003c/docs-info\\\\u003e\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003ch2 id=\\\\\\\\\\\\\\\"remix-vite-plugin-config\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#remix-vite-plugin-config\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003eRemix Vite Plugin Config\\\\u003c/h2\\\\u003e\\\\\\\\n\\\\u003cdiv data-code-block=\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\" data-filename=\\\\\\\\\\\\\\\"vite.config.ts\\\\\\\\\\\\\\\" data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"javascript\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cpre data-filename=\\\\\\\\\\\\\\\"vite.config.ts\\\\\\\\\\\\\\\" data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"javascript\\\\\\\\\\\\\\\" style=\\\\\\\\\\\\\\\"color: var(--base05);\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"1\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eimport\\\\u003c/span\\\\u003e { \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003evitePlugin\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eas\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eremix\\\\u003c/span\\\\u003e } \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003efrom\\\\u003c/span\\\\u003e \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e@remix-run/dev\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\";\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"2\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eimport\\\\u003c/span\\\\u003e { \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003edefineConfig\\\\u003c/span\\\\u003e } \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003efrom\\\\u003c/span\\\\u003e \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003evite\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\";\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"3\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"4\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eexport\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003edefault\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003edefineConfig\\\\u003c/span\\\\u003e({\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"5\\\\\\\\\\\\\\\"\\\\u003e plugins: [\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"6\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003eremix\\\\u003c/span\\\\u003e({\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"7\\\\\\\\\\\\\\\"\\\\u003e basename: \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e/\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\",\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"8\\\\\\\\\\\\\\\"\\\\u003e buildDirectory: \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003ebuild\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\",\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"9\\\\\\\\\\\\\\\"\\\\u003e future: {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"10\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e/* any enabled future flags */\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"11\\\\\\\\\\\\\\\"\\\\u003e },\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"12\\\\\\\\\\\\\\\"\\\\u003e ignoredRouteFiles: [\\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e**/*.css\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"],\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"13\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003eroutes\\\\u003c/span\\\\u003e(\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003edefineRoutes\\\\u003c/span\\\\u003e) {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"14\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003ereturn\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003edefineRoutes\\\\u003c/span\\\\u003e((\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eroute\\\\u003c/span\\\\u003e) \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003e\\\\u003c/span\\\\u003e {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"15\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003eroute\\\\u003c/span\\\\u003e(\\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e/somewhere/cool/*\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003ecatchall.tsx\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\");\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"16\\\\\\\\\\\\\\\"\\\\u003e });\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"17\\\\\\\\\\\\\\\"\\\\u003e },\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"18\\\\\\\\\\\\\\\"\\\\u003e serverBuildFile: \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003eindex.js\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\",\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"19\\\\\\\\\\\\\\\"\\\\u003e }),\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"20\\\\\\\\\\\\\\\"\\\\u003e ],\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"21\\\\\\\\\\\\\\\"\\\\u003e});\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003c/code\\\\u003e\\\\u003c/pre\\\\u003e\\\\u003c/div\\\\u003e\\\\\\\\n\\\\u003ch4 id=\\\\\\\\\\\\\\\"appdirectory\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#appdirectory\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003eappDirectory\\\\u003c/h4\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eThe path to the \\\\u003ccode\\\\u003eapp\\\\u003c/code\\\\u003e directory, relative to the project root. Defaults to\\\\\\\\n\\\\u003ccode\\\\u003e\\\\\\\\\\\\\\\"app\\\\\\\\\\\\\\\"\\\\u003c/code\\\\u003e.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003ch4 id=\\\\\\\\\\\\\\\"future\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#future\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003efuture\\\\u003c/h4\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eThe \\\\u003ccode\\\\u003efuture\\\\u003c/code\\\\u003e config lets you opt-into future breaking changes via \\\\u003ca href=\\\\\\\\\\\\\\\"../start/future-flags\\\\\\\\\\\\\\\"\\\\u003eFuture Flags\\\\u003c/a\\\\u003e.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003ch4 id=\\\\\\\\\\\\\\\"ignoredroutefiles\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#ignoredroutefiles\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003eignoredRouteFiles\\\\u003c/h4\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eThis is an array of globs (via \\\\u003ca href=\\\\\\\\\\\\\\\"https://npm.im/minimatch\\\\\\\\\\\\\\\"\\\\u003eminimatch\\\\u003c/a\\\\u003e) that Remix will match to\\\\\\\\nfiles while reading your \\\\u003ccode\\\\u003eapp/routes\\\\u003c/code\\\\u003e directory. If a file matches, it will be\\\\\\\\nignored rather than treated like a route module. This is useful for ignoring\\\\\\\\nCSS/test files you wish to colocate.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003ch4 id=\\\\\\\\\\\\\\\"routes\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#routes\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003eroutes\\\\u003c/h4\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eA function for defining custom routes, in addition to those already defined\\\\\\\\nusing the filesystem convention in \\\\u003ccode\\\\u003eapp/routes\\\\u003c/code\\\\u003e. Both sets of routes will be merged.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cdiv data-code-block=\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\" data-filename=\\\\\\\\\\\\\\\"vite.config.ts\\\\\\\\\\\\\\\" data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"typescript\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cpre data-filename=\\\\\\\\\\\\\\\"vite.config.ts\\\\\\\\\\\\\\\" data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"typescript\\\\\\\\\\\\\\\" style=\\\\\\\\\\\\\\\"color: var(--base05);\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"1\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eimport\\\\u003c/span\\\\u003e { \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003evitePlugin\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eas\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eremix\\\\u003c/span\\\\u003e } \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003efrom\\\\u003c/span\\\\u003e \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e@remix-run/dev\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\";\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"2\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eimport\\\\u003c/span\\\\u003e { \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003edefineConfig\\\\u003c/span\\\\u003e } \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003efrom\\\\u003c/span\\\\u003e \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003evite\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\";\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"3\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"4\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eexport\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003edefault\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003edefineConfig\\\\u003c/span\\\\u003e({\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"5\\\\\\\\\\\\\\\"\\\\u003e plugins: [\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"6\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003eremix\\\\u003c/span\\\\u003e({\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"7\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003eroutes\\\\u003c/span\\\\u003e: \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003easync\\\\u003c/span\\\\u003e (\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003edefineRoutes\\\\u003c/span\\\\u003e) \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003e\\\\u003c/span\\\\u003e {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"8\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e// If you need to do async work, do it before calling `defineRoutes`, we use\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"9\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e// the call stack of `route` inside to set nesting.\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"10\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"11\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003ereturn\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003edefineRoutes\\\\u003c/span\\\\u003e((\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eroute\\\\u003c/span\\\\u003e) \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003e\\\\u003c/span\\\\u003e {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"12\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e// A common use for this is catchall routes.\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"13\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e// - The first argument is the React Router path to match against\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"14\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e// - The second is the relative filename of the route handler\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"15\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003eroute\\\\u003c/span\\\\u003e(\\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e/some/path/*\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003ecatchall.tsx\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\");\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"16\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"17\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e// if you want to nest routes, use the optional callback argument\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"18\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003eroute\\\\u003c/span\\\\u003e(\\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003esome/:path\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003esome/route/file.js\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\", () \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003e\\\\u003c/span\\\\u003e {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"19\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e// - path is relative to parent path\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"20\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e// - filenames are still relative to the app directory\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"21\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003eroute\\\\u003c/span\\\\u003e(\\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003erelative/path\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003esome/other/file\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\");\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"22\\\\\\\\\\\\\\\"\\\\u003e });\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"23\\\\\\\\\\\\\\\"\\\\u003e });\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"24\\\\\\\\\\\\\\\"\\\\u003e },\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"25\\\\\\\\\\\\\\\"\\\\u003e }),\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"26\\\\\\\\\\\\\\\"\\\\u003e ],\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"27\\\\\\\\\\\\\\\"\\\\u003e});\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003c/code\\\\u003e\\\\u003c/pre\\\\u003e\\\\u003c/div\\\\u003e\\\\\\\\n\\\\u003ch4 id=\\\\\\\\\\\\\\\"servermoduleformat\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#servermoduleformat\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003eserverModuleFormat\\\\u003c/h4\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eThe output format of the server build, which can either be \\\\u003ccode\\\\u003e\\\\\\\\\\\\\\\"cjs\\\\\\\\\\\\\\\"\\\\u003c/code\\\\u003e or \\\\u003ccode\\\\u003e\\\\\\\\\\\\\\\"esm\\\\\\\\\\\\\\\"\\\\u003c/code\\\\u003e.\\\\\\\\nDefaults to \\\\u003ccode\\\\u003e\\\\\\\\\\\\\\\"esm\\\\\\\\\\\\\\\"\\\\u003c/code\\\\u003e.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003ch4 id=\\\\\\\\\\\\\\\"builddirectory\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#builddirectory\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003ebuildDirectory\\\\u003c/h4\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eThe path to the build directory, relative to the project root. Defaults to\\\\\\\\n\\\\u003ccode\\\\u003e\\\\\\\\\\\\\\\"build\\\\\\\\\\\\\\\"\\\\u003c/code\\\\u003e.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003ch4 id=\\\\\\\\\\\\\\\"basename\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#basename\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003ebasename\\\\u003c/h4\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eAn optional basename for your route paths, passed through to the \\\\u003ca href=\\\\\\\\\\\\\\\"https://reactrouter.com/v6/routers/create-browser-router#basename\\\\\\\\\\\\\\\"\\\\u003eReact Router \\\\\\\\\\\\\\\"basename\\\\\\\\\\\\\\\" option\\\\u003c/a\\\\u003e. Please note that this is different from your \\\\u003cem\\\\u003easset\\\\u003c/em\\\\u003e paths. You can configure the \\\\u003ca href=\\\\\\\\\\\\\\\"https://vitejs.dev/config/shared-options.html#base\\\\\\\\\\\\\\\"\\\\u003ebase public path\\\\u003c/a\\\\u003e for your assets via the \\\\u003ca href=\\\\\\\\\\\\\\\"https://vitejs.dev/config/shared-options.html#base\\\\\\\\\\\\\\\"\\\\u003eVite \\\\\\\\\\\\\\\"base\\\\\\\\\\\\\\\" option\\\\u003c/a\\\\u003e.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003ch4 id=\\\\\\\\\\\\\\\"buildend\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#buildend\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003ebuildEnd\\\\u003c/h4\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eA function that is called after the full Remix build is complete.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003ch4 id=\\\\\\\\\\\\\\\"manifest\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#manifest\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003emanifest\\\\u003c/h4\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eWhether to write a \\\\u003ccode\\\\u003e.remix/manifest.json\\\\u003c/code\\\\u003e file to the build directory. Defaults\\\\\\\\nto \\\\u003ccode\\\\u003efalse\\\\u003c/code\\\\u003e.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003ch4 id=\\\\\\\\\\\\\\\"presets\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#presets\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003epresets\\\\u003c/h4\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eAn array of \\\\u003ca href=\\\\\\\\\\\\\\\"../guides/presets\\\\\\\\\\\\\\\"\\\\u003epresets\\\\u003c/a\\\\u003e to ease integration with other tools and hosting providers.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003ch4 id=\\\\\\\\\\\\\\\"serverbuildfile\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#serverbuildfile\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003eserverBuildFile\\\\u003c/h4\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eThe name of the server file is generated in the server build directory. Defaults to \\\\u003ccode\\\\u003e\\\\\\\\\\\\\\\"index.js\\\\\\\\\\\\\\\"\\\\u003c/code\\\\u003e.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003ch4 id=\\\\\\\\\\\\\\\"serverbundles\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#serverbundles\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003eserverBundles\\\\u003c/h4\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eA function for assigning addressable routes to \\\\u003ca href=\\\\\\\\\\\\\\\"../guides/server-bundles\\\\\\\\\\\\\\\"\\\\u003eserver bundles\\\\u003c/a\\\\u003e.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eYou may also want to enable the \\\\u003ccode\\\\u003emanifest\\\\u003c/code\\\\u003e option since, when server bundles are enabled, it contains mappings between routes and server bundles.\\\\u003c/p\\\\u003e\\\\\\\",\\\\\\\"docs/file-conventions/vite-config\\\\\\\",\\\\\\\"headings\\\\\\\",[960],{\\\\\\\"_961\\\\\\\":962,\\\\\\\"_955\\\\\\\":963,\\\\\\\"_24\\\\\\\":964},\\\\\\\"headingLevel\\\\\\\",\\\\\\\"h2\\\\\\\",\\\\\\\"Remix Vite Plugin Config\\\\\\\",\\\\\\\"remix-vite-plugin-config\\\\\\\",[],\\\\\\\"actionData\\\\\\\",\\\\\\\"errors\\\\\\\"]\\\\n\\\");function $RC(a,b){a=document.getElementById(a);b=document.getElementById(b);b.parentNode.removeChild(b);if(a){a=a.previousSibling;var f=a.parentNode,c=a.nextSibling,e=0;do{if(c\\u0026\\u00268===c.nodeType){var d=c.data;if(\\\"/$\\\"===d)if(0===e)break;else e--;else\\\"$\\\"!==d\\u0026\\u0026\\\"$?\\\"!==d\\u0026\\u0026\\\"$!\\\"!==d||e++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;b.firstChild;)f.insertBefore(b.firstChild,c);a.data=\\\"$\\\";a._reactRetry\\u0026\\u0026a._reactRetry()}};$RC(\\\"B:0\\\",\\\"S:0\\\")window.__reactRouterContext.streamController.close();$RC(\\\"B:1\\\",\\\"S:1\\\")\","
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::devour_data/docs/client-modules---remix-8414a590.json::480542ca4904e955": {
|
|
"id": "boilerplate_duplication::devour_data/docs/client-modules---remix-8414a590.json::480542ca4904e955",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "devour_data/docs/client-modules---remix-8414a590.json",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 172 lines): devour_data/docs/client-modules---remix-8414a590.json:3, devour_data/docs/client-modules---remix.json:3",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 172,
|
|
"locations": [
|
|
{
|
|
"file": "devour_data/docs/client-modules---remix-8414a590.json",
|
|
"line": 3
|
|
},
|
|
{
|
|
"file": "devour_data/docs/client-modules---remix.json",
|
|
"line": 3
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" \"type\": \"html\",",
|
|
" \"title\": \"client modules | Remix\",",
|
|
" \"content\": \"DocsBlogResourcesReact Router v7 has been released. View the docsDocsBlogResourcesView code on GitHubChat on DiscordReact Router v7 has been released. View the docs.client modulesGetting StartedQuick Start (5m) Tutorial (30m) Upgrading to v2 Community Future Flags Changelog Discussion TopicsIntroduction, Technical Explanation Runtimes, Adapters, Templates, and Deployment Route Configuration Fullstack Data Flow Server vs. Client Code Execution React Router Progressive Enhancement Pending UI State Management Network Concurrency Management Form vs. fetcher Hot Module Replacement Form Resubmissions File Conventions.client modules .server modules Asset Imports entry.client entry.server root Route File Naming vite.config.ts Route Moduleaction clientAction clientLoader Component ErrorBoundary handle headers HydrateFallback links loader meta shouldRevalidate ComponentsAwait Form Link Links LiveReload Meta NavLink Outlet PrefetchPageLinks Scripts ScrollRestoration HooksuseActionData useAsyncError \ud83c\udd95useAsyncValue \ud83c\udd95useBeforeUnload useBlocker useFetcher useFetchers useFormAction useHref useLoaderData useLocation useMatches useNavigate useNavigation useNavigationType useOutlet useOutletContext useParams unstable_usePrompt useResolvedPath useRevalidator \ud83c\udd95useRouteError \ud83c\udd95useRouteLoaderData useSearchParams useSubmit useViewTransitionState UtilitiesCookies createRemixStub data defer isRouteErrorResponse json unstable_parseMultipartFormData redirect redirectDocument replace Sessions unstable_createFileUploadHandler unstable_createMemoryUploadHandler StylingCSS Bundling Regular CSS CSS Imports CSS in JS CSS Modules PostCSS Tailwind Vanilla Extract Other API@remix-run/dev CLI \ud83c\udd95@remix-run/{adapter} @remix-run/serve create-remix (CLI) @remix-run/node @remix-run/testing GuidesAccessibility Development Strategy API Routes Backend For Frontend Breadcrumbs Guide Browser Support Client Data Module Constraints Contributing CSS Files Data Loading Data Writes Dependency optimization Deployment Disabling JavaScript Environment Variables Error Handling FAQs File Uploads Form Validation Gotchas Index Query Param Lazy Route Discovery Local TLS Manual Dev Server MDX Migrating from React Router Not Found Handling Performance Presets Resource Routes Server Bundles Single Fetch SPA Mode Streaming Templates TypeScript Vite Getting StartedQuick Start (5m) Tutorial (30m) Upgrading to v2 Community Future Flags Changelog Discussion TopicsIntroduction, Technical Explanation Runtimes, Adapters, Templates, and Deployment Route Configuration Fullstack Data Flow Server vs. Client Code Execution React Router Progressive Enhancement Pending UI State Management Network Concurrency Management Form vs. fetcher Hot Module Replacement Form Resubmissions File Conventions.client modules .server modules Asset Imports entry.client entry.server root Route File Naming vite.config.ts Route Moduleaction clientAction clientLoader Component ErrorBoundary handle headers HydrateFallback links loader meta shouldRevalidate ComponentsAwait Form Link Links LiveReload Meta NavLink Outlet PrefetchPageLinks Scripts ScrollRestoration HooksuseActionData useAsyncError \ud83c\udd95useAsyncValue \ud83c\udd95useBeforeUnload useBlocker useFetcher useFetchers useFormAction useHref useLoaderData useLocation useMatches useNavigate useNavigation useNavigationType useOutlet useOutletContext useParams unstable_usePrompt useResolvedPath useRevalidator \ud83c\udd95useRouteError \ud83c\udd95useRouteLoaderData useSearchParams useSubmit useViewTransitionState UtilitiesCookies createRemixStub data defer isRouteErrorResponse json unstable_parseMultipartFormData redirect redirectDocument replace Sessions unstable_createFileUploadHandler unstable_createMemoryUploadHandler StylingCSS Bundling Regular CSS CSS Imports CSS in JS CSS Modules PostCSS Tailwind Vanilla Extract Other API@remix-run/dev CLI \ud83c\udd95@remix-run/{adapter} @remix-run/serve create-remix (CLI) @remix-run/node @remix-run/testing GuidesAccessibility Development Strategy API Routes Backend For Frontend Breadcrumbs Guide Browser Support Client Data Module Constraints Contributing CSS Files Data Loading Data Writes Dependency optimization Deployment Disabling JavaScript Environment Variables Error Handling FAQs File Uploads Form Validation Gotchas Index Query Param Lazy Route Discovery Local TLS Manual Dev Server MDX Migrating from React Router Not Found Handling Performance Presets Resource Routes Server Bundles Single Fetch SPA Mode Streaming Templates TypeScript Vite .client modules While uncommon, you may have a file or dependency that uses module side effects in the browser. You can use *.client.ts on file names or nest files within .client directories to force them out of server bundles. // this would break the server export const supportsVibrationAPI = \\\"vibrate\\\" in window.navigator; Note that values exported from this module will all be undefined on the server, so the only places to use them are in useEffect and user events like click handlers. import { supportsVibrationAPI } from \\\"./feature-check.client.ts\\\"; console.log(supportsVibrationAPI); // server: undefined // client: true | false .client directories are only supported when using Remix Vite. The Classic Remix Compiler only supports .client files. Refer to the Route Module section in the sidebar for more information.\u00a9 Shopify, Inc.\u2022Docs and examples licensed under MITEdit((storageKey2, restoreKey) =\\u003e { if (!window.history.state || !window.history.state.key) { let key = Math.random().toString(32).slice(2); window.history.replaceState({ key }, \\\"\\\"); } try { let positions = JSON.parse(sessionStorage.getItem(storageKey2) || \\\"{}\\\"); let storedY = positions[restoreKey || window.history.state.key]; if (typeof storedY === \\\"number\\\") { window.scrollTo(0, storedY); } } catch (error) { console.error(error); sessionStorage.removeItem(storageKey2); } })(\\\"react-router-scroll-positions\\\", null)window.__reactRouterContext = {\\\"basename\\\":\\\"/\\\",\\\"future\\\":{\\\"unstable_optimizeDeps\\\":true,\\\"unstable_subResourceIntegrity\\\":false,\\\"v8_middleware\\\":true,\\\"v8_splitRouteModules\\\":true,\\\"v8_viteEnvironmentApi\\\":true},\\\"routeDiscovery\\\":{\\\"mode\\\":\\\"initial\\\"},\\\"ssr\\\":true,\\\"isSpaMode\\\":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());import \\\"/assets/manifest-b010e014.js\\\"; import * as route0 from \\\"/assets/root-CtUYAfRS.js\\\"; import * as route1 from \\\"/assets/docs-DauuYQK6.js\\\"; import * as route2 from \\\"/assets/docs._-B4dRXAHv.js\\\"; window.__reactRouterRouteModules = {\\\"root\\\":route0,\\\"routes/docs\\\":route1,\\\"routes/docs.$\\\":route2}; import(\\\"/assets/entry.client-q2ogymM2.js\\\");window.__reactRouterContext.streamController.enqueue(\\\"[{\\\\\\\"_1\\\\\\\":2,\\\\\\\"_961\\\\\\\":-5,\\\\\\\"_962\\\\\\\":-5},\\\\\\\"loaderData\\\\\\\",{\\\\\\\"_3\\\\\\\":4,\\\\\\\"_11\\\\\\\":12,\\\\\\\"_949\\\\\\\":950},\\\\\\\"root\\\\\\\",{\\\\\\\"_5\\\\\\\":6,\\\\\\\"_7\\\\\\\":8,\\\\\\\"_9\\\\\\\":10},\\\\\\\"host\\\\\\\",\\\\\\\"localhost\\\\\\\",\\\\\\\"siteUrl\\\\\\\",\\\\\\\"https://v2.remix.run\\\\\\\",\\\\\\\"noIndex\\\\\\\",false,\\\\\\\"routes/docs\\\\\\\",{\\\\\\\"_13\\\\\\\":14},\\\\\\\"menu\\\\\\\",[15,72,160,214,292,364,527,611,665,707],{\\\\\\\"_16\\\\\\\":17,\\\\\\\"_22\\\\\\\":23,\\\\\\\"_24\\\\\\\":25,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":28},\\\\\\\"attrs\\\\\\\",{\\\\\\\"_18\\\\\\\":19,\\\\\\\"_20\\\\\\\":21},\\\\\\\"title\\\\\\\",\\\\\\\"Getting Started\\\\\\\",\\\\\\\"order\\\\\\\",1,\\\\\\\"filename\\\\\\\",\\\\\\\"start/index.md\\\\\\\",\\\\\\\"slug\\\\\\\",\\\\\\\"start\\\\\\\",\\\\\\\"hasContent\\\\\\\",\\\\\\\"children\\\\\\\",[29,36,43,50,59,66],{\\\\\\\"_16\\\\\\\":30,\\\\\\\"_22\\\\\\\":32,\\\\\\\"_24\\\\\\\":33,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":35},{\\\\\\\"_18\\\\\\\":31,\\\\\\\"_20\\\\\\\":21},\\\\\\\"Quick Start (5m)\\\\\\\",\\\\\\\"start/quickstart.md\\\\\\\",\\\\\\\"start/quickstart\\\\\\\",true,[],{\\\\\\\"_16\\\\\\\":37,\\\\\\\"_22\\\\\\\":40,\\\\\\\"_24\\\\\\\":41,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":42},{\\\\\\\"_18\\\\\\\":38,\\\\\\\"_20\\\\\\\":39},\\\\\\\"Tutorial (30m)\\\\\\\",2,\\\\\\\"start/tutorial.md\\\\\\\",\\\\\\\"start/tutorial\\\\\\\",[],{\\\\\\\"_16\\\\\\\":44,\\\\\\\"_22\\\\\\\":47,\\\\\\\"_24\\\\\\\":48,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":49},{\\\\\\\"_18\\\\\\\":45,\\\\\\\"_20\\\\\\\":46},\\\\\\\"Upgrading to v2\\\\\\\",3,\\\\\\\"start/v2.md\\\\\\\",\\\\\\\"start/v2\\\\\\\",[],{\\\\\\\"_16\\\\\\\":51,\\\\\\\"_22\\\\\\\":56,\\\\\\\"_24\\\\\\\":57,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":58},{\\\\\\\"_18\\\\\\\":52,\\\\\\\"_53\\\\\\\":54,\\\\\\\"_20\\\\\\\":55},\\\\\\\"Community\\\\\\\",\\\\\\\"description\\\\\\\",\\\\\\\"Community resources for learning Remix and related technologies\\\\\\\",4,\\\\\\\"start/community.md\\\\\\\",\\\\\\\"start/community\\\\\\\",[],{\\\\\\\"_16\\\\\\\":60,\\\\\\\"_22\\\\\\\":63,\\\\\\\"_24\\\\\\\":64,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":65},{\\\\\\\"_18\\\\\\\":61,\\\\\\\"_20\\\\\\\":62},\\\\\\\"Future Flags\\\\\\\",5,\\\\\\\"start/future-flags.md\\\\\\\",\\\\\\\"start/future-flags\\\\\\\",[],{\\\\\\\"_16\\\\\\\":67,\\\\\\\"_22\\\\\\\":69,\\\\\\\"_24\\\\\\\":70,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":71},{\\\\\\\"_18\\\\\\\":68},\\\\\\\"Changelog\\\\\\\",\\\\\\\"start/changelog.md\\\\\\\",\\\\\\\"start/changelog\\\\\\\",[],{\\\\\\\"_16\\\\\\\":73,\\\\\\\"_22\\\\\\\":75,\\\\\\\"_24\\\\\\\":76,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":77},{\\\\\\\"_18\\\\\\\":74,\\\\\\\"_20\\\\\\\":39},\\\\\\\"Discussion Topics\\\\\\\",\\\\\\\"discussion/index.md\\\\\\\",\\\\\\\"discussion\\\\\\\",[78,84,90,96,102,108,115,122,129,136,142,148,154],{\\\\\\\"_16\\\\\\\":79,\\\\\\\"_22\\\\\\\":81,\\\\\\\"_24\\\\\\\":82,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":83},{\\\\\\\"_18\\\\\\\":80,\\\\\\\"_20\\\\\\\":21},\\\\\\\"Introduction, Technical Explanation\\\\\\\",\\\\\\\"discussion/introduction.md\\\\\\\",\\\\\\\"discussion/introduction\\\\\\\",[],{\\\\\\\"_16\\\\\\\":85,\\\\\\\"_22\\\\\\\":87,\\\\\\\"_24\\\\\\\":88,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":89},{\\\\\\\"_18\\\\\\\":86,\\\\\\\"_20\\\\\\\":39},\\\\\\\"Runtimes, Adapters, Templates, and Deployment\\\\\\\",\\\\\\\"discussion/runtimes.md\\\\\\\",\\\\\\\"discussion/runtimes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":91,\\\\\\\"_22\\\\\\\":93,\\\\\\\"_24\\\\\\\":94,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":95},{\\\\\\\"_18\\\\\\\":92,\\\\\\\"_20\\\\\\\":46},\\\\\\\"Route Configuration\\\\\\\",\\\\\\\"discussion/routes.md\\\\\\\",\\\\\\\"discussion/routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":97,\\\\\\\"_22\\\\\\\":99,\\\\\\\"_24\\\\\\\":100,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":101},{\\\\\\\"_18\\\\\\\":98,\\\\\\\"_20\\\\\\\":55},\\\\\\\"Fullstack Data Flow\\\\\\\",\\\\\\\"discussion/data-flow.md\\\\\\\",\\\\\\\"discussion/data-flow\\\\\\\",[],{\\\\\\\"_16\\\\\\\":103,\\\\\\\"_22\\\\\\\":105,\\\\\\\"_24\\\\\\\":106,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":107},{\\\\\\\"_18\\\\\\\":104,\\\\\\\"_20\\\\\\\":62},\\\\\\\"Server vs. Client Code Execution\\\\\\\",\\\\\\\"discussion/server-vs-client.md\\\\\\\",\\\\\\\"discussion/server-vs-client\\\\\\\",[],{\\\\\\\"_16\\\\\\\":109,\\\\\\\"_22\\\\\\\":112,\\\\\\\"_24\\\\\\\":113,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":114},{\\\\\\\"_18\\\\\\\":110,\\\\\\\"_20\\\\\\\":111},\\\\\\\"React Router\\\\\\\",6,\\\\\\\"discussion/react-router.md\\\\\\\",\\\\\\\"discussion/react-router\\\\\\\",[],{\\\\\\\"_16\\\\\\\":116,\\\\\\\"_22\\\\\\\":119,\\\\\\\"_24\\\\\\\":120,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":121},{\\\\\\\"_18\\\\\\\":117,\\\\\\\"_20\\\\\\\":118},\\\\\\\"Progressive Enhancement\\\\\\\",7,\\\\\\\"discussion/progressive-enhancement.md\\\\\\\",\\\\\\\"discussion/progressive-enhancement\\\\\\\",[],{\\\\\\\"_16\\\\\\\":123,\\\\\\\"_22\\\\\\\":126,\\\\\\\"_24\\\\\\\":127,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":128},{\\\\\\\"_18\\\\\\\":124,\\\\\\\"_20\\\\\\\":125},\\\\\\\"Pending UI\\\\\\\",8,\\\\\\\"discussion/pending-ui.md\\\\\\\",\\\\\\\"discussion/pending-ui\\\\\\\",[],{\\\\\\\"_16\\\\\\\":130,\\\\\\\"_22\\\\\\\":133,\\\\\\\"_24\\\\\\\":134,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":135},{\\\\\\\"_18\\\\\\\":131,\\\\\\\"_20\\\\\\\":132},\\\\\\\"State Management\\\\\\\",9,\\\\\\\"discussion/state-management.md\\\\\\\",\\\\\\\"discussion/state-management\\\\\\\",[],{\\\\\\\"_16\\\\\\\":137,\\\\\\\"_22\\\\\\\":139,\\\\\\\"_24\\\\\\\":140,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":141},{\\\\\\\"_18\\\\\\\":138},\\\\\\\"Network Concurrency Management\\\\\\\",\\\\\\\"discussion/concurrency.md\\\\\\\",\\\\\\\"discussion/concurrency\\\\\\\",[],{\\\\\\\"_16\\\\\\\":143,\\\\\\\"_22\\\\\\\":145,\\\\\\\"_24\\\\\\\":146,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":147},{\\\\\\\"_18\\\\\\\":144},\\\\\\\"Form vs. fetcher\\\\\\\",\\\\\\\"discussion/form-vs-fetcher.md\\\\\\\",\\\\\\\"discussion/form-vs-fetcher\\\\\\\",[],{\\\\\\\"_16\\\\\\\":149,\\\\\\\"_22\\\\\\\":151,\\\\\\\"_24\\\\\\\":152,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":153},{\\\\\\\"_18\\\\\\\":150},\\\\\\\"Hot Module Replacement\\\\\\\",\\\\\\\"discussion/hot-module-replacement.md\\\\\\\",\\\\\\\"discussion/hot-module-replacement\\\\\\\",[],{\\\\\\\"_16\\\\\\\":155,\\\\\\\"_22\\\\\\\":157,\\\\\\\"_24\\\\\\\":158,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":159},{\\\\\\\"_18\\\\\\\":156},\\\\\\\"Form Resubmissions\\\\\\\",\\\\\\\"discussion/resubmissions.md\\\\\\\",\\\\\\\"discussion/resubmissions\\\\\\\",[],{\\\\\\\"_16\\\\\\\":161,\\\\\\\"_22\\\\\\\":163,\\\\\\\"_24\\\\\\\":164,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":165},{\\\\\\\"_18\\\\\\\":162,\\\\\\\"_20\\\\\\\":46},\\\\\\\"File Conventions\\\\\\\",\\\\\\\"file-conventions/index.md\\\\\\\",\\\\\\\"file-conventions\\\\\\\",[166,173,179,185,191,197,202,208],{\\\\\\\"_16\\\\\\\":167,\\\\\\\"_22\\\\\\\":170,\\\\\\\"_24\\\\\\\":171,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":172},{\\\\\\\"_18\\\\\\\":168,\\\\\\\"_169\\\\\\\":10},\\\\\\\".client modules\\\\\\\",\\\\\\\"toc\\\\\\\",\\\\\\\"file-conventions/-client.md\\\\\\\",\\\\\\\"file-conventions/-client\\\\\\\",[],{\\\\\\\"_16\\\\\\\":174,\\\\\\\"_22\\\\\\\":176,\\\\\\\"_24\\\\\\\":177,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":178},{\\\\\\\"_18\\\\\\\":175,\\\\\\\"_169\\\\\\\":10},\\\\\\\".server modules\\\\\\\",\\\\\\\"file-conventions/-server.md\\\\\\\",\\\\\\\"file-conventions/-server\\\\\\\",[],{\\\\\\\"_16\\\\\\\":180,\\\\\\\"_22\\\\\\\":182,\\\\\\\"_24\\\\\\\":183,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":184},{\\\\\\\"_18\\\\\\\":181,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Asset Imports\\\\\\\",\\\\\\\"file-conventions/asset-imports.md\\\\\\\",\\\\\\\"file-conventions/asset-imports\\\\\\\",[],{\\\\\\\"_16\\\\\\\":186,\\\\\\\"_22\\\\\\\":188,\\\\\\\"_24\\\\\\\":189,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":190},{\\\\\\\"_18\\\\\\\":187,\\\\\\\"_169\\\\\\\":10},\\\\\\\"entry.client\\\\\\\",\\\\\\\"file-conventions/entry.client.md\\\\\\\",\\\\\\\"file-conventions/entry.client\\\\\\\",[],{\\\\\\\"_16\\\\\\\":192,\\\\\\\"_22\\\\\\\":194,\\\\\\\"_24\\\\\\\":195,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":196},{\\\\\\\"_18\\\\\\\":193,\\\\\\\"_169\\\\\\\":10},\\\\\\\"entry.server\\\\\\\",\\\\\\\"file-conventions/entry.server.md\\\\\\\",\\\\\\\"file-conventions/entry.server\\\\\\\",[],{\\\\\\\"_16\\\\\\\":198,\\\\\\\"_22\\\\\\\":199,\\\\\\\"_24\\\\\\\":200,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":201},{\\\\\\\"_18\\\\\\\":3,\\\\\\\"_169\\\\\\\":10},\\\\\\\"file-conventions/root.md\\\\\\\",\\\\\\\"file-conventions/root\\\\\\\",[],{\\\\\\\"_16\\\\\\\":203,\\\\\\\"_22\\\\\\\":205,\\\\\\\"_24\\\\\\\":206,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":207},{\\\\\\\"_18\\\\\\\":204},\\\\\\\"Route File Naming\\\\\\\",\\\\\\\"file-conventions/routes.md\\\\\\\",\\\\\\\"file-conventions/routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":209,\\\\\\\"_22\\\\\\\":211,\\\\\\\"_24\\\\\\\":212,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":213},{\\\\\\\"_18\\\\\\\":210},\\\\\\\"vite.config.ts\\\\\\\",\\\\\\\"file-conventions/vite-config.md\\\\\\\",\\\\\\\"file-conventions/vite-config\\\\\\\",[],{\\\\\\\"_16\\\\\\\":215,\\\\\\\"_22\\\\\\\":217,\\\\\\\"_24\\\\\\\":218,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":219},{\\\\\\\"_18\\\\\\\":216,\\\\\\\"_20\\\\\\\":55},\\\\\\\"Route Module\\\\\\\",\\\\\\\"route/index.md\\\\\\\",\\\\\\\"route\\\\\\\",[220,226,232,238,244,250,256,262,268,274,280,286],{\\\\\\\"_16\\\\\\\":221,\\\\\\\"_22\\\\\\\":223,\\\\\\\"_24\\\\\\\":224,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":225},{\\\\\\\"_18\\\\\\\":222},\\\\\\\"action\\\\\\\",\\\\\\\"route/action.md\\\\\\\",\\\\\\\"route/action\\\\\\\",[],{\\\\\\\"_16\\\\\\\":227,\\\\\\\"_22\\\\\\\":229,\\\\\\\"_24\\\\\\\":230,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":231},{\\\\\\\"_18\\\\\\\":228},\\\\\\\"clientAction\\\\\\\",\\\\\\\"route/client-action.md\\\\\\\",\\\\\\\"route/client-action\\\\\\\",[],{\\\\\\\"_16\\\\\\\":233,\\\\\\\"_22\\\\\\\":235,\\\\\\\"_24\\\\\\\":236,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":237},{\\\\\\\"_18\\\\\\\":234},\\\\\\\"clientLoader\\\\\\\",\\\\\\\"route/client-loader.md\\\\\\\",\\\\\\\"route/client-loader\\\\\\\",[],{\\\\\\\"_16\\\\\\\":239,\\\\\\\"_22\\\\\\\":241,\\\\\\\"_24\\\\\\\":242,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":243},{\\\\\\\"_18\\\\\\\":240},\\\\\\\"Component\\\\\\\",\\\\\\\"route/component.md\\\\\\\",\\\\\\\"route/component\\\\\\\",[],{\\\\\\\"_16\\\\\\\":245,\\\\\\\"_22\\\\\\\":247,\\\\\\\"_24\\\\\\\":248,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":249},{\\\\\\\"_18\\\\\\\":246},\\\\\\\"ErrorBoundary\\\\\\\",\\\\\\\"route/error-boundary.md\\\\\\\",\\\\\\\"route/error-boundary\\\\\\\",[],{\\\\\\\"_16\\\\\\\":251,\\\\\\\"_22\\\\\\\":253,\\\\\\\"_24\\\\\\\":254,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":255},{\\\\\\\"_18\\\\\\\":252},\\\\\\\"handle\\\\\\\",\\\\\\\"route/handle.md\\\\\\\",\\\\\\\"route/handle\\\\\\\",[],{\\\\\\\"_16\\\\\\\":257,\\\\\\\"_22\\\\\\\":259,\\\\\\\"_24\\\\\\\":260,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":261},{\\\\\\\"_18\\\\\\\":258},\\\\\\\"headers\\\\\\\",\\\\\\\"route/headers.md\\\\\\\",\\\\\\\"route/headers\\\\\\\",[],{\\\\\\\"_16\\\\\\\":263,\\\\\\\"_22\\\\\\\":265,\\\\\\\"_24\\\\\\\":266,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":267},{\\\\\\\"_18\\\\\\\":264},\\\\\\\"HydrateFallback\\\\\\\",\\\\\\\"route/hydrate-fallback.md\\\\\\\",\\\\\\\"route/hydrate-fallback\\\\\\\",[],{\\\\\\\"_16\\\\\\\":269,\\\\\\\"_22\\\\\\\":271,\\\\\\\"_24\\\\\\\":272,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":273},{\\\\\\\"_18\\\\\\\":270},\\\\\\\"links\\\\\\\",\\\\\\\"route/links.md\\\\\\\",\\\\\\\"route/links\\\\\\\",[],{\\\\\\\"_16\\\\\\\":275,\\\\\\\"_22\\\\\\\":277,\\\\\\\"_24\\\\\\\":278,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":279},{\\\\\\\"_18\\\\\\\":276},\\\\\\\"loader\\\\\\\",\\\\\\\"route/loader.md\\\\\\\",\\\\\\\"route/loader\\\\\\\",[],{\\\\\\\"_16\\\\\\\":281,\\\\\\\"_22\\\\\\\":283,\\\\\\\"_24\\\\\\\":284,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":285},{\\\\\\\"_18\\\\\\\":282},\\\\\\\"meta\\\\\\\",\\\\\\\"route/meta.md\\\\\\\",\\\\\\\"route/meta\\\\\\\",[],{\\\\\\\"_16\\\\\\\":287,\\\\\\\"_22\\\\\\\":289,\\\\\\\"_24\\\\\\\":290,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":291},{\\\\\\\"_18\\\\\\\":288},\\\\\\\"shouldRevalidate\\\\\\\",\\\\\\\"route/should-revalidate.md\\\\\\\",\\\\\\\"route/should-revalidate\\\\\\\",[],{\\\\\\\"_16\\\\\\\":293,\\\\\\\"_22\\\\\\\":295,\\\\\\\"_24\\\\\\\":296,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":297},{\\\\\\\"_18\\\\\\\":294,\\\\\\\"_20\\\\\\\":62},\\\\\\\"Components\\\\\\\",\\\\\\\"components/index.md\\\\\\\",\\\\\\\"components\\\\\\\",[298,304,310,316,322,328,334,340,346,352,358],{\\\\\\\"_16\\\\\\\":299,\\\\\\\"_22\\\\\\\":301,\\\\\\\"_24\\\\\\\":302,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":303},{\\\\\\\"_18\\\\\\\":300},\\\\\\\"Await\\\\\\\",\\\\\\\"components/await.md\\\\\\\",\\\\\\\"components/await\\\\\\\",[],{\\\\\\\"_16\\\\\\\":305,\\\\\\\"_22\\\\\\\":307,\\\\\\\"_24\\\\\\\":308,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":309},{\\\\\\\"_18\\\\\\\":306},\\\\\\\"Form\\\\\\\",\\\\\\\"components/form.md\\\\\\\",\\\\\\\"components/form\\\\\\\",[],{\\\\\\\"_16\\\\\\\":311,\\\\\\\"_22\\\\\\\":313,\\\\\\\"_24\\\\\\\":314,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":315},{\\\\\\\"_18\\\\\\\":312},\\\\\\\"Link\\\\\\\",\\\\\\\"components/link.md\\\\\\\",\\\\\\\"components/link\\\\\\\",[],{\\\\\\\"_16\\\\\\\":317,\\\\\\\"_22\\\\\\\":319,\\\\\\\"_24\\\\\\\":320,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":321},{\\\\\\\"_18\\\\\\\":318,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Links\\\\\\\",\\\\\\\"components/links.md\\\\\\\",\\\\\\\"components/links\\\\\\\",[],{\\\\\\\"_16\\\\\\\":323,\\\\\\\"_22\\\\\\\":325,\\\\\\\"_24\\\\\\\":326,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":327},{\\\\\\\"_18\\\\\\\":324,\\\\\\\"_169\\\\\\\":10},\\\\\\\"LiveReload\\\\\\\",\\\\\\\"components/live-reload.md\\\\\\\",\\\\\\\"components/live-reload\\\\\\\",[],{\\\\\\\"_16\\\\\\\":329,\\\\\\\"_22\\\\\\\":331,\\\\\\\"_24\\\\\\\":332,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":333},{\\\\\\\"_18\\\\\\\":330,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Meta\\\\\\\",\\\\\\\"components/meta.md\\\\\\\",\\\\\\\"components/meta\\\\\\\",[],{\\\\\\\"_16\\\\\\\":335,\\\\\\\"_22\\\\\\\":337,\\\\\\\"_24\\\\\\\":338,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":339},{\\\\\\\"_18\\\\\\\":336},\\\\\\\"NavLink\\\\\\\",\\\\\\\"components/nav-link.md\\\\\\\",\\\\\\\"components/nav-link\\\\\\\",[],{\\\\\\\"_16\\\\\\\":341,\\\\\\\"_22\\\\\\\":343,\\\\\\\"_24\\\\\\\":344,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":345},{\\\\\\\"_18\\\\\\\":342},\\\\\\\"Outlet\\\\\\\",\\\\\\\"components/outlet.md\\\\\\\",\\\\\\\"components/outlet\\\\\\\",[],{\\\\\\\"_16\\\\\\\":347,\\\\\\\"_22\\\\\\\":349,\\\\\\\"_24\\\\\\\":350,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":351},{\\\\\\\"_18\\\\\\\":348,\\\\\\\"_169\\\\\\\":10},\\\\\\\"PrefetchPageLinks\\\\\\\",\\\\\\\"components/prefetch-page-links.md\\\\\\\",\\\\\\\"components/prefetch-page-links\\\\\\\",[],{\\\\\\\"_16\\\\\\\":353,\\\\\\\"_22\\\\\\\":355,\\\\\\\"_24\\\\\\\":356,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":357},{\\\\\\\"_18\\\\\\\":354,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Scripts\\\\\\\",\\\\\\\"components/scripts.md\\\\\\\",\\\\\\\"components/scripts\\\\\\\",[],{\\\\\\\"_16\\\\\\\":359,\\\\\\\"_22\\\\\\\":361,\\\\\\\"_24\\\\\\\":362,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":363},{\\\\\\\"_18\\\\\\\":360},\\\\\\\"ScrollRestoration\\\\\\\",\\\\\\\"components/scroll-restoration.md\\\\\\\",\\\\\\\"components/scroll-restoration\\\\\\\",[],{\\\\\\\"_16\\\\\\\":365,\\\\\\\"_22\\\\\\\":367,\\\\\\\"_24\\\\\\\":368,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":369},{\\\\\\\"_18\\\\\\\":366,\\\\\\\"_20\\\\\\\":111},\\\\\\\"Hooks\\\\\\\",\\\\\\\"hooks/index.md\\\\\\\",\\\\\\\"hooks\\\\\\\",[370,376,383,389,395,401,407,413,419,425,431,437,443,449,455,461,467,473,479,485,491,497,503,509,515,521],{\\\\\\\"_16\\\\\\\":371,\\\\\\\"_22\\\\\\\":373,\\\\\\\"_24\\\\\\\":374,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":375},{\\\\\\\"_18\\\\\\\":372,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useActionData\\\\\\\",\\\\\\\"hooks/use-action-data.md\\\\\\\",\\\\\\\"hooks/use-action-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":377,\\\\\\\"_22\\\\\\\":380,\\\\\\\"_24\\\\\\\":381,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":382},{\\\\\\\"_18\\\\\\\":378,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useAsyncError\\\\\\\",\\\\\\\"new\\\\\\\",\\\\\\\"hooks/use-async-error.md\\\\\\\",\\\\\\\"hooks/use-async-error\\\\\\\",[],{\\\\\\\"_16\\\\\\\":384,\\\\\\\"_22\\\\\\\":386,\\\\\\\"_24\\\\\\\":387,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":388},{\\\\\\\"_18\\\\\\\":385,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useAsyncValue\\\\\\\",\\\\\\\"hooks/use-async-value.md\\\\\\\",\\\\\\\"hooks/use-async-value\\\\\\\",[],{\\\\\\\"_16\\\\\\\":390,\\\\\\\"_22\\\\\\\":392,\\\\\\\"_24\\\\\\\":393,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":394},{\\\\\\\"_18\\\\\\\":391,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useBeforeUnload\\\\\\\",\\\\\\\"hooks/use-before-unload.md\\\\\\\",\\\\\\\"hooks/use-before-unload\\\\\\\",[],{\\\\\\\"_16\\\\\\\":396,\\\\\\\"_22\\\\\\\":398,\\\\\\\"_24\\\\\\\":399,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":400},{\\\\\\\"_18\\\\\\\":397},\\\\\\\"useBlocker\\\\\\\",\\\\\\\"hooks/use-blocker.md\\\\\\\",\\\\\\\"hooks/use-blocker\\\\\\\",[],{\\\\\\\"_16\\\\\\\":402,\\\\\\\"_22\\\\\\\":404,\\\\\\\"_24\\\\\\\":405,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":406},{\\\\\\\"_18\\\\\\\":403},\\\\\\\"useFetcher\\\\\\\",\\\\\\\"hooks/use-fetcher.md\\\\\\\",\\\\\\\"hooks/use-fetcher\\\\\\\",[],{\\\\\\\"_16\\\\\\\":408,\\\\\\\"_22\\\\\\\":410,\\\\\\\"_24\\\\\\\":411,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":412},{\\\\\\\"_18\\\\\\\":409,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useFetchers\\\\\\\",\\\\\\\"hooks/use-fetchers.md\\\\\\\",\\\\\\\"hooks/use-fetchers\\\\\\\",[],{\\\\\\\"_16\\\\\\\":414,\\\\\\\"_22\\\\\\\":416,\\\\\\\"_24\\\\\\\":417,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":418},{\\\\\\\"_18\\\\\\\":415},\\\\\\\"useFormAction\\\\\\\",\\\\\\\"hooks/use-form-action.md\\\\\\\",\\\\\\\"hooks/use-form-action\\\\\\\",[],{\\\\\\\"_16\\\\\\\":420,\\\\\\\"_22\\\\\\\":422,\\\\\\\"_24\\\\\\\":423,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":424},{\\\\\\\"_18\\\\\\\":421},\\\\\\\"useHref\\\\\\\",\\\\\\\"hooks/use-href.md\\\\\\\",\\\\\\\"hooks/use-href\\\\\\\",[],{\\\\\\\"_16\\\\\\\":426,\\\\\\\"_22\\\\\\\":428,\\\\\\\"_24\\\\\\\":429,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":430},{\\\\\\\"_18\\\\\\\":427},\\\\\\\"useLoaderData\\\\\\\",\\\\\\\"hooks/use-loader-data.md\\\\\\\",\\\\\\\"hooks/use-loader-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":432,\\\\\\\"_22\\\\\\\":434,\\\\\\\"_24\\\\\\\":435,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":436},{\\\\\\\"_18\\\\\\\":433},\\\\\\\"useLocation\\\\\\\",\\\\\\\"hooks/use-location.md\\\\\\\",\\\\\\\"hooks/use-location\\\\\\\",[],{\\\\\\\"_16\\\\\\\":438,\\\\\\\"_22\\\\\\\":440,\\\\\\\"_24\\\\\\\":441,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":442},{\\\\\\\"_18\\\\\\\":439,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useMatches\\\\\\\",\\\\\\\"hooks/use-matches.md\\\\\\\",\\\\\\\"hooks/use-matches\\\\\\\",[],{\\\\\\\"_16\\\\\\\":444,\\\\\\\"_22\\\\\\\":446,\\\\\\\"_24\\\\\\\":447,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":448},{\\\\\\\"_18\\\\\\\":445},\\\\\\\"useNavigate\\\\\\\",\\\\\\\"hooks/use-navigate.md\\\\\\\",\\\\\\\"hooks/use-navigate\\\\\\\",[],{\\\\\\\"_16\\\\\\\":450,\\\\\\\"_22\\\\\\\":452,\\\\\\\"_24\\\\\\\":453,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":454},{\\\\\\\"_18\\\\\\\":451},\\\\\\\"useNavigation\\\\\\\",\\\\\\\"hooks/use-navigation.md\\\\\\\",\\\\\\\"hooks/use-navigation\\\\\\\",[],{\\\\\\\"_16\\\\\\\":456,\\\\\\\"_22\\\\\\\":458,\\\\\\\"_24\\\\\\\":459,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":460},{\\\\\\\"_18\\\\\\\":457},\\\\\\\"useNavigationType\\\\\\\",\\\\\\\"hooks/use-navigation-type.md\\\\\\\",\\\\\\\"hooks/use-navigation-type\\\\\\\",[],{\\\\\\\"_16\\\\\\\":462,\\\\\\\"_22\\\\\\\":464,\\\\\\\"_24\\\\\\\":465,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":466},{\\\\\\\"_18\\\\\\\":463},\\\\\\\"useOutlet\\\\\\\",\\\\\\\"hooks/use-outlet.md\\\\\\\",\\\\\\\"hooks/use-outlet\\\\\\\",[],{\\\\\\\"_16\\\\\\\":468,\\\\\\\"_22\\\\\\\":470,\\\\\\\"_24\\\\\\\":471,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":472},{\\\\\\\"_18\\\\\\\":469},\\\\\\\"useOutletContext\\\\\\\",\\\\\\\"hooks/use-outlet-context.md\\\\\\\",\\\\\\\"hooks/use-outlet-context\\\\\\\",[],{\\\\\\\"_16\\\\\\\":474,\\\\\\\"_22\\\\\\\":476,\\\\\\\"_24\\\\\\\":477,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":478},{\\\\\\\"_18\\\\\\\":475},\\\\\\\"useParams\\\\\\\",\\\\\\\"hooks/use-params.md\\\\\\\",\\\\\\\"hooks/use-params\\\\\\\",[],{\\\\\\\"_16\\\\\\\":480,\\\\\\\"_22\\\\\\\":482,\\\\\\\"_24\\\\\\\":483,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":484},{\\\\\\\"_18\\\\\\\":481},\\\\\\\"unstable_usePrompt\\\\\\\",\\\\\\\"hooks/use-prompt.md\\\\\\\",\\\\\\\"hooks/use-prompt\\\\\\\",[],{\\\\\\\"_16\\\\\\\":486,\\\\\\\"_22\\\\\\\":488,\\\\\\\"_24\\\\\\\":489,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":490},{\\\\\\\"_18\\\\\\\":487},\\\\\\\"useResolvedPath\\\\\\\",\\\\\\\"hooks/use-resolved-path.md\\\\\\\",\\\\\\\"hooks/use-resolved-path\\\\\\\",[],{\\\\\\\"_16\\\\\\\":492,\\\\\\\"_22\\\\\\\":494,\\\\\\\"_24\\\\\\\":495,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":496},{\\\\\\\"_18\\\\\\\":493,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useRevalidator\\\\\\\",\\\\\\\"hooks/use-revalidator.md\\\\\\\",\\\\\\\"hooks/use-revalidator\\\\\\\",[],{\\\\\\\"_16\\\\\\\":498,\\\\\\\"_22\\\\\\\":500,\\\\\\\"_24\\\\\\\":501,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":502},{\\\\\\\"_18\\\\\\\":499,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useRouteError\\\\\\\",\\\\\\\"hooks/use-route-error.md\\\\\\\",\\\\\\\"hooks/use-route-error\\\\\\\",[],{\\\\\\\"_16\\\\\\\":504,\\\\\\\"_22\\\\\\\":506,\\\\\\\"_24\\\\\\\":507,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":508},{\\\\\\\"_18\\\\\\\":505,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useRouteLoaderData\\\\\\\",\\\\\\\"hooks/use-route-loader-data.md\\\\\\\",\\\\\\\"hooks/use-route-loader-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":510,\\\\\\\"_22\\\\\\\":512,\\\\\\\"_24\\\\\\\":513,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":514},{\\\\\\\"_18\\\\\\\":511},\\\\\\\"useSearchParams\\\\\\\",\\\\\\\"hooks/use-search-params.md\\\\\\\",\\\\\\\"hooks/use-search-params\\\\\\\",[],{\\\\\\\"_16\\\\\\\":516,\\\\\\\"_22\\\\\\\":518,\\\\\\\"_24\\\\\\\":519,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":520},{\\\\\\\"_18\\\\\\\":517},\\\\\\\"useSubmit\\\\\\\",\\\\\\\"hooks/use-submit.md\\\\\\\",\\\\\\\"hooks/use-submit\\\\\\\",[],{\\\\\\\"_16\\\\\\\":522,\\\\\\\"_22\\\\\\\":524,\\\\\\\"_24\\\\\\\":525,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":526},{\\\\\\\"_18\\\\\\\":523,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useViewTransitionState\\\\\\\",\\\\\\\"hooks/use-view-transition-state.md\\\\\\\",\\\\\\\"hooks/use-view-transition-state\\\\\\\",[],{\\\\\\\"_16\\\\\\\":528,\\\\\\\"_22\\\\\\\":530,\\\\\\\"_24\\\\\\\":531,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":532},{\\\\\\\"_18\\\\\\\":529,\\\\\\\"_20\\\\\\\":111},\\\\\\\"Utilities\\\\\\\",\\\\\\\"utils/index.md\\\\\\\",\\\\\\\"utils\\\\\\\",[533,539,545,551,557,563,569,575,581,587,593,599,605],{\\\\\\\"_16\\\\\\\":534,\\\\\\\"_22\\\\\\\":536,\\\\\\\"_24\\\\\\\":537,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":538},{\\\\\\\"_18\\\\\\\":535},\\\\\\\"Cookies\\\\\\\",\\\\\\\"utils/cookies.md\\\\\\\",\\\\\\\"utils/cookies\\\\\\\",[],{\\\\\\\"_16\\\\\\\":540,\\\\\\\"_22\\\\\\\":542,\\\\\\\"_24\\\\\\\":543,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":544},{\\\\\\\"_18\\\\\\\":541},\\\\\\\"createRemixStub\\\\\\\",\\\\\\\"utils/create-remix-stub.md\\\\\\\",\\\\\\\"utils/create-remix-stub\\\\\\\",[],{\\\\\\\"_16\\\\\\\":546,\\\\\\\"_22\\\\\\\":548,\\\\\\\"_24\\\\\\\":549,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":550},{\\\\\\\"_18\\\\\\\":547,\\\\\\\"_169\\\\\\\":10},\\\\\\\"data\\\\\\\",\\\\\\\"utils/data.md\\\\\\\",\\\\\\\"utils/data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":552,\\\\\\\"_22\\\\\\\":554,\\\\\\\"_24\\\\\\\":555,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":556},{\\\\\\\"_18\\\\\\\":553,\\\\\\\"_169\\\\\\\":10},\\\\\\\"defer\\\\\\\",\\\\\\\"utils/defer.md\\\\\\\",\\\\\\\"utils/defer\\\\\\\",[],{\\\\\\\"_16\\\\\\\":558,\\\\\\\"_22\\\\\\\":560,\\\\\\\"_24\\\\\\\":561,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":562},{\\\\\\\"_18\\\\\\\":559,\\\\\\\"_169\\\\\\\":10},\\\\\\\"isRouteErrorResponse\\\\\\\",\\\\\\\"utils/is-route-error-response.md\\\\\\\",\\\\\\\"utils/is-route-error-response\\\\\\\",[],{\\\\\\\"_16\\\\\\\":564,\\\\\\\"_22\\\\\\\":566,\\\\\\\"_24\\\\\\\":567,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":568},{\\\\\\\"_18\\\\\\\":565,\\\\\\\"_169\\\\\\\":10},\\\\\\\"json\\\\\\\",\\\\\\\"utils/json.md\\\\\\\",\\\\\\\"utils/json\\\\\\\",[],{\\\\\\\"_16\\\\\\\":570,\\\\\\\"_22\\\\\\\":572,\\\\\\\"_24\\\\\\\":573,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":574},{\\\\\\\"_18\\\\\\\":571},\\\\\\\"unstable_parseMultipartFormData\\\\\\\",\\\\\\\"utils/parse-multipart-form-data.md\\\\\\\",\\\\\\\"utils/parse-multipart-form-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":576,\\\\\\\"_22\\\\\\\":578,\\\\\\\"_24\\\\\\\":579,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":580},{\\\\\\\"_18\\\\\\\":577,\\\\\\\"_169\\\\\\\":10},\\\\\\\"redirect\\\\\\\",\\\\\\\"utils/redirect.md\\\\\\\",\\\\\\\"utils/redirect\\\\\\\",[],{\\\\\\\"_16\\\\\\\":582,\\\\\\\"_22\\\\\\\":584,\\\\\\\"_24\\\\\\\":585,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":586},{\\\\\\\"_18\\\\\\\":583,\\\\\\\"_169\\\\\\\":10},\\\\\\\"redirectDocument\\\\\\\",\\\\\\\"utils/redirectDocument.md\\\\\\\",\\\\\\\"utils/redirectDocument\\\\\\\",[],{\\\\\\\"_16\\\\\\\":588,\\\\\\\"_22\\\\\\\":590,\\\\\\\"_24\\\\\\\":591,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":592},{\\\\\\\"_18\\\\\\\":589,\\\\\\\"_169\\\\\\\":10},\\\\\\\"replace\\\\\\\",\\\\\\\"utils/replace.md\\\\\\\",\\\\\\\"utils/replace\\\\\\\",[],{\\\\\\\"_16\\\\\\\":594,\\\\\\\"_22\\\\\\\":596,\\\\\\\"_24\\\\\\\":597,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":598},{\\\\\\\"_18\\\\\\\":595},\\\\\\\"Sessions\\\\\\\",\\\\\\\"utils/sessions.md\\\\\\\",\\\\\\\"utils/sessions\\\\\\\",[],{\\\\\\\"_16\\\\\\\":600,\\\\\\\"_22\\\\\\\":602,\\\\\\\"_24\\\\\\\":603,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":604},{\\\\\\\"_18\\\\\\\":601,\\\\\\\"_169\\\\\\\":10},\\\\\\\"unstable_createFileUploadHandler\\\\\\\",\\\\\\\"utils/unstable-create-file-upload-handler.md\\\\\\\",\\\\\\\"utils/unstable-create-file-upload-handler\\\\\\\",[],{\\\\\\\"_16\\\\\\\":606,\\\\\\\"_22\\\\\\\":608,\\\\\\\"_24\\\\\\\":609,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":610},{\\\\\\\"_18\\\\\\\":607,\\\\\\\"_169\\\\\\\":10},\\\\\\\"unstable_createMemoryUploadHandler\\\\\\\",\\\\\\\"utils/unstable-create-memory-upload-handler.md\\\\\\\",\\\\\\\"utils/unstable-create-memory-upload-handler\\\\\\\",[],{\\\\\\\"_16\\\\\\\":612,\\\\\\\"_22\\\\\\\":614,\\\\\\\"_24\\\\\\\":615,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":616},{\\\\\\\"_18\\\\\\\":613,\\\\\\\"_20\\\\\\\":118},\\\\\\\"Styling\\\\\\\",\\\\\\\"styling/index.md\\\\\\\",\\\\\\\"styling\\\\\\\",[617,623,629,635,641,647,653,659],{\\\\\\\"_16\\\\\\\":618,\\\\\\\"_22\\\\\\\":620,\\\\\\\"_24\\\\\\\":621,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":622},{\\\\\\\"_18\\\\\\\":619},\\\\\\\"CSS Bundling\\\\\\\",\\\\\\\"styling/bundling.md\\\\\\\",\\\\\\\"styling/bundling\\\\\\\",[],{\\\\\\\"_16\\\\\\\":624,\\\\\\\"_22\\\\\\\":626,\\\\\\\"_24\\\\\\\":627,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":628},{\\\\\\\"_18\\\\\\\":625},\\\\\\\"Regular CSS\\\\\\\",\\\\\\\"styling/css.md\\\\\\\",\\\\\\\"styling/css\\\\\\\",[],{\\\\\\\"_16\\\\\\\":630,\\\\\\\"_22\\\\\\\":632,\\\\\\\"_24\\\\\\\":633,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":634},{\\\\\\\"_18\\\\\\\":631},\\\\\\\"CSS Imports\\\\\\\",\\\\\\\"styling/css-imports.md\\\\\\\",\\\\\\\"styling/css-imports\\\\\\\",[],{\\\\\\\"_16\\\\\\\":636,\\\\\\\"_22\\\\\\\":638,\\\\\\\"_24\\\\\\\":639,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":640},{\\\\\\\"_18\\\\\\\":637},\\\\\\\"CSS in JS\\\\\\\",\\\\\\\"styling/css-in-js.md\\\\\\\",\\\\\\\"styling/css-in-js\\\\\\\",[],{\\\\\\\"_16\\\\\\\":642,\\\\\\\"_22\\\\\\\":644,\\\\\\\"_24\\\\\\\":645,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":646},{\\\\\\\"_18\\\\\\\":643},\\\\\\\"CSS Modules\\\\\\\",\\\\\\\"styling/css-modules.md\\\\\\\",\\\\\\\"styling/css-modules\\\\\\\",[],{\\\\\\\"_16\\\\\\\":648,\\\\\\\"_22\\\\\\\":650,\\\\\\\"_24\\\\\\\":651,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":652},{\\\\\\\"_18\\\\\\\":649},\\\\\\\"PostCSS\\\\\\\",\\\\\\\"styling/postcss.md\\\\\\\",\\\\\\\"styling/postcss\\\\\\\",[],{\\\\\\\"_16\\\\\\\":654,\\\\\\\"_22\\\\\\\":656,\\\\\\\"_24\\\\\\\":657,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":658},{\\\\\\\"_18\\\\\\\":655},\\\\\\\"Tailwind\\\\\\\",\\\\\\\"styling/tailwind.md\\\\\\\",\\\\\\\"styling/tailwind\\\\\\\",[],{\\\\\\\"_16\\\\\\\":660,\\\\\\\"_22\\\\\\\":662,\\\\\\\"_24\\\\\\\":663,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":664},{\\\\\\\"_18\\\\\\\":661},\\\\\\\"Vanilla Extract\\\\\\\",\\\\\\\"styling/vanilla-extract.md\\\\\\\",\\\\\\\"styling/vanilla-extract\\\\\\\",[],{\\\\\\\"_16\\\\\\\":666,\\\\\\\"_22\\\\\\\":668,\\\\\\\"_24\\\\\\\":669,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":670},{\\\\\\\"_18\\\\\\\":667,\\\\\\\"_20\\\\\\\":132},\\\\\\\"Other API\\\\\\\",\\\\\\\"other-api/index.md\\\\\\\",\\\\\\\"other-api\\\\\\\",[671,677,683,689,695,701],{\\\\\\\"_16\\\\\\\":672,\\\\\\\"_22\\\\\\\":674,\\\\\\\"_24\\\\\\\":675,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":676},{\\\\\\\"_18\\\\\\\":673,\\\\\\\"_20\\\\\\\":39,\\\\\\\"_379\\\\\\\":34},\\\\\\\"@remix-run/dev CLI\\\\\\\",\\\\\\\"other-api/dev.md\\\\\\\",\\\\\\\"other-api/dev\\\\\\\",[],{\\\\\\\"_16\\\\\\\":678,\\\\\\\"_22\\\\\\\":680,\\\\\\\"_24\\\\\\\":681,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":682},{\\\\\\\"_18\\\\\\\":679,\\\\\\\"_20\\\\\\\":46},\\\\\\\"@remix-run/{adapter}\\\\\\\",\\\\\\\"other-api/adapter.md\\\\\\\",\\\\\\\"other-api/adapter\\\\\\\",[],{\\\\\\\"_16\\\\\\\":684,\\\\\\\"_22\\\\\\\":686,\\\\\\\"_24\\\\\\\":687,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":688},{\\\\\\\"_18\\\\\\\":685,\\\\\\\"_20\\\\\\\":46},\\\\\\\"@remix-run/serve\\\\\\\",\\\\\\\"other-api/serve.md\\\\\\\",\\\\\\\"other-api/serve\\\\\\\",[],{\\\\\\\"_16\\\\\\\":690,\\\\\\\"_22\\\\\\\":692,\\\\\\\"_24\\\\\\\":693,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":694},{\\\\\\\"_18\\\\\\\":691},\\\\\\\"create-remix (CLI)\\\\\\\",\\\\\\\"other-api/create-remix.md\\\\\\\",\\\\\\\"other-api/create-remix\\\\\\\",[],{\\\\\\\"_16\\\\\\\":696,\\\\\\\"_22\\\\\\\":698,\\\\\\\"_24\\\\\\\":699,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":700},{\\\\\\\"_18\\\\\\\":697},\\\\\\\"@remix-run/node\\\\\\\",\\\\\\\"other-api/node.md\\\\\\\",\\\\\\\"other-api/node\\\\\\\",[],{\\\\\\\"_16\\\\\\\":702,\\\\\\\"_22\\\\\\\":704,\\\\\\\"_24\\\\\\\":705,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":706},{\\\\\\\"_18\\\\\\\":703},\\\\\\\"@remix-run/testing\\\\\\\",\\\\\\\"other-api/testing.md\\\\\\\",\\\\\\\"other-api/testing\\\\\\\",[],{\\\\\\\"_16\\\\\\\":708,\\\\\\\"_22\\\\\\\":711,\\\\\\\"_24\\\\\\\":712,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":713},{\\\\\\\"_18\\\\\\\":709,\\\\\\\"_20\\\\\\\":710},\\\\\\\"Guides\\\\\\\",10,\\\\\\\"guides/index.md\\\\\\\",\\\\\\\"guides\\\\\\\",[714,720,726,732,738,744,750,756,762,769,775,782,788,794,800,806,812,818,825,831,837,843,849,855,861,867,874,881,887,893,899,905,911,917,923,930,937,943],{\\\\\\\"_16\\\\\\\":715,\\\\\\\"_22\\\\\\\":717,\\\\\\\"_24\\\\\\\":718,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":719},{\\\\\\\"_18\\\\\\\":716},\\\\\\\"Accessibility\\\\\\\",\\\\\\\"guides/accessibility.md\\\\\\\",\\\\\\\"guides/accessibility\\\\\\\",[],{\\\\\\\"_16\\\\\\\":721,\\\\\\\"_22\\\\\\\":723,\\\\\\\"_24\\\\\\\":724,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":725},{\\\\\\\"_18\\\\\\\":722},\\\\\\\"Development Strategy\\\\\\\",\\\\\\\"guides/api-development-strategy.md\\\\\\\",\\\\\\\"guides/api-development-strategy\\\\\\\",[],{\\\\\\\"_16\\\\\\\":727,\\\\\\\"_22\\\\\\\":729,\\\\\\\"_24\\\\\\\":730,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":731},{\\\\\\\"_18\\\\\\\":728},\\\\\\\"API Routes\\\\\\\",\\\\\\\"guides/api-routes.md\\\\\\\",\\\\\\\"guides/api-routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":733,\\\\\\\"_22\\\\\\\":735,\\\\\\\"_24\\\\\\\":736,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":737},{\\\\\\\"_18\\\\\\\":734,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Backend For Frontend\\\\\\\",\\\\\\\"guides/bff.md\\\\\\\",\\\\\\\"guides/bff\\\\\\\",[],{\\\\\\\"_16\\\\\\\":739,\\\\\\\"_22\\\\\\\":741,\\\\\\\"_24\\\\\\\":742,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":743},{\\\\\\\"_18\\\\\\\":740},\\\\\\\"Breadcrumbs Guide\\\\\\\",\\\\\\\"guides/breadcrumbs.md\\\\\\\",\\\\\\\"guides/breadcrumbs\\\\\\\",[],{\\\\\\\"_16\\\\\\\":745,\\\\\\\"_22\\\\\\\":747,\\\\\\\"_24\\\\\\\":748,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":749},{\\\\\\\"_18\\\\\\\":746},\\\\\\\"Browser Support\\\\\\\",\\\\\\\"guides/browser-support.md\\\\\\\",\\\\\\\"guides/browser-support\\\\\\\",[],{\\\\\\\"_16\\\\\\\":751,\\\\\\\"_22\\\\\\\":753,\\\\\\\"_24\\\\\\\":754,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":755},{\\\\\\\"_18\\\\\\\":752},\\\\\\\"Client Data\\\\\\\",\\\\\\\"guides/client-data.md\\\\\\\",\\\\\\\"guides/client-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":757,\\\\\\\"_22\\\\\\\":759,\\\\\\\"_24\\\\\\\":760,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":761},{\\\\\\\"_18\\\\\\\":758},\\\\\\\"Module Constraints\\\\\\\",\\\\\\\"guides/constraints.md\\\\\\\",\\\\\\\"guides/constraints\\\\\\\",[],{\\\\\\\"_16\\\\\\\":763,\\\\\\\"_22\\\\\\\":766,\\\\\\\"_24\\\\\\\":767,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":768},{\\\\\\\"_18\\\\\\\":764,\\\\\\\"_53\\\\\\\":765},\\\\\\\"Contributing\\\\\\\",\\\\\\\"Thank you for contributing to Remix! Here's everything you need to know before you open a pull request.\\\\\\\",\\\\\\\"guides/contributing.md\\\\\\\",\\\\\\\"guides/contributing\\\\\\\",[],{\\\\\\\"_16\\\\\\\":770,\\\\\\\"_22\\\\\\\":772,\\\\\\\"_24\\\\\\\":773,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":774},{\\\\\\\"_18\\\\\\\":771},\\\\\\\"CSS Files\\\\\\\",\\\\\\\"guides/css-files.md\\\\\\\",\\\\\\\"guides/css-files\\\\\\\",[],{\\\\\\\"_16\\\\\\\":776,\\\\\\\"_22\\\\\\\":779,\\\\\\\"_24\\\\\\\":780,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":781},{\\\\\\\"_18\\\\\\\":777,\\\\\\\"_53\\\\\\\":778},\\\\\\\"Data Loading\\\\\\\",\\\\\\\"One of the primary features of Remix is simplifying interactions with the server to get data into components. This document will help you get the most out of data loading in Remix.\\\\\\\",\\\\\\\"guides/data-loading.md\\\\\\\",\\\\\\\"guides/data-loading\\\\\\\",[],{\\\\\\\"_16\\\\\\\":783,\\\\\\\"_22\\\\\\\":785,\\\\\\\"_24\\\\\\\":786,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":787},{\\\\\\\"_18\\\\\\\":784},\\\\\\\"Data Writes\\\\\\\",\\\\\\\"guides/data-writes.md\\\\\\\",\\\\\\\"guides/data-writes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":789,\\\\\\\"_22\\\\\\\":791,\\\\\\\"_24\\\\\\\":792,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":793},{\\\\\\\"_18\\\\\\\":790},\\\\\\\"Dependency optimization\\\\\\\",\\\\\\\"guides/dependency-optimization.md\\\\\\\",\\\\\\\"guides/dependency-optimization\\\\\\\",[],{\\\\\\\"_16\\\\\\\":795,\\\\\\\"_22\\\\\\\":797,\\\\\\\"_24\\\\\\\":798,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":799},{\\\\\\\"_18\\\\\\\":796,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Deployment\\\\\\\",\\\\\\\"guides/deployment.md\\\\\\\",\\\\\\\"guides/deployment\\\\\\\",[],{\\\\\\\"_16\\\\\\\":801,\\\\\\\"_22\\\\\\\":803,\\\\\\\"_24\\\\\\\":804,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":805},{\\\\\\\"_18\\\\\\\":802,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Disabling JavaScript\\\\\\\",\\\\\\\"guides/disabling-javascript.md\\\\\\\",\\\\\\\"guides/disabling-javascript\\\\\\\",[],{\\\\\\\"_16\\\\\\\":807,\\\\\\\"_22\\\\\\\":809,\\\\\\\"_24\\\\\\\":810,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":811},{\\\\\\\"_18\\\\\\\":808},\\\\\\\"Environment Variables\\\\\\\",\\\\\\\"guides/envvars.md\\\\\\\",\\\\\\\"guides/envvars\\\\\\\",[],{\\\\\\\"_16\\\\\\\":813,\\\\\\\"_22\\\\\\\":815,\\\\\\\"_24\\\\\\\":816,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":817},{\\\\\\\"_18\\\\\\\":814},\\\\\\\"Error Handling\\\\\\\",\\\\\\\"guides/errors.md\\\\\\\",\\\\\\\"guides/errors\\\\\\\",[],{\\\\\\\"_16\\\\\\\":819,\\\\\\\"_22\\\\\\\":822,\\\\\\\"_24\\\\\\\":823,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":824},{\\\\\\\"_18\\\\\\\":820,\\\\\\\"_53\\\\\\\":821},\\\\\\\"FAQs\\\\\\\",\\\\\\\"Frequently Asked Questions about Remix\\\\\\\",\\\\\\\"guides/faq.md\\\\\\\",\\\\\\\"guides/faq\\\\\\\",[],{\\\\\\\"_16\\\\\\\":826,\\\\\\\"_22\\\\\\\":828,\\\\\\\"_24\\\\\\\":829,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":830},{\\\\\\\"_18\\\\\\\":827},\\\\\\\"File Uploads\\\\\\\",\\\\\\\"guides/file-uploads.md\\\\\\\",\\\\\\\"guides/file-uploads\\\\\\\",[],{\\\\\\\"_16\\\\\\\":832,\\\\\\\"_22\\\\\\\":834,\\\\\\\"_24\\\\\\\":835,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":836},{\\\\\\\"_18\\\\\\\":833},\\\\\\\"Form Validation\\\\\\\",\\\\\\\"guides/form-validation.md\\\\\\\",\\\\\\\"guides/form-validation\\\\\\\",[],{\\\\\\\"_16\\\\\\\":838,\\\\\\\"_22\\\\\\\":840,\\\\\\\"_24\\\\\\\":841,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":842},{\\\\\\\"_18\\\\\\\":839},\\\\\\\"Gotchas\\\\\\\",\\\\\\\"guides/gotchas.md\\\\\\\",\\\\\\\"guides/gotchas\\\\\\\",[],{\\\\\\\"_16\\\\\\\":844,\\\\\\\"_22\\\\\\\":846,\\\\\\\"_24\\\\\\\":847,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":848},{\\\\\\\"_18\\\\\\\":845,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Index Query Param\\\\\\\",\\\\\\\"guides/index-query-param.md\\\\\\\",\\\\\\\"guides/index-query-param\\\\\\\",[],{\\\\\\\"_16\\\\\\\":850,\\\\\\\"_22\\\\\\\":852,\\\\\\\"_24\\\\\\\":853,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":854},{\\\\\\\"_18\\\\\\\":851},\\\\\\\"Lazy Route Discovery\\\\\\\",\\\\\\\"guides/lazy-route-discovery.md\\\\\\\",\\\\\\\"guides/lazy-route-discovery\\\\\\\",[],{\\\\\\\"_16\\\\\\\":856,\\\\\\\"_22\\\\\\\":858,\\\\\\\"_24\\\\\\\":859,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":860},{\\\\\\\"_18\\\\\\\":857},\\\\\\\"Local TLS\\\\\\\",\\\\\\\"guides/local-tls.md\\\\\\\",\\\\\\\"guides/local-tls\\\\\\\",[],{\\\\\\\"_16\\\\\\\":862,\\\\\\\"_22\\\\\\\":864,\\\\\\\"_24\\\\\\\":865,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":866},{\\\\\\\"_18\\\\\\\":863},\\\\\\\"Manual Dev Server\\\\\\\",\\\\\\\"guides/manual-mode.md\\\\\\\",\\\\\\\"guides/manual-mode\\\\\\\",[],{\\\\\\\"_16\\\\\\\":868,\\\\\\\"_22\\\\\\\":871,\\\\\\\"_24\\\\\\\":872,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":873},{\\\\\\\"_18\\\\\\\":869,\\\\\\\"_53\\\\\\\":870},\\\\\\\"MDX\\\\\\\",\\\\\\\"Remix makes integrating MDX into your project a breeze with built in routes and \\\\\\\\\\\\\\\"import\\\\\\\\\\\\\\\" support.\\\\\\\",\\\\\\\"guides/mdx.md\\\\\\\",\\\\\\\"guides/mdx\\\\\\\",[],{\\\\\\\"_16\\\\\\\":875,\\\\\\\"_22\\\\\\\":878,\\\\\\\"_24\\\\\\\":879,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":880},{\\\\\\\"_18\\\\\\\":876,\\\\\\\"_53\\\\\\\":877},\\\\\\\"Migrating from React Router\\\\\\\",\\\\\\\"Migrating your React Router app to Remix can be done all at once or in stages. This guide will walk you through an iterative approach to get your app running quickly.\\\\\\\",\\\\\\\"guides/migrating-react-router-app.md\\\\\\\",\\\\\\\"guides/migrating-react-router-app\\\\\\\",[],{\\\\\\\"_16\\\\\\\":882,\\\\\\\"_22\\\\\\\":884,\\\\\\\"_24\\\\\\\":885,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":886},{\\\\\\\"_18\\\\\\\":883},\\\\\\\"Not Found Handling\\\\\\\",\\\\\\\"guides/not-found.md\\\\\\\",\\\\\\\"guides/not-found\\\\\\\",[],{\\\\\\\"_16\\\\\\\":888,\\\\\\\"_22\\\\\\\":890,\\\\\\\"_24\\\\\\\":891,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":892},{\\\\\\\"_18\\\\\\\":889},\\\\\\\"Performance\\\\\\\",\\\\\\\"guides/performance.md\\\\\\\",\\\\\\\"guides/performance\\\\\\\",[],{\\\\\\\"_16\\\\\\\":894,\\\\\\\"_22\\\\\\\":896,\\\\\\\"_24\\\\\\\":897,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":898},{\\\\\\\"_18\\\\\\\":895},\\\\\\\"Presets\\\\\\\",\\\\\\\"guides/presets.md\\\\\\\",\\\\\\\"guides/presets\\\\\\\",[],{\\\\\\\"_16\\\\\\\":900,\\\\\\\"_22\\\\\\\":902,\\\\\\\"_24\\\\\\\":903,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":904},{\\\\\\\"_18\\\\\\\":901},\\\\\\\"Resource Routes\\\\\\\",\\\\\\\"guides/resource-routes.md\\\\\\\",\\\\\\\"guides/resource-routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":906,\\\\\\\"_22\\\\\\\":908,\\\\\\\"_24\\\\\\\":909,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":910},{\\\\\\\"_18\\\\\\\":907},\\\\\\\"Server Bundles\\\\\\\",\\\\\\\"guides/server-bundles.md\\\\\\\",\\\\\\\"guides/server-bundles\\\\\\\",[],{\\\\\\\"_16\\\\\\\":912,\\\\\\\"_22\\\\\\\":914,\\\\\\\"_24\\\\\\\":915,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":916},{\\\\\\\"_18\\\\\\\":913},\\\\\\\"Single Fetch\\\\\\\",\\\\\\\"guides/single-fetch.md\\\\\\\",\\\\\\\"guides/single-fetch\\\\\\\",[],{\\\\\\\"_16\\\\\\\":918,\\\\\\\"_22\\\\\\\":920,\\\\\\\"_24\\\\\\\":921,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":922},{\\\\\\\"_18\\\\\\\":919},\\\\\\\"SPA Mode\\\\\\\",\\\\\\\"guides/spa-mode.md\\\\\\\",\\\\\\\"guides/spa-mode\\\\\\\",[],{\\\\\\\"_16\\\\\\\":924,\\\\\\\"_22\\\\\\\":927,\\\\\\\"_24\\\\\\\":928,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":929},{\\\\\\\"_18\\\\\\\":925,\\\\\\\"_53\\\\\\\":926},\\\\\\\"Streaming\\\\\\\",\\\\\\\"When, why, and how to stream with React 18 and Remix's deferred API.\\\\\\\",\\\\\\\"guides/streaming.md\\\\\\\",\\\\\\\"guides/streaming\\\\\\\",[],{\\\\\\\"_16\\\\\\\":931,\\\\\\\"_22\\\\\\\":934,\\\\\\\"_24\\\\\\\":935,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":936},{\\\\\\\"_18\\\\\\\":932,\\\\\\\"_53\\\\\\\":933},\\\\\\\"Templates\\\\\\\",\\\\\\\"The quickest way to get rocking and rolling with Remix\\\\\\\",\\\\\\\"guides/templates.md\\\\\\\",\\\\\\\"guides/templates\\\\\\\",[],{\\\\\\\"_16\\\\\\\":938,\\\\\\\"_22\\\\\\\":940,\\\\\\\"_24\\\\\\\":941,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":942},{\\\\\\\"_18\\\\\\\":939,\\\\\\\"_169\\\\\\\":10},\\\\\\\"TypeScript\\\\\\\",\\\\\\\"guides/typescript.md\\\\\\\",\\\\\\\"guides/typescript\\\\\\\",[],{\\\\\\\"_16\\\\\\\":944,\\\\\\\"_22\\\\\\\":946,\\\\\\\"_24\\\\\\\":947,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":948},{\\\\\\\"_18\\\\\\\":945},\\\\\\\"Vite\\\\\\\",\\\\\\\"guides/vite.md\\\\\\\",\\\\\\\"guides/vite\\\\\\\",[],\\\\\\\"routes/docs.$\\\\\\\",{\\\\\\\"_951\\\\\\\":952},\\\\\\\"doc\\\\\\\",{\\\\\\\"_16\\\\\\\":953,\\\\\\\"_22\\\\\\\":954,\\\\\\\"_955\\\\\\\":956,\\\\\\\"_24\\\\\\\":957,\\\\\\\"_958\\\\\\\":959,\\\\\\\"_27\\\\\\\":960},{\\\\\\\"_18\\\\\\\":168,\\\\\\\"_169\\\\\\\":10},\\\\\\\"docs/file-conventions/-client.md\\\\\\\",\\\\\\\"html\\\\\\\",\\\\\\\"\\\\u003ch1 id=\\\\\\\\\\\\\\\"client-modules\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#client-modules\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003e\\\\u003ccode\\\\u003e.client\\\\u003c/code\\\\u003e modules\\\\u003c/h1\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eWhile uncommon, you may have a file or dependency that uses module side effects in the browser. You can use \\\\u003ccode\\\\u003e*.client.ts\\\\u003c/code\\\\u003e on file names or nest files within \\\\u003ccode\\\\u003e.client\\\\u003c/code\\\\u003e directories to force them out of server bundles.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cdiv data-code-block=\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\" data-filename=\\\\\\\\\\\\\\\"feature-check.client.ts\\\\\\\\\\\\\\\" data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"typescript\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cpre data-filename=\\\\\\\\\\\\\\\"feature-check.client.ts\\\\\\\\\\\\\\\" data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"typescript\\\\\\\\\\\\\\\" style=\\\\\\\\\\\\\\\"color: var(--base05);\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"1\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e// this would break the server\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"2\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eexport\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003econst\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003esupportsVibrationAPI\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"3\\\\\\\\\\\\\\\"\\\\u003e \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003evibrate\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\" \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003ein\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ewindow\\\\u003c/span\\\\u003e.\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003enavigator\\\\u003c/span\\\\u003e;\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003c/code\\\\u003e\\\\u003c/pre\\\\u003e\\\\u003c/div\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eNote that values exported from this module will all be \\\\u003ccode\\\\u003eundefined\\\\u003c/code\\\\u003e on the server, so the only places to use them are in \\\\u003ca href=\\\\\\\\\\\\\\\"https://react.dev/reference/react/useEffect\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003euseEffect\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e and user events like click handlers.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cdiv data-code-block=\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\" data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"typescript\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cpre data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"typescript\\\\\\\\\\\\\\\" style=\\\\\\\\\\\\\\\"color: var(--base05);\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"1\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eimport\\\\u003c/span\\\\u003e { \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003esupportsVibrationAPI\\\\u003c/span\\\\u003e } \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003efrom\\\\u003c/span\\\\u003e \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e./feature-check.client.ts\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\";\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"2\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"3\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003econsole\\\\u003c/span\\\\u003e.\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003elog\\\\u003c/span\\\\u003e(\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003esupportsVibrationAPI\\\\u003c/span\\\\u003e);\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"4\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e// server: undefined\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"5\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e// client: true | false\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003c/code\\\\u003e\\\\u003c/pre\\\\u003e\\\\u003c/div\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003e\\\\u003cdocs-warning\\\\u003e\\\\u003ccode\\\\u003e.client\\\\u003c/code\\\\u003e directories are only supported when using \\\\u003ca href=\\\\\\\\\\\\\\\"../guides/vite\\\\\\\\\\\\\\\"\\\\u003eRemix Vite\\\\u003c/a\\\\u003e. The \\\\u003ca href=\\\\\\\\\\\\\\\"../guides/vite#classic-remix-compiler-vs-remix-vite\\\\\\\\\\\\\\\"\\\\u003eClassic Remix Compiler\\\\u003c/a\\\\u003e only supports \\\\u003ccode\\\\u003e.client\\\\u003c/code\\\\u003e files.\\\\u003c/docs-warning\\\\u003e\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eRefer to the Route Module section in the sidebar for more information.\\\\u003c/p\\\\u003e\\\\\\\",\\\\\\\"docs/file-conventions/-client\\\\\\\",\\\\\\\"headings\\\\\\\",[],[],\\\\\\\"actionData\\\\\\\",\\\\\\\"errors\\\\\\\"]\\\\n\\\");function $RC(a,b){a=document.getElementById(a);b=document.getElementById(b);b.parentNode.removeChild(b);if(a){a=a.previousSibling;var f=a.parentNode,c=a.nextSibling,e=0;do{if(c\\u0026\\u00268===c.nodeType){var d=c.data;if(\\\"/$\\\"===d)if(0===e)break;else e--;else\\\"$\\\"!==d\\u0026\\u0026\\\"$?\\\"!==d\\u0026\\u0026\\\"$!\\\"!==d||e++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;b.firstChild;)f.insertBefore(b.firstChild,c);a.data=\\\"$\\\";a._reactRetry\\u0026\\u0026a._reactRetry()}};$RC(\\\"B:0\\\",\\\"S:0\\\")window.__reactRouterContext.streamController.close();$RC(\\\"B:1\\\",\\\"S:1\\\")\","
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::.desloppify/subagents/runs/20260224_101201/prompts/batch-1.md::55d3948bb08d4b52": {
|
|
"id": "boilerplate_duplication::.desloppify/subagents/runs/20260224_101201/prompts/batch-1.md::55d3948bb08d4b52",
|
|
"detector": "boilerplate_duplication",
|
|
"file": ".desloppify/subagents/runs/20260224_101201/prompts/batch-1.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 25 lines): .desloppify/subagents/runs/20260224_101201/prompts/batch-1.md:11, .desloppify/subagents/runs/20260224_101201/prompts/batch-3.md:12",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 25,
|
|
"locations": [
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_101201/prompts/batch-1.md",
|
|
"line": 11
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_101201/prompts/batch-3.md",
|
|
"line": 12
|
|
}
|
|
],
|
|
"sample": [
|
|
"- internal/quality/enhanced_types.go",
|
|
"- internal/quality/scoring_test.go",
|
|
"- internal/quality/types.go",
|
|
"- pkg/rustdocs/parser_test.go"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::AGENTS.md::6142d3e9a2783ac1": {
|
|
"id": "boilerplate_duplication::AGENTS.md::6142d3e9a2783ac1",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "AGENTS.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 43 lines): AGENTS.md:137, README.md:102",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 43,
|
|
"locations": [
|
|
{
|
|
"file": "AGENTS.md",
|
|
"line": 137
|
|
},
|
|
{
|
|
"file": "README.md",
|
|
"line": 102
|
|
}
|
|
],
|
|
"sample": [
|
|
".",
|
|
"4. If unsure whether it is tool bug vs user workflow, issue first, PR second.",
|
|
"",
|
|
"## Prerequisite"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::.desloppify/query.json::629ba06e7510d618": {
|
|
"id": "boilerplate_duplication::.desloppify/query.json::629ba06e7510d618",
|
|
"detector": "boilerplate_duplication",
|
|
"file": ".desloppify/query.json",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 23 lines): .desloppify/query.json:353, desloppify/desloppify/desloppify/tests/snapshots/cli_smoke/query.json:431",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 23,
|
|
"locations": [
|
|
{
|
|
"file": ".desloppify/query.json",
|
|
"line": 353
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/desloppify/tests/snapshots/cli_smoke/query.json",
|
|
"line": 431
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" \"usage\": \"desloppify move <source> <dest> [--dry-run]\"",
|
|
" },",
|
|
" \"plan\": {"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::AGENTS.md::62f72b92576404fe": {
|
|
"id": "boilerplate_duplication::AGENTS.md::62f72b92576404fe",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "AGENTS.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 18 lines): AGENTS.md:185, desloppify/desloppify/docs/CODEX.md:5",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 18,
|
|
"locations": [
|
|
{
|
|
"file": "AGENTS.md",
|
|
"line": 185
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/docs/CODEX.md",
|
|
"line": 5
|
|
}
|
|
],
|
|
"sample": [
|
|
" an upstream issue.",
|
|
"",
|
|
"If you need to debug desloppify internals:",
|
|
"git clone https://github.com/peteromallet/desloppify.git /tmp/desloppify"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::.desloppify/subagents/runs/20260223_100953/prompts/batch-3.md::630bfe117bde5905": {
|
|
"id": "boilerplate_duplication::.desloppify/subagents/runs/20260223_100953/prompts/batch-3.md::630bfe117bde5905",
|
|
"detector": "boilerplate_duplication",
|
|
"file": ".desloppify/subagents/runs/20260223_100953/prompts/batch-3.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 38 lines): .desloppify/subagents/runs/20260223_100953/prompts/batch-3.md:14, .desloppify/subagents/runs/20260224_101201/prompts/batch-3.md:13",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 38,
|
|
"locations": [
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260223_100953/prompts/batch-3.md",
|
|
"line": 14
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_101201/prompts/batch-3.md",
|
|
"line": 13
|
|
}
|
|
],
|
|
"sample": [
|
|
"- internal/quality/scoring_test.go",
|
|
"- internal/quality/types.go",
|
|
"- pkg/rustdocs/parser_test.go",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::devour_data/docs/root---remix-963d4433.json::78c35118ed0b4ff2": {
|
|
"id": "boilerplate_duplication::devour_data/docs/root---remix-963d4433.json::78c35118ed0b4ff2",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "devour_data/docs/root---remix-963d4433.json",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 189 lines): devour_data/docs/root---remix-963d4433.json:3, devour_data/docs/root---remix.json:3",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 189,
|
|
"locations": [
|
|
{
|
|
"file": "devour_data/docs/root---remix-963d4433.json",
|
|
"line": 3
|
|
},
|
|
{
|
|
"file": "devour_data/docs/root---remix.json",
|
|
"line": 3
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" \"type\": \"html\",",
|
|
" \"title\": \"root | Remix\",",
|
|
" \"content\": \"DocsBlogResourcesReact Router v7 has been released. View the docsDocsBlogResourcesView code on GitHubChat on DiscordReact Router v7 has been released. View the docsrootGetting StartedQuick Start (5m) Tutorial (30m) Upgrading to v2 Community Future Flags Changelog Discussion TopicsIntroduction, Technical Explanation Runtimes, Adapters, Templates, and Deployment Route Configuration Fullstack Data Flow Server vs. Client Code Execution React Router Progressive Enhancement Pending UI State Management Network Concurrency Management Form vs. fetcher Hot Module Replacement Form Resubmissions File Conventions.client modules .server modules Asset Imports entry.client entry.server root Route File Naming vite.config.ts Route Moduleaction clientAction clientLoader Component ErrorBoundary handle headers HydrateFallback links loader meta shouldRevalidate ComponentsAwait Form Link Links LiveReload Meta NavLink Outlet PrefetchPageLinks Scripts ScrollRestoration HooksuseActionData useAsyncError \ud83c\udd95useAsyncValue \ud83c\udd95useBeforeUnload useBlocker useFetcher useFetchers useFormAction useHref useLoaderData useLocation useMatches useNavigate useNavigation useNavigationType useOutlet useOutletContext useParams unstable_usePrompt useResolvedPath useRevalidator \ud83c\udd95useRouteError \ud83c\udd95useRouteLoaderData useSearchParams useSubmit useViewTransitionState UtilitiesCookies createRemixStub data defer isRouteErrorResponse json unstable_parseMultipartFormData redirect redirectDocument replace Sessions unstable_createFileUploadHandler unstable_createMemoryUploadHandler StylingCSS Bundling Regular CSS CSS Imports CSS in JS CSS Modules PostCSS Tailwind Vanilla Extract Other API@remix-run/dev CLI \ud83c\udd95@remix-run/{adapter} @remix-run/serve create-remix (CLI) @remix-run/node @remix-run/testing GuidesAccessibility Development Strategy API Routes Backend For Frontend Breadcrumbs Guide Browser Support Client Data Module Constraints Contributing CSS Files Data Loading Data Writes Dependency optimization Deployment Disabling JavaScript Environment Variables Error Handling FAQs File Uploads Form Validation Gotchas Index Query Param Lazy Route Discovery Local TLS Manual Dev Server MDX Migrating from React Router Not Found Handling Performance Presets Resource Routes Server Bundles Single Fetch SPA Mode Streaming Templates TypeScript Vite Getting StartedQuick Start (5m) Tutorial (30m) Upgrading to v2 Community Future Flags Changelog Discussion TopicsIntroduction, Technical Explanation Runtimes, Adapters, Templates, and Deployment Route Configuration Fullstack Data Flow Server vs. Client Code Execution React Router Progressive Enhancement Pending UI State Management Network Concurrency Management Form vs. fetcher Hot Module Replacement Form Resubmissions File Conventions.client modules .server modules Asset Imports entry.client entry.server root Route File Naming vite.config.ts Route Moduleaction clientAction clientLoader Component ErrorBoundary handle headers HydrateFallback links loader meta shouldRevalidate ComponentsAwait Form Link Links LiveReload Meta NavLink Outlet PrefetchPageLinks Scripts ScrollRestoration HooksuseActionData useAsyncError \ud83c\udd95useAsyncValue \ud83c\udd95useBeforeUnload useBlocker useFetcher useFetchers useFormAction useHref useLoaderData useLocation useMatches useNavigate useNavigation useNavigationType useOutlet useOutletContext useParams unstable_usePrompt useResolvedPath useRevalidator \ud83c\udd95useRouteError \ud83c\udd95useRouteLoaderData useSearchParams useSubmit useViewTransitionState UtilitiesCookies createRemixStub data defer isRouteErrorResponse json unstable_parseMultipartFormData redirect redirectDocument replace Sessions unstable_createFileUploadHandler unstable_createMemoryUploadHandler StylingCSS Bundling Regular CSS CSS Imports CSS in JS CSS Modules PostCSS Tailwind Vanilla Extract Other API@remix-run/dev CLI \ud83c\udd95@remix-run/{adapter} @remix-run/serve create-remix (CLI) @remix-run/node @remix-run/testing GuidesAccessibility Development Strategy API Routes Backend For Frontend Breadcrumbs Guide Browser Support Client Data Module Constraints Contributing CSS Files Data Loading Data Writes Dependency optimization Deployment Disabling JavaScript Environment Variables Error Handling FAQs File Uploads Form Validation Gotchas Index Query Param Lazy Route Discovery Local TLS Manual Dev Server MDX Migrating from React Router Not Found Handling Performance Presets Resource Routes Server Bundles Single Fetch SPA Mode Streaming Templates TypeScript Vite Root Route The \\\"root\\\" route (app/root.tsx) is the only required route in your Remix application because it is the parent to all routes in your routes/ directory and is in charge of rendering the root \\u003chtml\\u003e document. Beyond that, it's mostly just like any other route and supports all the standard route exports: headers meta links loader clientLoader action clientAction default ErrorBoundary HydrateFallback handle shouldRevalidate Because the root route manages your document, it is the proper place to render a handful of \\\"document-level\\\" components Remix provides. These components are to be used once inside your root route, and they include everything Remix figured out or built in order for your page to render properly. import type { LinksFunction } from \\\"@remix-run/node\\\"; // or cloudflare/deno import { Links, LiveReload, Meta, Outlet, Scripts, ScrollRestoration, } from \\\"@remix-run/react\\\"; import globalStylesheetUrl from \\\"./global-styles.css\\\"; export const links: LinksFunction = () =\\u003e { return [{ rel: \\\"stylesheet\\\", href: globalStylesheetUrl }]; }; export default function App() { return ( \\u003chtml lang=\\\"en\\\"\\u003e \\u003chead\\u003e \\u003cmeta charSet=\\\"utf-8\\\" /\\u003e \\u003cmeta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1\\\" /\\u003e {/* All `meta` exports on all routes will render here */} \\u003cMeta /\\u003e {/* All `link` exports on all routes will render here */} \\u003cLinks /\\u003e \\u003c/head\\u003e \\u003cbody\\u003e {/* Child routes render here */} \\u003cOutlet /\\u003e {/* Manages scroll position for client-side transitions */} {/* If you use a nonce-based content security policy for scripts, you must provide the `nonce` prop. Otherwise, omit the nonce prop as shown here. */} \\u003cScrollRestoration /\\u003e {/* Script tags go here */} {/* If you use a nonce-based content security policy for scripts, you must provide the `nonce` prop. Otherwise, omit the nonce prop as shown here. */} \\u003cScripts /\\u003e {/* Sets up automatic reload when you change code */} {/* and only does anything during development */} {/* If you use a nonce-based content security policy for scripts, you must provide the `nonce` prop. Otherwise, omit the nonce prop as shown here. */} \\u003cLiveReload /\\u003e \\u003c/body\\u003e \\u003c/html\\u003e ); } Layout Export Because the root route manages the document for all routes, it also supports an additional optional Layout export. You can read the details in this RFC but the layout route serves two purposes: Avoid duplicating your document/\\\"app shell\\\" across your root component, HydrateFallback, and ErrorBoundary Avoids React from re-mounting your app shell elements when switching between the root component/HydrateFallback/ErrorBoundary which can cause a FOUC if React removes and re-adds \\u003clink rel=\\\"stylesheet\\\"\\u003e tags from your \\u003cLinks\\u003e component. import { Links, LiveReload, Meta, Outlet, Scripts, ScrollRestoration, } from \\\"@remix-run/react\\\"; export function Layout({ children }) { return ( \\u003chtml lang=\\\"en\\\"\\u003e \\u003chead\\u003e \\u003cmeta charSet=\\\"utf-8\\\" /\\u003e \\u003cmeta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1\\\" /\\u003e \\u003cMeta /\\u003e \\u003cLinks /\\u003e \\u003c/head\\u003e \\u003cbody\\u003e {/* children will be the root Component, ErrorBoundary, or HydrateFallback */} {children} \\u003cScripts /\\u003e \\u003cScrollRestoration /\\u003e \\u003cLiveReload /\\u003e \\u003c/body\\u003e \\u003c/html\\u003e ); } export default function App() { return \\u003cOutlet /\\u003e; } export function ErrorBoundary() { const error = useRouteError(); if (isRouteErrorResponse(error)) { return ( \\u003c\\u003e \\u003ch1\\u003e {error.status} {error.statusText} \\u003c/h1\\u003e \\u003cp\\u003e{error.data}\\u003c/p\\u003e \\u003c/\\u003e ); } return ( \\u003c\\u003e \\u003ch1\\u003eError!\\u003c/h1\\u003e \\u003cp\\u003e{error?.message ?? \\\"Unknown error\\\"}\\u003c/p\\u003e \\u003c/\\u003e ); } A note on useLoaderDatain the Layout Component useLoaderData is not permitted to be used in ErrorBoundary components because it is intended for the happy-path route rendering, and its typings have a built-in assumption that the loader ran successfully and returned something. That assumption doesn't hold in an ErrorBoundary because it could have been the loader that threw and triggered the boundary! To access loader data in ErrorBoundary's, you can use useRouteLoaderData which accounts for the loader data potentially being undefined. Because your Layout component is used in both success and error flows, this same restriction holds. If you need to fork logic in your Layout depending on if it was a successful request or not, you can use useRouteLoaderData(\\\"root\\\") and useRouteError(). Because your \\u003cLayout\\u003e component is used for rendering the ErrorBoundary, you should be very defensive to ensure that you can render your ErrorBoundary without encountering any render errors. If your Layout throws another error trying to render the boundary, then it can't be used and your UI will fall back to the very minimal built-in default ErrorBoundary. export function Layout({ children, }: { children: React.ReactNode; }) { const data = useRouteLoaderData(\\\"root\\\"); const error = useRouteError(); return ( \\u003chtml lang=\\\"en\\\"\\u003e \\u003chead\\u003e \\u003cmeta charSet=\\\"utf-8\\\" /\\u003e \\u003cmeta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1\\\" /\\u003e \\u003cMeta /\\u003e \\u003cLinks /\\u003e \\u003cstyle dangerouslySetInnerHTML={{ __html: ` :root { --themeVar: ${ data?.themeVar || defaultThemeVar } } `, }} /\\u003e \\u003c/head\\u003e \\u003cbody\\u003e {data ? ( \\u003cAnalytics token={data.analyticsToken} /\\u003e ) : null} {children} \\u003cScrollRestoration /\\u003e \\u003cScripts /\\u003e \\u003c/body\\u003e \\u003c/html\\u003e ); } See also: \\u003cMeta\\u003e \\u003cLinks\\u003e \\u003cOutlet\\u003e \\u003cScrollRestoration\\u003e \\u003cScripts\\u003e \\u003cLiveReload\\u003e \u00a9 Shopify, Inc.\u2022Docs and examples licensed under MITEdit((storageKey2, restoreKey) =\\u003e { if (!window.history.state || !window.history.state.key) { let key = Math.random().toString(32).slice(2); window.history.replaceState({ key }, \\\"\\\"); } try { let positions = JSON.parse(sessionStorage.getItem(storageKey2) || \\\"{}\\\"); let storedY = positions[restoreKey || window.history.state.key]; if (typeof storedY === \\\"number\\\") { window.scrollTo(0, storedY); } } catch (error) { console.error(error); sessionStorage.removeItem(storageKey2); } })(\\\"react-router-scroll-positions\\\", null)window.__reactRouterContext = {\\\"basename\\\":\\\"/\\\",\\\"future\\\":{\\\"unstable_optimizeDeps\\\":true,\\\"unstable_subResourceIntegrity\\\":false,\\\"v8_middleware\\\":true,\\\"v8_splitRouteModules\\\":true,\\\"v8_viteEnvironmentApi\\\":true},\\\"routeDiscovery\\\":{\\\"mode\\\":\\\"initial\\\"},\\\"ssr\\\":true,\\\"isSpaMode\\\":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());import \\\"/assets/manifest-b010e014.js\\\"; import * as route0 from \\\"/assets/root-CtUYAfRS.js\\\"; import * as route1 from \\\"/assets/docs-DauuYQK6.js\\\"; import * as route2 from \\\"/assets/docs._-B4dRXAHv.js\\\"; window.__reactRouterRouteModules = {\\\"root\\\":route0,\\\"routes/docs\\\":route1,\\\"routes/docs.$\\\":route2}; import(\\\"/assets/entry.client-q2ogymM2.js\\\");window.__reactRouterContext.streamController.enqueue(\\\"[{\\\\\\\"_1\\\\\\\":2,\\\\\\\"_966\\\\\\\":-5,\\\\\\\"_967\\\\\\\":-5},\\\\\\\"loaderData\\\\\\\",{\\\\\\\"_3\\\\\\\":4,\\\\\\\"_11\\\\\\\":12,\\\\\\\"_949\\\\\\\":950},\\\\\\\"root\\\\\\\",{\\\\\\\"_5\\\\\\\":6,\\\\\\\"_7\\\\\\\":8,\\\\\\\"_9\\\\\\\":10},\\\\\\\"host\\\\\\\",\\\\\\\"localhost\\\\\\\",\\\\\\\"siteUrl\\\\\\\",\\\\\\\"https://v2.remix.run\\\\\\\",\\\\\\\"noIndex\\\\\\\",false,\\\\\\\"routes/docs\\\\\\\",{\\\\\\\"_13\\\\\\\":14},\\\\\\\"menu\\\\\\\",[15,72,160,214,292,364,527,611,665,707],{\\\\\\\"_16\\\\\\\":17,\\\\\\\"_22\\\\\\\":23,\\\\\\\"_24\\\\\\\":25,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":28},\\\\\\\"attrs\\\\\\\",{\\\\\\\"_18\\\\\\\":19,\\\\\\\"_20\\\\\\\":21},\\\\\\\"title\\\\\\\",\\\\\\\"Getting Started\\\\\\\",\\\\\\\"order\\\\\\\",1,\\\\\\\"filename\\\\\\\",\\\\\\\"start/index.md\\\\\\\",\\\\\\\"slug\\\\\\\",\\\\\\\"start\\\\\\\",\\\\\\\"hasContent\\\\\\\",\\\\\\\"children\\\\\\\",[29,36,43,50,59,66],{\\\\\\\"_16\\\\\\\":30,\\\\\\\"_22\\\\\\\":32,\\\\\\\"_24\\\\\\\":33,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":35},{\\\\\\\"_18\\\\\\\":31,\\\\\\\"_20\\\\\\\":21},\\\\\\\"Quick Start (5m)\\\\\\\",\\\\\\\"start/quickstart.md\\\\\\\",\\\\\\\"start/quickstart\\\\\\\",true,[],{\\\\\\\"_16\\\\\\\":37,\\\\\\\"_22\\\\\\\":40,\\\\\\\"_24\\\\\\\":41,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":42},{\\\\\\\"_18\\\\\\\":38,\\\\\\\"_20\\\\\\\":39},\\\\\\\"Tutorial (30m)\\\\\\\",2,\\\\\\\"start/tutorial.md\\\\\\\",\\\\\\\"start/tutorial\\\\\\\",[],{\\\\\\\"_16\\\\\\\":44,\\\\\\\"_22\\\\\\\":47,\\\\\\\"_24\\\\\\\":48,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":49},{\\\\\\\"_18\\\\\\\":45,\\\\\\\"_20\\\\\\\":46},\\\\\\\"Upgrading to v2\\\\\\\",3,\\\\\\\"start/v2.md\\\\\\\",\\\\\\\"start/v2\\\\\\\",[],{\\\\\\\"_16\\\\\\\":51,\\\\\\\"_22\\\\\\\":56,\\\\\\\"_24\\\\\\\":57,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":58},{\\\\\\\"_18\\\\\\\":52,\\\\\\\"_53\\\\\\\":54,\\\\\\\"_20\\\\\\\":55},\\\\\\\"Community\\\\\\\",\\\\\\\"description\\\\\\\",\\\\\\\"Community resources for learning Remix and related technologies\\\\\\\",4,\\\\\\\"start/community.md\\\\\\\",\\\\\\\"start/community\\\\\\\",[],{\\\\\\\"_16\\\\\\\":60,\\\\\\\"_22\\\\\\\":63,\\\\\\\"_24\\\\\\\":64,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":65},{\\\\\\\"_18\\\\\\\":61,\\\\\\\"_20\\\\\\\":62},\\\\\\\"Future Flags\\\\\\\",5,\\\\\\\"start/future-flags.md\\\\\\\",\\\\\\\"start/future-flags\\\\\\\",[],{\\\\\\\"_16\\\\\\\":67,\\\\\\\"_22\\\\\\\":69,\\\\\\\"_24\\\\\\\":70,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":71},{\\\\\\\"_18\\\\\\\":68},\\\\\\\"Changelog\\\\\\\",\\\\\\\"start/changelog.md\\\\\\\",\\\\\\\"start/changelog\\\\\\\",[],{\\\\\\\"_16\\\\\\\":73,\\\\\\\"_22\\\\\\\":75,\\\\\\\"_24\\\\\\\":76,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":77},{\\\\\\\"_18\\\\\\\":74,\\\\\\\"_20\\\\\\\":39},\\\\\\\"Discussion Topics\\\\\\\",\\\\\\\"discussion/index.md\\\\\\\",\\\\\\\"discussion\\\\\\\",[78,84,90,96,102,108,115,122,129,136,142,148,154],{\\\\\\\"_16\\\\\\\":79,\\\\\\\"_22\\\\\\\":81,\\\\\\\"_24\\\\\\\":82,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":83},{\\\\\\\"_18\\\\\\\":80,\\\\\\\"_20\\\\\\\":21},\\\\\\\"Introduction, Technical Explanation\\\\\\\",\\\\\\\"discussion/introduction.md\\\\\\\",\\\\\\\"discussion/introduction\\\\\\\",[],{\\\\\\\"_16\\\\\\\":85,\\\\\\\"_22\\\\\\\":87,\\\\\\\"_24\\\\\\\":88,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":89},{\\\\\\\"_18\\\\\\\":86,\\\\\\\"_20\\\\\\\":39},\\\\\\\"Runtimes, Adapters, Templates, and Deployment\\\\\\\",\\\\\\\"discussion/runtimes.md\\\\\\\",\\\\\\\"discussion/runtimes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":91,\\\\\\\"_22\\\\\\\":93,\\\\\\\"_24\\\\\\\":94,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":95},{\\\\\\\"_18\\\\\\\":92,\\\\\\\"_20\\\\\\\":46},\\\\\\\"Route Configuration\\\\\\\",\\\\\\\"discussion/routes.md\\\\\\\",\\\\\\\"discussion/routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":97,\\\\\\\"_22\\\\\\\":99,\\\\\\\"_24\\\\\\\":100,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":101},{\\\\\\\"_18\\\\\\\":98,\\\\\\\"_20\\\\\\\":55},\\\\\\\"Fullstack Data Flow\\\\\\\",\\\\\\\"discussion/data-flow.md\\\\\\\",\\\\\\\"discussion/data-flow\\\\\\\",[],{\\\\\\\"_16\\\\\\\":103,\\\\\\\"_22\\\\\\\":105,\\\\\\\"_24\\\\\\\":106,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":107},{\\\\\\\"_18\\\\\\\":104,\\\\\\\"_20\\\\\\\":62},\\\\\\\"Server vs. Client Code Execution\\\\\\\",\\\\\\\"discussion/server-vs-client.md\\\\\\\",\\\\\\\"discussion/server-vs-client\\\\\\\",[],{\\\\\\\"_16\\\\\\\":109,\\\\\\\"_22\\\\\\\":112,\\\\\\\"_24\\\\\\\":113,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":114},{\\\\\\\"_18\\\\\\\":110,\\\\\\\"_20\\\\\\\":111},\\\\\\\"React Router\\\\\\\",6,\\\\\\\"discussion/react-router.md\\\\\\\",\\\\\\\"discussion/react-router\\\\\\\",[],{\\\\\\\"_16\\\\\\\":116,\\\\\\\"_22\\\\\\\":119,\\\\\\\"_24\\\\\\\":120,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":121},{\\\\\\\"_18\\\\\\\":117,\\\\\\\"_20\\\\\\\":118},\\\\\\\"Progressive Enhancement\\\\\\\",7,\\\\\\\"discussion/progressive-enhancement.md\\\\\\\",\\\\\\\"discussion/progressive-enhancement\\\\\\\",[],{\\\\\\\"_16\\\\\\\":123,\\\\\\\"_22\\\\\\\":126,\\\\\\\"_24\\\\\\\":127,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":128},{\\\\\\\"_18\\\\\\\":124,\\\\\\\"_20\\\\\\\":125},\\\\\\\"Pending UI\\\\\\\",8,\\\\\\\"discussion/pending-ui.md\\\\\\\",\\\\\\\"discussion/pending-ui\\\\\\\",[],{\\\\\\\"_16\\\\\\\":130,\\\\\\\"_22\\\\\\\":133,\\\\\\\"_24\\\\\\\":134,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":135},{\\\\\\\"_18\\\\\\\":131,\\\\\\\"_20\\\\\\\":132},\\\\\\\"State Management\\\\\\\",9,\\\\\\\"discussion/state-management.md\\\\\\\",\\\\\\\"discussion/state-management\\\\\\\",[],{\\\\\\\"_16\\\\\\\":137,\\\\\\\"_22\\\\\\\":139,\\\\\\\"_24\\\\\\\":140,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":141},{\\\\\\\"_18\\\\\\\":138},\\\\\\\"Network Concurrency Management\\\\\\\",\\\\\\\"discussion/concurrency.md\\\\\\\",\\\\\\\"discussion/concurrency\\\\\\\",[],{\\\\\\\"_16\\\\\\\":143,\\\\\\\"_22\\\\\\\":145,\\\\\\\"_24\\\\\\\":146,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":147},{\\\\\\\"_18\\\\\\\":144},\\\\\\\"Form vs. fetcher\\\\\\\",\\\\\\\"discussion/form-vs-fetcher.md\\\\\\\",\\\\\\\"discussion/form-vs-fetcher\\\\\\\",[],{\\\\\\\"_16\\\\\\\":149,\\\\\\\"_22\\\\\\\":151,\\\\\\\"_24\\\\\\\":152,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":153},{\\\\\\\"_18\\\\\\\":150},\\\\\\\"Hot Module Replacement\\\\\\\",\\\\\\\"discussion/hot-module-replacement.md\\\\\\\",\\\\\\\"discussion/hot-module-replacement\\\\\\\",[],{\\\\\\\"_16\\\\\\\":155,\\\\\\\"_22\\\\\\\":157,\\\\\\\"_24\\\\\\\":158,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":159},{\\\\\\\"_18\\\\\\\":156},\\\\\\\"Form Resubmissions\\\\\\\",\\\\\\\"discussion/resubmissions.md\\\\\\\",\\\\\\\"discussion/resubmissions\\\\\\\",[],{\\\\\\\"_16\\\\\\\":161,\\\\\\\"_22\\\\\\\":163,\\\\\\\"_24\\\\\\\":164,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":165},{\\\\\\\"_18\\\\\\\":162,\\\\\\\"_20\\\\\\\":46},\\\\\\\"File Conventions\\\\\\\",\\\\\\\"file-conventions/index.md\\\\\\\",\\\\\\\"file-conventions\\\\\\\",[166,173,179,185,191,197,202,208],{\\\\\\\"_16\\\\\\\":167,\\\\\\\"_22\\\\\\\":170,\\\\\\\"_24\\\\\\\":171,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":172},{\\\\\\\"_18\\\\\\\":168,\\\\\\\"_169\\\\\\\":10},\\\\\\\".client modules\\\\\\\",\\\\\\\"toc\\\\\\\",\\\\\\\"file-conventions/-client.md\\\\\\\",\\\\\\\"file-conventions/-client\\\\\\\",[],{\\\\\\\"_16\\\\\\\":174,\\\\\\\"_22\\\\\\\":176,\\\\\\\"_24\\\\\\\":177,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":178},{\\\\\\\"_18\\\\\\\":175,\\\\\\\"_169\\\\\\\":10},\\\\\\\".server modules\\\\\\\",\\\\\\\"file-conventions/-server.md\\\\\\\",\\\\\\\"file-conventions/-server\\\\\\\",[],{\\\\\\\"_16\\\\\\\":180,\\\\\\\"_22\\\\\\\":182,\\\\\\\"_24\\\\\\\":183,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":184},{\\\\\\\"_18\\\\\\\":181,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Asset Imports\\\\\\\",\\\\\\\"file-conventions/asset-imports.md\\\\\\\",\\\\\\\"file-conventions/asset-imports\\\\\\\",[],{\\\\\\\"_16\\\\\\\":186,\\\\\\\"_22\\\\\\\":188,\\\\\\\"_24\\\\\\\":189,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":190},{\\\\\\\"_18\\\\\\\":187,\\\\\\\"_169\\\\\\\":10},\\\\\\\"entry.client\\\\\\\",\\\\\\\"file-conventions/entry.client.md\\\\\\\",\\\\\\\"file-conventions/entry.client\\\\\\\",[],{\\\\\\\"_16\\\\\\\":192,\\\\\\\"_22\\\\\\\":194,\\\\\\\"_24\\\\\\\":195,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":196},{\\\\\\\"_18\\\\\\\":193,\\\\\\\"_169\\\\\\\":10},\\\\\\\"entry.server\\\\\\\",\\\\\\\"file-conventions/entry.server.md\\\\\\\",\\\\\\\"file-conventions/entry.server\\\\\\\",[],{\\\\\\\"_16\\\\\\\":198,\\\\\\\"_22\\\\\\\":199,\\\\\\\"_24\\\\\\\":200,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":201},{\\\\\\\"_18\\\\\\\":3,\\\\\\\"_169\\\\\\\":10},\\\\\\\"file-conventions/root.md\\\\\\\",\\\\\\\"file-conventions/root\\\\\\\",[],{\\\\\\\"_16\\\\\\\":203,\\\\\\\"_22\\\\\\\":205,\\\\\\\"_24\\\\\\\":206,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":207},{\\\\\\\"_18\\\\\\\":204},\\\\\\\"Route File Naming\\\\\\\",\\\\\\\"file-conventions/routes.md\\\\\\\",\\\\\\\"file-conventions/routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":209,\\\\\\\"_22\\\\\\\":211,\\\\\\\"_24\\\\\\\":212,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":213},{\\\\\\\"_18\\\\\\\":210},\\\\\\\"vite.config.ts\\\\\\\",\\\\\\\"file-conventions/vite-config.md\\\\\\\",\\\\\\\"file-conventions/vite-config\\\\\\\",[],{\\\\\\\"_16\\\\\\\":215,\\\\\\\"_22\\\\\\\":217,\\\\\\\"_24\\\\\\\":218,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":219},{\\\\\\\"_18\\\\\\\":216,\\\\\\\"_20\\\\\\\":55},\\\\\\\"Route Module\\\\\\\",\\\\\\\"route/index.md\\\\\\\",\\\\\\\"route\\\\\\\",[220,226,232,238,244,250,256,262,268,274,280,286],{\\\\\\\"_16\\\\\\\":221,\\\\\\\"_22\\\\\\\":223,\\\\\\\"_24\\\\\\\":224,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":225},{\\\\\\\"_18\\\\\\\":222},\\\\\\\"action\\\\\\\",\\\\\\\"route/action.md\\\\\\\",\\\\\\\"route/action\\\\\\\",[],{\\\\\\\"_16\\\\\\\":227,\\\\\\\"_22\\\\\\\":229,\\\\\\\"_24\\\\\\\":230,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":231},{\\\\\\\"_18\\\\\\\":228},\\\\\\\"clientAction\\\\\\\",\\\\\\\"route/client-action.md\\\\\\\",\\\\\\\"route/client-action\\\\\\\",[],{\\\\\\\"_16\\\\\\\":233,\\\\\\\"_22\\\\\\\":235,\\\\\\\"_24\\\\\\\":236,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":237},{\\\\\\\"_18\\\\\\\":234},\\\\\\\"clientLoader\\\\\\\",\\\\\\\"route/client-loader.md\\\\\\\",\\\\\\\"route/client-loader\\\\\\\",[],{\\\\\\\"_16\\\\\\\":239,\\\\\\\"_22\\\\\\\":241,\\\\\\\"_24\\\\\\\":242,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":243},{\\\\\\\"_18\\\\\\\":240},\\\\\\\"Component\\\\\\\",\\\\\\\"route/component.md\\\\\\\",\\\\\\\"route/component\\\\\\\",[],{\\\\\\\"_16\\\\\\\":245,\\\\\\\"_22\\\\\\\":247,\\\\\\\"_24\\\\\\\":248,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":249},{\\\\\\\"_18\\\\\\\":246},\\\\\\\"ErrorBoundary\\\\\\\",\\\\\\\"route/error-boundary.md\\\\\\\",\\\\\\\"route/error-boundary\\\\\\\",[],{\\\\\\\"_16\\\\\\\":251,\\\\\\\"_22\\\\\\\":253,\\\\\\\"_24\\\\\\\":254,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":255},{\\\\\\\"_18\\\\\\\":252},\\\\\\\"handle\\\\\\\",\\\\\\\"route/handle.md\\\\\\\",\\\\\\\"route/handle\\\\\\\",[],{\\\\\\\"_16\\\\\\\":257,\\\\\\\"_22\\\\\\\":259,\\\\\\\"_24\\\\\\\":260,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":261},{\\\\\\\"_18\\\\\\\":258},\\\\\\\"headers\\\\\\\",\\\\\\\"route/headers.md\\\\\\\",\\\\\\\"route/headers\\\\\\\",[],{\\\\\\\"_16\\\\\\\":263,\\\\\\\"_22\\\\\\\":265,\\\\\\\"_24\\\\\\\":266,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":267},{\\\\\\\"_18\\\\\\\":264},\\\\\\\"HydrateFallback\\\\\\\",\\\\\\\"route/hydrate-fallback.md\\\\\\\",\\\\\\\"route/hydrate-fallback\\\\\\\",[],{\\\\\\\"_16\\\\\\\":269,\\\\\\\"_22\\\\\\\":271,\\\\\\\"_24\\\\\\\":272,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":273},{\\\\\\\"_18\\\\\\\":270},\\\\\\\"links\\\\\\\",\\\\\\\"route/links.md\\\\\\\",\\\\\\\"route/links\\\\\\\",[],{\\\\\\\"_16\\\\\\\":275,\\\\\\\"_22\\\\\\\":277,\\\\\\\"_24\\\\\\\":278,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":279},{\\\\\\\"_18\\\\\\\":276},\\\\\\\"loader\\\\\\\",\\\\\\\"route/loader.md\\\\\\\",\\\\\\\"route/loader\\\\\\\",[],{\\\\\\\"_16\\\\\\\":281,\\\\\\\"_22\\\\\\\":283,\\\\\\\"_24\\\\\\\":284,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":285},{\\\\\\\"_18\\\\\\\":282},\\\\\\\"meta\\\\\\\",\\\\\\\"route/meta.md\\\\\\\",\\\\\\\"route/meta\\\\\\\",[],{\\\\\\\"_16\\\\\\\":287,\\\\\\\"_22\\\\\\\":289,\\\\\\\"_24\\\\\\\":290,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":291},{\\\\\\\"_18\\\\\\\":288},\\\\\\\"shouldRevalidate\\\\\\\",\\\\\\\"route/should-revalidate.md\\\\\\\",\\\\\\\"route/should-revalidate\\\\\\\",[],{\\\\\\\"_16\\\\\\\":293,\\\\\\\"_22\\\\\\\":295,\\\\\\\"_24\\\\\\\":296,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":297},{\\\\\\\"_18\\\\\\\":294,\\\\\\\"_20\\\\\\\":62},\\\\\\\"Components\\\\\\\",\\\\\\\"components/index.md\\\\\\\",\\\\\\\"components\\\\\\\",[298,304,310,316,322,328,334,340,346,352,358],{\\\\\\\"_16\\\\\\\":299,\\\\\\\"_22\\\\\\\":301,\\\\\\\"_24\\\\\\\":302,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":303},{\\\\\\\"_18\\\\\\\":300},\\\\\\\"Await\\\\\\\",\\\\\\\"components/await.md\\\\\\\",\\\\\\\"components/await\\\\\\\",[],{\\\\\\\"_16\\\\\\\":305,\\\\\\\"_22\\\\\\\":307,\\\\\\\"_24\\\\\\\":308,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":309},{\\\\\\\"_18\\\\\\\":306},\\\\\\\"Form\\\\\\\",\\\\\\\"components/form.md\\\\\\\",\\\\\\\"components/form\\\\\\\",[],{\\\\\\\"_16\\\\\\\":311,\\\\\\\"_22\\\\\\\":313,\\\\\\\"_24\\\\\\\":314,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":315},{\\\\\\\"_18\\\\\\\":312},\\\\\\\"Link\\\\\\\",\\\\\\\"components/link.md\\\\\\\",\\\\\\\"components/link\\\\\\\",[],{\\\\\\\"_16\\\\\\\":317,\\\\\\\"_22\\\\\\\":319,\\\\\\\"_24\\\\\\\":320,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":321},{\\\\\\\"_18\\\\\\\":318,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Links\\\\\\\",\\\\\\\"components/links.md\\\\\\\",\\\\\\\"components/links\\\\\\\",[],{\\\\\\\"_16\\\\\\\":323,\\\\\\\"_22\\\\\\\":325,\\\\\\\"_24\\\\\\\":326,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":327},{\\\\\\\"_18\\\\\\\":324,\\\\\\\"_169\\\\\\\":10},\\\\\\\"LiveReload\\\\\\\",\\\\\\\"components/live-reload.md\\\\\\\",\\\\\\\"components/live-reload\\\\\\\",[],{\\\\\\\"_16\\\\\\\":329,\\\\\\\"_22\\\\\\\":331,\\\\\\\"_24\\\\\\\":332,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":333},{\\\\\\\"_18\\\\\\\":330,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Meta\\\\\\\",\\\\\\\"components/meta.md\\\\\\\",\\\\\\\"components/meta\\\\\\\",[],{\\\\\\\"_16\\\\\\\":335,\\\\\\\"_22\\\\\\\":337,\\\\\\\"_24\\\\\\\":338,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":339},{\\\\\\\"_18\\\\\\\":336},\\\\\\\"NavLink\\\\\\\",\\\\\\\"components/nav-link.md\\\\\\\",\\\\\\\"components/nav-link\\\\\\\",[],{\\\\\\\"_16\\\\\\\":341,\\\\\\\"_22\\\\\\\":343,\\\\\\\"_24\\\\\\\":344,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":345},{\\\\\\\"_18\\\\\\\":342},\\\\\\\"Outlet\\\\\\\",\\\\\\\"components/outlet.md\\\\\\\",\\\\\\\"components/outlet\\\\\\\",[],{\\\\\\\"_16\\\\\\\":347,\\\\\\\"_22\\\\\\\":349,\\\\\\\"_24\\\\\\\":350,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":351},{\\\\\\\"_18\\\\\\\":348,\\\\\\\"_169\\\\\\\":10},\\\\\\\"PrefetchPageLinks\\\\\\\",\\\\\\\"components/prefetch-page-links.md\\\\\\\",\\\\\\\"components/prefetch-page-links\\\\\\\",[],{\\\\\\\"_16\\\\\\\":353,\\\\\\\"_22\\\\\\\":355,\\\\\\\"_24\\\\\\\":356,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":357},{\\\\\\\"_18\\\\\\\":354,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Scripts\\\\\\\",\\\\\\\"components/scripts.md\\\\\\\",\\\\\\\"components/scripts\\\\\\\",[],{\\\\\\\"_16\\\\\\\":359,\\\\\\\"_22\\\\\\\":361,\\\\\\\"_24\\\\\\\":362,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":363},{\\\\\\\"_18\\\\\\\":360},\\\\\\\"ScrollRestoration\\\\\\\",\\\\\\\"components/scroll-restoration.md\\\\\\\",\\\\\\\"components/scroll-restoration\\\\\\\",[],{\\\\\\\"_16\\\\\\\":365,\\\\\\\"_22\\\\\\\":367,\\\\\\\"_24\\\\\\\":368,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":369},{\\\\\\\"_18\\\\\\\":366,\\\\\\\"_20\\\\\\\":111},\\\\\\\"Hooks\\\\\\\",\\\\\\\"hooks/index.md\\\\\\\",\\\\\\\"hooks\\\\\\\",[370,376,383,389,395,401,407,413,419,425,431,437,443,449,455,461,467,473,479,485,491,497,503,509,515,521],{\\\\\\\"_16\\\\\\\":371,\\\\\\\"_22\\\\\\\":373,\\\\\\\"_24\\\\\\\":374,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":375},{\\\\\\\"_18\\\\\\\":372,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useActionData\\\\\\\",\\\\\\\"hooks/use-action-data.md\\\\\\\",\\\\\\\"hooks/use-action-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":377,\\\\\\\"_22\\\\\\\":380,\\\\\\\"_24\\\\\\\":381,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":382},{\\\\\\\"_18\\\\\\\":378,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useAsyncError\\\\\\\",\\\\\\\"new\\\\\\\",\\\\\\\"hooks/use-async-error.md\\\\\\\",\\\\\\\"hooks/use-async-error\\\\\\\",[],{\\\\\\\"_16\\\\\\\":384,\\\\\\\"_22\\\\\\\":386,\\\\\\\"_24\\\\\\\":387,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":388},{\\\\\\\"_18\\\\\\\":385,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useAsyncValue\\\\\\\",\\\\\\\"hooks/use-async-value.md\\\\\\\",\\\\\\\"hooks/use-async-value\\\\\\\",[],{\\\\\\\"_16\\\\\\\":390,\\\\\\\"_22\\\\\\\":392,\\\\\\\"_24\\\\\\\":393,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":394},{\\\\\\\"_18\\\\\\\":391,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useBeforeUnload\\\\\\\",\\\\\\\"hooks/use-before-unload.md\\\\\\\",\\\\\\\"hooks/use-before-unload\\\\\\\",[],{\\\\\\\"_16\\\\\\\":396,\\\\\\\"_22\\\\\\\":398,\\\\\\\"_24\\\\\\\":399,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":400},{\\\\\\\"_18\\\\\\\":397},\\\\\\\"useBlocker\\\\\\\",\\\\\\\"hooks/use-blocker.md\\\\\\\",\\\\\\\"hooks/use-blocker\\\\\\\",[],{\\\\\\\"_16\\\\\\\":402,\\\\\\\"_22\\\\\\\":404,\\\\\\\"_24\\\\\\\":405,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":406},{\\\\\\\"_18\\\\\\\":403},\\\\\\\"useFetcher\\\\\\\",\\\\\\\"hooks/use-fetcher.md\\\\\\\",\\\\\\\"hooks/use-fetcher\\\\\\\",[],{\\\\\\\"_16\\\\\\\":408,\\\\\\\"_22\\\\\\\":410,\\\\\\\"_24\\\\\\\":411,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":412},{\\\\\\\"_18\\\\\\\":409,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useFetchers\\\\\\\",\\\\\\\"hooks/use-fetchers.md\\\\\\\",\\\\\\\"hooks/use-fetchers\\\\\\\",[],{\\\\\\\"_16\\\\\\\":414,\\\\\\\"_22\\\\\\\":416,\\\\\\\"_24\\\\\\\":417,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":418},{\\\\\\\"_18\\\\\\\":415},\\\\\\\"useFormAction\\\\\\\",\\\\\\\"hooks/use-form-action.md\\\\\\\",\\\\\\\"hooks/use-form-action\\\\\\\",[],{\\\\\\\"_16\\\\\\\":420,\\\\\\\"_22\\\\\\\":422,\\\\\\\"_24\\\\\\\":423,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":424},{\\\\\\\"_18\\\\\\\":421},\\\\\\\"useHref\\\\\\\",\\\\\\\"hooks/use-href.md\\\\\\\",\\\\\\\"hooks/use-href\\\\\\\",[],{\\\\\\\"_16\\\\\\\":426,\\\\\\\"_22\\\\\\\":428,\\\\\\\"_24\\\\\\\":429,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":430},{\\\\\\\"_18\\\\\\\":427},\\\\\\\"useLoaderData\\\\\\\",\\\\\\\"hooks/use-loader-data.md\\\\\\\",\\\\\\\"hooks/use-loader-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":432,\\\\\\\"_22\\\\\\\":434,\\\\\\\"_24\\\\\\\":435,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":436},{\\\\\\\"_18\\\\\\\":433},\\\\\\\"useLocation\\\\\\\",\\\\\\\"hooks/use-location.md\\\\\\\",\\\\\\\"hooks/use-location\\\\\\\",[],{\\\\\\\"_16\\\\\\\":438,\\\\\\\"_22\\\\\\\":440,\\\\\\\"_24\\\\\\\":441,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":442},{\\\\\\\"_18\\\\\\\":439,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useMatches\\\\\\\",\\\\\\\"hooks/use-matches.md\\\\\\\",\\\\\\\"hooks/use-matches\\\\\\\",[],{\\\\\\\"_16\\\\\\\":444,\\\\\\\"_22\\\\\\\":446,\\\\\\\"_24\\\\\\\":447,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":448},{\\\\\\\"_18\\\\\\\":445},\\\\\\\"useNavigate\\\\\\\",\\\\\\\"hooks/use-navigate.md\\\\\\\",\\\\\\\"hooks/use-navigate\\\\\\\",[],{\\\\\\\"_16\\\\\\\":450,\\\\\\\"_22\\\\\\\":452,\\\\\\\"_24\\\\\\\":453,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":454},{\\\\\\\"_18\\\\\\\":451},\\\\\\\"useNavigation\\\\\\\",\\\\\\\"hooks/use-navigation.md\\\\\\\",\\\\\\\"hooks/use-navigation\\\\\\\",[],{\\\\\\\"_16\\\\\\\":456,\\\\\\\"_22\\\\\\\":458,\\\\\\\"_24\\\\\\\":459,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":460},{\\\\\\\"_18\\\\\\\":457},\\\\\\\"useNavigationType\\\\\\\",\\\\\\\"hooks/use-navigation-type.md\\\\\\\",\\\\\\\"hooks/use-navigation-type\\\\\\\",[],{\\\\\\\"_16\\\\\\\":462,\\\\\\\"_22\\\\\\\":464,\\\\\\\"_24\\\\\\\":465,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":466},{\\\\\\\"_18\\\\\\\":463},\\\\\\\"useOutlet\\\\\\\",\\\\\\\"hooks/use-outlet.md\\\\\\\",\\\\\\\"hooks/use-outlet\\\\\\\",[],{\\\\\\\"_16\\\\\\\":468,\\\\\\\"_22\\\\\\\":470,\\\\\\\"_24\\\\\\\":471,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":472},{\\\\\\\"_18\\\\\\\":469},\\\\\\\"useOutletContext\\\\\\\",\\\\\\\"hooks/use-outlet-context.md\\\\\\\",\\\\\\\"hooks/use-outlet-context\\\\\\\",[],{\\\\\\\"_16\\\\\\\":474,\\\\\\\"_22\\\\\\\":476,\\\\\\\"_24\\\\\\\":477,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":478},{\\\\\\\"_18\\\\\\\":475},\\\\\\\"useParams\\\\\\\",\\\\\\\"hooks/use-params.md\\\\\\\",\\\\\\\"hooks/use-params\\\\\\\",[],{\\\\\\\"_16\\\\\\\":480,\\\\\\\"_22\\\\\\\":482,\\\\\\\"_24\\\\\\\":483,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":484},{\\\\\\\"_18\\\\\\\":481},\\\\\\\"unstable_usePrompt\\\\\\\",\\\\\\\"hooks/use-prompt.md\\\\\\\",\\\\\\\"hooks/use-prompt\\\\\\\",[],{\\\\\\\"_16\\\\\\\":486,\\\\\\\"_22\\\\\\\":488,\\\\\\\"_24\\\\\\\":489,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":490},{\\\\\\\"_18\\\\\\\":487},\\\\\\\"useResolvedPath\\\\\\\",\\\\\\\"hooks/use-resolved-path.md\\\\\\\",\\\\\\\"hooks/use-resolved-path\\\\\\\",[],{\\\\\\\"_16\\\\\\\":492,\\\\\\\"_22\\\\\\\":494,\\\\\\\"_24\\\\\\\":495,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":496},{\\\\\\\"_18\\\\\\\":493,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useRevalidator\\\\\\\",\\\\\\\"hooks/use-revalidator.md\\\\\\\",\\\\\\\"hooks/use-revalidator\\\\\\\",[],{\\\\\\\"_16\\\\\\\":498,\\\\\\\"_22\\\\\\\":500,\\\\\\\"_24\\\\\\\":501,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":502},{\\\\\\\"_18\\\\\\\":499,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useRouteError\\\\\\\",\\\\\\\"hooks/use-route-error.md\\\\\\\",\\\\\\\"hooks/use-route-error\\\\\\\",[],{\\\\\\\"_16\\\\\\\":504,\\\\\\\"_22\\\\\\\":506,\\\\\\\"_24\\\\\\\":507,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":508},{\\\\\\\"_18\\\\\\\":505,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useRouteLoaderData\\\\\\\",\\\\\\\"hooks/use-route-loader-data.md\\\\\\\",\\\\\\\"hooks/use-route-loader-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":510,\\\\\\\"_22\\\\\\\":512,\\\\\\\"_24\\\\\\\":513,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":514},{\\\\\\\"_18\\\\\\\":511},\\\\\\\"useSearchParams\\\\\\\",\\\\\\\"hooks/use-search-params.md\\\\\\\",\\\\\\\"hooks/use-search-params\\\\\\\",[],{\\\\\\\"_16\\\\\\\":516,\\\\\\\"_22\\\\\\\":518,\\\\\\\"_24\\\\\\\":519,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":520},{\\\\\\\"_18\\\\\\\":517},\\\\\\\"useSubmit\\\\\\\",\\\\\\\"hooks/use-submit.md\\\\\\\",\\\\\\\"hooks/use-submit\\\\\\\",[],{\\\\\\\"_16\\\\\\\":522,\\\\\\\"_22\\\\\\\":524,\\\\\\\"_24\\\\\\\":525,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":526},{\\\\\\\"_18\\\\\\\":523,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useViewTransitionState\\\\\\\",\\\\\\\"hooks/use-view-transition-state.md\\\\\\\",\\\\\\\"hooks/use-view-transition-state\\\\\\\",[],{\\\\\\\"_16\\\\\\\":528,\\\\\\\"_22\\\\\\\":530,\\\\\\\"_24\\\\\\\":531,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":532},{\\\\\\\"_18\\\\\\\":529,\\\\\\\"_20\\\\\\\":111},\\\\\\\"Utilities\\\\\\\",\\\\\\\"utils/index.md\\\\\\\",\\\\\\\"utils\\\\\\\",[533,539,545,551,557,563,569,575,581,587,593,599,605],{\\\\\\\"_16\\\\\\\":534,\\\\\\\"_22\\\\\\\":536,\\\\\\\"_24\\\\\\\":537,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":538},{\\\\\\\"_18\\\\\\\":535},\\\\\\\"Cookies\\\\\\\",\\\\\\\"utils/cookies.md\\\\\\\",\\\\\\\"utils/cookies\\\\\\\",[],{\\\\\\\"_16\\\\\\\":540,\\\\\\\"_22\\\\\\\":542,\\\\\\\"_24\\\\\\\":543,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":544},{\\\\\\\"_18\\\\\\\":541},\\\\\\\"createRemixStub\\\\\\\",\\\\\\\"utils/create-remix-stub.md\\\\\\\",\\\\\\\"utils/create-remix-stub\\\\\\\",[],{\\\\\\\"_16\\\\\\\":546,\\\\\\\"_22\\\\\\\":548,\\\\\\\"_24\\\\\\\":549,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":550},{\\\\\\\"_18\\\\\\\":547,\\\\\\\"_169\\\\\\\":10},\\\\\\\"data\\\\\\\",\\\\\\\"utils/data.md\\\\\\\",\\\\\\\"utils/data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":552,\\\\\\\"_22\\\\\\\":554,\\\\\\\"_24\\\\\\\":555,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":556},{\\\\\\\"_18\\\\\\\":553,\\\\\\\"_169\\\\\\\":10},\\\\\\\"defer\\\\\\\",\\\\\\\"utils/defer.md\\\\\\\",\\\\\\\"utils/defer\\\\\\\",[],{\\\\\\\"_16\\\\\\\":558,\\\\\\\"_22\\\\\\\":560,\\\\\\\"_24\\\\\\\":561,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":562},{\\\\\\\"_18\\\\\\\":559,\\\\\\\"_169\\\\\\\":10},\\\\\\\"isRouteErrorResponse\\\\\\\",\\\\\\\"utils/is-route-error-response.md\\\\\\\",\\\\\\\"utils/is-route-error-response\\\\\\\",[],{\\\\\\\"_16\\\\\\\":564,\\\\\\\"_22\\\\\\\":566,\\\\\\\"_24\\\\\\\":567,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":568},{\\\\\\\"_18\\\\\\\":565,\\\\\\\"_169\\\\\\\":10},\\\\\\\"json\\\\\\\",\\\\\\\"utils/json.md\\\\\\\",\\\\\\\"utils/json\\\\\\\",[],{\\\\\\\"_16\\\\\\\":570,\\\\\\\"_22\\\\\\\":572,\\\\\\\"_24\\\\\\\":573,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":574},{\\\\\\\"_18\\\\\\\":571},\\\\\\\"unstable_parseMultipartFormData\\\\\\\",\\\\\\\"utils/parse-multipart-form-data.md\\\\\\\",\\\\\\\"utils/parse-multipart-form-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":576,\\\\\\\"_22\\\\\\\":578,\\\\\\\"_24\\\\\\\":579,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":580},{\\\\\\\"_18\\\\\\\":577,\\\\\\\"_169\\\\\\\":10},\\\\\\\"redirect\\\\\\\",\\\\\\\"utils/redirect.md\\\\\\\",\\\\\\\"utils/redirect\\\\\\\",[],{\\\\\\\"_16\\\\\\\":582,\\\\\\\"_22\\\\\\\":584,\\\\\\\"_24\\\\\\\":585,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":586},{\\\\\\\"_18\\\\\\\":583,\\\\\\\"_169\\\\\\\":10},\\\\\\\"redirectDocument\\\\\\\",\\\\\\\"utils/redirectDocument.md\\\\\\\",\\\\\\\"utils/redirectDocument\\\\\\\",[],{\\\\\\\"_16\\\\\\\":588,\\\\\\\"_22\\\\\\\":590,\\\\\\\"_24\\\\\\\":591,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":592},{\\\\\\\"_18\\\\\\\":589,\\\\\\\"_169\\\\\\\":10},\\\\\\\"replace\\\\\\\",\\\\\\\"utils/replace.md\\\\\\\",\\\\\\\"utils/replace\\\\\\\",[],{\\\\\\\"_16\\\\\\\":594,\\\\\\\"_22\\\\\\\":596,\\\\\\\"_24\\\\\\\":597,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":598},{\\\\\\\"_18\\\\\\\":595},\\\\\\\"Sessions\\\\\\\",\\\\\\\"utils/sessions.md\\\\\\\",\\\\\\\"utils/sessions\\\\\\\",[],{\\\\\\\"_16\\\\\\\":600,\\\\\\\"_22\\\\\\\":602,\\\\\\\"_24\\\\\\\":603,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":604},{\\\\\\\"_18\\\\\\\":601,\\\\\\\"_169\\\\\\\":10},\\\\\\\"unstable_createFileUploadHandler\\\\\\\",\\\\\\\"utils/unstable-create-file-upload-handler.md\\\\\\\",\\\\\\\"utils/unstable-create-file-upload-handler\\\\\\\",[],{\\\\\\\"_16\\\\\\\":606,\\\\\\\"_22\\\\\\\":608,\\\\\\\"_24\\\\\\\":609,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":610},{\\\\\\\"_18\\\\\\\":607,\\\\\\\"_169\\\\\\\":10},\\\\\\\"unstable_createMemoryUploadHandler\\\\\\\",\\\\\\\"utils/unstable-create-memory-upload-handler.md\\\\\\\",\\\\\\\"utils/unstable-create-memory-upload-handler\\\\\\\",[],{\\\\\\\"_16\\\\\\\":612,\\\\\\\"_22\\\\\\\":614,\\\\\\\"_24\\\\\\\":615,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":616},{\\\\\\\"_18\\\\\\\":613,\\\\\\\"_20\\\\\\\":118},\\\\\\\"Styling\\\\\\\",\\\\\\\"styling/index.md\\\\\\\",\\\\\\\"styling\\\\\\\",[617,623,629,635,641,647,653,659],{\\\\\\\"_16\\\\\\\":618,\\\\\\\"_22\\\\\\\":620,\\\\\\\"_24\\\\\\\":621,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":622},{\\\\\\\"_18\\\\\\\":619},\\\\\\\"CSS Bundling\\\\\\\",\\\\\\\"styling/bundling.md\\\\\\\",\\\\\\\"styling/bundling\\\\\\\",[],{\\\\\\\"_16\\\\\\\":624,\\\\\\\"_22\\\\\\\":626,\\\\\\\"_24\\\\\\\":627,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":628},{\\\\\\\"_18\\\\\\\":625},\\\\\\\"Regular CSS\\\\\\\",\\\\\\\"styling/css.md\\\\\\\",\\\\\\\"styling/css\\\\\\\",[],{\\\\\\\"_16\\\\\\\":630,\\\\\\\"_22\\\\\\\":632,\\\\\\\"_24\\\\\\\":633,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":634},{\\\\\\\"_18\\\\\\\":631},\\\\\\\"CSS Imports\\\\\\\",\\\\\\\"styling/css-imports.md\\\\\\\",\\\\\\\"styling/css-imports\\\\\\\",[],{\\\\\\\"_16\\\\\\\":636,\\\\\\\"_22\\\\\\\":638,\\\\\\\"_24\\\\\\\":639,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":640},{\\\\\\\"_18\\\\\\\":637},\\\\\\\"CSS in JS\\\\\\\",\\\\\\\"styling/css-in-js.md\\\\\\\",\\\\\\\"styling/css-in-js\\\\\\\",[],{\\\\\\\"_16\\\\\\\":642,\\\\\\\"_22\\\\\\\":644,\\\\\\\"_24\\\\\\\":645,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":646},{\\\\\\\"_18\\\\\\\":643},\\\\\\\"CSS Modules\\\\\\\",\\\\\\\"styling/css-modules.md\\\\\\\",\\\\\\\"styling/css-modules\\\\\\\",[],{\\\\\\\"_16\\\\\\\":648,\\\\\\\"_22\\\\\\\":650,\\\\\\\"_24\\\\\\\":651,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":652},{\\\\\\\"_18\\\\\\\":649},\\\\\\\"PostCSS\\\\\\\",\\\\\\\"styling/postcss.md\\\\\\\",\\\\\\\"styling/postcss\\\\\\\",[],{\\\\\\\"_16\\\\\\\":654,\\\\\\\"_22\\\\\\\":656,\\\\\\\"_24\\\\\\\":657,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":658},{\\\\\\\"_18\\\\\\\":655},\\\\\\\"Tailwind\\\\\\\",\\\\\\\"styling/tailwind.md\\\\\\\",\\\\\\\"styling/tailwind\\\\\\\",[],{\\\\\\\"_16\\\\\\\":660,\\\\\\\"_22\\\\\\\":662,\\\\\\\"_24\\\\\\\":663,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":664},{\\\\\\\"_18\\\\\\\":661},\\\\\\\"Vanilla Extract\\\\\\\",\\\\\\\"styling/vanilla-extract.md\\\\\\\",\\\\\\\"styling/vanilla-extract\\\\\\\",[],{\\\\\\\"_16\\\\\\\":666,\\\\\\\"_22\\\\\\\":668,\\\\\\\"_24\\\\\\\":669,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":670},{\\\\\\\"_18\\\\\\\":667,\\\\\\\"_20\\\\\\\":132},\\\\\\\"Other API\\\\\\\",\\\\\\\"other-api/index.md\\\\\\\",\\\\\\\"other-api\\\\\\\",[671,677,683,689,695,701],{\\\\\\\"_16\\\\\\\":672,\\\\\\\"_22\\\\\\\":674,\\\\\\\"_24\\\\\\\":675,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":676},{\\\\\\\"_18\\\\\\\":673,\\\\\\\"_20\\\\\\\":39,\\\\\\\"_379\\\\\\\":34},\\\\\\\"@remix-run/dev CLI\\\\\\\",\\\\\\\"other-api/dev.md\\\\\\\",\\\\\\\"other-api/dev\\\\\\\",[],{\\\\\\\"_16\\\\\\\":678,\\\\\\\"_22\\\\\\\":680,\\\\\\\"_24\\\\\\\":681,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":682},{\\\\\\\"_18\\\\\\\":679,\\\\\\\"_20\\\\\\\":46},\\\\\\\"@remix-run/{adapter}\\\\\\\",\\\\\\\"other-api/adapter.md\\\\\\\",\\\\\\\"other-api/adapter\\\\\\\",[],{\\\\\\\"_16\\\\\\\":684,\\\\\\\"_22\\\\\\\":686,\\\\\\\"_24\\\\\\\":687,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":688},{\\\\\\\"_18\\\\\\\":685,\\\\\\\"_20\\\\\\\":46},\\\\\\\"@remix-run/serve\\\\\\\",\\\\\\\"other-api/serve.md\\\\\\\",\\\\\\\"other-api/serve\\\\\\\",[],{\\\\\\\"_16\\\\\\\":690,\\\\\\\"_22\\\\\\\":692,\\\\\\\"_24\\\\\\\":693,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":694},{\\\\\\\"_18\\\\\\\":691},\\\\\\\"create-remix (CLI)\\\\\\\",\\\\\\\"other-api/create-remix.md\\\\\\\",\\\\\\\"other-api/create-remix\\\\\\\",[],{\\\\\\\"_16\\\\\\\":696,\\\\\\\"_22\\\\\\\":698,\\\\\\\"_24\\\\\\\":699,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":700},{\\\\\\\"_18\\\\\\\":697},\\\\\\\"@remix-run/node\\\\\\\",\\\\\\\"other-api/node.md\\\\\\\",\\\\\\\"other-api/node\\\\\\\",[],{\\\\\\\"_16\\\\\\\":702,\\\\\\\"_22\\\\\\\":704,\\\\\\\"_24\\\\\\\":705,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":706},{\\\\\\\"_18\\\\\\\":703},\\\\\\\"@remix-run/testing\\\\\\\",\\\\\\\"other-api/testing.md\\\\\\\",\\\\\\\"other-api/testing\\\\\\\",[],{\\\\\\\"_16\\\\\\\":708,\\\\\\\"_22\\\\\\\":711,\\\\\\\"_24\\\\\\\":712,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":713},{\\\\\\\"_18\\\\\\\":709,\\\\\\\"_20\\\\\\\":710},\\\\\\\"Guides\\\\\\\",10,\\\\\\\"guides/index.md\\\\\\\",\\\\\\\"guides\\\\\\\",[714,720,726,732,738,744,750,756,762,769,775,782,788,794,800,806,812,818,825,831,837,843,849,855,861,867,874,881,887,893,899,905,911,917,923,930,937,943],{\\\\\\\"_16\\\\\\\":715,\\\\\\\"_22\\\\\\\":717,\\\\\\\"_24\\\\\\\":718,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":719},{\\\\\\\"_18\\\\\\\":716},\\\\\\\"Accessibility\\\\\\\",\\\\\\\"guides/accessibility.md\\\\\\\",\\\\\\\"guides/accessibility\\\\\\\",[],{\\\\\\\"_16\\\\\\\":721,\\\\\\\"_22\\\\\\\":723,\\\\\\\"_24\\\\\\\":724,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":725},{\\\\\\\"_18\\\\\\\":722},\\\\\\\"Development Strategy\\\\\\\",\\\\\\\"guides/api-development-strategy.md\\\\\\\",\\\\\\\"guides/api-development-strategy\\\\\\\",[],{\\\\\\\"_16\\\\\\\":727,\\\\\\\"_22\\\\\\\":729,\\\\\\\"_24\\\\\\\":730,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":731},{\\\\\\\"_18\\\\\\\":728},\\\\\\\"API Routes\\\\\\\",\\\\\\\"guides/api-routes.md\\\\\\\",\\\\\\\"guides/api-routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":733,\\\\\\\"_22\\\\\\\":735,\\\\\\\"_24\\\\\\\":736,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":737},{\\\\\\\"_18\\\\\\\":734,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Backend For Frontend\\\\\\\",\\\\\\\"guides/bff.md\\\\\\\",\\\\\\\"guides/bff\\\\\\\",[],{\\\\\\\"_16\\\\\\\":739,\\\\\\\"_22\\\\\\\":741,\\\\\\\"_24\\\\\\\":742,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":743},{\\\\\\\"_18\\\\\\\":740},\\\\\\\"Breadcrumbs Guide\\\\\\\",\\\\\\\"guides/breadcrumbs.md\\\\\\\",\\\\\\\"guides/breadcrumbs\\\\\\\",[],{\\\\\\\"_16\\\\\\\":745,\\\\\\\"_22\\\\\\\":747,\\\\\\\"_24\\\\\\\":748,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":749},{\\\\\\\"_18\\\\\\\":746},\\\\\\\"Browser Support\\\\\\\",\\\\\\\"guides/browser-support.md\\\\\\\",\\\\\\\"guides/browser-support\\\\\\\",[],{\\\\\\\"_16\\\\\\\":751,\\\\\\\"_22\\\\\\\":753,\\\\\\\"_24\\\\\\\":754,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":755},{\\\\\\\"_18\\\\\\\":752},\\\\\\\"Client Data\\\\\\\",\\\\\\\"guides/client-data.md\\\\\\\",\\\\\\\"guides/client-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":757,\\\\\\\"_22\\\\\\\":759,\\\\\\\"_24\\\\\\\":760,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":761},{\\\\\\\"_18\\\\\\\":758},\\\\\\\"Module Constraints\\\\\\\",\\\\\\\"guides/constraints.md\\\\\\\",\\\\\\\"guides/constraints\\\\\\\",[],{\\\\\\\"_16\\\\\\\":763,\\\\\\\"_22\\\\\\\":766,\\\\\\\"_24\\\\\\\":767,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":768},{\\\\\\\"_18\\\\\\\":764,\\\\\\\"_53\\\\\\\":765},\\\\\\\"Contributing\\\\\\\",\\\\\\\"Thank you for contributing to Remix! Here's everything you need to know before you open a pull request.\\\\\\\",\\\\\\\"guides/contributing.md\\\\\\\",\\\\\\\"guides/contributing\\\\\\\",[],{\\\\\\\"_16\\\\\\\":770,\\\\\\\"_22\\\\\\\":772,\\\\\\\"_24\\\\\\\":773,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":774},{\\\\\\\"_18\\\\\\\":771},\\\\\\\"CSS Files\\\\\\\",\\\\\\\"guides/css-files.md\\\\\\\",\\\\\\\"guides/css-files\\\\\\\",[],{\\\\\\\"_16\\\\\\\":776,\\\\\\\"_22\\\\\\\":779,\\\\\\\"_24\\\\\\\":780,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":781},{\\\\\\\"_18\\\\\\\":777,\\\\\\\"_53\\\\\\\":778},\\\\\\\"Data Loading\\\\\\\",\\\\\\\"One of the primary features of Remix is simplifying interactions with the server to get data into components. This document will help you get the most out of data loading in Remix.\\\\\\\",\\\\\\\"guides/data-loading.md\\\\\\\",\\\\\\\"guides/data-loading\\\\\\\",[],{\\\\\\\"_16\\\\\\\":783,\\\\\\\"_22\\\\\\\":785,\\\\\\\"_24\\\\\\\":786,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":787},{\\\\\\\"_18\\\\\\\":784},\\\\\\\"Data Writes\\\\\\\",\\\\\\\"guides/data-writes.md\\\\\\\",\\\\\\\"guides/data-writes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":789,\\\\\\\"_22\\\\\\\":791,\\\\\\\"_24\\\\\\\":792,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":793},{\\\\\\\"_18\\\\\\\":790},\\\\\\\"Dependency optimization\\\\\\\",\\\\\\\"guides/dependency-optimization.md\\\\\\\",\\\\\\\"guides/dependency-optimization\\\\\\\",[],{\\\\\\\"_16\\\\\\\":795,\\\\\\\"_22\\\\\\\":797,\\\\\\\"_24\\\\\\\":798,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":799},{\\\\\\\"_18\\\\\\\":796,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Deployment\\\\\\\",\\\\\\\"guides/deployment.md\\\\\\\",\\\\\\\"guides/deployment\\\\\\\",[],{\\\\\\\"_16\\\\\\\":801,\\\\\\\"_22\\\\\\\":803,\\\\\\\"_24\\\\\\\":804,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":805},{\\\\\\\"_18\\\\\\\":802,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Disabling JavaScript\\\\\\\",\\\\\\\"guides/disabling-javascript.md\\\\\\\",\\\\\\\"guides/disabling-javascript\\\\\\\",[],{\\\\\\\"_16\\\\\\\":807,\\\\\\\"_22\\\\\\\":809,\\\\\\\"_24\\\\\\\":810,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":811},{\\\\\\\"_18\\\\\\\":808},\\\\\\\"Environment Variables\\\\\\\",\\\\\\\"guides/envvars.md\\\\\\\",\\\\\\\"guides/envvars\\\\\\\",[],{\\\\\\\"_16\\\\\\\":813,\\\\\\\"_22\\\\\\\":815,\\\\\\\"_24\\\\\\\":816,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":817},{\\\\\\\"_18\\\\\\\":814},\\\\\\\"Error Handling\\\\\\\",\\\\\\\"guides/errors.md\\\\\\\",\\\\\\\"guides/errors\\\\\\\",[],{\\\\\\\"_16\\\\\\\":819,\\\\\\\"_22\\\\\\\":822,\\\\\\\"_24\\\\\\\":823,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":824},{\\\\\\\"_18\\\\\\\":820,\\\\\\\"_53\\\\\\\":821},\\\\\\\"FAQs\\\\\\\",\\\\\\\"Frequently Asked Questions about Remix\\\\\\\",\\\\\\\"guides/faq.md\\\\\\\",\\\\\\\"guides/faq\\\\\\\",[],{\\\\\\\"_16\\\\\\\":826,\\\\\\\"_22\\\\\\\":828,\\\\\\\"_24\\\\\\\":829,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":830},{\\\\\\\"_18\\\\\\\":827},\\\\\\\"File Uploads\\\\\\\",\\\\\\\"guides/file-uploads.md\\\\\\\",\\\\\\\"guides/file-uploads\\\\\\\",[],{\\\\\\\"_16\\\\\\\":832,\\\\\\\"_22\\\\\\\":834,\\\\\\\"_24\\\\\\\":835,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":836},{\\\\\\\"_18\\\\\\\":833},\\\\\\\"Form Validation\\\\\\\",\\\\\\\"guides/form-validation.md\\\\\\\",\\\\\\\"guides/form-validation\\\\\\\",[],{\\\\\\\"_16\\\\\\\":838,\\\\\\\"_22\\\\\\\":840,\\\\\\\"_24\\\\\\\":841,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":842},{\\\\\\\"_18\\\\\\\":839},\\\\\\\"Gotchas\\\\\\\",\\\\\\\"guides/gotchas.md\\\\\\\",\\\\\\\"guides/gotchas\\\\\\\",[],{\\\\\\\"_16\\\\\\\":844,\\\\\\\"_22\\\\\\\":846,\\\\\\\"_24\\\\\\\":847,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":848},{\\\\\\\"_18\\\\\\\":845,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Index Query Param\\\\\\\",\\\\\\\"guides/index-query-param.md\\\\\\\",\\\\\\\"guides/index-query-param\\\\\\\",[],{\\\\\\\"_16\\\\\\\":850,\\\\\\\"_22\\\\\\\":852,\\\\\\\"_24\\\\\\\":853,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":854},{\\\\\\\"_18\\\\\\\":851},\\\\\\\"Lazy Route Discovery\\\\\\\",\\\\\\\"guides/lazy-route-discovery.md\\\\\\\",\\\\\\\"guides/lazy-route-discovery\\\\\\\",[],{\\\\\\\"_16\\\\\\\":856,\\\\\\\"_22\\\\\\\":858,\\\\\\\"_24\\\\\\\":859,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":860},{\\\\\\\"_18\\\\\\\":857},\\\\\\\"Local TLS\\\\\\\",\\\\\\\"guides/local-tls.md\\\\\\\",\\\\\\\"guides/local-tls\\\\\\\",[],{\\\\\\\"_16\\\\\\\":862,\\\\\\\"_22\\\\\\\":864,\\\\\\\"_24\\\\\\\":865,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":866},{\\\\\\\"_18\\\\\\\":863},\\\\\\\"Manual Dev Server\\\\\\\",\\\\\\\"guides/manual-mode.md\\\\\\\",\\\\\\\"guides/manual-mode\\\\\\\",[],{\\\\\\\"_16\\\\\\\":868,\\\\\\\"_22\\\\\\\":871,\\\\\\\"_24\\\\\\\":872,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":873},{\\\\\\\"_18\\\\\\\":869,\\\\\\\"_53\\\\\\\":870},\\\\\\\"MDX\\\\\\\",\\\\\\\"Remix makes integrating MDX into your project a breeze with built in routes and \\\\\\\\\\\\\\\"import\\\\\\\\\\\\\\\" support.\\\\\\\",\\\\\\\"guides/mdx.md\\\\\\\",\\\\\\\"guides/mdx\\\\\\\",[],{\\\\\\\"_16\\\\\\\":875,\\\\\\\"_22\\\\\\\":878,\\\\\\\"_24\\\\\\\":879,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":880},{\\\\\\\"_18\\\\\\\":876,\\\\\\\"_53\\\\\\\":877},\\\\\\\"Migrating from React Router\\\\\\\",\\\\\\\"Migrating your React Router app to Remix can be done all at once or in stages. This guide will walk you through an iterative approach to get your app running quickly.\\\\\\\",\\\\\\\"guides/migrating-react-router-app.md\\\\\\\",\\\\\\\"guides/migrating-react-router-app\\\\\\\",[],{\\\\\\\"_16\\\\\\\":882,\\\\\\\"_22\\\\\\\":884,\\\\\\\"_24\\\\\\\":885,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":886},{\\\\\\\"_18\\\\\\\":883},\\\\\\\"Not Found Handling\\\\\\\",\\\\\\\"guides/not-found.md\\\\\\\",\\\\\\\"guides/not-found\\\\\\\",[],{\\\\\\\"_16\\\\\\\":888,\\\\\\\"_22\\\\\\\":890,\\\\\\\"_24\\\\\\\":891,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":892},{\\\\\\\"_18\\\\\\\":889},\\\\\\\"Performance\\\\\\\",\\\\\\\"guides/performance.md\\\\\\\",\\\\\\\"guides/performance\\\\\\\",[],{\\\\\\\"_16\\\\\\\":894,\\\\\\\"_22\\\\\\\":896,\\\\\\\"_24\\\\\\\":897,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":898},{\\\\\\\"_18\\\\\\\":895},\\\\\\\"Presets\\\\\\\",\\\\\\\"guides/presets.md\\\\\\\",\\\\\\\"guides/presets\\\\\\\",[],{\\\\\\\"_16\\\\\\\":900,\\\\\\\"_22\\\\\\\":902,\\\\\\\"_24\\\\\\\":903,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":904},{\\\\\\\"_18\\\\\\\":901},\\\\\\\"Resource Routes\\\\\\\",\\\\\\\"guides/resource-routes.md\\\\\\\",\\\\\\\"guides/resource-routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":906,\\\\\\\"_22\\\\\\\":908,\\\\\\\"_24\\\\\\\":909,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":910},{\\\\\\\"_18\\\\\\\":907},\\\\\\\"Server Bundles\\\\\\\",\\\\\\\"guides/server-bundles.md\\\\\\\",\\\\\\\"guides/server-bundles\\\\\\\",[],{\\\\\\\"_16\\\\\\\":912,\\\\\\\"_22\\\\\\\":914,\\\\\\\"_24\\\\\\\":915,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":916},{\\\\\\\"_18\\\\\\\":913},\\\\\\\"Single Fetch\\\\\\\",\\\\\\\"guides/single-fetch.md\\\\\\\",\\\\\\\"guides/single-fetch\\\\\\\",[],{\\\\\\\"_16\\\\\\\":918,\\\\\\\"_22\\\\\\\":920,\\\\\\\"_24\\\\\\\":921,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":922},{\\\\\\\"_18\\\\\\\":919},\\\\\\\"SPA Mode\\\\\\\",\\\\\\\"guides/spa-mode.md\\\\\\\",\\\\\\\"guides/spa-mode\\\\\\\",[],{\\\\\\\"_16\\\\\\\":924,\\\\\\\"_22\\\\\\\":927,\\\\\\\"_24\\\\\\\":928,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":929},{\\\\\\\"_18\\\\\\\":925,\\\\\\\"_53\\\\\\\":926},\\\\\\\"Streaming\\\\\\\",\\\\\\\"When, why, and how to stream with React 18 and Remix's deferred API.\\\\\\\",\\\\\\\"guides/streaming.md\\\\\\\",\\\\\\\"guides/streaming\\\\\\\",[],{\\\\\\\"_16\\\\\\\":931,\\\\\\\"_22\\\\\\\":934,\\\\\\\"_24\\\\\\\":935,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":936},{\\\\\\\"_18\\\\\\\":932,\\\\\\\"_53\\\\\\\":933},\\\\\\\"Templates\\\\\\\",\\\\\\\"The quickest way to get rocking and rolling with Remix\\\\\\\",\\\\\\\"guides/templates.md\\\\\\\",\\\\\\\"guides/templates\\\\\\\",[],{\\\\\\\"_16\\\\\\\":938,\\\\\\\"_22\\\\\\\":940,\\\\\\\"_24\\\\\\\":941,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":942},{\\\\\\\"_18\\\\\\\":939,\\\\\\\"_169\\\\\\\":10},\\\\\\\"TypeScript\\\\\\\",\\\\\\\"guides/typescript.md\\\\\\\",\\\\\\\"guides/typescript\\\\\\\",[],{\\\\\\\"_16\\\\\\\":944,\\\\\\\"_22\\\\\\\":946,\\\\\\\"_24\\\\\\\":947,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":948},{\\\\\\\"_18\\\\\\\":945},\\\\\\\"Vite\\\\\\\",\\\\\\\"guides/vite.md\\\\\\\",\\\\\\\"guides/vite\\\\\\\",[],\\\\\\\"routes/docs.$\\\\\\\",{\\\\\\\"_951\\\\\\\":952},\\\\\\\"doc\\\\\\\",{\\\\\\\"_16\\\\\\\":953,\\\\\\\"_22\\\\\\\":954,\\\\\\\"_955\\\\\\\":956,\\\\\\\"_24\\\\\\\":957,\\\\\\\"_958\\\\\\\":959,\\\\\\\"_27\\\\\\\":965},{\\\\\\\"_18\\\\\\\":3,\\\\\\\"_169\\\\\\\":10},\\\\\\\"docs/file-conventions/root.md\\\\\\\",\\\\\\\"html\\\\\\\",\\\\\\\"\\\\u003ch1 id=\\\\\\\\\\\\\\\"root-route\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#root-route\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003eRoot Route\\\\u003c/h1\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eThe \\\\\\\\\\\\\\\"root\\\\\\\\\\\\\\\" route (\\\\u003ccode\\\\u003eapp/root.tsx\\\\u003c/code\\\\u003e) is the only \\\\u003cem\\\\u003erequired\\\\u003c/em\\\\u003e route in your Remix application because it is the parent to all routes in your \\\\u003ccode\\\\u003eroutes/\\\\u003c/code\\\\u003e directory and is in charge of rendering the root \\\\u003ccode\\\\u003e\\\\u0026#x3C;html\\\\u003e\\\\u003c/code\\\\u003e document.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eBeyond that, it's mostly just like any other route and supports all the standard route exports:\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cul\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003e\\\\u003ca href=\\\\\\\\\\\\\\\"../route/headers\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003eheaders\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003e\\\\u003ca href=\\\\\\\\\\\\\\\"../route/meta\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003emeta\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003e\\\\u003ca href=\\\\\\\\\\\\\\\"../route/links\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003elinks\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003e\\\\u003ca href=\\\\\\\\\\\\\\\"../route/loader\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003eloader\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003e\\\\u003ca href=\\\\\\\\\\\\\\\"../route/client-loader\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003eclientLoader\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003e\\\\u003ca href=\\\\\\\\\\\\\\\"../route/action\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003eaction\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003e\\\\u003ca href=\\\\\\\\\\\\\\\"../route/client-action\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003eclientAction\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003e\\\\u003ca href=\\\\\\\\\\\\\\\"../route/component\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003edefault\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003e\\\\u003ca href=\\\\\\\\\\\\\\\"../route/error-boundary\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003eErrorBoundary\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003e\\\\u003ca href=\\\\\\\\\\\\\\\"../route/hydrate-fallback\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003eHydrateFallback\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003e\\\\u003ca href=\\\\\\\\\\\\\\\"../route/handle\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003ehandle\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003e\\\\u003ca href=\\\\\\\\\\\\\\\"../route/should-revalidate\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003eshouldRevalidate\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003c/ul\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eBecause the root route manages your document, it is the proper place to render a handful of \\\\\\\\\\\\\\\"document-level\\\\\\\\\\\\\\\" components Remix provides. These components are to be used once inside your root route, and they include everything Remix figured out or built in order for your page to render properly.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cdiv data-code-block=\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\" data-filename=\\\\\\\\\\\\\\\"app/root.tsx\\\\\\\\\\\\\\\" data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"tsx\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cpre data-filename=\\\\\\\\\\\\\\\"app/root.tsx\\\\\\\\\\\\\\\" data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"tsx\\\\\\\\\\\\\\\" style=\\\\\\\\\\\\\\\"color: var(--base05);\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"1\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eimport\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003etype\\\\u003c/span\\\\u003e { \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eLinksFunction\\\\u003c/span\\\\u003e } \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003efrom\\\\u003c/span\\\\u003e \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e@remix-run/node\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"; \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e// or cloudflare/deno\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"2\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eimport\\\\u003c/span\\\\u003e {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"3\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eLinks\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"4\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eLiveReload\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"5\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eMeta\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"6\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eOutlet\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"7\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eScripts\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"8\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eScrollRestoration\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"9\\\\\\\\\\\\\\\"\\\\u003e} \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003efrom\\\\u003c/span\\\\u003e \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e@remix-run/react\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\";\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"10\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"11\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eimport\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eglobalStylesheetUrl\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003efrom\\\\u003c/span\\\\u003e \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e./global-styles.css\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\";\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"12\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"13\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eexport\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003econst\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003elinks\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e:\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eLinksFunction\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003c/span\\\\u003e () \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003e\\\\u003c/span\\\\u003e {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"14\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003ereturn\\\\u003c/span\\\\u003e [{ rel: \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003estylesheet\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\", href: \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eglobalStylesheetUrl\\\\u003c/span\\\\u003e }];\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"15\\\\\\\\\\\\\\\"\\\\u003e};\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"16\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"17\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eexport\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003edefault\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003efunction\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003eApp\\\\u003c/span\\\\u003e() {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"18\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003ereturn\\\\u003c/span\\\\u003e (\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"19\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ehtml\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003elang\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003een\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"20\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ehead\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"21\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003emeta\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003echarSet\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003eutf-8\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\" /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"22\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003emeta\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"23\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003ename\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003eviewport\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"24\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003econtent\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003ewidth=device-width, initial-scale=1\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"25\\\\\\\\\\\\\\\"\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"26\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"27\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e{\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e/* All `meta` exports on all routes will render here */\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"28\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eMeta\\\\u003c/span\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"29\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"30\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e{\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e/* All `link` exports on all routes will render here */\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"31\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eLinks\\\\u003c/span\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"32\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;/\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ehead\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"33\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ebody\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"34\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e{\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e/* Child routes render here */\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"35\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eOutlet\\\\u003c/span\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"36\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"37\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e{\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e/* Manages scroll position for client-side transitions */\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"38\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e{\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e/* If you use a nonce-based content security policy for scripts, you must provide the `nonce` prop. Otherwise, omit the nonce prop as shown here. */\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"39\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eScrollRestoration\\\\u003c/span\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"40\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"41\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e{\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e/* Script tags go here */\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"42\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e{\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e/* If you use a nonce-based content security policy for scripts, you must provide the `nonce` prop. Otherwise, omit the nonce prop as shown here. */\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"43\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eScripts\\\\u003c/span\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"44\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"45\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e{\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e/* Sets up automatic reload when you change code */\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"46\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e{\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e/* and only does anything during development */\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"47\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e{\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e/* If you use a nonce-based content security policy for scripts, you must provide the `nonce` prop. Otherwise, omit the nonce prop as shown here. */\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"48\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eLiveReload\\\\u003c/span\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"49\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;/\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ebody\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"50\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;/\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ehtml\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"51\\\\\\\\\\\\\\\"\\\\u003e );\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"52\\\\\\\\\\\\\\\"\\\\u003e}\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003c/code\\\\u003e\\\\u003c/pre\\\\u003e\\\\u003c/div\\\\u003e\\\\\\\\n\\\\u003ch2 id=\\\\\\\\\\\\\\\"layout-export\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#layout-export\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003eLayout Export\\\\u003c/h2\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eBecause the root route manages the document for all routes, it also supports an additional optional \\\\u003ccode\\\\u003eLayout\\\\u003c/code\\\\u003e export. You can read the details in this \\\\u003ca href=\\\\\\\\\\\\\\\"https://github.com/remix-run/remix/discussions/8702\\\\\\\\\\\\\\\"\\\\u003eRFC\\\\u003c/a\\\\u003e but the layout route serves two purposes:\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cul\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003eAvoid duplicating your document/\\\\\\\\\\\\\\\"app shell\\\\\\\\\\\\\\\" across your root component, \\\\u003ccode\\\\u003eHydrateFallback\\\\u003c/code\\\\u003e, and \\\\u003ccode\\\\u003eErrorBoundary\\\\u003c/code\\\\u003e\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003eAvoids React from re-mounting your app shell elements when switching between the root component/\\\\u003ccode\\\\u003eHydrateFallback\\\\u003c/code\\\\u003e/\\\\u003ccode\\\\u003eErrorBoundary\\\\u003c/code\\\\u003e which can cause a FOUC if React removes and re-adds \\\\u003ccode\\\\u003e\\\\u0026#x3C;link rel=\\\\\\\\\\\\\\\"stylesheet\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/code\\\\u003e tags from your \\\\u003ccode\\\\u003e\\\\u0026#x3C;Links\\\\u003e\\\\u003c/code\\\\u003e component.\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003c/ul\\\\u003e\\\\\\\\n\\\\u003cdiv data-code-block=\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\" data-filename=\\\\\\\\\\\\\\\"app/root.tsx\\\\\\\\\\\\\\\" data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"tsx\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cpre data-filename=\\\\\\\\\\\\\\\"app/root.tsx\\\\\\\\\\\\\\\" data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"tsx\\\\\\\\\\\\\\\" style=\\\\\\\\\\\\\\\"color: var(--base05);\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"1\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eimport\\\\u003c/span\\\\u003e {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"2\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eLinks\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"3\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eLiveReload\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"4\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eMeta\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"5\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eOutlet\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"6\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eScripts\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"7\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eScrollRestoration\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"8\\\\\\\\\\\\\\\"\\\\u003e} \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003efrom\\\\u003c/span\\\\u003e \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e@remix-run/react\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\";\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"9\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"10\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eexport\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003efunction\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003eLayout\\\\u003c/span\\\\u003e({ \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003echildren\\\\u003c/span\\\\u003e }) {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"11\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003ereturn\\\\u003c/span\\\\u003e (\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"12\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ehtml\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003elang\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003een\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"13\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ehead\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"14\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003emeta\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003echarSet\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003eutf-8\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\" /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"15\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003emeta\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"16\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003ename\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003eviewport\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"17\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003econtent\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003ewidth=device-width, initial-scale=1\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"18\\\\\\\\\\\\\\\"\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"19\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eMeta\\\\u003c/span\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"20\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eLinks\\\\u003c/span\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"21\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;/\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ehead\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"22\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ebody\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"23\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e{\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e/* children will be the root Component, ErrorBoundary, or HydrateFallback */\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"24\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e{\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003echildren\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"25\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eScripts\\\\u003c/span\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"26\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eScrollRestoration\\\\u003c/span\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"27\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eLiveReload\\\\u003c/span\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"28\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;/\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ebody\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"29\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;/\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ehtml\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"30\\\\\\\\\\\\\\\"\\\\u003e );\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"31\\\\\\\\\\\\\\\"\\\\u003e}\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"32\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"33\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eexport\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003edefault\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003efunction\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003eApp\\\\u003c/span\\\\u003e() {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"34\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003ereturn\\\\u003c/span\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eOutlet\\\\u003c/span\\\\u003e /\\\\u003e;\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"35\\\\\\\\\\\\\\\"\\\\u003e}\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"36\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"37\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eexport\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003efunction\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003eErrorBoundary\\\\u003c/span\\\\u003e() {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"38\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003econst\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eerror\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003euseRouteError\\\\u003c/span\\\\u003e();\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"39\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"40\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eif\\\\u003c/span\\\\u003e (\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003eisRouteErrorResponse\\\\u003c/span\\\\u003e(\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eerror\\\\u003c/span\\\\u003e)) {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"41\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003ereturn\\\\u003c/span\\\\u003e (\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"42\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"43\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eh1\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"44\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e{\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eerror\\\\u003c/span\\\\u003e.\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003estatus\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e{\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eerror\\\\u003c/span\\\\u003e.\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003estatusText\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"45\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;/\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eh1\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"46\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ep\\\\u003c/span\\\\u003e\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e{\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eerror\\\\u003c/span\\\\u003e.\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003edata\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003c/span\\\\u003e\\\\u0026#x3C;/\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ep\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"47\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;/\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"48\\\\\\\\\\\\\\\"\\\\u003e );\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"49\\\\\\\\\\\\\\\"\\\\u003e }\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"50\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"51\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003ereturn\\\\u003c/span\\\\u003e (\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"52\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"53\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eh1\\\\u003c/span\\\\u003e\\\\u003eError!\\\\u0026#x3C;/\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eh1\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"54\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ep\\\\u003c/span\\\\u003e\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e{\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eerror\\\\u003c/span\\\\u003e?.\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003emessage\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e??\\\\u003c/span\\\\u003e \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003eUnknown error\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003c/span\\\\u003e\\\\u0026#x3C;/\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ep\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"55\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;/\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"56\\\\\\\\\\\\\\\"\\\\u003e );\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"57\\\\\\\\\\\\\\\"\\\\u003e}\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003c/code\\\\u003e\\\\u003c/pre\\\\u003e\\\\u003c/div\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003e\\\\u003cstrong\\\\u003eA note on \\\\u003ccode\\\\u003euseLoaderData\\\\u003c/code\\\\u003ein the \\\\u003ccode\\\\u003eLayout\\\\u003c/code\\\\u003e Component\\\\u003c/strong\\\\u003e\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003e\\\\u003ccode\\\\u003euseLoaderData\\\\u003c/code\\\\u003e is not permitted to be used in \\\\u003ccode\\\\u003eErrorBoundary\\\\u003c/code\\\\u003e components because it is intended for the happy-path route rendering, and its typings have a built-in assumption that the \\\\u003ccode\\\\u003eloader\\\\u003c/code\\\\u003e ran successfully and returned something. That assumption doesn't hold in an \\\\u003ccode\\\\u003eErrorBoundary\\\\u003c/code\\\\u003e because it could have been the \\\\u003ccode\\\\u003eloader\\\\u003c/code\\\\u003e that threw and triggered the boundary! To access loader data in \\\\u003ccode\\\\u003eErrorBoundary\\\\u003c/code\\\\u003e's, you can use \\\\u003ccode\\\\u003euseRouteLoaderData\\\\u003c/code\\\\u003e which accounts for the loader data potentially being \\\\u003ccode\\\\u003eundefined\\\\u003c/code\\\\u003e.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eBecause your \\\\u003ccode\\\\u003eLayout\\\\u003c/code\\\\u003e component is used in both success and error flows, this same restriction holds. If you need to fork logic in your \\\\u003ccode\\\\u003eLayout\\\\u003c/code\\\\u003e depending on if it was a successful request or not, you can use \\\\u003ccode\\\\u003euseRouteLoaderData(\\\\\\\\\\\\\\\"root\\\\\\\\\\\\\\\")\\\\u003c/code\\\\u003e and \\\\u003ccode\\\\u003euseRouteError()\\\\u003c/code\\\\u003e.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003e\\\\u003cdocs-warn\\\\u003eBecause your \\\\u003ccode\\\\u003e\\\\u0026#x3C;Layout\\\\u003e\\\\u003c/code\\\\u003e component is used for rendering the \\\\u003ccode\\\\u003eErrorBoundary\\\\u003c/code\\\\u003e, you should be \\\\u003cem\\\\u003every defensive\\\\u003c/em\\\\u003e to ensure that you can render your \\\\u003ccode\\\\u003eErrorBoundary\\\\u003c/code\\\\u003e without encountering any render errors. If your \\\\u003ccode\\\\u003eLayout\\\\u003c/code\\\\u003e throws another error trying to render the boundary, then it can't be used and your UI will fall back to the very minimal built-in default \\\\u003ccode\\\\u003eErrorBoundary\\\\u003c/code\\\\u003e.\\\\u003c/docs-warn\\\\u003e\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cdiv data-code-block=\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\" data-filename=\\\\\\\\\\\\\\\"\\\\u0026#x22;app/root.tsx\\\\u0026#x22;\\\\\\\\\\\\\\\" data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"tsx\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cpre data-filename=\\\\\\\\\\\\\\\"\\\\u0026#x22;app/root.tsx\\\\u0026#x22;\\\\\\\\\\\\\\\" data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"tsx\\\\\\\\\\\\\\\" style=\\\\\\\\\\\\\\\"color: var(--base05);\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"1\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eexport\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003efunction\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003eLayout\\\\u003c/span\\\\u003e({\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"2\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003echildren\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"3\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e:\\\\u003c/span\\\\u003e {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"4\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003echildren\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e:\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eReact\\\\u003c/span\\\\u003e.\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eReactNode\\\\u003c/span\\\\u003e;\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"5\\\\\\\\\\\\\\\"\\\\u003e}) {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"6\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003econst\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003edata\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003euseRouteLoaderData\\\\u003c/span\\\\u003e(\\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003eroot\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\");\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"7\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003econst\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eerror\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003euseRouteError\\\\u003c/span\\\\u003e();\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"8\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"9\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003ereturn\\\\u003c/span\\\\u003e (\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"10\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ehtml\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003elang\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003een\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"11\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ehead\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"12\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003emeta\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003echarSet\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003eutf-8\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\" /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"13\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003emeta\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"14\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003ename\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003eviewport\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"15\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003econtent\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003ewidth=device-width, initial-scale=1\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"16\\\\\\\\\\\\\\\"\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"17\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eMeta\\\\u003c/span\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"18\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eLinks\\\\u003c/span\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"19\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003estyle\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"20\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003edangerouslySetInnerHTML\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e{\\\\u003c/span\\\\u003e{\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"21\\\\\\\\\\\\\\\"\\\\u003e __html: `\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"22\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e :root {\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"23\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e --themeVar: \\\\u003c/span\\\\u003e${\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"24\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e \\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003edata\\\\u003c/span\\\\u003e?.\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ethemeVar\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e \\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e||\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e \\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003edefaultThemeVar\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"25\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e \\\\u003c/span\\\\u003e}\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"26\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e }\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"27\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e \\\\u003c/span\\\\u003e`,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"28\\\\\\\\\\\\\\\"\\\\u003e }\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"29\\\\\\\\\\\\\\\"\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"30\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;/\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ehead\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"31\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ebody\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"32\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e{\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003edata\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e?\\\\u003c/span\\\\u003e (\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"33\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eAnalytics\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003etoken\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e{\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003edata\\\\u003c/span\\\\u003e.\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eanalyticsToken\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003c/span\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-highlight=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"34\\\\\\\\\\\\\\\"\\\\u003e ) \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e:\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base09)\\\\\\\\\\\\\\\"\\\\u003enull\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"35\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e{\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003echildren\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"36\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eScrollRestoration\\\\u003c/span\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"37\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eScripts\\\\u003c/span\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"38\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;/\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ebody\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"39\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;/\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ehtml\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"40\\\\\\\\\\\\\\\"\\\\u003e );\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"41\\\\\\\\\\\\\\\"\\\\u003e}\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003c/code\\\\u003e\\\\u003c/pre\\\\u003e\\\\u003c/div\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eSee also:\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cul\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003e\\\\u003ca href=\\\\\\\\\\\\\\\"../components/meta\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003e\\\\u0026#x3C;Meta\\\\u003e\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003e\\\\u003ca href=\\\\\\\\\\\\\\\"../components/links\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003e\\\\u0026#x3C;Links\\\\u003e\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003e\\\\u003ca href=\\\\\\\\\\\\\\\"../components/outlet\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003e\\\\u0026#x3C;Outlet\\\\u003e\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003e\\\\u003ca href=\\\\\\\\\\\\\\\"../components/scroll-restoration\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003e\\\\u0026#x3C;ScrollRestoration\\\\u003e\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003e\\\\u003ca href=\\\\\\\\\\\\\\\"../components/scripts\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003e\\\\u0026#x3C;Scripts\\\\u003e\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003e\\\\u003ca href=\\\\\\\\\\\\\\\"../components/live-reload\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003e\\\\u0026#x3C;LiveReload\\\\u003e\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003c/ul\\\\u003e\\\\\\\",\\\\\\\"docs/file-conventions/root\\\\\\\",\\\\\\\"headings\\\\\\\",[960],{\\\\\\\"_961\\\\\\\":962,\\\\\\\"_955\\\\\\\":963,\\\\\\\"_24\\\\\\\":964},\\\\\\\"headingLevel\\\\\\\",\\\\\\\"h2\\\\\\\",\\\\\\\"Layout Export\\\\\\\",\\\\\\\"layout-export\\\\\\\",[],\\\\\\\"actionData\\\\\\\",\\\\\\\"errors\\\\\\\"]\\\\n\\\");function $RC(a,b){a=document.getElementById(a);b=document.getElementById(b);b.parentNode.removeChild(b);if(a){a=a.previousSibling;var f=a.parentNode,c=a.nextSibling,e=0;do{if(c\\u0026\\u00268===c.nodeType){var d=c.data;if(\\\"/$\\\"===d)if(0===e)break;else e--;else\\\"$\\\"!==d\\u0026\\u0026\\\"$?\\\"!==d\\u0026\\u0026\\\"$!\\\"!==d||e++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;b.firstChild;)f.insertBefore(b.firstChild,c);a.data=\\\"$\\\";a._reactRetry\\u0026\\u0026a._reactRetry()}};$RC(\\\"B:0\\\",\\\"S:0\\\")window.__reactRouterContext.streamController.close();$RC(\\\"B:1\\\",\\\"S:1\\\")\","
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::devour_data/docs/asset-imports---remix-fee3fbf8.json::7a9c7cf4e73ea406": {
|
|
"id": "boilerplate_duplication::devour_data/docs/asset-imports---remix-fee3fbf8.json::7a9c7cf4e73ea406",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "devour_data/docs/asset-imports---remix-fee3fbf8.json",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 170 lines): devour_data/docs/asset-imports---remix-fee3fbf8.json:3, devour_data/docs/asset-imports---remix.json:3",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 170,
|
|
"locations": [
|
|
{
|
|
"file": "devour_data/docs/asset-imports---remix-fee3fbf8.json",
|
|
"line": 3
|
|
},
|
|
{
|
|
"file": "devour_data/docs/asset-imports---remix.json",
|
|
"line": 3
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" \"type\": \"html\",",
|
|
" \"title\": \"Asset Imports | Remix\",",
|
|
" \"content\": \"DocsBlogResourcesReact Router v7 has been released. View the docsDocsBlogResourcesView code on GitHubChat on DiscordReact Router v7 has been released. View the docsAsset ImportsGetting StartedQuick Start (5m) Tutorial (30m) Upgrading to v2 Community Future Flags Changelog Discussion TopicsIntroduction, Technical Explanation Runtimes, Adapters, Templates, and Deployment Route Configuration Fullstack Data Flow Server vs. Client Code Execution React Router Progressive Enhancement Pending UI State Management Network Concurrency Management Form vs. fetcher Hot Module Replacement Form Resubmissions File Conventions.client modules .server modules Asset Imports entry.client entry.server root Route File Naming vite.config.ts Route Moduleaction clientAction clientLoader Component ErrorBoundary handle headers HydrateFallback links loader meta shouldRevalidate ComponentsAwait Form Link Links LiveReload Meta NavLink Outlet PrefetchPageLinks Scripts ScrollRestoration HooksuseActionData useAsyncError \ud83c\udd95useAsyncValue \ud83c\udd95useBeforeUnload useBlocker useFetcher useFetchers useFormAction useHref useLoaderData useLocation useMatches useNavigate useNavigation useNavigationType useOutlet useOutletContext useParams unstable_usePrompt useResolvedPath useRevalidator \ud83c\udd95useRouteError \ud83c\udd95useRouteLoaderData useSearchParams useSubmit useViewTransitionState UtilitiesCookies createRemixStub data defer isRouteErrorResponse json unstable_parseMultipartFormData redirect redirectDocument replace Sessions unstable_createFileUploadHandler unstable_createMemoryUploadHandler StylingCSS Bundling Regular CSS CSS Imports CSS in JS CSS Modules PostCSS Tailwind Vanilla Extract Other API@remix-run/dev CLI \ud83c\udd95@remix-run/{adapter} @remix-run/serve create-remix (CLI) @remix-run/node @remix-run/testing GuidesAccessibility Development Strategy API Routes Backend For Frontend Breadcrumbs Guide Browser Support Client Data Module Constraints Contributing CSS Files Data Loading Data Writes Dependency optimization Deployment Disabling JavaScript Environment Variables Error Handling FAQs File Uploads Form Validation Gotchas Index Query Param Lazy Route Discovery Local TLS Manual Dev Server MDX Migrating from React Router Not Found Handling Performance Presets Resource Routes Server Bundles Single Fetch SPA Mode Streaming Templates TypeScript Vite Getting StartedQuick Start (5m) Tutorial (30m) Upgrading to v2 Community Future Flags Changelog Discussion TopicsIntroduction, Technical Explanation Runtimes, Adapters, Templates, and Deployment Route Configuration Fullstack Data Flow Server vs. Client Code Execution React Router Progressive Enhancement Pending UI State Management Network Concurrency Management Form vs. fetcher Hot Module Replacement Form Resubmissions File Conventions.client modules .server modules Asset Imports entry.client entry.server root Route File Naming vite.config.ts Route Moduleaction clientAction clientLoader Component ErrorBoundary handle headers HydrateFallback links loader meta shouldRevalidate ComponentsAwait Form Link Links LiveReload Meta NavLink Outlet PrefetchPageLinks Scripts ScrollRestoration HooksuseActionData useAsyncError \ud83c\udd95useAsyncValue \ud83c\udd95useBeforeUnload useBlocker useFetcher useFetchers useFormAction useHref useLoaderData useLocation useMatches useNavigate useNavigation useNavigationType useOutlet useOutletContext useParams unstable_usePrompt useResolvedPath useRevalidator \ud83c\udd95useRouteError \ud83c\udd95useRouteLoaderData useSearchParams useSubmit useViewTransitionState UtilitiesCookies createRemixStub data defer isRouteErrorResponse json unstable_parseMultipartFormData redirect redirectDocument replace Sessions unstable_createFileUploadHandler unstable_createMemoryUploadHandler StylingCSS Bundling Regular CSS CSS Imports CSS in JS CSS Modules PostCSS Tailwind Vanilla Extract Other API@remix-run/dev CLI \ud83c\udd95@remix-run/{adapter} @remix-run/serve create-remix (CLI) @remix-run/node @remix-run/testing GuidesAccessibility Development Strategy API Routes Backend For Frontend Breadcrumbs Guide Browser Support Client Data Module Constraints Contributing CSS Files Data Loading Data Writes Dependency optimization Deployment Disabling JavaScript Environment Variables Error Handling FAQs File Uploads Form Validation Gotchas Index Query Param Lazy Route Discovery Local TLS Manual Dev Server MDX Migrating from React Router Not Found Handling Performance Presets Resource Routes Server Bundles Single Fetch SPA Mode Streaming Templates TypeScript Vite Asset URL Imports Any files inside the app folder can be imported into your modules. Remix will: Copy the file to your browser build directory Fingerprint the file for long-term caching Return the public URL to your module to be used while rendering It's most common for stylesheets but can be used for any file type with a defined loader. import type { LinksFunction } from \\\"@remix-run/node\\\"; // or cloudflare/deno import banner from \\\"./images/banner.jpg\\\"; import styles from \\\"./styles/app.css\\\"; export const links: LinksFunction = () =\\u003e [ { rel: \\\"stylesheet\\\", href: styles }, ]; export default function Page() { return ( \\u003cdiv\\u003e \\u003ch1\\u003eSome Page\\u003c/h1\\u003e \\u003cimg src={banner} /\\u003e \\u003c/div\\u003e ); } \u00a9 Shopify, Inc.\u2022Docs and examples licensed under MITEdit((storageKey2, restoreKey) =\\u003e { if (!window.history.state || !window.history.state.key) { let key = Math.random().toString(32).slice(2); window.history.replaceState({ key }, \\\"\\\"); } try { let positions = JSON.parse(sessionStorage.getItem(storageKey2) || \\\"{}\\\"); let storedY = positions[restoreKey || window.history.state.key]; if (typeof storedY === \\\"number\\\") { window.scrollTo(0, storedY); } } catch (error) { console.error(error); sessionStorage.removeItem(storageKey2); } })(\\\"react-router-scroll-positions\\\", null)window.__reactRouterContext = {\\\"basename\\\":\\\"/\\\",\\\"future\\\":{\\\"unstable_optimizeDeps\\\":true,\\\"unstable_subResourceIntegrity\\\":false,\\\"v8_middleware\\\":true,\\\"v8_splitRouteModules\\\":true,\\\"v8_viteEnvironmentApi\\\":true},\\\"routeDiscovery\\\":{\\\"mode\\\":\\\"initial\\\"},\\\"ssr\\\":true,\\\"isSpaMode\\\":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());import \\\"/assets/manifest-b010e014.js\\\"; import * as route0 from \\\"/assets/root-CtUYAfRS.js\\\"; import * as route1 from \\\"/assets/docs-DauuYQK6.js\\\"; import * as route2 from \\\"/assets/docs._-B4dRXAHv.js\\\"; window.__reactRouterRouteModules = {\\\"root\\\":route0,\\\"routes/docs\\\":route1,\\\"routes/docs.$\\\":route2}; import(\\\"/assets/entry.client-q2ogymM2.js\\\");window.__reactRouterContext.streamController.enqueue(\\\"[{\\\\\\\"_1\\\\\\\":2,\\\\\\\"_961\\\\\\\":-5,\\\\\\\"_962\\\\\\\":-5},\\\\\\\"loaderData\\\\\\\",{\\\\\\\"_3\\\\\\\":4,\\\\\\\"_11\\\\\\\":12,\\\\\\\"_949\\\\\\\":950},\\\\\\\"root\\\\\\\",{\\\\\\\"_5\\\\\\\":6,\\\\\\\"_7\\\\\\\":8,\\\\\\\"_9\\\\\\\":10},\\\\\\\"host\\\\\\\",\\\\\\\"localhost\\\\\\\",\\\\\\\"siteUrl\\\\\\\",\\\\\\\"https://v2.remix.run\\\\\\\",\\\\\\\"noIndex\\\\\\\",false,\\\\\\\"routes/docs\\\\\\\",{\\\\\\\"_13\\\\\\\":14},\\\\\\\"menu\\\\\\\",[15,72,160,214,292,364,527,611,665,707],{\\\\\\\"_16\\\\\\\":17,\\\\\\\"_22\\\\\\\":23,\\\\\\\"_24\\\\\\\":25,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":28},\\\\\\\"attrs\\\\\\\",{\\\\\\\"_18\\\\\\\":19,\\\\\\\"_20\\\\\\\":21},\\\\\\\"title\\\\\\\",\\\\\\\"Getting Started\\\\\\\",\\\\\\\"order\\\\\\\",1,\\\\\\\"filename\\\\\\\",\\\\\\\"start/index.md\\\\\\\",\\\\\\\"slug\\\\\\\",\\\\\\\"start\\\\\\\",\\\\\\\"hasContent\\\\\\\",\\\\\\\"children\\\\\\\",[29,36,43,50,59,66],{\\\\\\\"_16\\\\\\\":30,\\\\\\\"_22\\\\\\\":32,\\\\\\\"_24\\\\\\\":33,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":35},{\\\\\\\"_18\\\\\\\":31,\\\\\\\"_20\\\\\\\":21},\\\\\\\"Quick Start (5m)\\\\\\\",\\\\\\\"start/quickstart.md\\\\\\\",\\\\\\\"start/quickstart\\\\\\\",true,[],{\\\\\\\"_16\\\\\\\":37,\\\\\\\"_22\\\\\\\":40,\\\\\\\"_24\\\\\\\":41,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":42},{\\\\\\\"_18\\\\\\\":38,\\\\\\\"_20\\\\\\\":39},\\\\\\\"Tutorial (30m)\\\\\\\",2,\\\\\\\"start/tutorial.md\\\\\\\",\\\\\\\"start/tutorial\\\\\\\",[],{\\\\\\\"_16\\\\\\\":44,\\\\\\\"_22\\\\\\\":47,\\\\\\\"_24\\\\\\\":48,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":49},{\\\\\\\"_18\\\\\\\":45,\\\\\\\"_20\\\\\\\":46},\\\\\\\"Upgrading to v2\\\\\\\",3,\\\\\\\"start/v2.md\\\\\\\",\\\\\\\"start/v2\\\\\\\",[],{\\\\\\\"_16\\\\\\\":51,\\\\\\\"_22\\\\\\\":56,\\\\\\\"_24\\\\\\\":57,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":58},{\\\\\\\"_18\\\\\\\":52,\\\\\\\"_53\\\\\\\":54,\\\\\\\"_20\\\\\\\":55},\\\\\\\"Community\\\\\\\",\\\\\\\"description\\\\\\\",\\\\\\\"Community resources for learning Remix and related technologies\\\\\\\",4,\\\\\\\"start/community.md\\\\\\\",\\\\\\\"start/community\\\\\\\",[],{\\\\\\\"_16\\\\\\\":60,\\\\\\\"_22\\\\\\\":63,\\\\\\\"_24\\\\\\\":64,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":65},{\\\\\\\"_18\\\\\\\":61,\\\\\\\"_20\\\\\\\":62},\\\\\\\"Future Flags\\\\\\\",5,\\\\\\\"start/future-flags.md\\\\\\\",\\\\\\\"start/future-flags\\\\\\\",[],{\\\\\\\"_16\\\\\\\":67,\\\\\\\"_22\\\\\\\":69,\\\\\\\"_24\\\\\\\":70,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":71},{\\\\\\\"_18\\\\\\\":68},\\\\\\\"Changelog\\\\\\\",\\\\\\\"start/changelog.md\\\\\\\",\\\\\\\"start/changelog\\\\\\\",[],{\\\\\\\"_16\\\\\\\":73,\\\\\\\"_22\\\\\\\":75,\\\\\\\"_24\\\\\\\":76,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":77},{\\\\\\\"_18\\\\\\\":74,\\\\\\\"_20\\\\\\\":39},\\\\\\\"Discussion Topics\\\\\\\",\\\\\\\"discussion/index.md\\\\\\\",\\\\\\\"discussion\\\\\\\",[78,84,90,96,102,108,115,122,129,136,142,148,154],{\\\\\\\"_16\\\\\\\":79,\\\\\\\"_22\\\\\\\":81,\\\\\\\"_24\\\\\\\":82,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":83},{\\\\\\\"_18\\\\\\\":80,\\\\\\\"_20\\\\\\\":21},\\\\\\\"Introduction, Technical Explanation\\\\\\\",\\\\\\\"discussion/introduction.md\\\\\\\",\\\\\\\"discussion/introduction\\\\\\\",[],{\\\\\\\"_16\\\\\\\":85,\\\\\\\"_22\\\\\\\":87,\\\\\\\"_24\\\\\\\":88,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":89},{\\\\\\\"_18\\\\\\\":86,\\\\\\\"_20\\\\\\\":39},\\\\\\\"Runtimes, Adapters, Templates, and Deployment\\\\\\\",\\\\\\\"discussion/runtimes.md\\\\\\\",\\\\\\\"discussion/runtimes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":91,\\\\\\\"_22\\\\\\\":93,\\\\\\\"_24\\\\\\\":94,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":95},{\\\\\\\"_18\\\\\\\":92,\\\\\\\"_20\\\\\\\":46},\\\\\\\"Route Configuration\\\\\\\",\\\\\\\"discussion/routes.md\\\\\\\",\\\\\\\"discussion/routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":97,\\\\\\\"_22\\\\\\\":99,\\\\\\\"_24\\\\\\\":100,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":101},{\\\\\\\"_18\\\\\\\":98,\\\\\\\"_20\\\\\\\":55},\\\\\\\"Fullstack Data Flow\\\\\\\",\\\\\\\"discussion/data-flow.md\\\\\\\",\\\\\\\"discussion/data-flow\\\\\\\",[],{\\\\\\\"_16\\\\\\\":103,\\\\\\\"_22\\\\\\\":105,\\\\\\\"_24\\\\\\\":106,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":107},{\\\\\\\"_18\\\\\\\":104,\\\\\\\"_20\\\\\\\":62},\\\\\\\"Server vs. Client Code Execution\\\\\\\",\\\\\\\"discussion/server-vs-client.md\\\\\\\",\\\\\\\"discussion/server-vs-client\\\\\\\",[],{\\\\\\\"_16\\\\\\\":109,\\\\\\\"_22\\\\\\\":112,\\\\\\\"_24\\\\\\\":113,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":114},{\\\\\\\"_18\\\\\\\":110,\\\\\\\"_20\\\\\\\":111},\\\\\\\"React Router\\\\\\\",6,\\\\\\\"discussion/react-router.md\\\\\\\",\\\\\\\"discussion/react-router\\\\\\\",[],{\\\\\\\"_16\\\\\\\":116,\\\\\\\"_22\\\\\\\":119,\\\\\\\"_24\\\\\\\":120,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":121},{\\\\\\\"_18\\\\\\\":117,\\\\\\\"_20\\\\\\\":118},\\\\\\\"Progressive Enhancement\\\\\\\",7,\\\\\\\"discussion/progressive-enhancement.md\\\\\\\",\\\\\\\"discussion/progressive-enhancement\\\\\\\",[],{\\\\\\\"_16\\\\\\\":123,\\\\\\\"_22\\\\\\\":126,\\\\\\\"_24\\\\\\\":127,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":128},{\\\\\\\"_18\\\\\\\":124,\\\\\\\"_20\\\\\\\":125},\\\\\\\"Pending UI\\\\\\\",8,\\\\\\\"discussion/pending-ui.md\\\\\\\",\\\\\\\"discussion/pending-ui\\\\\\\",[],{\\\\\\\"_16\\\\\\\":130,\\\\\\\"_22\\\\\\\":133,\\\\\\\"_24\\\\\\\":134,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":135},{\\\\\\\"_18\\\\\\\":131,\\\\\\\"_20\\\\\\\":132},\\\\\\\"State Management\\\\\\\",9,\\\\\\\"discussion/state-management.md\\\\\\\",\\\\\\\"discussion/state-management\\\\\\\",[],{\\\\\\\"_16\\\\\\\":137,\\\\\\\"_22\\\\\\\":139,\\\\\\\"_24\\\\\\\":140,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":141},{\\\\\\\"_18\\\\\\\":138},\\\\\\\"Network Concurrency Management\\\\\\\",\\\\\\\"discussion/concurrency.md\\\\\\\",\\\\\\\"discussion/concurrency\\\\\\\",[],{\\\\\\\"_16\\\\\\\":143,\\\\\\\"_22\\\\\\\":145,\\\\\\\"_24\\\\\\\":146,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":147},{\\\\\\\"_18\\\\\\\":144},\\\\\\\"Form vs. fetcher\\\\\\\",\\\\\\\"discussion/form-vs-fetcher.md\\\\\\\",\\\\\\\"discussion/form-vs-fetcher\\\\\\\",[],{\\\\\\\"_16\\\\\\\":149,\\\\\\\"_22\\\\\\\":151,\\\\\\\"_24\\\\\\\":152,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":153},{\\\\\\\"_18\\\\\\\":150},\\\\\\\"Hot Module Replacement\\\\\\\",\\\\\\\"discussion/hot-module-replacement.md\\\\\\\",\\\\\\\"discussion/hot-module-replacement\\\\\\\",[],{\\\\\\\"_16\\\\\\\":155,\\\\\\\"_22\\\\\\\":157,\\\\\\\"_24\\\\\\\":158,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":159},{\\\\\\\"_18\\\\\\\":156},\\\\\\\"Form Resubmissions\\\\\\\",\\\\\\\"discussion/resubmissions.md\\\\\\\",\\\\\\\"discussion/resubmissions\\\\\\\",[],{\\\\\\\"_16\\\\\\\":161,\\\\\\\"_22\\\\\\\":163,\\\\\\\"_24\\\\\\\":164,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":165},{\\\\\\\"_18\\\\\\\":162,\\\\\\\"_20\\\\\\\":46},\\\\\\\"File Conventions\\\\\\\",\\\\\\\"file-conventions/index.md\\\\\\\",\\\\\\\"file-conventions\\\\\\\",[166,173,179,185,191,197,202,208],{\\\\\\\"_16\\\\\\\":167,\\\\\\\"_22\\\\\\\":170,\\\\\\\"_24\\\\\\\":171,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":172},{\\\\\\\"_18\\\\\\\":168,\\\\\\\"_169\\\\\\\":10},\\\\\\\".client modules\\\\\\\",\\\\\\\"toc\\\\\\\",\\\\\\\"file-conventions/-client.md\\\\\\\",\\\\\\\"file-conventions/-client\\\\\\\",[],{\\\\\\\"_16\\\\\\\":174,\\\\\\\"_22\\\\\\\":176,\\\\\\\"_24\\\\\\\":177,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":178},{\\\\\\\"_18\\\\\\\":175,\\\\\\\"_169\\\\\\\":10},\\\\\\\".server modules\\\\\\\",\\\\\\\"file-conventions/-server.md\\\\\\\",\\\\\\\"file-conventions/-server\\\\\\\",[],{\\\\\\\"_16\\\\\\\":180,\\\\\\\"_22\\\\\\\":182,\\\\\\\"_24\\\\\\\":183,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":184},{\\\\\\\"_18\\\\\\\":181,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Asset Imports\\\\\\\",\\\\\\\"file-conventions/asset-imports.md\\\\\\\",\\\\\\\"file-conventions/asset-imports\\\\\\\",[],{\\\\\\\"_16\\\\\\\":186,\\\\\\\"_22\\\\\\\":188,\\\\\\\"_24\\\\\\\":189,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":190},{\\\\\\\"_18\\\\\\\":187,\\\\\\\"_169\\\\\\\":10},\\\\\\\"entry.client\\\\\\\",\\\\\\\"file-conventions/entry.client.md\\\\\\\",\\\\\\\"file-conventions/entry.client\\\\\\\",[],{\\\\\\\"_16\\\\\\\":192,\\\\\\\"_22\\\\\\\":194,\\\\\\\"_24\\\\\\\":195,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":196},{\\\\\\\"_18\\\\\\\":193,\\\\\\\"_169\\\\\\\":10},\\\\\\\"entry.server\\\\\\\",\\\\\\\"file-conventions/entry.server.md\\\\\\\",\\\\\\\"file-conventions/entry.server\\\\\\\",[],{\\\\\\\"_16\\\\\\\":198,\\\\\\\"_22\\\\\\\":199,\\\\\\\"_24\\\\\\\":200,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":201},{\\\\\\\"_18\\\\\\\":3,\\\\\\\"_169\\\\\\\":10},\\\\\\\"file-conventions/root.md\\\\\\\",\\\\\\\"file-conventions/root\\\\\\\",[],{\\\\\\\"_16\\\\\\\":203,\\\\\\\"_22\\\\\\\":205,\\\\\\\"_24\\\\\\\":206,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":207},{\\\\\\\"_18\\\\\\\":204},\\\\\\\"Route File Naming\\\\\\\",\\\\\\\"file-conventions/routes.md\\\\\\\",\\\\\\\"file-conventions/routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":209,\\\\\\\"_22\\\\\\\":211,\\\\\\\"_24\\\\\\\":212,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":213},{\\\\\\\"_18\\\\\\\":210},\\\\\\\"vite.config.ts\\\\\\\",\\\\\\\"file-conventions/vite-config.md\\\\\\\",\\\\\\\"file-conventions/vite-config\\\\\\\",[],{\\\\\\\"_16\\\\\\\":215,\\\\\\\"_22\\\\\\\":217,\\\\\\\"_24\\\\\\\":218,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":219},{\\\\\\\"_18\\\\\\\":216,\\\\\\\"_20\\\\\\\":55},\\\\\\\"Route Module\\\\\\\",\\\\\\\"route/index.md\\\\\\\",\\\\\\\"route\\\\\\\",[220,226,232,238,244,250,256,262,268,274,280,286],{\\\\\\\"_16\\\\\\\":221,\\\\\\\"_22\\\\\\\":223,\\\\\\\"_24\\\\\\\":224,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":225},{\\\\\\\"_18\\\\\\\":222},\\\\\\\"action\\\\\\\",\\\\\\\"route/action.md\\\\\\\",\\\\\\\"route/action\\\\\\\",[],{\\\\\\\"_16\\\\\\\":227,\\\\\\\"_22\\\\\\\":229,\\\\\\\"_24\\\\\\\":230,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":231},{\\\\\\\"_18\\\\\\\":228},\\\\\\\"clientAction\\\\\\\",\\\\\\\"route/client-action.md\\\\\\\",\\\\\\\"route/client-action\\\\\\\",[],{\\\\\\\"_16\\\\\\\":233,\\\\\\\"_22\\\\\\\":235,\\\\\\\"_24\\\\\\\":236,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":237},{\\\\\\\"_18\\\\\\\":234},\\\\\\\"clientLoader\\\\\\\",\\\\\\\"route/client-loader.md\\\\\\\",\\\\\\\"route/client-loader\\\\\\\",[],{\\\\\\\"_16\\\\\\\":239,\\\\\\\"_22\\\\\\\":241,\\\\\\\"_24\\\\\\\":242,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":243},{\\\\\\\"_18\\\\\\\":240},\\\\\\\"Component\\\\\\\",\\\\\\\"route/component.md\\\\\\\",\\\\\\\"route/component\\\\\\\",[],{\\\\\\\"_16\\\\\\\":245,\\\\\\\"_22\\\\\\\":247,\\\\\\\"_24\\\\\\\":248,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":249},{\\\\\\\"_18\\\\\\\":246},\\\\\\\"ErrorBoundary\\\\\\\",\\\\\\\"route/error-boundary.md\\\\\\\",\\\\\\\"route/error-boundary\\\\\\\",[],{\\\\\\\"_16\\\\\\\":251,\\\\\\\"_22\\\\\\\":253,\\\\\\\"_24\\\\\\\":254,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":255},{\\\\\\\"_18\\\\\\\":252},\\\\\\\"handle\\\\\\\",\\\\\\\"route/handle.md\\\\\\\",\\\\\\\"route/handle\\\\\\\",[],{\\\\\\\"_16\\\\\\\":257,\\\\\\\"_22\\\\\\\":259,\\\\\\\"_24\\\\\\\":260,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":261},{\\\\\\\"_18\\\\\\\":258},\\\\\\\"headers\\\\\\\",\\\\\\\"route/headers.md\\\\\\\",\\\\\\\"route/headers\\\\\\\",[],{\\\\\\\"_16\\\\\\\":263,\\\\\\\"_22\\\\\\\":265,\\\\\\\"_24\\\\\\\":266,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":267},{\\\\\\\"_18\\\\\\\":264},\\\\\\\"HydrateFallback\\\\\\\",\\\\\\\"route/hydrate-fallback.md\\\\\\\",\\\\\\\"route/hydrate-fallback\\\\\\\",[],{\\\\\\\"_16\\\\\\\":269,\\\\\\\"_22\\\\\\\":271,\\\\\\\"_24\\\\\\\":272,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":273},{\\\\\\\"_18\\\\\\\":270},\\\\\\\"links\\\\\\\",\\\\\\\"route/links.md\\\\\\\",\\\\\\\"route/links\\\\\\\",[],{\\\\\\\"_16\\\\\\\":275,\\\\\\\"_22\\\\\\\":277,\\\\\\\"_24\\\\\\\":278,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":279},{\\\\\\\"_18\\\\\\\":276},\\\\\\\"loader\\\\\\\",\\\\\\\"route/loader.md\\\\\\\",\\\\\\\"route/loader\\\\\\\",[],{\\\\\\\"_16\\\\\\\":281,\\\\\\\"_22\\\\\\\":283,\\\\\\\"_24\\\\\\\":284,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":285},{\\\\\\\"_18\\\\\\\":282},\\\\\\\"meta\\\\\\\",\\\\\\\"route/meta.md\\\\\\\",\\\\\\\"route/meta\\\\\\\",[],{\\\\\\\"_16\\\\\\\":287,\\\\\\\"_22\\\\\\\":289,\\\\\\\"_24\\\\\\\":290,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":291},{\\\\\\\"_18\\\\\\\":288},\\\\\\\"shouldRevalidate\\\\\\\",\\\\\\\"route/should-revalidate.md\\\\\\\",\\\\\\\"route/should-revalidate\\\\\\\",[],{\\\\\\\"_16\\\\\\\":293,\\\\\\\"_22\\\\\\\":295,\\\\\\\"_24\\\\\\\":296,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":297},{\\\\\\\"_18\\\\\\\":294,\\\\\\\"_20\\\\\\\":62},\\\\\\\"Components\\\\\\\",\\\\\\\"components/index.md\\\\\\\",\\\\\\\"components\\\\\\\",[298,304,310,316,322,328,334,340,346,352,358],{\\\\\\\"_16\\\\\\\":299,\\\\\\\"_22\\\\\\\":301,\\\\\\\"_24\\\\\\\":302,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":303},{\\\\\\\"_18\\\\\\\":300},\\\\\\\"Await\\\\\\\",\\\\\\\"components/await.md\\\\\\\",\\\\\\\"components/await\\\\\\\",[],{\\\\\\\"_16\\\\\\\":305,\\\\\\\"_22\\\\\\\":307,\\\\\\\"_24\\\\\\\":308,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":309},{\\\\\\\"_18\\\\\\\":306},\\\\\\\"Form\\\\\\\",\\\\\\\"components/form.md\\\\\\\",\\\\\\\"components/form\\\\\\\",[],{\\\\\\\"_16\\\\\\\":311,\\\\\\\"_22\\\\\\\":313,\\\\\\\"_24\\\\\\\":314,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":315},{\\\\\\\"_18\\\\\\\":312},\\\\\\\"Link\\\\\\\",\\\\\\\"components/link.md\\\\\\\",\\\\\\\"components/link\\\\\\\",[],{\\\\\\\"_16\\\\\\\":317,\\\\\\\"_22\\\\\\\":319,\\\\\\\"_24\\\\\\\":320,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":321},{\\\\\\\"_18\\\\\\\":318,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Links\\\\\\\",\\\\\\\"components/links.md\\\\\\\",\\\\\\\"components/links\\\\\\\",[],{\\\\\\\"_16\\\\\\\":323,\\\\\\\"_22\\\\\\\":325,\\\\\\\"_24\\\\\\\":326,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":327},{\\\\\\\"_18\\\\\\\":324,\\\\\\\"_169\\\\\\\":10},\\\\\\\"LiveReload\\\\\\\",\\\\\\\"components/live-reload.md\\\\\\\",\\\\\\\"components/live-reload\\\\\\\",[],{\\\\\\\"_16\\\\\\\":329,\\\\\\\"_22\\\\\\\":331,\\\\\\\"_24\\\\\\\":332,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":333},{\\\\\\\"_18\\\\\\\":330,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Meta\\\\\\\",\\\\\\\"components/meta.md\\\\\\\",\\\\\\\"components/meta\\\\\\\",[],{\\\\\\\"_16\\\\\\\":335,\\\\\\\"_22\\\\\\\":337,\\\\\\\"_24\\\\\\\":338,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":339},{\\\\\\\"_18\\\\\\\":336},\\\\\\\"NavLink\\\\\\\",\\\\\\\"components/nav-link.md\\\\\\\",\\\\\\\"components/nav-link\\\\\\\",[],{\\\\\\\"_16\\\\\\\":341,\\\\\\\"_22\\\\\\\":343,\\\\\\\"_24\\\\\\\":344,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":345},{\\\\\\\"_18\\\\\\\":342},\\\\\\\"Outlet\\\\\\\",\\\\\\\"components/outlet.md\\\\\\\",\\\\\\\"components/outlet\\\\\\\",[],{\\\\\\\"_16\\\\\\\":347,\\\\\\\"_22\\\\\\\":349,\\\\\\\"_24\\\\\\\":350,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":351},{\\\\\\\"_18\\\\\\\":348,\\\\\\\"_169\\\\\\\":10},\\\\\\\"PrefetchPageLinks\\\\\\\",\\\\\\\"components/prefetch-page-links.md\\\\\\\",\\\\\\\"components/prefetch-page-links\\\\\\\",[],{\\\\\\\"_16\\\\\\\":353,\\\\\\\"_22\\\\\\\":355,\\\\\\\"_24\\\\\\\":356,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":357},{\\\\\\\"_18\\\\\\\":354,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Scripts\\\\\\\",\\\\\\\"components/scripts.md\\\\\\\",\\\\\\\"components/scripts\\\\\\\",[],{\\\\\\\"_16\\\\\\\":359,\\\\\\\"_22\\\\\\\":361,\\\\\\\"_24\\\\\\\":362,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":363},{\\\\\\\"_18\\\\\\\":360},\\\\\\\"ScrollRestoration\\\\\\\",\\\\\\\"components/scroll-restoration.md\\\\\\\",\\\\\\\"components/scroll-restoration\\\\\\\",[],{\\\\\\\"_16\\\\\\\":365,\\\\\\\"_22\\\\\\\":367,\\\\\\\"_24\\\\\\\":368,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":369},{\\\\\\\"_18\\\\\\\":366,\\\\\\\"_20\\\\\\\":111},\\\\\\\"Hooks\\\\\\\",\\\\\\\"hooks/index.md\\\\\\\",\\\\\\\"hooks\\\\\\\",[370,376,383,389,395,401,407,413,419,425,431,437,443,449,455,461,467,473,479,485,491,497,503,509,515,521],{\\\\\\\"_16\\\\\\\":371,\\\\\\\"_22\\\\\\\":373,\\\\\\\"_24\\\\\\\":374,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":375},{\\\\\\\"_18\\\\\\\":372,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useActionData\\\\\\\",\\\\\\\"hooks/use-action-data.md\\\\\\\",\\\\\\\"hooks/use-action-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":377,\\\\\\\"_22\\\\\\\":380,\\\\\\\"_24\\\\\\\":381,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":382},{\\\\\\\"_18\\\\\\\":378,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useAsyncError\\\\\\\",\\\\\\\"new\\\\\\\",\\\\\\\"hooks/use-async-error.md\\\\\\\",\\\\\\\"hooks/use-async-error\\\\\\\",[],{\\\\\\\"_16\\\\\\\":384,\\\\\\\"_22\\\\\\\":386,\\\\\\\"_24\\\\\\\":387,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":388},{\\\\\\\"_18\\\\\\\":385,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useAsyncValue\\\\\\\",\\\\\\\"hooks/use-async-value.md\\\\\\\",\\\\\\\"hooks/use-async-value\\\\\\\",[],{\\\\\\\"_16\\\\\\\":390,\\\\\\\"_22\\\\\\\":392,\\\\\\\"_24\\\\\\\":393,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":394},{\\\\\\\"_18\\\\\\\":391,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useBeforeUnload\\\\\\\",\\\\\\\"hooks/use-before-unload.md\\\\\\\",\\\\\\\"hooks/use-before-unload\\\\\\\",[],{\\\\\\\"_16\\\\\\\":396,\\\\\\\"_22\\\\\\\":398,\\\\\\\"_24\\\\\\\":399,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":400},{\\\\\\\"_18\\\\\\\":397},\\\\\\\"useBlocker\\\\\\\",\\\\\\\"hooks/use-blocker.md\\\\\\\",\\\\\\\"hooks/use-blocker\\\\\\\",[],{\\\\\\\"_16\\\\\\\":402,\\\\\\\"_22\\\\\\\":404,\\\\\\\"_24\\\\\\\":405,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":406},{\\\\\\\"_18\\\\\\\":403},\\\\\\\"useFetcher\\\\\\\",\\\\\\\"hooks/use-fetcher.md\\\\\\\",\\\\\\\"hooks/use-fetcher\\\\\\\",[],{\\\\\\\"_16\\\\\\\":408,\\\\\\\"_22\\\\\\\":410,\\\\\\\"_24\\\\\\\":411,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":412},{\\\\\\\"_18\\\\\\\":409,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useFetchers\\\\\\\",\\\\\\\"hooks/use-fetchers.md\\\\\\\",\\\\\\\"hooks/use-fetchers\\\\\\\",[],{\\\\\\\"_16\\\\\\\":414,\\\\\\\"_22\\\\\\\":416,\\\\\\\"_24\\\\\\\":417,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":418},{\\\\\\\"_18\\\\\\\":415},\\\\\\\"useFormAction\\\\\\\",\\\\\\\"hooks/use-form-action.md\\\\\\\",\\\\\\\"hooks/use-form-action\\\\\\\",[],{\\\\\\\"_16\\\\\\\":420,\\\\\\\"_22\\\\\\\":422,\\\\\\\"_24\\\\\\\":423,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":424},{\\\\\\\"_18\\\\\\\":421},\\\\\\\"useHref\\\\\\\",\\\\\\\"hooks/use-href.md\\\\\\\",\\\\\\\"hooks/use-href\\\\\\\",[],{\\\\\\\"_16\\\\\\\":426,\\\\\\\"_22\\\\\\\":428,\\\\\\\"_24\\\\\\\":429,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":430},{\\\\\\\"_18\\\\\\\":427},\\\\\\\"useLoaderData\\\\\\\",\\\\\\\"hooks/use-loader-data.md\\\\\\\",\\\\\\\"hooks/use-loader-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":432,\\\\\\\"_22\\\\\\\":434,\\\\\\\"_24\\\\\\\":435,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":436},{\\\\\\\"_18\\\\\\\":433},\\\\\\\"useLocation\\\\\\\",\\\\\\\"hooks/use-location.md\\\\\\\",\\\\\\\"hooks/use-location\\\\\\\",[],{\\\\\\\"_16\\\\\\\":438,\\\\\\\"_22\\\\\\\":440,\\\\\\\"_24\\\\\\\":441,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":442},{\\\\\\\"_18\\\\\\\":439,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useMatches\\\\\\\",\\\\\\\"hooks/use-matches.md\\\\\\\",\\\\\\\"hooks/use-matches\\\\\\\",[],{\\\\\\\"_16\\\\\\\":444,\\\\\\\"_22\\\\\\\":446,\\\\\\\"_24\\\\\\\":447,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":448},{\\\\\\\"_18\\\\\\\":445},\\\\\\\"useNavigate\\\\\\\",\\\\\\\"hooks/use-navigate.md\\\\\\\",\\\\\\\"hooks/use-navigate\\\\\\\",[],{\\\\\\\"_16\\\\\\\":450,\\\\\\\"_22\\\\\\\":452,\\\\\\\"_24\\\\\\\":453,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":454},{\\\\\\\"_18\\\\\\\":451},\\\\\\\"useNavigation\\\\\\\",\\\\\\\"hooks/use-navigation.md\\\\\\\",\\\\\\\"hooks/use-navigation\\\\\\\",[],{\\\\\\\"_16\\\\\\\":456,\\\\\\\"_22\\\\\\\":458,\\\\\\\"_24\\\\\\\":459,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":460},{\\\\\\\"_18\\\\\\\":457},\\\\\\\"useNavigationType\\\\\\\",\\\\\\\"hooks/use-navigation-type.md\\\\\\\",\\\\\\\"hooks/use-navigation-type\\\\\\\",[],{\\\\\\\"_16\\\\\\\":462,\\\\\\\"_22\\\\\\\":464,\\\\\\\"_24\\\\\\\":465,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":466},{\\\\\\\"_18\\\\\\\":463},\\\\\\\"useOutlet\\\\\\\",\\\\\\\"hooks/use-outlet.md\\\\\\\",\\\\\\\"hooks/use-outlet\\\\\\\",[],{\\\\\\\"_16\\\\\\\":468,\\\\\\\"_22\\\\\\\":470,\\\\\\\"_24\\\\\\\":471,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":472},{\\\\\\\"_18\\\\\\\":469},\\\\\\\"useOutletContext\\\\\\\",\\\\\\\"hooks/use-outlet-context.md\\\\\\\",\\\\\\\"hooks/use-outlet-context\\\\\\\",[],{\\\\\\\"_16\\\\\\\":474,\\\\\\\"_22\\\\\\\":476,\\\\\\\"_24\\\\\\\":477,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":478},{\\\\\\\"_18\\\\\\\":475},\\\\\\\"useParams\\\\\\\",\\\\\\\"hooks/use-params.md\\\\\\\",\\\\\\\"hooks/use-params\\\\\\\",[],{\\\\\\\"_16\\\\\\\":480,\\\\\\\"_22\\\\\\\":482,\\\\\\\"_24\\\\\\\":483,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":484},{\\\\\\\"_18\\\\\\\":481},\\\\\\\"unstable_usePrompt\\\\\\\",\\\\\\\"hooks/use-prompt.md\\\\\\\",\\\\\\\"hooks/use-prompt\\\\\\\",[],{\\\\\\\"_16\\\\\\\":486,\\\\\\\"_22\\\\\\\":488,\\\\\\\"_24\\\\\\\":489,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":490},{\\\\\\\"_18\\\\\\\":487},\\\\\\\"useResolvedPath\\\\\\\",\\\\\\\"hooks/use-resolved-path.md\\\\\\\",\\\\\\\"hooks/use-resolved-path\\\\\\\",[],{\\\\\\\"_16\\\\\\\":492,\\\\\\\"_22\\\\\\\":494,\\\\\\\"_24\\\\\\\":495,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":496},{\\\\\\\"_18\\\\\\\":493,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useRevalidator\\\\\\\",\\\\\\\"hooks/use-revalidator.md\\\\\\\",\\\\\\\"hooks/use-revalidator\\\\\\\",[],{\\\\\\\"_16\\\\\\\":498,\\\\\\\"_22\\\\\\\":500,\\\\\\\"_24\\\\\\\":501,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":502},{\\\\\\\"_18\\\\\\\":499,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useRouteError\\\\\\\",\\\\\\\"hooks/use-route-error.md\\\\\\\",\\\\\\\"hooks/use-route-error\\\\\\\",[],{\\\\\\\"_16\\\\\\\":504,\\\\\\\"_22\\\\\\\":506,\\\\\\\"_24\\\\\\\":507,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":508},{\\\\\\\"_18\\\\\\\":505,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useRouteLoaderData\\\\\\\",\\\\\\\"hooks/use-route-loader-data.md\\\\\\\",\\\\\\\"hooks/use-route-loader-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":510,\\\\\\\"_22\\\\\\\":512,\\\\\\\"_24\\\\\\\":513,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":514},{\\\\\\\"_18\\\\\\\":511},\\\\\\\"useSearchParams\\\\\\\",\\\\\\\"hooks/use-search-params.md\\\\\\\",\\\\\\\"hooks/use-search-params\\\\\\\",[],{\\\\\\\"_16\\\\\\\":516,\\\\\\\"_22\\\\\\\":518,\\\\\\\"_24\\\\\\\":519,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":520},{\\\\\\\"_18\\\\\\\":517},\\\\\\\"useSubmit\\\\\\\",\\\\\\\"hooks/use-submit.md\\\\\\\",\\\\\\\"hooks/use-submit\\\\\\\",[],{\\\\\\\"_16\\\\\\\":522,\\\\\\\"_22\\\\\\\":524,\\\\\\\"_24\\\\\\\":525,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":526},{\\\\\\\"_18\\\\\\\":523,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useViewTransitionState\\\\\\\",\\\\\\\"hooks/use-view-transition-state.md\\\\\\\",\\\\\\\"hooks/use-view-transition-state\\\\\\\",[],{\\\\\\\"_16\\\\\\\":528,\\\\\\\"_22\\\\\\\":530,\\\\\\\"_24\\\\\\\":531,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":532},{\\\\\\\"_18\\\\\\\":529,\\\\\\\"_20\\\\\\\":111},\\\\\\\"Utilities\\\\\\\",\\\\\\\"utils/index.md\\\\\\\",\\\\\\\"utils\\\\\\\",[533,539,545,551,557,563,569,575,581,587,593,599,605],{\\\\\\\"_16\\\\\\\":534,\\\\\\\"_22\\\\\\\":536,\\\\\\\"_24\\\\\\\":537,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":538},{\\\\\\\"_18\\\\\\\":535},\\\\\\\"Cookies\\\\\\\",\\\\\\\"utils/cookies.md\\\\\\\",\\\\\\\"utils/cookies\\\\\\\",[],{\\\\\\\"_16\\\\\\\":540,\\\\\\\"_22\\\\\\\":542,\\\\\\\"_24\\\\\\\":543,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":544},{\\\\\\\"_18\\\\\\\":541},\\\\\\\"createRemixStub\\\\\\\",\\\\\\\"utils/create-remix-stub.md\\\\\\\",\\\\\\\"utils/create-remix-stub\\\\\\\",[],{\\\\\\\"_16\\\\\\\":546,\\\\\\\"_22\\\\\\\":548,\\\\\\\"_24\\\\\\\":549,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":550},{\\\\\\\"_18\\\\\\\":547,\\\\\\\"_169\\\\\\\":10},\\\\\\\"data\\\\\\\",\\\\\\\"utils/data.md\\\\\\\",\\\\\\\"utils/data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":552,\\\\\\\"_22\\\\\\\":554,\\\\\\\"_24\\\\\\\":555,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":556},{\\\\\\\"_18\\\\\\\":553,\\\\\\\"_169\\\\\\\":10},\\\\\\\"defer\\\\\\\",\\\\\\\"utils/defer.md\\\\\\\",\\\\\\\"utils/defer\\\\\\\",[],{\\\\\\\"_16\\\\\\\":558,\\\\\\\"_22\\\\\\\":560,\\\\\\\"_24\\\\\\\":561,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":562},{\\\\\\\"_18\\\\\\\":559,\\\\\\\"_169\\\\\\\":10},\\\\\\\"isRouteErrorResponse\\\\\\\",\\\\\\\"utils/is-route-error-response.md\\\\\\\",\\\\\\\"utils/is-route-error-response\\\\\\\",[],{\\\\\\\"_16\\\\\\\":564,\\\\\\\"_22\\\\\\\":566,\\\\\\\"_24\\\\\\\":567,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":568},{\\\\\\\"_18\\\\\\\":565,\\\\\\\"_169\\\\\\\":10},\\\\\\\"json\\\\\\\",\\\\\\\"utils/json.md\\\\\\\",\\\\\\\"utils/json\\\\\\\",[],{\\\\\\\"_16\\\\\\\":570,\\\\\\\"_22\\\\\\\":572,\\\\\\\"_24\\\\\\\":573,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":574},{\\\\\\\"_18\\\\\\\":571},\\\\\\\"unstable_parseMultipartFormData\\\\\\\",\\\\\\\"utils/parse-multipart-form-data.md\\\\\\\",\\\\\\\"utils/parse-multipart-form-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":576,\\\\\\\"_22\\\\\\\":578,\\\\\\\"_24\\\\\\\":579,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":580},{\\\\\\\"_18\\\\\\\":577,\\\\\\\"_169\\\\\\\":10},\\\\\\\"redirect\\\\\\\",\\\\\\\"utils/redirect.md\\\\\\\",\\\\\\\"utils/redirect\\\\\\\",[],{\\\\\\\"_16\\\\\\\":582,\\\\\\\"_22\\\\\\\":584,\\\\\\\"_24\\\\\\\":585,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":586},{\\\\\\\"_18\\\\\\\":583,\\\\\\\"_169\\\\\\\":10},\\\\\\\"redirectDocument\\\\\\\",\\\\\\\"utils/redirectDocument.md\\\\\\\",\\\\\\\"utils/redirectDocument\\\\\\\",[],{\\\\\\\"_16\\\\\\\":588,\\\\\\\"_22\\\\\\\":590,\\\\\\\"_24\\\\\\\":591,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":592},{\\\\\\\"_18\\\\\\\":589,\\\\\\\"_169\\\\\\\":10},\\\\\\\"replace\\\\\\\",\\\\\\\"utils/replace.md\\\\\\\",\\\\\\\"utils/replace\\\\\\\",[],{\\\\\\\"_16\\\\\\\":594,\\\\\\\"_22\\\\\\\":596,\\\\\\\"_24\\\\\\\":597,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":598},{\\\\\\\"_18\\\\\\\":595},\\\\\\\"Sessions\\\\\\\",\\\\\\\"utils/sessions.md\\\\\\\",\\\\\\\"utils/sessions\\\\\\\",[],{\\\\\\\"_16\\\\\\\":600,\\\\\\\"_22\\\\\\\":602,\\\\\\\"_24\\\\\\\":603,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":604},{\\\\\\\"_18\\\\\\\":601,\\\\\\\"_169\\\\\\\":10},\\\\\\\"unstable_createFileUploadHandler\\\\\\\",\\\\\\\"utils/unstable-create-file-upload-handler.md\\\\\\\",\\\\\\\"utils/unstable-create-file-upload-handler\\\\\\\",[],{\\\\\\\"_16\\\\\\\":606,\\\\\\\"_22\\\\\\\":608,\\\\\\\"_24\\\\\\\":609,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":610},{\\\\\\\"_18\\\\\\\":607,\\\\\\\"_169\\\\\\\":10},\\\\\\\"unstable_createMemoryUploadHandler\\\\\\\",\\\\\\\"utils/unstable-create-memory-upload-handler.md\\\\\\\",\\\\\\\"utils/unstable-create-memory-upload-handler\\\\\\\",[],{\\\\\\\"_16\\\\\\\":612,\\\\\\\"_22\\\\\\\":614,\\\\\\\"_24\\\\\\\":615,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":616},{\\\\\\\"_18\\\\\\\":613,\\\\\\\"_20\\\\\\\":118},\\\\\\\"Styling\\\\\\\",\\\\\\\"styling/index.md\\\\\\\",\\\\\\\"styling\\\\\\\",[617,623,629,635,641,647,653,659],{\\\\\\\"_16\\\\\\\":618,\\\\\\\"_22\\\\\\\":620,\\\\\\\"_24\\\\\\\":621,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":622},{\\\\\\\"_18\\\\\\\":619},\\\\\\\"CSS Bundling\\\\\\\",\\\\\\\"styling/bundling.md\\\\\\\",\\\\\\\"styling/bundling\\\\\\\",[],{\\\\\\\"_16\\\\\\\":624,\\\\\\\"_22\\\\\\\":626,\\\\\\\"_24\\\\\\\":627,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":628},{\\\\\\\"_18\\\\\\\":625},\\\\\\\"Regular CSS\\\\\\\",\\\\\\\"styling/css.md\\\\\\\",\\\\\\\"styling/css\\\\\\\",[],{\\\\\\\"_16\\\\\\\":630,\\\\\\\"_22\\\\\\\":632,\\\\\\\"_24\\\\\\\":633,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":634},{\\\\\\\"_18\\\\\\\":631},\\\\\\\"CSS Imports\\\\\\\",\\\\\\\"styling/css-imports.md\\\\\\\",\\\\\\\"styling/css-imports\\\\\\\",[],{\\\\\\\"_16\\\\\\\":636,\\\\\\\"_22\\\\\\\":638,\\\\\\\"_24\\\\\\\":639,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":640},{\\\\\\\"_18\\\\\\\":637},\\\\\\\"CSS in JS\\\\\\\",\\\\\\\"styling/css-in-js.md\\\\\\\",\\\\\\\"styling/css-in-js\\\\\\\",[],{\\\\\\\"_16\\\\\\\":642,\\\\\\\"_22\\\\\\\":644,\\\\\\\"_24\\\\\\\":645,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":646},{\\\\\\\"_18\\\\\\\":643},\\\\\\\"CSS Modules\\\\\\\",\\\\\\\"styling/css-modules.md\\\\\\\",\\\\\\\"styling/css-modules\\\\\\\",[],{\\\\\\\"_16\\\\\\\":648,\\\\\\\"_22\\\\\\\":650,\\\\\\\"_24\\\\\\\":651,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":652},{\\\\\\\"_18\\\\\\\":649},\\\\\\\"PostCSS\\\\\\\",\\\\\\\"styling/postcss.md\\\\\\\",\\\\\\\"styling/postcss\\\\\\\",[],{\\\\\\\"_16\\\\\\\":654,\\\\\\\"_22\\\\\\\":656,\\\\\\\"_24\\\\\\\":657,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":658},{\\\\\\\"_18\\\\\\\":655},\\\\\\\"Tailwind\\\\\\\",\\\\\\\"styling/tailwind.md\\\\\\\",\\\\\\\"styling/tailwind\\\\\\\",[],{\\\\\\\"_16\\\\\\\":660,\\\\\\\"_22\\\\\\\":662,\\\\\\\"_24\\\\\\\":663,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":664},{\\\\\\\"_18\\\\\\\":661},\\\\\\\"Vanilla Extract\\\\\\\",\\\\\\\"styling/vanilla-extract.md\\\\\\\",\\\\\\\"styling/vanilla-extract\\\\\\\",[],{\\\\\\\"_16\\\\\\\":666,\\\\\\\"_22\\\\\\\":668,\\\\\\\"_24\\\\\\\":669,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":670},{\\\\\\\"_18\\\\\\\":667,\\\\\\\"_20\\\\\\\":132},\\\\\\\"Other API\\\\\\\",\\\\\\\"other-api/index.md\\\\\\\",\\\\\\\"other-api\\\\\\\",[671,677,683,689,695,701],{\\\\\\\"_16\\\\\\\":672,\\\\\\\"_22\\\\\\\":674,\\\\\\\"_24\\\\\\\":675,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":676},{\\\\\\\"_18\\\\\\\":673,\\\\\\\"_20\\\\\\\":39,\\\\\\\"_379\\\\\\\":34},\\\\\\\"@remix-run/dev CLI\\\\\\\",\\\\\\\"other-api/dev.md\\\\\\\",\\\\\\\"other-api/dev\\\\\\\",[],{\\\\\\\"_16\\\\\\\":678,\\\\\\\"_22\\\\\\\":680,\\\\\\\"_24\\\\\\\":681,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":682},{\\\\\\\"_18\\\\\\\":679,\\\\\\\"_20\\\\\\\":46},\\\\\\\"@remix-run/{adapter}\\\\\\\",\\\\\\\"other-api/adapter.md\\\\\\\",\\\\\\\"other-api/adapter\\\\\\\",[],{\\\\\\\"_16\\\\\\\":684,\\\\\\\"_22\\\\\\\":686,\\\\\\\"_24\\\\\\\":687,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":688},{\\\\\\\"_18\\\\\\\":685,\\\\\\\"_20\\\\\\\":46},\\\\\\\"@remix-run/serve\\\\\\\",\\\\\\\"other-api/serve.md\\\\\\\",\\\\\\\"other-api/serve\\\\\\\",[],{\\\\\\\"_16\\\\\\\":690,\\\\\\\"_22\\\\\\\":692,\\\\\\\"_24\\\\\\\":693,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":694},{\\\\\\\"_18\\\\\\\":691},\\\\\\\"create-remix (CLI)\\\\\\\",\\\\\\\"other-api/create-remix.md\\\\\\\",\\\\\\\"other-api/create-remix\\\\\\\",[],{\\\\\\\"_16\\\\\\\":696,\\\\\\\"_22\\\\\\\":698,\\\\\\\"_24\\\\\\\":699,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":700},{\\\\\\\"_18\\\\\\\":697},\\\\\\\"@remix-run/node\\\\\\\",\\\\\\\"other-api/node.md\\\\\\\",\\\\\\\"other-api/node\\\\\\\",[],{\\\\\\\"_16\\\\\\\":702,\\\\\\\"_22\\\\\\\":704,\\\\\\\"_24\\\\\\\":705,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":706},{\\\\\\\"_18\\\\\\\":703},\\\\\\\"@remix-run/testing\\\\\\\",\\\\\\\"other-api/testing.md\\\\\\\",\\\\\\\"other-api/testing\\\\\\\",[],{\\\\\\\"_16\\\\\\\":708,\\\\\\\"_22\\\\\\\":711,\\\\\\\"_24\\\\\\\":712,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":713},{\\\\\\\"_18\\\\\\\":709,\\\\\\\"_20\\\\\\\":710},\\\\\\\"Guides\\\\\\\",10,\\\\\\\"guides/index.md\\\\\\\",\\\\\\\"guides\\\\\\\",[714,720,726,732,738,744,750,756,762,769,775,782,788,794,800,806,812,818,825,831,837,843,849,855,861,867,874,881,887,893,899,905,911,917,923,930,937,943],{\\\\\\\"_16\\\\\\\":715,\\\\\\\"_22\\\\\\\":717,\\\\\\\"_24\\\\\\\":718,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":719},{\\\\\\\"_18\\\\\\\":716},\\\\\\\"Accessibility\\\\\\\",\\\\\\\"guides/accessibility.md\\\\\\\",\\\\\\\"guides/accessibility\\\\\\\",[],{\\\\\\\"_16\\\\\\\":721,\\\\\\\"_22\\\\\\\":723,\\\\\\\"_24\\\\\\\":724,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":725},{\\\\\\\"_18\\\\\\\":722},\\\\\\\"Development Strategy\\\\\\\",\\\\\\\"guides/api-development-strategy.md\\\\\\\",\\\\\\\"guides/api-development-strategy\\\\\\\",[],{\\\\\\\"_16\\\\\\\":727,\\\\\\\"_22\\\\\\\":729,\\\\\\\"_24\\\\\\\":730,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":731},{\\\\\\\"_18\\\\\\\":728},\\\\\\\"API Routes\\\\\\\",\\\\\\\"guides/api-routes.md\\\\\\\",\\\\\\\"guides/api-routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":733,\\\\\\\"_22\\\\\\\":735,\\\\\\\"_24\\\\\\\":736,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":737},{\\\\\\\"_18\\\\\\\":734,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Backend For Frontend\\\\\\\",\\\\\\\"guides/bff.md\\\\\\\",\\\\\\\"guides/bff\\\\\\\",[],{\\\\\\\"_16\\\\\\\":739,\\\\\\\"_22\\\\\\\":741,\\\\\\\"_24\\\\\\\":742,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":743},{\\\\\\\"_18\\\\\\\":740},\\\\\\\"Breadcrumbs Guide\\\\\\\",\\\\\\\"guides/breadcrumbs.md\\\\\\\",\\\\\\\"guides/breadcrumbs\\\\\\\",[],{\\\\\\\"_16\\\\\\\":745,\\\\\\\"_22\\\\\\\":747,\\\\\\\"_24\\\\\\\":748,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":749},{\\\\\\\"_18\\\\\\\":746},\\\\\\\"Browser Support\\\\\\\",\\\\\\\"guides/browser-support.md\\\\\\\",\\\\\\\"guides/browser-support\\\\\\\",[],{\\\\\\\"_16\\\\\\\":751,\\\\\\\"_22\\\\\\\":753,\\\\\\\"_24\\\\\\\":754,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":755},{\\\\\\\"_18\\\\\\\":752},\\\\\\\"Client Data\\\\\\\",\\\\\\\"guides/client-data.md\\\\\\\",\\\\\\\"guides/client-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":757,\\\\\\\"_22\\\\\\\":759,\\\\\\\"_24\\\\\\\":760,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":761},{\\\\\\\"_18\\\\\\\":758},\\\\\\\"Module Constraints\\\\\\\",\\\\\\\"guides/constraints.md\\\\\\\",\\\\\\\"guides/constraints\\\\\\\",[],{\\\\\\\"_16\\\\\\\":763,\\\\\\\"_22\\\\\\\":766,\\\\\\\"_24\\\\\\\":767,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":768},{\\\\\\\"_18\\\\\\\":764,\\\\\\\"_53\\\\\\\":765},\\\\\\\"Contributing\\\\\\\",\\\\\\\"Thank you for contributing to Remix! Here's everything you need to know before you open a pull request.\\\\\\\",\\\\\\\"guides/contributing.md\\\\\\\",\\\\\\\"guides/contributing\\\\\\\",[],{\\\\\\\"_16\\\\\\\":770,\\\\\\\"_22\\\\\\\":772,\\\\\\\"_24\\\\\\\":773,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":774},{\\\\\\\"_18\\\\\\\":771},\\\\\\\"CSS Files\\\\\\\",\\\\\\\"guides/css-files.md\\\\\\\",\\\\\\\"guides/css-files\\\\\\\",[],{\\\\\\\"_16\\\\\\\":776,\\\\\\\"_22\\\\\\\":779,\\\\\\\"_24\\\\\\\":780,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":781},{\\\\\\\"_18\\\\\\\":777,\\\\\\\"_53\\\\\\\":778},\\\\\\\"Data Loading\\\\\\\",\\\\\\\"One of the primary features of Remix is simplifying interactions with the server to get data into components. This document will help you get the most out of data loading in Remix.\\\\\\\",\\\\\\\"guides/data-loading.md\\\\\\\",\\\\\\\"guides/data-loading\\\\\\\",[],{\\\\\\\"_16\\\\\\\":783,\\\\\\\"_22\\\\\\\":785,\\\\\\\"_24\\\\\\\":786,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":787},{\\\\\\\"_18\\\\\\\":784},\\\\\\\"Data Writes\\\\\\\",\\\\\\\"guides/data-writes.md\\\\\\\",\\\\\\\"guides/data-writes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":789,\\\\\\\"_22\\\\\\\":791,\\\\\\\"_24\\\\\\\":792,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":793},{\\\\\\\"_18\\\\\\\":790},\\\\\\\"Dependency optimization\\\\\\\",\\\\\\\"guides/dependency-optimization.md\\\\\\\",\\\\\\\"guides/dependency-optimization\\\\\\\",[],{\\\\\\\"_16\\\\\\\":795,\\\\\\\"_22\\\\\\\":797,\\\\\\\"_24\\\\\\\":798,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":799},{\\\\\\\"_18\\\\\\\":796,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Deployment\\\\\\\",\\\\\\\"guides/deployment.md\\\\\\\",\\\\\\\"guides/deployment\\\\\\\",[],{\\\\\\\"_16\\\\\\\":801,\\\\\\\"_22\\\\\\\":803,\\\\\\\"_24\\\\\\\":804,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":805},{\\\\\\\"_18\\\\\\\":802,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Disabling JavaScript\\\\\\\",\\\\\\\"guides/disabling-javascript.md\\\\\\\",\\\\\\\"guides/disabling-javascript\\\\\\\",[],{\\\\\\\"_16\\\\\\\":807,\\\\\\\"_22\\\\\\\":809,\\\\\\\"_24\\\\\\\":810,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":811},{\\\\\\\"_18\\\\\\\":808},\\\\\\\"Environment Variables\\\\\\\",\\\\\\\"guides/envvars.md\\\\\\\",\\\\\\\"guides/envvars\\\\\\\",[],{\\\\\\\"_16\\\\\\\":813,\\\\\\\"_22\\\\\\\":815,\\\\\\\"_24\\\\\\\":816,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":817},{\\\\\\\"_18\\\\\\\":814},\\\\\\\"Error Handling\\\\\\\",\\\\\\\"guides/errors.md\\\\\\\",\\\\\\\"guides/errors\\\\\\\",[],{\\\\\\\"_16\\\\\\\":819,\\\\\\\"_22\\\\\\\":822,\\\\\\\"_24\\\\\\\":823,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":824},{\\\\\\\"_18\\\\\\\":820,\\\\\\\"_53\\\\\\\":821},\\\\\\\"FAQs\\\\\\\",\\\\\\\"Frequently Asked Questions about Remix\\\\\\\",\\\\\\\"guides/faq.md\\\\\\\",\\\\\\\"guides/faq\\\\\\\",[],{\\\\\\\"_16\\\\\\\":826,\\\\\\\"_22\\\\\\\":828,\\\\\\\"_24\\\\\\\":829,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":830},{\\\\\\\"_18\\\\\\\":827},\\\\\\\"File Uploads\\\\\\\",\\\\\\\"guides/file-uploads.md\\\\\\\",\\\\\\\"guides/file-uploads\\\\\\\",[],{\\\\\\\"_16\\\\\\\":832,\\\\\\\"_22\\\\\\\":834,\\\\\\\"_24\\\\\\\":835,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":836},{\\\\\\\"_18\\\\\\\":833},\\\\\\\"Form Validation\\\\\\\",\\\\\\\"guides/form-validation.md\\\\\\\",\\\\\\\"guides/form-validation\\\\\\\",[],{\\\\\\\"_16\\\\\\\":838,\\\\\\\"_22\\\\\\\":840,\\\\\\\"_24\\\\\\\":841,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":842},{\\\\\\\"_18\\\\\\\":839},\\\\\\\"Gotchas\\\\\\\",\\\\\\\"guides/gotchas.md\\\\\\\",\\\\\\\"guides/gotchas\\\\\\\",[],{\\\\\\\"_16\\\\\\\":844,\\\\\\\"_22\\\\\\\":846,\\\\\\\"_24\\\\\\\":847,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":848},{\\\\\\\"_18\\\\\\\":845,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Index Query Param\\\\\\\",\\\\\\\"guides/index-query-param.md\\\\\\\",\\\\\\\"guides/index-query-param\\\\\\\",[],{\\\\\\\"_16\\\\\\\":850,\\\\\\\"_22\\\\\\\":852,\\\\\\\"_24\\\\\\\":853,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":854},{\\\\\\\"_18\\\\\\\":851},\\\\\\\"Lazy Route Discovery\\\\\\\",\\\\\\\"guides/lazy-route-discovery.md\\\\\\\",\\\\\\\"guides/lazy-route-discovery\\\\\\\",[],{\\\\\\\"_16\\\\\\\":856,\\\\\\\"_22\\\\\\\":858,\\\\\\\"_24\\\\\\\":859,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":860},{\\\\\\\"_18\\\\\\\":857},\\\\\\\"Local TLS\\\\\\\",\\\\\\\"guides/local-tls.md\\\\\\\",\\\\\\\"guides/local-tls\\\\\\\",[],{\\\\\\\"_16\\\\\\\":862,\\\\\\\"_22\\\\\\\":864,\\\\\\\"_24\\\\\\\":865,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":866},{\\\\\\\"_18\\\\\\\":863},\\\\\\\"Manual Dev Server\\\\\\\",\\\\\\\"guides/manual-mode.md\\\\\\\",\\\\\\\"guides/manual-mode\\\\\\\",[],{\\\\\\\"_16\\\\\\\":868,\\\\\\\"_22\\\\\\\":871,\\\\\\\"_24\\\\\\\":872,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":873},{\\\\\\\"_18\\\\\\\":869,\\\\\\\"_53\\\\\\\":870},\\\\\\\"MDX\\\\\\\",\\\\\\\"Remix makes integrating MDX into your project a breeze with built in routes and \\\\\\\\\\\\\\\"import\\\\\\\\\\\\\\\" support.\\\\\\\",\\\\\\\"guides/mdx.md\\\\\\\",\\\\\\\"guides/mdx\\\\\\\",[],{\\\\\\\"_16\\\\\\\":875,\\\\\\\"_22\\\\\\\":878,\\\\\\\"_24\\\\\\\":879,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":880},{\\\\\\\"_18\\\\\\\":876,\\\\\\\"_53\\\\\\\":877},\\\\\\\"Migrating from React Router\\\\\\\",\\\\\\\"Migrating your React Router app to Remix can be done all at once or in stages. This guide will walk you through an iterative approach to get your app running quickly.\\\\\\\",\\\\\\\"guides/migrating-react-router-app.md\\\\\\\",\\\\\\\"guides/migrating-react-router-app\\\\\\\",[],{\\\\\\\"_16\\\\\\\":882,\\\\\\\"_22\\\\\\\":884,\\\\\\\"_24\\\\\\\":885,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":886},{\\\\\\\"_18\\\\\\\":883},\\\\\\\"Not Found Handling\\\\\\\",\\\\\\\"guides/not-found.md\\\\\\\",\\\\\\\"guides/not-found\\\\\\\",[],{\\\\\\\"_16\\\\\\\":888,\\\\\\\"_22\\\\\\\":890,\\\\\\\"_24\\\\\\\":891,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":892},{\\\\\\\"_18\\\\\\\":889},\\\\\\\"Performance\\\\\\\",\\\\\\\"guides/performance.md\\\\\\\",\\\\\\\"guides/performance\\\\\\\",[],{\\\\\\\"_16\\\\\\\":894,\\\\\\\"_22\\\\\\\":896,\\\\\\\"_24\\\\\\\":897,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":898},{\\\\\\\"_18\\\\\\\":895},\\\\\\\"Presets\\\\\\\",\\\\\\\"guides/presets.md\\\\\\\",\\\\\\\"guides/presets\\\\\\\",[],{\\\\\\\"_16\\\\\\\":900,\\\\\\\"_22\\\\\\\":902,\\\\\\\"_24\\\\\\\":903,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":904},{\\\\\\\"_18\\\\\\\":901},\\\\\\\"Resource Routes\\\\\\\",\\\\\\\"guides/resource-routes.md\\\\\\\",\\\\\\\"guides/resource-routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":906,\\\\\\\"_22\\\\\\\":908,\\\\\\\"_24\\\\\\\":909,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":910},{\\\\\\\"_18\\\\\\\":907},\\\\\\\"Server Bundles\\\\\\\",\\\\\\\"guides/server-bundles.md\\\\\\\",\\\\\\\"guides/server-bundles\\\\\\\",[],{\\\\\\\"_16\\\\\\\":912,\\\\\\\"_22\\\\\\\":914,\\\\\\\"_24\\\\\\\":915,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":916},{\\\\\\\"_18\\\\\\\":913},\\\\\\\"Single Fetch\\\\\\\",\\\\\\\"guides/single-fetch.md\\\\\\\",\\\\\\\"guides/single-fetch\\\\\\\",[],{\\\\\\\"_16\\\\\\\":918,\\\\\\\"_22\\\\\\\":920,\\\\\\\"_24\\\\\\\":921,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":922},{\\\\\\\"_18\\\\\\\":919},\\\\\\\"SPA Mode\\\\\\\",\\\\\\\"guides/spa-mode.md\\\\\\\",\\\\\\\"guides/spa-mode\\\\\\\",[],{\\\\\\\"_16\\\\\\\":924,\\\\\\\"_22\\\\\\\":927,\\\\\\\"_24\\\\\\\":928,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":929},{\\\\\\\"_18\\\\\\\":925,\\\\\\\"_53\\\\\\\":926},\\\\\\\"Streaming\\\\\\\",\\\\\\\"When, why, and how to stream with React 18 and Remix's deferred API.\\\\\\\",\\\\\\\"guides/streaming.md\\\\\\\",\\\\\\\"guides/streaming\\\\\\\",[],{\\\\\\\"_16\\\\\\\":931,\\\\\\\"_22\\\\\\\":934,\\\\\\\"_24\\\\\\\":935,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":936},{\\\\\\\"_18\\\\\\\":932,\\\\\\\"_53\\\\\\\":933},\\\\\\\"Templates\\\\\\\",\\\\\\\"The quickest way to get rocking and rolling with Remix\\\\\\\",\\\\\\\"guides/templates.md\\\\\\\",\\\\\\\"guides/templates\\\\\\\",[],{\\\\\\\"_16\\\\\\\":938,\\\\\\\"_22\\\\\\\":940,\\\\\\\"_24\\\\\\\":941,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":942},{\\\\\\\"_18\\\\\\\":939,\\\\\\\"_169\\\\\\\":10},\\\\\\\"TypeScript\\\\\\\",\\\\\\\"guides/typescript.md\\\\\\\",\\\\\\\"guides/typescript\\\\\\\",[],{\\\\\\\"_16\\\\\\\":944,\\\\\\\"_22\\\\\\\":946,\\\\\\\"_24\\\\\\\":947,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":948},{\\\\\\\"_18\\\\\\\":945},\\\\\\\"Vite\\\\\\\",\\\\\\\"guides/vite.md\\\\\\\",\\\\\\\"guides/vite\\\\\\\",[],\\\\\\\"routes/docs.$\\\\\\\",{\\\\\\\"_951\\\\\\\":952},\\\\\\\"doc\\\\\\\",{\\\\\\\"_16\\\\\\\":953,\\\\\\\"_22\\\\\\\":954,\\\\\\\"_955\\\\\\\":956,\\\\\\\"_24\\\\\\\":957,\\\\\\\"_958\\\\\\\":959,\\\\\\\"_27\\\\\\\":960},{\\\\\\\"_18\\\\\\\":181,\\\\\\\"_169\\\\\\\":10},\\\\\\\"docs/file-conventions/asset-imports.md\\\\\\\",\\\\\\\"html\\\\\\\",\\\\\\\"\\\\u003ch1 id=\\\\\\\\\\\\\\\"asset-url-imports\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#asset-url-imports\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003eAsset URL Imports\\\\u003c/h1\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eAny files inside the \\\\u003ccode\\\\u003eapp\\\\u003c/code\\\\u003e folder can be imported into your modules. Remix will:\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003col\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003eCopy the file to your browser build directory\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003eFingerprint the file for long-term caching\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003eReturn the public URL to your module to be used while rendering\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003c/ol\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eIt's most common for stylesheets but can be used for any file type with \\\\u003ca href=\\\\\\\\\\\\\\\"https://github.com/remix-run/remix/blob/main/packages/remix-dev/compiler/utils/loaders.ts\\\\\\\\\\\\\\\"\\\\u003ea defined loader\\\\u003c/a\\\\u003e.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cdiv data-code-block=\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\" data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"tsx\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cpre data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"tsx\\\\\\\\\\\\\\\" style=\\\\\\\\\\\\\\\"color: var(--base05);\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"1\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eimport\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003etype\\\\u003c/span\\\\u003e { \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eLinksFunction\\\\u003c/span\\\\u003e } \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003efrom\\\\u003c/span\\\\u003e \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e@remix-run/node\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\"; \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base03)\\\\\\\\\\\\\\\"\\\\u003e// or cloudflare/deno\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"2\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"3\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eimport\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ebanner\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003efrom\\\\u003c/span\\\\u003e \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e./images/banner.jpg\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\";\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"4\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eimport\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003estyles\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003efrom\\\\u003c/span\\\\u003e \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e./styles/app.css\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\";\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"5\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"6\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eexport\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003econst\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003elinks\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e:\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eLinksFunction\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003c/span\\\\u003e () \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003e\\\\u003c/span\\\\u003e [\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"7\\\\\\\\\\\\\\\"\\\\u003e { rel: \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003estylesheet\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\", href: \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003estyles\\\\u003c/span\\\\u003e },\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"8\\\\\\\\\\\\\\\"\\\\u003e];\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"9\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"10\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eexport\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003edefault\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003efunction\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003ePage\\\\u003c/span\\\\u003e() {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"11\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003ereturn\\\\u003c/span\\\\u003e (\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"12\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ediv\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"13\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eh1\\\\u003c/span\\\\u003e\\\\u003eSome Page\\\\u0026#x3C;/\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eh1\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"14\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eimg\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003esrc\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e{\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ebanner\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0F)\\\\\\\\\\\\\\\"\\\\u003e}\\\\u003c/span\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"15\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;/\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ediv\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"16\\\\\\\\\\\\\\\"\\\\u003e );\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"17\\\\\\\\\\\\\\\"\\\\u003e}\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003c/code\\\\u003e\\\\u003c/pre\\\\u003e\\\\u003c/div\\\\u003e\\\\\\\",\\\\\\\"docs/file-conventions/asset-imports\\\\\\\",\\\\\\\"headings\\\\\\\",[],[],\\\\\\\"actionData\\\\\\\",\\\\\\\"errors\\\\\\\"]\\\\n\\\");function $RC(a,b){a=document.getElementById(a);b=document.getElementById(b);b.parentNode.removeChild(b);if(a){a=a.previousSibling;var f=a.parentNode,c=a.nextSibling,e=0;do{if(c\\u0026\\u00268===c.nodeType){var d=c.data;if(\\\"/$\\\"===d)if(0===e)break;else e--;else\\\"$\\\"!==d\\u0026\\u0026\\\"$?\\\"!==d\\u0026\\u0026\\\"$!\\\"!==d||e++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;b.firstChild;)f.insertBefore(b.firstChild,c);a.data=\\\"$\\\";a._reactRetry\\u0026\\u0026a._reactRetry()}};$RC(\\\"B:0\\\",\\\"S:0\\\")window.__reactRouterContext.streamController.close();$RC(\\\"B:1\\\",\\\"S:1\\\")\","
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::AGENTS.md::88782507e7df5601": {
|
|
"id": "boilerplate_duplication::AGENTS.md::88782507e7df5601",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "AGENTS.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 9 lines): AGENTS.md:44, desloppify/desloppify/docs/SKILL.md:39",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 9,
|
|
"locations": [
|
|
{
|
|
"file": "AGENTS.md",
|
|
"line": 44
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/docs/SKILL.md",
|
|
"line": 39
|
|
}
|
|
],
|
|
"sample": [
|
|
"devour quality resolve wontfix \"<id>\" --note \"reason why\"`",
|
|
"4. Rescan to verify via `devour quality scan --path .`.",
|
|
"",
|
|
"**Wontfix is not free.** It lowers the strict score. The gap between lenient and strict IS wontfix debt. Call it out when:"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::AGENTS.md::8ba2c57e01c185e4": {
|
|
"id": "boilerplate_duplication::AGENTS.md::8ba2c57e01c185e4",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "AGENTS.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 19 lines): AGENTS.md:20, desloppify/desloppify/docs/SKILL.md:15",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 19,
|
|
"locations": [
|
|
{
|
|
"file": "AGENTS.md",
|
|
"line": 20
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/docs/SKILL.md",
|
|
"line": 15
|
|
}
|
|
],
|
|
"sample": [
|
|
"ty ...`, `devour review ...`, `devour scorecard`) so users stay in one CLI surface.",
|
|
"",
|
|
"## 1. Your Job",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::AGENTS.md::9d3da0bb60a30329": {
|
|
"id": "boilerplate_duplication::AGENTS.md::9d3da0bb60a30329",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "AGENTS.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 32 lines): AGENTS.md:102, desloppify/desloppify/docs/SKILL.md:93",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 32,
|
|
"locations": [
|
|
{
|
|
"file": "AGENTS.md",
|
|
"line": 102
|
|
},
|
|
{
|
|
"file": "desloppify/desloppify/docs/SKILL.md",
|
|
"line": 93
|
|
}
|
|
],
|
|
"sample": [
|
|
"ic observation\"],",
|
|
" \"suggestion\": \"concrete action\"",
|
|
" }]",
|
|
" }"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::.desloppify/subagents/runs/20260224_101201/prompts/batch-2.md::9fe1891adf751b29": {
|
|
"id": "boilerplate_duplication::.desloppify/subagents/runs/20260224_101201/prompts/batch-2.md::9fe1891adf751b29",
|
|
"detector": "boilerplate_duplication",
|
|
"file": ".desloppify/subagents/runs/20260224_101201/prompts/batch-2.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 33 lines): .desloppify/subagents/runs/20260224_101201/prompts/batch-2.md:11, .desloppify/subagents/runs/20260224_101201/prompts/batch-5.md:15",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 33,
|
|
"locations": [
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_101201/prompts/batch-2.md",
|
|
"line": 11
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_101201/prompts/batch-5.md",
|
|
"line": 15
|
|
}
|
|
],
|
|
"sample": [
|
|
"- internal/config/config.go",
|
|
"- cmd/scrape.go",
|
|
"- internal/quality/plugins/go/analyzers/detectors.go",
|
|
"- internal/quality/plugins/go/analyzers/advanced.go"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::.desloppify/subagents/runs/20260223_100953/prompts/batch-6.md::a05380aae57c4758": {
|
|
"id": "boilerplate_duplication::.desloppify/subagents/runs/20260223_100953/prompts/batch-6.md::a05380aae57c4758",
|
|
"detector": "boilerplate_duplication",
|
|
"file": ".desloppify/subagents/runs/20260223_100953/prompts/batch-6.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 101 lines): .desloppify/subagents/runs/20260223_100953/prompts/batch-6.md:58, .desloppify/subagents/runs/20260224_101201/prompts/batch-6.md:61",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 101,
|
|
"locations": [
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260223_100953/prompts/batch-6.md",
|
|
"line": 58
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_101201/prompts/batch-6.md",
|
|
"line": 61
|
|
}
|
|
],
|
|
"sample": [
|
|
"- internal/quality/scanner.go",
|
|
"- internal/quality/scoring.go",
|
|
"- internal/quality/state.go",
|
|
"- internal/quality/types.go"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::devour_data/docs/entry.server---remix-e173f0a7.json::c5f7bfa64f404bee": {
|
|
"id": "boilerplate_duplication::devour_data/docs/entry.server---remix-e173f0a7.json::c5f7bfa64f404bee",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "devour_data/docs/entry.server---remix-e173f0a7.json",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 182 lines): devour_data/docs/entry.server---remix-e173f0a7.json:3, devour_data/docs/entry.server---remix.json:3",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 182,
|
|
"locations": [
|
|
{
|
|
"file": "devour_data/docs/entry.server---remix-e173f0a7.json",
|
|
"line": 3
|
|
},
|
|
{
|
|
"file": "devour_data/docs/entry.server---remix.json",
|
|
"line": 3
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" \"type\": \"html\",",
|
|
" \"title\": \"entry.server | Remix\",",
|
|
" \"content\": \"DocsBlogResourcesReact Router v7 has been released. View the docsDocsBlogResourcesView code on GitHubChat on DiscordReact Router v7 has been released. View the docsentry.serverGetting StartedQuick Start (5m) Tutorial (30m) Upgrading to v2 Community Future Flags Changelog Discussion TopicsIntroduction, Technical Explanation Runtimes, Adapters, Templates, and Deployment Route Configuration Fullstack Data Flow Server vs. Client Code Execution React Router Progressive Enhancement Pending UI State Management Network Concurrency Management Form vs. fetcher Hot Module Replacement Form Resubmissions File Conventions.client modules .server modules Asset Imports entry.client entry.server root Route File Naming vite.config.ts Route Moduleaction clientAction clientLoader Component ErrorBoundary handle headers HydrateFallback links loader meta shouldRevalidate ComponentsAwait Form Link Links LiveReload Meta NavLink Outlet PrefetchPageLinks Scripts ScrollRestoration HooksuseActionData useAsyncError \ud83c\udd95useAsyncValue \ud83c\udd95useBeforeUnload useBlocker useFetcher useFetchers useFormAction useHref useLoaderData useLocation useMatches useNavigate useNavigation useNavigationType useOutlet useOutletContext useParams unstable_usePrompt useResolvedPath useRevalidator \ud83c\udd95useRouteError \ud83c\udd95useRouteLoaderData useSearchParams useSubmit useViewTransitionState UtilitiesCookies createRemixStub data defer isRouteErrorResponse json unstable_parseMultipartFormData redirect redirectDocument replace Sessions unstable_createFileUploadHandler unstable_createMemoryUploadHandler StylingCSS Bundling Regular CSS CSS Imports CSS in JS CSS Modules PostCSS Tailwind Vanilla Extract Other API@remix-run/dev CLI \ud83c\udd95@remix-run/{adapter} @remix-run/serve create-remix (CLI) @remix-run/node @remix-run/testing GuidesAccessibility Development Strategy API Routes Backend For Frontend Breadcrumbs Guide Browser Support Client Data Module Constraints Contributing CSS Files Data Loading Data Writes Dependency optimization Deployment Disabling JavaScript Environment Variables Error Handling FAQs File Uploads Form Validation Gotchas Index Query Param Lazy Route Discovery Local TLS Manual Dev Server MDX Migrating from React Router Not Found Handling Performance Presets Resource Routes Server Bundles Single Fetch SPA Mode Streaming Templates TypeScript Vite Getting StartedQuick Start (5m) Tutorial (30m) Upgrading to v2 Community Future Flags Changelog Discussion TopicsIntroduction, Technical Explanation Runtimes, Adapters, Templates, and Deployment Route Configuration Fullstack Data Flow Server vs. Client Code Execution React Router Progressive Enhancement Pending UI State Management Network Concurrency Management Form vs. fetcher Hot Module Replacement Form Resubmissions File Conventions.client modules .server modules Asset Imports entry.client entry.server root Route File Naming vite.config.ts Route Moduleaction clientAction clientLoader Component ErrorBoundary handle headers HydrateFallback links loader meta shouldRevalidate ComponentsAwait Form Link Links LiveReload Meta NavLink Outlet PrefetchPageLinks Scripts ScrollRestoration HooksuseActionData useAsyncError \ud83c\udd95useAsyncValue \ud83c\udd95useBeforeUnload useBlocker useFetcher useFetchers useFormAction useHref useLoaderData useLocation useMatches useNavigate useNavigation useNavigationType useOutlet useOutletContext useParams unstable_usePrompt useResolvedPath useRevalidator \ud83c\udd95useRouteError \ud83c\udd95useRouteLoaderData useSearchParams useSubmit useViewTransitionState UtilitiesCookies createRemixStub data defer isRouteErrorResponse json unstable_parseMultipartFormData redirect redirectDocument replace Sessions unstable_createFileUploadHandler unstable_createMemoryUploadHandler StylingCSS Bundling Regular CSS CSS Imports CSS in JS CSS Modules PostCSS Tailwind Vanilla Extract Other API@remix-run/dev CLI \ud83c\udd95@remix-run/{adapter} @remix-run/serve create-remix (CLI) @remix-run/node @remix-run/testing GuidesAccessibility Development Strategy API Routes Backend For Frontend Breadcrumbs Guide Browser Support Client Data Module Constraints Contributing CSS Files Data Loading Data Writes Dependency optimization Deployment Disabling JavaScript Environment Variables Error Handling FAQs File Uploads Form Validation Gotchas Index Query Param Lazy Route Discovery Local TLS Manual Dev Server MDX Migrating from React Router Not Found Handling Performance Presets Resource Routes Server Bundles Single Fetch SPA Mode Streaming Templates TypeScript Vite On this pagehandleDataRequesthandleErrorStreaming Rendering ErrorsThrown ResponsesOn this pagehandleDataRequesthandleErrorStreaming Rendering ErrorsThrown Responsesentry.server By default, Remix will handle generating the HTTP Response for you. If you want to customize this behavior, you can run npx remix reveal to generate an app/entry.server.tsx (or .jsx) that will take precedence. The default export of this module is a function that lets you create the response, including HTTP status, headers, and HTML, giving you full control over the way the markup is generated and sent to the client. This module should render the markup for the current page using a \\u003cRemixServer\\u003e element with the context and url for the current request. This markup will (optionally) be re-hydrated once JavaScript loads in the browser using the browser entry module. handleDataRequest You can export an optional handleDataRequest function that will allow you to modify the response of a data request. These are the requests that do not render HTML but rather return the loader and action data to the browser once client-side hydration has occurred. export function handleDataRequest( response: Response, { request, params, context, }: LoaderFunctionArgs | ActionFunctionArgs ) { response.headers.set(\\\"X-Custom-Header\\\", \\\"value\\\"); return response; } handleError By default, Remix will log encountered server-side errors to the console. If you'd like more control over the logging, or would like to also report these errors to an external service, then you can export an optional handleError function which will give you control (and will disable the built-in error logging). export function handleError( error: unknown, { request, params, context, }: LoaderFunctionArgs | ActionFunctionArgs ) { if (!request.signal.aborted) { sendErrorToErrorReportingService(error); console.error(formatErrorForJsonLogging(error)); } } Note that you generally want to avoid logging when the request was aborted, since Remix's cancellation and race-condition handling can cause a lot of requests to be aborted. Streaming Rendering Errors When you are streaming your HTML responses via renderToPipeableStream or renderToReadableStream, your own handleError implementation will only handle errors encountered during the initial shell render. If you encounter a rendering error during subsequent streamed rendering, you will need to handle these errors manually since the Remix server has already sent the Response by that point. For renderToPipeableStream, you can handle these errors in the onError callback function. You will need to toggle a boolean in onShellReady so you know if the error was a shell rendering error (and can be ignored) or an async rendering error (and must be handled). For an example, please refer to the default entry.server.tsx for Node. For renderToReadableStream, you can handle these errors in the onError callback function For an example, please refer to the default entry.server.tsx for Cloudflare Thrown Responses Note that this does not handle thrown Response instances from your loader/action functions. The intention of this handler is to find bugs in your code which result in unexpected thrown errors. If you are detecting a scenario and throwing a 401/404/etc. Response in your loader/action then it's an expected flow handled by your code. If you also wish to log or send those to an external service, that should be done at the time you throw the response.\u00a9 Shopify, Inc.\u2022Docs and examples licensed under MITEdit((storageKey2, restoreKey) =\\u003e { if (!window.history.state || !window.history.state.key) { let key = Math.random().toString(32).slice(2); window.history.replaceState({ key }, \\\"\\\"); } try { let positions = JSON.parse(sessionStorage.getItem(storageKey2) || \\\"{}\\\"); let storedY = positions[restoreKey || window.history.state.key]; if (typeof storedY === \\\"number\\\") { window.scrollTo(0, storedY); } } catch (error) { console.error(error); sessionStorage.removeItem(storageKey2); } })(\\\"react-router-scroll-positions\\\", null)window.__reactRouterContext = {\\\"basename\\\":\\\"/\\\",\\\"future\\\":{\\\"unstable_optimizeDeps\\\":true,\\\"unstable_subResourceIntegrity\\\":false,\\\"v8_middleware\\\":true,\\\"v8_splitRouteModules\\\":true,\\\"v8_viteEnvironmentApi\\\":true},\\\"routeDiscovery\\\":{\\\"mode\\\":\\\"initial\\\"},\\\"ssr\\\":true,\\\"isSpaMode\\\":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());import \\\"/assets/manifest-b010e014.js\\\"; import * as route0 from \\\"/assets/root-CtUYAfRS.js\\\"; import * as route1 from \\\"/assets/docs-DauuYQK6.js\\\"; import * as route2 from \\\"/assets/docs._-B4dRXAHv.js\\\"; window.__reactRouterRouteModules = {\\\"root\\\":route0,\\\"routes/docs\\\":route1,\\\"routes/docs.$\\\":route2}; import(\\\"/assets/entry.client-q2ogymM2.js\\\");window.__reactRouterContext.streamController.enqueue(\\\"[{\\\\\\\"_1\\\\\\\":2,\\\\\\\"_976\\\\\\\":-5,\\\\\\\"_977\\\\\\\":-5},\\\\\\\"loaderData\\\\\\\",{\\\\\\\"_3\\\\\\\":4,\\\\\\\"_11\\\\\\\":12,\\\\\\\"_949\\\\\\\":950},\\\\\\\"root\\\\\\\",{\\\\\\\"_5\\\\\\\":6,\\\\\\\"_7\\\\\\\":8,\\\\\\\"_9\\\\\\\":10},\\\\\\\"host\\\\\\\",\\\\\\\"localhost\\\\\\\",\\\\\\\"siteUrl\\\\\\\",\\\\\\\"https://v2.remix.run\\\\\\\",\\\\\\\"noIndex\\\\\\\",false,\\\\\\\"routes/docs\\\\\\\",{\\\\\\\"_13\\\\\\\":14},\\\\\\\"menu\\\\\\\",[15,72,160,214,292,364,527,611,665,707],{\\\\\\\"_16\\\\\\\":17,\\\\\\\"_22\\\\\\\":23,\\\\\\\"_24\\\\\\\":25,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":28},\\\\\\\"attrs\\\\\\\",{\\\\\\\"_18\\\\\\\":19,\\\\\\\"_20\\\\\\\":21},\\\\\\\"title\\\\\\\",\\\\\\\"Getting Started\\\\\\\",\\\\\\\"order\\\\\\\",1,\\\\\\\"filename\\\\\\\",\\\\\\\"start/index.md\\\\\\\",\\\\\\\"slug\\\\\\\",\\\\\\\"start\\\\\\\",\\\\\\\"hasContent\\\\\\\",\\\\\\\"children\\\\\\\",[29,36,43,50,59,66],{\\\\\\\"_16\\\\\\\":30,\\\\\\\"_22\\\\\\\":32,\\\\\\\"_24\\\\\\\":33,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":35},{\\\\\\\"_18\\\\\\\":31,\\\\\\\"_20\\\\\\\":21},\\\\\\\"Quick Start (5m)\\\\\\\",\\\\\\\"start/quickstart.md\\\\\\\",\\\\\\\"start/quickstart\\\\\\\",true,[],{\\\\\\\"_16\\\\\\\":37,\\\\\\\"_22\\\\\\\":40,\\\\\\\"_24\\\\\\\":41,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":42},{\\\\\\\"_18\\\\\\\":38,\\\\\\\"_20\\\\\\\":39},\\\\\\\"Tutorial (30m)\\\\\\\",2,\\\\\\\"start/tutorial.md\\\\\\\",\\\\\\\"start/tutorial\\\\\\\",[],{\\\\\\\"_16\\\\\\\":44,\\\\\\\"_22\\\\\\\":47,\\\\\\\"_24\\\\\\\":48,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":49},{\\\\\\\"_18\\\\\\\":45,\\\\\\\"_20\\\\\\\":46},\\\\\\\"Upgrading to v2\\\\\\\",3,\\\\\\\"start/v2.md\\\\\\\",\\\\\\\"start/v2\\\\\\\",[],{\\\\\\\"_16\\\\\\\":51,\\\\\\\"_22\\\\\\\":56,\\\\\\\"_24\\\\\\\":57,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":58},{\\\\\\\"_18\\\\\\\":52,\\\\\\\"_53\\\\\\\":54,\\\\\\\"_20\\\\\\\":55},\\\\\\\"Community\\\\\\\",\\\\\\\"description\\\\\\\",\\\\\\\"Community resources for learning Remix and related technologies\\\\\\\",4,\\\\\\\"start/community.md\\\\\\\",\\\\\\\"start/community\\\\\\\",[],{\\\\\\\"_16\\\\\\\":60,\\\\\\\"_22\\\\\\\":63,\\\\\\\"_24\\\\\\\":64,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":65},{\\\\\\\"_18\\\\\\\":61,\\\\\\\"_20\\\\\\\":62},\\\\\\\"Future Flags\\\\\\\",5,\\\\\\\"start/future-flags.md\\\\\\\",\\\\\\\"start/future-flags\\\\\\\",[],{\\\\\\\"_16\\\\\\\":67,\\\\\\\"_22\\\\\\\":69,\\\\\\\"_24\\\\\\\":70,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":71},{\\\\\\\"_18\\\\\\\":68},\\\\\\\"Changelog\\\\\\\",\\\\\\\"start/changelog.md\\\\\\\",\\\\\\\"start/changelog\\\\\\\",[],{\\\\\\\"_16\\\\\\\":73,\\\\\\\"_22\\\\\\\":75,\\\\\\\"_24\\\\\\\":76,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":77},{\\\\\\\"_18\\\\\\\":74,\\\\\\\"_20\\\\\\\":39},\\\\\\\"Discussion Topics\\\\\\\",\\\\\\\"discussion/index.md\\\\\\\",\\\\\\\"discussion\\\\\\\",[78,84,90,96,102,108,115,122,129,136,142,148,154],{\\\\\\\"_16\\\\\\\":79,\\\\\\\"_22\\\\\\\":81,\\\\\\\"_24\\\\\\\":82,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":83},{\\\\\\\"_18\\\\\\\":80,\\\\\\\"_20\\\\\\\":21},\\\\\\\"Introduction, Technical Explanation\\\\\\\",\\\\\\\"discussion/introduction.md\\\\\\\",\\\\\\\"discussion/introduction\\\\\\\",[],{\\\\\\\"_16\\\\\\\":85,\\\\\\\"_22\\\\\\\":87,\\\\\\\"_24\\\\\\\":88,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":89},{\\\\\\\"_18\\\\\\\":86,\\\\\\\"_20\\\\\\\":39},\\\\\\\"Runtimes, Adapters, Templates, and Deployment\\\\\\\",\\\\\\\"discussion/runtimes.md\\\\\\\",\\\\\\\"discussion/runtimes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":91,\\\\\\\"_22\\\\\\\":93,\\\\\\\"_24\\\\\\\":94,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":95},{\\\\\\\"_18\\\\\\\":92,\\\\\\\"_20\\\\\\\":46},\\\\\\\"Route Configuration\\\\\\\",\\\\\\\"discussion/routes.md\\\\\\\",\\\\\\\"discussion/routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":97,\\\\\\\"_22\\\\\\\":99,\\\\\\\"_24\\\\\\\":100,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":101},{\\\\\\\"_18\\\\\\\":98,\\\\\\\"_20\\\\\\\":55},\\\\\\\"Fullstack Data Flow\\\\\\\",\\\\\\\"discussion/data-flow.md\\\\\\\",\\\\\\\"discussion/data-flow\\\\\\\",[],{\\\\\\\"_16\\\\\\\":103,\\\\\\\"_22\\\\\\\":105,\\\\\\\"_24\\\\\\\":106,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":107},{\\\\\\\"_18\\\\\\\":104,\\\\\\\"_20\\\\\\\":62},\\\\\\\"Server vs. Client Code Execution\\\\\\\",\\\\\\\"discussion/server-vs-client.md\\\\\\\",\\\\\\\"discussion/server-vs-client\\\\\\\",[],{\\\\\\\"_16\\\\\\\":109,\\\\\\\"_22\\\\\\\":112,\\\\\\\"_24\\\\\\\":113,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":114},{\\\\\\\"_18\\\\\\\":110,\\\\\\\"_20\\\\\\\":111},\\\\\\\"React Router\\\\\\\",6,\\\\\\\"discussion/react-router.md\\\\\\\",\\\\\\\"discussion/react-router\\\\\\\",[],{\\\\\\\"_16\\\\\\\":116,\\\\\\\"_22\\\\\\\":119,\\\\\\\"_24\\\\\\\":120,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":121},{\\\\\\\"_18\\\\\\\":117,\\\\\\\"_20\\\\\\\":118},\\\\\\\"Progressive Enhancement\\\\\\\",7,\\\\\\\"discussion/progressive-enhancement.md\\\\\\\",\\\\\\\"discussion/progressive-enhancement\\\\\\\",[],{\\\\\\\"_16\\\\\\\":123,\\\\\\\"_22\\\\\\\":126,\\\\\\\"_24\\\\\\\":127,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":128},{\\\\\\\"_18\\\\\\\":124,\\\\\\\"_20\\\\\\\":125},\\\\\\\"Pending UI\\\\\\\",8,\\\\\\\"discussion/pending-ui.md\\\\\\\",\\\\\\\"discussion/pending-ui\\\\\\\",[],{\\\\\\\"_16\\\\\\\":130,\\\\\\\"_22\\\\\\\":133,\\\\\\\"_24\\\\\\\":134,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":135},{\\\\\\\"_18\\\\\\\":131,\\\\\\\"_20\\\\\\\":132},\\\\\\\"State Management\\\\\\\",9,\\\\\\\"discussion/state-management.md\\\\\\\",\\\\\\\"discussion/state-management\\\\\\\",[],{\\\\\\\"_16\\\\\\\":137,\\\\\\\"_22\\\\\\\":139,\\\\\\\"_24\\\\\\\":140,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":141},{\\\\\\\"_18\\\\\\\":138},\\\\\\\"Network Concurrency Management\\\\\\\",\\\\\\\"discussion/concurrency.md\\\\\\\",\\\\\\\"discussion/concurrency\\\\\\\",[],{\\\\\\\"_16\\\\\\\":143,\\\\\\\"_22\\\\\\\":145,\\\\\\\"_24\\\\\\\":146,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":147},{\\\\\\\"_18\\\\\\\":144},\\\\\\\"Form vs. fetcher\\\\\\\",\\\\\\\"discussion/form-vs-fetcher.md\\\\\\\",\\\\\\\"discussion/form-vs-fetcher\\\\\\\",[],{\\\\\\\"_16\\\\\\\":149,\\\\\\\"_22\\\\\\\":151,\\\\\\\"_24\\\\\\\":152,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":153},{\\\\\\\"_18\\\\\\\":150},\\\\\\\"Hot Module Replacement\\\\\\\",\\\\\\\"discussion/hot-module-replacement.md\\\\\\\",\\\\\\\"discussion/hot-module-replacement\\\\\\\",[],{\\\\\\\"_16\\\\\\\":155,\\\\\\\"_22\\\\\\\":157,\\\\\\\"_24\\\\\\\":158,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":159},{\\\\\\\"_18\\\\\\\":156},\\\\\\\"Form Resubmissions\\\\\\\",\\\\\\\"discussion/resubmissions.md\\\\\\\",\\\\\\\"discussion/resubmissions\\\\\\\",[],{\\\\\\\"_16\\\\\\\":161,\\\\\\\"_22\\\\\\\":163,\\\\\\\"_24\\\\\\\":164,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":165},{\\\\\\\"_18\\\\\\\":162,\\\\\\\"_20\\\\\\\":46},\\\\\\\"File Conventions\\\\\\\",\\\\\\\"file-conventions/index.md\\\\\\\",\\\\\\\"file-conventions\\\\\\\",[166,173,179,185,191,197,202,208],{\\\\\\\"_16\\\\\\\":167,\\\\\\\"_22\\\\\\\":170,\\\\\\\"_24\\\\\\\":171,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":172},{\\\\\\\"_18\\\\\\\":168,\\\\\\\"_169\\\\\\\":10},\\\\\\\".client modules\\\\\\\",\\\\\\\"toc\\\\\\\",\\\\\\\"file-conventions/-client.md\\\\\\\",\\\\\\\"file-conventions/-client\\\\\\\",[],{\\\\\\\"_16\\\\\\\":174,\\\\\\\"_22\\\\\\\":176,\\\\\\\"_24\\\\\\\":177,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":178},{\\\\\\\"_18\\\\\\\":175,\\\\\\\"_169\\\\\\\":10},\\\\\\\".server modules\\\\\\\",\\\\\\\"file-conventions/-server.md\\\\\\\",\\\\\\\"file-conventions/-server\\\\\\\",[],{\\\\\\\"_16\\\\\\\":180,\\\\\\\"_22\\\\\\\":182,\\\\\\\"_24\\\\\\\":183,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":184},{\\\\\\\"_18\\\\\\\":181,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Asset Imports\\\\\\\",\\\\\\\"file-conventions/asset-imports.md\\\\\\\",\\\\\\\"file-conventions/asset-imports\\\\\\\",[],{\\\\\\\"_16\\\\\\\":186,\\\\\\\"_22\\\\\\\":188,\\\\\\\"_24\\\\\\\":189,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":190},{\\\\\\\"_18\\\\\\\":187,\\\\\\\"_169\\\\\\\":10},\\\\\\\"entry.client\\\\\\\",\\\\\\\"file-conventions/entry.client.md\\\\\\\",\\\\\\\"file-conventions/entry.client\\\\\\\",[],{\\\\\\\"_16\\\\\\\":192,\\\\\\\"_22\\\\\\\":194,\\\\\\\"_24\\\\\\\":195,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":196},{\\\\\\\"_18\\\\\\\":193,\\\\\\\"_169\\\\\\\":10},\\\\\\\"entry.server\\\\\\\",\\\\\\\"file-conventions/entry.server.md\\\\\\\",\\\\\\\"file-conventions/entry.server\\\\\\\",[],{\\\\\\\"_16\\\\\\\":198,\\\\\\\"_22\\\\\\\":199,\\\\\\\"_24\\\\\\\":200,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":201},{\\\\\\\"_18\\\\\\\":3,\\\\\\\"_169\\\\\\\":10},\\\\\\\"file-conventions/root.md\\\\\\\",\\\\\\\"file-conventions/root\\\\\\\",[],{\\\\\\\"_16\\\\\\\":203,\\\\\\\"_22\\\\\\\":205,\\\\\\\"_24\\\\\\\":206,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":207},{\\\\\\\"_18\\\\\\\":204},\\\\\\\"Route File Naming\\\\\\\",\\\\\\\"file-conventions/routes.md\\\\\\\",\\\\\\\"file-conventions/routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":209,\\\\\\\"_22\\\\\\\":211,\\\\\\\"_24\\\\\\\":212,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":213},{\\\\\\\"_18\\\\\\\":210},\\\\\\\"vite.config.ts\\\\\\\",\\\\\\\"file-conventions/vite-config.md\\\\\\\",\\\\\\\"file-conventions/vite-config\\\\\\\",[],{\\\\\\\"_16\\\\\\\":215,\\\\\\\"_22\\\\\\\":217,\\\\\\\"_24\\\\\\\":218,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":219},{\\\\\\\"_18\\\\\\\":216,\\\\\\\"_20\\\\\\\":55},\\\\\\\"Route Module\\\\\\\",\\\\\\\"route/index.md\\\\\\\",\\\\\\\"route\\\\\\\",[220,226,232,238,244,250,256,262,268,274,280,286],{\\\\\\\"_16\\\\\\\":221,\\\\\\\"_22\\\\\\\":223,\\\\\\\"_24\\\\\\\":224,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":225},{\\\\\\\"_18\\\\\\\":222},\\\\\\\"action\\\\\\\",\\\\\\\"route/action.md\\\\\\\",\\\\\\\"route/action\\\\\\\",[],{\\\\\\\"_16\\\\\\\":227,\\\\\\\"_22\\\\\\\":229,\\\\\\\"_24\\\\\\\":230,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":231},{\\\\\\\"_18\\\\\\\":228},\\\\\\\"clientAction\\\\\\\",\\\\\\\"route/client-action.md\\\\\\\",\\\\\\\"route/client-action\\\\\\\",[],{\\\\\\\"_16\\\\\\\":233,\\\\\\\"_22\\\\\\\":235,\\\\\\\"_24\\\\\\\":236,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":237},{\\\\\\\"_18\\\\\\\":234},\\\\\\\"clientLoader\\\\\\\",\\\\\\\"route/client-loader.md\\\\\\\",\\\\\\\"route/client-loader\\\\\\\",[],{\\\\\\\"_16\\\\\\\":239,\\\\\\\"_22\\\\\\\":241,\\\\\\\"_24\\\\\\\":242,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":243},{\\\\\\\"_18\\\\\\\":240},\\\\\\\"Component\\\\\\\",\\\\\\\"route/component.md\\\\\\\",\\\\\\\"route/component\\\\\\\",[],{\\\\\\\"_16\\\\\\\":245,\\\\\\\"_22\\\\\\\":247,\\\\\\\"_24\\\\\\\":248,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":249},{\\\\\\\"_18\\\\\\\":246},\\\\\\\"ErrorBoundary\\\\\\\",\\\\\\\"route/error-boundary.md\\\\\\\",\\\\\\\"route/error-boundary\\\\\\\",[],{\\\\\\\"_16\\\\\\\":251,\\\\\\\"_22\\\\\\\":253,\\\\\\\"_24\\\\\\\":254,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":255},{\\\\\\\"_18\\\\\\\":252},\\\\\\\"handle\\\\\\\",\\\\\\\"route/handle.md\\\\\\\",\\\\\\\"route/handle\\\\\\\",[],{\\\\\\\"_16\\\\\\\":257,\\\\\\\"_22\\\\\\\":259,\\\\\\\"_24\\\\\\\":260,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":261},{\\\\\\\"_18\\\\\\\":258},\\\\\\\"headers\\\\\\\",\\\\\\\"route/headers.md\\\\\\\",\\\\\\\"route/headers\\\\\\\",[],{\\\\\\\"_16\\\\\\\":263,\\\\\\\"_22\\\\\\\":265,\\\\\\\"_24\\\\\\\":266,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":267},{\\\\\\\"_18\\\\\\\":264},\\\\\\\"HydrateFallback\\\\\\\",\\\\\\\"route/hydrate-fallback.md\\\\\\\",\\\\\\\"route/hydrate-fallback\\\\\\\",[],{\\\\\\\"_16\\\\\\\":269,\\\\\\\"_22\\\\\\\":271,\\\\\\\"_24\\\\\\\":272,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":273},{\\\\\\\"_18\\\\\\\":270},\\\\\\\"links\\\\\\\",\\\\\\\"route/links.md\\\\\\\",\\\\\\\"route/links\\\\\\\",[],{\\\\\\\"_16\\\\\\\":275,\\\\\\\"_22\\\\\\\":277,\\\\\\\"_24\\\\\\\":278,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":279},{\\\\\\\"_18\\\\\\\":276},\\\\\\\"loader\\\\\\\",\\\\\\\"route/loader.md\\\\\\\",\\\\\\\"route/loader\\\\\\\",[],{\\\\\\\"_16\\\\\\\":281,\\\\\\\"_22\\\\\\\":283,\\\\\\\"_24\\\\\\\":284,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":285},{\\\\\\\"_18\\\\\\\":282},\\\\\\\"meta\\\\\\\",\\\\\\\"route/meta.md\\\\\\\",\\\\\\\"route/meta\\\\\\\",[],{\\\\\\\"_16\\\\\\\":287,\\\\\\\"_22\\\\\\\":289,\\\\\\\"_24\\\\\\\":290,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":291},{\\\\\\\"_18\\\\\\\":288},\\\\\\\"shouldRevalidate\\\\\\\",\\\\\\\"route/should-revalidate.md\\\\\\\",\\\\\\\"route/should-revalidate\\\\\\\",[],{\\\\\\\"_16\\\\\\\":293,\\\\\\\"_22\\\\\\\":295,\\\\\\\"_24\\\\\\\":296,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":297},{\\\\\\\"_18\\\\\\\":294,\\\\\\\"_20\\\\\\\":62},\\\\\\\"Components\\\\\\\",\\\\\\\"components/index.md\\\\\\\",\\\\\\\"components\\\\\\\",[298,304,310,316,322,328,334,340,346,352,358],{\\\\\\\"_16\\\\\\\":299,\\\\\\\"_22\\\\\\\":301,\\\\\\\"_24\\\\\\\":302,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":303},{\\\\\\\"_18\\\\\\\":300},\\\\\\\"Await\\\\\\\",\\\\\\\"components/await.md\\\\\\\",\\\\\\\"components/await\\\\\\\",[],{\\\\\\\"_16\\\\\\\":305,\\\\\\\"_22\\\\\\\":307,\\\\\\\"_24\\\\\\\":308,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":309},{\\\\\\\"_18\\\\\\\":306},\\\\\\\"Form\\\\\\\",\\\\\\\"components/form.md\\\\\\\",\\\\\\\"components/form\\\\\\\",[],{\\\\\\\"_16\\\\\\\":311,\\\\\\\"_22\\\\\\\":313,\\\\\\\"_24\\\\\\\":314,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":315},{\\\\\\\"_18\\\\\\\":312},\\\\\\\"Link\\\\\\\",\\\\\\\"components/link.md\\\\\\\",\\\\\\\"components/link\\\\\\\",[],{\\\\\\\"_16\\\\\\\":317,\\\\\\\"_22\\\\\\\":319,\\\\\\\"_24\\\\\\\":320,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":321},{\\\\\\\"_18\\\\\\\":318,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Links\\\\\\\",\\\\\\\"components/links.md\\\\\\\",\\\\\\\"components/links\\\\\\\",[],{\\\\\\\"_16\\\\\\\":323,\\\\\\\"_22\\\\\\\":325,\\\\\\\"_24\\\\\\\":326,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":327},{\\\\\\\"_18\\\\\\\":324,\\\\\\\"_169\\\\\\\":10},\\\\\\\"LiveReload\\\\\\\",\\\\\\\"components/live-reload.md\\\\\\\",\\\\\\\"components/live-reload\\\\\\\",[],{\\\\\\\"_16\\\\\\\":329,\\\\\\\"_22\\\\\\\":331,\\\\\\\"_24\\\\\\\":332,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":333},{\\\\\\\"_18\\\\\\\":330,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Meta\\\\\\\",\\\\\\\"components/meta.md\\\\\\\",\\\\\\\"components/meta\\\\\\\",[],{\\\\\\\"_16\\\\\\\":335,\\\\\\\"_22\\\\\\\":337,\\\\\\\"_24\\\\\\\":338,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":339},{\\\\\\\"_18\\\\\\\":336},\\\\\\\"NavLink\\\\\\\",\\\\\\\"components/nav-link.md\\\\\\\",\\\\\\\"components/nav-link\\\\\\\",[],{\\\\\\\"_16\\\\\\\":341,\\\\\\\"_22\\\\\\\":343,\\\\\\\"_24\\\\\\\":344,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":345},{\\\\\\\"_18\\\\\\\":342},\\\\\\\"Outlet\\\\\\\",\\\\\\\"components/outlet.md\\\\\\\",\\\\\\\"components/outlet\\\\\\\",[],{\\\\\\\"_16\\\\\\\":347,\\\\\\\"_22\\\\\\\":349,\\\\\\\"_24\\\\\\\":350,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":351},{\\\\\\\"_18\\\\\\\":348,\\\\\\\"_169\\\\\\\":10},\\\\\\\"PrefetchPageLinks\\\\\\\",\\\\\\\"components/prefetch-page-links.md\\\\\\\",\\\\\\\"components/prefetch-page-links\\\\\\\",[],{\\\\\\\"_16\\\\\\\":353,\\\\\\\"_22\\\\\\\":355,\\\\\\\"_24\\\\\\\":356,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":357},{\\\\\\\"_18\\\\\\\":354,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Scripts\\\\\\\",\\\\\\\"components/scripts.md\\\\\\\",\\\\\\\"components/scripts\\\\\\\",[],{\\\\\\\"_16\\\\\\\":359,\\\\\\\"_22\\\\\\\":361,\\\\\\\"_24\\\\\\\":362,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":363},{\\\\\\\"_18\\\\\\\":360},\\\\\\\"ScrollRestoration\\\\\\\",\\\\\\\"components/scroll-restoration.md\\\\\\\",\\\\\\\"components/scroll-restoration\\\\\\\",[],{\\\\\\\"_16\\\\\\\":365,\\\\\\\"_22\\\\\\\":367,\\\\\\\"_24\\\\\\\":368,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":369},{\\\\\\\"_18\\\\\\\":366,\\\\\\\"_20\\\\\\\":111},\\\\\\\"Hooks\\\\\\\",\\\\\\\"hooks/index.md\\\\\\\",\\\\\\\"hooks\\\\\\\",[370,376,383,389,395,401,407,413,419,425,431,437,443,449,455,461,467,473,479,485,491,497,503,509,515,521],{\\\\\\\"_16\\\\\\\":371,\\\\\\\"_22\\\\\\\":373,\\\\\\\"_24\\\\\\\":374,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":375},{\\\\\\\"_18\\\\\\\":372,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useActionData\\\\\\\",\\\\\\\"hooks/use-action-data.md\\\\\\\",\\\\\\\"hooks/use-action-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":377,\\\\\\\"_22\\\\\\\":380,\\\\\\\"_24\\\\\\\":381,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":382},{\\\\\\\"_18\\\\\\\":378,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useAsyncError\\\\\\\",\\\\\\\"new\\\\\\\",\\\\\\\"hooks/use-async-error.md\\\\\\\",\\\\\\\"hooks/use-async-error\\\\\\\",[],{\\\\\\\"_16\\\\\\\":384,\\\\\\\"_22\\\\\\\":386,\\\\\\\"_24\\\\\\\":387,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":388},{\\\\\\\"_18\\\\\\\":385,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useAsyncValue\\\\\\\",\\\\\\\"hooks/use-async-value.md\\\\\\\",\\\\\\\"hooks/use-async-value\\\\\\\",[],{\\\\\\\"_16\\\\\\\":390,\\\\\\\"_22\\\\\\\":392,\\\\\\\"_24\\\\\\\":393,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":394},{\\\\\\\"_18\\\\\\\":391,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useBeforeUnload\\\\\\\",\\\\\\\"hooks/use-before-unload.md\\\\\\\",\\\\\\\"hooks/use-before-unload\\\\\\\",[],{\\\\\\\"_16\\\\\\\":396,\\\\\\\"_22\\\\\\\":398,\\\\\\\"_24\\\\\\\":399,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":400},{\\\\\\\"_18\\\\\\\":397},\\\\\\\"useBlocker\\\\\\\",\\\\\\\"hooks/use-blocker.md\\\\\\\",\\\\\\\"hooks/use-blocker\\\\\\\",[],{\\\\\\\"_16\\\\\\\":402,\\\\\\\"_22\\\\\\\":404,\\\\\\\"_24\\\\\\\":405,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":406},{\\\\\\\"_18\\\\\\\":403},\\\\\\\"useFetcher\\\\\\\",\\\\\\\"hooks/use-fetcher.md\\\\\\\",\\\\\\\"hooks/use-fetcher\\\\\\\",[],{\\\\\\\"_16\\\\\\\":408,\\\\\\\"_22\\\\\\\":410,\\\\\\\"_24\\\\\\\":411,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":412},{\\\\\\\"_18\\\\\\\":409,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useFetchers\\\\\\\",\\\\\\\"hooks/use-fetchers.md\\\\\\\",\\\\\\\"hooks/use-fetchers\\\\\\\",[],{\\\\\\\"_16\\\\\\\":414,\\\\\\\"_22\\\\\\\":416,\\\\\\\"_24\\\\\\\":417,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":418},{\\\\\\\"_18\\\\\\\":415},\\\\\\\"useFormAction\\\\\\\",\\\\\\\"hooks/use-form-action.md\\\\\\\",\\\\\\\"hooks/use-form-action\\\\\\\",[],{\\\\\\\"_16\\\\\\\":420,\\\\\\\"_22\\\\\\\":422,\\\\\\\"_24\\\\\\\":423,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":424},{\\\\\\\"_18\\\\\\\":421},\\\\\\\"useHref\\\\\\\",\\\\\\\"hooks/use-href.md\\\\\\\",\\\\\\\"hooks/use-href\\\\\\\",[],{\\\\\\\"_16\\\\\\\":426,\\\\\\\"_22\\\\\\\":428,\\\\\\\"_24\\\\\\\":429,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":430},{\\\\\\\"_18\\\\\\\":427},\\\\\\\"useLoaderData\\\\\\\",\\\\\\\"hooks/use-loader-data.md\\\\\\\",\\\\\\\"hooks/use-loader-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":432,\\\\\\\"_22\\\\\\\":434,\\\\\\\"_24\\\\\\\":435,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":436},{\\\\\\\"_18\\\\\\\":433},\\\\\\\"useLocation\\\\\\\",\\\\\\\"hooks/use-location.md\\\\\\\",\\\\\\\"hooks/use-location\\\\\\\",[],{\\\\\\\"_16\\\\\\\":438,\\\\\\\"_22\\\\\\\":440,\\\\\\\"_24\\\\\\\":441,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":442},{\\\\\\\"_18\\\\\\\":439,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useMatches\\\\\\\",\\\\\\\"hooks/use-matches.md\\\\\\\",\\\\\\\"hooks/use-matches\\\\\\\",[],{\\\\\\\"_16\\\\\\\":444,\\\\\\\"_22\\\\\\\":446,\\\\\\\"_24\\\\\\\":447,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":448},{\\\\\\\"_18\\\\\\\":445},\\\\\\\"useNavigate\\\\\\\",\\\\\\\"hooks/use-navigate.md\\\\\\\",\\\\\\\"hooks/use-navigate\\\\\\\",[],{\\\\\\\"_16\\\\\\\":450,\\\\\\\"_22\\\\\\\":452,\\\\\\\"_24\\\\\\\":453,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":454},{\\\\\\\"_18\\\\\\\":451},\\\\\\\"useNavigation\\\\\\\",\\\\\\\"hooks/use-navigation.md\\\\\\\",\\\\\\\"hooks/use-navigation\\\\\\\",[],{\\\\\\\"_16\\\\\\\":456,\\\\\\\"_22\\\\\\\":458,\\\\\\\"_24\\\\\\\":459,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":460},{\\\\\\\"_18\\\\\\\":457},\\\\\\\"useNavigationType\\\\\\\",\\\\\\\"hooks/use-navigation-type.md\\\\\\\",\\\\\\\"hooks/use-navigation-type\\\\\\\",[],{\\\\\\\"_16\\\\\\\":462,\\\\\\\"_22\\\\\\\":464,\\\\\\\"_24\\\\\\\":465,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":466},{\\\\\\\"_18\\\\\\\":463},\\\\\\\"useOutlet\\\\\\\",\\\\\\\"hooks/use-outlet.md\\\\\\\",\\\\\\\"hooks/use-outlet\\\\\\\",[],{\\\\\\\"_16\\\\\\\":468,\\\\\\\"_22\\\\\\\":470,\\\\\\\"_24\\\\\\\":471,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":472},{\\\\\\\"_18\\\\\\\":469},\\\\\\\"useOutletContext\\\\\\\",\\\\\\\"hooks/use-outlet-context.md\\\\\\\",\\\\\\\"hooks/use-outlet-context\\\\\\\",[],{\\\\\\\"_16\\\\\\\":474,\\\\\\\"_22\\\\\\\":476,\\\\\\\"_24\\\\\\\":477,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":478},{\\\\\\\"_18\\\\\\\":475},\\\\\\\"useParams\\\\\\\",\\\\\\\"hooks/use-params.md\\\\\\\",\\\\\\\"hooks/use-params\\\\\\\",[],{\\\\\\\"_16\\\\\\\":480,\\\\\\\"_22\\\\\\\":482,\\\\\\\"_24\\\\\\\":483,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":484},{\\\\\\\"_18\\\\\\\":481},\\\\\\\"unstable_usePrompt\\\\\\\",\\\\\\\"hooks/use-prompt.md\\\\\\\",\\\\\\\"hooks/use-prompt\\\\\\\",[],{\\\\\\\"_16\\\\\\\":486,\\\\\\\"_22\\\\\\\":488,\\\\\\\"_24\\\\\\\":489,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":490},{\\\\\\\"_18\\\\\\\":487},\\\\\\\"useResolvedPath\\\\\\\",\\\\\\\"hooks/use-resolved-path.md\\\\\\\",\\\\\\\"hooks/use-resolved-path\\\\\\\",[],{\\\\\\\"_16\\\\\\\":492,\\\\\\\"_22\\\\\\\":494,\\\\\\\"_24\\\\\\\":495,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":496},{\\\\\\\"_18\\\\\\\":493,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useRevalidator\\\\\\\",\\\\\\\"hooks/use-revalidator.md\\\\\\\",\\\\\\\"hooks/use-revalidator\\\\\\\",[],{\\\\\\\"_16\\\\\\\":498,\\\\\\\"_22\\\\\\\":500,\\\\\\\"_24\\\\\\\":501,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":502},{\\\\\\\"_18\\\\\\\":499,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useRouteError\\\\\\\",\\\\\\\"hooks/use-route-error.md\\\\\\\",\\\\\\\"hooks/use-route-error\\\\\\\",[],{\\\\\\\"_16\\\\\\\":504,\\\\\\\"_22\\\\\\\":506,\\\\\\\"_24\\\\\\\":507,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":508},{\\\\\\\"_18\\\\\\\":505,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useRouteLoaderData\\\\\\\",\\\\\\\"hooks/use-route-loader-data.md\\\\\\\",\\\\\\\"hooks/use-route-loader-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":510,\\\\\\\"_22\\\\\\\":512,\\\\\\\"_24\\\\\\\":513,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":514},{\\\\\\\"_18\\\\\\\":511},\\\\\\\"useSearchParams\\\\\\\",\\\\\\\"hooks/use-search-params.md\\\\\\\",\\\\\\\"hooks/use-search-params\\\\\\\",[],{\\\\\\\"_16\\\\\\\":516,\\\\\\\"_22\\\\\\\":518,\\\\\\\"_24\\\\\\\":519,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":520},{\\\\\\\"_18\\\\\\\":517},\\\\\\\"useSubmit\\\\\\\",\\\\\\\"hooks/use-submit.md\\\\\\\",\\\\\\\"hooks/use-submit\\\\\\\",[],{\\\\\\\"_16\\\\\\\":522,\\\\\\\"_22\\\\\\\":524,\\\\\\\"_24\\\\\\\":525,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":526},{\\\\\\\"_18\\\\\\\":523,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useViewTransitionState\\\\\\\",\\\\\\\"hooks/use-view-transition-state.md\\\\\\\",\\\\\\\"hooks/use-view-transition-state\\\\\\\",[],{\\\\\\\"_16\\\\\\\":528,\\\\\\\"_22\\\\\\\":530,\\\\\\\"_24\\\\\\\":531,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":532},{\\\\\\\"_18\\\\\\\":529,\\\\\\\"_20\\\\\\\":111},\\\\\\\"Utilities\\\\\\\",\\\\\\\"utils/index.md\\\\\\\",\\\\\\\"utils\\\\\\\",[533,539,545,551,557,563,569,575,581,587,593,599,605],{\\\\\\\"_16\\\\\\\":534,\\\\\\\"_22\\\\\\\":536,\\\\\\\"_24\\\\\\\":537,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":538},{\\\\\\\"_18\\\\\\\":535},\\\\\\\"Cookies\\\\\\\",\\\\\\\"utils/cookies.md\\\\\\\",\\\\\\\"utils/cookies\\\\\\\",[],{\\\\\\\"_16\\\\\\\":540,\\\\\\\"_22\\\\\\\":542,\\\\\\\"_24\\\\\\\":543,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":544},{\\\\\\\"_18\\\\\\\":541},\\\\\\\"createRemixStub\\\\\\\",\\\\\\\"utils/create-remix-stub.md\\\\\\\",\\\\\\\"utils/create-remix-stub\\\\\\\",[],{\\\\\\\"_16\\\\\\\":546,\\\\\\\"_22\\\\\\\":548,\\\\\\\"_24\\\\\\\":549,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":550},{\\\\\\\"_18\\\\\\\":547,\\\\\\\"_169\\\\\\\":10},\\\\\\\"data\\\\\\\",\\\\\\\"utils/data.md\\\\\\\",\\\\\\\"utils/data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":552,\\\\\\\"_22\\\\\\\":554,\\\\\\\"_24\\\\\\\":555,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":556},{\\\\\\\"_18\\\\\\\":553,\\\\\\\"_169\\\\\\\":10},\\\\\\\"defer\\\\\\\",\\\\\\\"utils/defer.md\\\\\\\",\\\\\\\"utils/defer\\\\\\\",[],{\\\\\\\"_16\\\\\\\":558,\\\\\\\"_22\\\\\\\":560,\\\\\\\"_24\\\\\\\":561,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":562},{\\\\\\\"_18\\\\\\\":559,\\\\\\\"_169\\\\\\\":10},\\\\\\\"isRouteErrorResponse\\\\\\\",\\\\\\\"utils/is-route-error-response.md\\\\\\\",\\\\\\\"utils/is-route-error-response\\\\\\\",[],{\\\\\\\"_16\\\\\\\":564,\\\\\\\"_22\\\\\\\":566,\\\\\\\"_24\\\\\\\":567,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":568},{\\\\\\\"_18\\\\\\\":565,\\\\\\\"_169\\\\\\\":10},\\\\\\\"json\\\\\\\",\\\\\\\"utils/json.md\\\\\\\",\\\\\\\"utils/json\\\\\\\",[],{\\\\\\\"_16\\\\\\\":570,\\\\\\\"_22\\\\\\\":572,\\\\\\\"_24\\\\\\\":573,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":574},{\\\\\\\"_18\\\\\\\":571},\\\\\\\"unstable_parseMultipartFormData\\\\\\\",\\\\\\\"utils/parse-multipart-form-data.md\\\\\\\",\\\\\\\"utils/parse-multipart-form-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":576,\\\\\\\"_22\\\\\\\":578,\\\\\\\"_24\\\\\\\":579,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":580},{\\\\\\\"_18\\\\\\\":577,\\\\\\\"_169\\\\\\\":10},\\\\\\\"redirect\\\\\\\",\\\\\\\"utils/redirect.md\\\\\\\",\\\\\\\"utils/redirect\\\\\\\",[],{\\\\\\\"_16\\\\\\\":582,\\\\\\\"_22\\\\\\\":584,\\\\\\\"_24\\\\\\\":585,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":586},{\\\\\\\"_18\\\\\\\":583,\\\\\\\"_169\\\\\\\":10},\\\\\\\"redirectDocument\\\\\\\",\\\\\\\"utils/redirectDocument.md\\\\\\\",\\\\\\\"utils/redirectDocument\\\\\\\",[],{\\\\\\\"_16\\\\\\\":588,\\\\\\\"_22\\\\\\\":590,\\\\\\\"_24\\\\\\\":591,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":592},{\\\\\\\"_18\\\\\\\":589,\\\\\\\"_169\\\\\\\":10},\\\\\\\"replace\\\\\\\",\\\\\\\"utils/replace.md\\\\\\\",\\\\\\\"utils/replace\\\\\\\",[],{\\\\\\\"_16\\\\\\\":594,\\\\\\\"_22\\\\\\\":596,\\\\\\\"_24\\\\\\\":597,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":598},{\\\\\\\"_18\\\\\\\":595},\\\\\\\"Sessions\\\\\\\",\\\\\\\"utils/sessions.md\\\\\\\",\\\\\\\"utils/sessions\\\\\\\",[],{\\\\\\\"_16\\\\\\\":600,\\\\\\\"_22\\\\\\\":602,\\\\\\\"_24\\\\\\\":603,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":604},{\\\\\\\"_18\\\\\\\":601,\\\\\\\"_169\\\\\\\":10},\\\\\\\"unstable_createFileUploadHandler\\\\\\\",\\\\\\\"utils/unstable-create-file-upload-handler.md\\\\\\\",\\\\\\\"utils/unstable-create-file-upload-handler\\\\\\\",[],{\\\\\\\"_16\\\\\\\":606,\\\\\\\"_22\\\\\\\":608,\\\\\\\"_24\\\\\\\":609,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":610},{\\\\\\\"_18\\\\\\\":607,\\\\\\\"_169\\\\\\\":10},\\\\\\\"unstable_createMemoryUploadHandler\\\\\\\",\\\\\\\"utils/unstable-create-memory-upload-handler.md\\\\\\\",\\\\\\\"utils/unstable-create-memory-upload-handler\\\\\\\",[],{\\\\\\\"_16\\\\\\\":612,\\\\\\\"_22\\\\\\\":614,\\\\\\\"_24\\\\\\\":615,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":616},{\\\\\\\"_18\\\\\\\":613,\\\\\\\"_20\\\\\\\":118},\\\\\\\"Styling\\\\\\\",\\\\\\\"styling/index.md\\\\\\\",\\\\\\\"styling\\\\\\\",[617,623,629,635,641,647,653,659],{\\\\\\\"_16\\\\\\\":618,\\\\\\\"_22\\\\\\\":620,\\\\\\\"_24\\\\\\\":621,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":622},{\\\\\\\"_18\\\\\\\":619},\\\\\\\"CSS Bundling\\\\\\\",\\\\\\\"styling/bundling.md\\\\\\\",\\\\\\\"styling/bundling\\\\\\\",[],{\\\\\\\"_16\\\\\\\":624,\\\\\\\"_22\\\\\\\":626,\\\\\\\"_24\\\\\\\":627,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":628},{\\\\\\\"_18\\\\\\\":625},\\\\\\\"Regular CSS\\\\\\\",\\\\\\\"styling/css.md\\\\\\\",\\\\\\\"styling/css\\\\\\\",[],{\\\\\\\"_16\\\\\\\":630,\\\\\\\"_22\\\\\\\":632,\\\\\\\"_24\\\\\\\":633,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":634},{\\\\\\\"_18\\\\\\\":631},\\\\\\\"CSS Imports\\\\\\\",\\\\\\\"styling/css-imports.md\\\\\\\",\\\\\\\"styling/css-imports\\\\\\\",[],{\\\\\\\"_16\\\\\\\":636,\\\\\\\"_22\\\\\\\":638,\\\\\\\"_24\\\\\\\":639,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":640},{\\\\\\\"_18\\\\\\\":637},\\\\\\\"CSS in JS\\\\\\\",\\\\\\\"styling/css-in-js.md\\\\\\\",\\\\\\\"styling/css-in-js\\\\\\\",[],{\\\\\\\"_16\\\\\\\":642,\\\\\\\"_22\\\\\\\":644,\\\\\\\"_24\\\\\\\":645,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":646},{\\\\\\\"_18\\\\\\\":643},\\\\\\\"CSS Modules\\\\\\\",\\\\\\\"styling/css-modules.md\\\\\\\",\\\\\\\"styling/css-modules\\\\\\\",[],{\\\\\\\"_16\\\\\\\":648,\\\\\\\"_22\\\\\\\":650,\\\\\\\"_24\\\\\\\":651,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":652},{\\\\\\\"_18\\\\\\\":649},\\\\\\\"PostCSS\\\\\\\",\\\\\\\"styling/postcss.md\\\\\\\",\\\\\\\"styling/postcss\\\\\\\",[],{\\\\\\\"_16\\\\\\\":654,\\\\\\\"_22\\\\\\\":656,\\\\\\\"_24\\\\\\\":657,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":658},{\\\\\\\"_18\\\\\\\":655},\\\\\\\"Tailwind\\\\\\\",\\\\\\\"styling/tailwind.md\\\\\\\",\\\\\\\"styling/tailwind\\\\\\\",[],{\\\\\\\"_16\\\\\\\":660,\\\\\\\"_22\\\\\\\":662,\\\\\\\"_24\\\\\\\":663,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":664},{\\\\\\\"_18\\\\\\\":661},\\\\\\\"Vanilla Extract\\\\\\\",\\\\\\\"styling/vanilla-extract.md\\\\\\\",\\\\\\\"styling/vanilla-extract\\\\\\\",[],{\\\\\\\"_16\\\\\\\":666,\\\\\\\"_22\\\\\\\":668,\\\\\\\"_24\\\\\\\":669,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":670},{\\\\\\\"_18\\\\\\\":667,\\\\\\\"_20\\\\\\\":132},\\\\\\\"Other API\\\\\\\",\\\\\\\"other-api/index.md\\\\\\\",\\\\\\\"other-api\\\\\\\",[671,677,683,689,695,701],{\\\\\\\"_16\\\\\\\":672,\\\\\\\"_22\\\\\\\":674,\\\\\\\"_24\\\\\\\":675,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":676},{\\\\\\\"_18\\\\\\\":673,\\\\\\\"_20\\\\\\\":39,\\\\\\\"_379\\\\\\\":34},\\\\\\\"@remix-run/dev CLI\\\\\\\",\\\\\\\"other-api/dev.md\\\\\\\",\\\\\\\"other-api/dev\\\\\\\",[],{\\\\\\\"_16\\\\\\\":678,\\\\\\\"_22\\\\\\\":680,\\\\\\\"_24\\\\\\\":681,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":682},{\\\\\\\"_18\\\\\\\":679,\\\\\\\"_20\\\\\\\":46},\\\\\\\"@remix-run/{adapter}\\\\\\\",\\\\\\\"other-api/adapter.md\\\\\\\",\\\\\\\"other-api/adapter\\\\\\\",[],{\\\\\\\"_16\\\\\\\":684,\\\\\\\"_22\\\\\\\":686,\\\\\\\"_24\\\\\\\":687,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":688},{\\\\\\\"_18\\\\\\\":685,\\\\\\\"_20\\\\\\\":46},\\\\\\\"@remix-run/serve\\\\\\\",\\\\\\\"other-api/serve.md\\\\\\\",\\\\\\\"other-api/serve\\\\\\\",[],{\\\\\\\"_16\\\\\\\":690,\\\\\\\"_22\\\\\\\":692,\\\\\\\"_24\\\\\\\":693,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":694},{\\\\\\\"_18\\\\\\\":691},\\\\\\\"create-remix (CLI)\\\\\\\",\\\\\\\"other-api/create-remix.md\\\\\\\",\\\\\\\"other-api/create-remix\\\\\\\",[],{\\\\\\\"_16\\\\\\\":696,\\\\\\\"_22\\\\\\\":698,\\\\\\\"_24\\\\\\\":699,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":700},{\\\\\\\"_18\\\\\\\":697},\\\\\\\"@remix-run/node\\\\\\\",\\\\\\\"other-api/node.md\\\\\\\",\\\\\\\"other-api/node\\\\\\\",[],{\\\\\\\"_16\\\\\\\":702,\\\\\\\"_22\\\\\\\":704,\\\\\\\"_24\\\\\\\":705,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":706},{\\\\\\\"_18\\\\\\\":703},\\\\\\\"@remix-run/testing\\\\\\\",\\\\\\\"other-api/testing.md\\\\\\\",\\\\\\\"other-api/testing\\\\\\\",[],{\\\\\\\"_16\\\\\\\":708,\\\\\\\"_22\\\\\\\":711,\\\\\\\"_24\\\\\\\":712,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":713},{\\\\\\\"_18\\\\\\\":709,\\\\\\\"_20\\\\\\\":710},\\\\\\\"Guides\\\\\\\",10,\\\\\\\"guides/index.md\\\\\\\",\\\\\\\"guides\\\\\\\",[714,720,726,732,738,744,750,756,762,769,775,782,788,794,800,806,812,818,825,831,837,843,849,855,861,867,874,881,887,893,899,905,911,917,923,930,937,943],{\\\\\\\"_16\\\\\\\":715,\\\\\\\"_22\\\\\\\":717,\\\\\\\"_24\\\\\\\":718,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":719},{\\\\\\\"_18\\\\\\\":716},\\\\\\\"Accessibility\\\\\\\",\\\\\\\"guides/accessibility.md\\\\\\\",\\\\\\\"guides/accessibility\\\\\\\",[],{\\\\\\\"_16\\\\\\\":721,\\\\\\\"_22\\\\\\\":723,\\\\\\\"_24\\\\\\\":724,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":725},{\\\\\\\"_18\\\\\\\":722},\\\\\\\"Development Strategy\\\\\\\",\\\\\\\"guides/api-development-strategy.md\\\\\\\",\\\\\\\"guides/api-development-strategy\\\\\\\",[],{\\\\\\\"_16\\\\\\\":727,\\\\\\\"_22\\\\\\\":729,\\\\\\\"_24\\\\\\\":730,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":731},{\\\\\\\"_18\\\\\\\":728},\\\\\\\"API Routes\\\\\\\",\\\\\\\"guides/api-routes.md\\\\\\\",\\\\\\\"guides/api-routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":733,\\\\\\\"_22\\\\\\\":735,\\\\\\\"_24\\\\\\\":736,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":737},{\\\\\\\"_18\\\\\\\":734,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Backend For Frontend\\\\\\\",\\\\\\\"guides/bff.md\\\\\\\",\\\\\\\"guides/bff\\\\\\\",[],{\\\\\\\"_16\\\\\\\":739,\\\\\\\"_22\\\\\\\":741,\\\\\\\"_24\\\\\\\":742,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":743},{\\\\\\\"_18\\\\\\\":740},\\\\\\\"Breadcrumbs Guide\\\\\\\",\\\\\\\"guides/breadcrumbs.md\\\\\\\",\\\\\\\"guides/breadcrumbs\\\\\\\",[],{\\\\\\\"_16\\\\\\\":745,\\\\\\\"_22\\\\\\\":747,\\\\\\\"_24\\\\\\\":748,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":749},{\\\\\\\"_18\\\\\\\":746},\\\\\\\"Browser Support\\\\\\\",\\\\\\\"guides/browser-support.md\\\\\\\",\\\\\\\"guides/browser-support\\\\\\\",[],{\\\\\\\"_16\\\\\\\":751,\\\\\\\"_22\\\\\\\":753,\\\\\\\"_24\\\\\\\":754,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":755},{\\\\\\\"_18\\\\\\\":752},\\\\\\\"Client Data\\\\\\\",\\\\\\\"guides/client-data.md\\\\\\\",\\\\\\\"guides/client-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":757,\\\\\\\"_22\\\\\\\":759,\\\\\\\"_24\\\\\\\":760,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":761},{\\\\\\\"_18\\\\\\\":758},\\\\\\\"Module Constraints\\\\\\\",\\\\\\\"guides/constraints.md\\\\\\\",\\\\\\\"guides/constraints\\\\\\\",[],{\\\\\\\"_16\\\\\\\":763,\\\\\\\"_22\\\\\\\":766,\\\\\\\"_24\\\\\\\":767,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":768},{\\\\\\\"_18\\\\\\\":764,\\\\\\\"_53\\\\\\\":765},\\\\\\\"Contributing\\\\\\\",\\\\\\\"Thank you for contributing to Remix! Here's everything you need to know before you open a pull request.\\\\\\\",\\\\\\\"guides/contributing.md\\\\\\\",\\\\\\\"guides/contributing\\\\\\\",[],{\\\\\\\"_16\\\\\\\":770,\\\\\\\"_22\\\\\\\":772,\\\\\\\"_24\\\\\\\":773,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":774},{\\\\\\\"_18\\\\\\\":771},\\\\\\\"CSS Files\\\\\\\",\\\\\\\"guides/css-files.md\\\\\\\",\\\\\\\"guides/css-files\\\\\\\",[],{\\\\\\\"_16\\\\\\\":776,\\\\\\\"_22\\\\\\\":779,\\\\\\\"_24\\\\\\\":780,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":781},{\\\\\\\"_18\\\\\\\":777,\\\\\\\"_53\\\\\\\":778},\\\\\\\"Data Loading\\\\\\\",\\\\\\\"One of the primary features of Remix is simplifying interactions with the server to get data into components. This document will help you get the most out of data loading in Remix.\\\\\\\",\\\\\\\"guides/data-loading.md\\\\\\\",\\\\\\\"guides/data-loading\\\\\\\",[],{\\\\\\\"_16\\\\\\\":783,\\\\\\\"_22\\\\\\\":785,\\\\\\\"_24\\\\\\\":786,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":787},{\\\\\\\"_18\\\\\\\":784},\\\\\\\"Data Writes\\\\\\\",\\\\\\\"guides/data-writes.md\\\\\\\",\\\\\\\"guides/data-writes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":789,\\\\\\\"_22\\\\\\\":791,\\\\\\\"_24\\\\\\\":792,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":793},{\\\\\\\"_18\\\\\\\":790},\\\\\\\"Dependency optimization\\\\\\\",\\\\\\\"guides/dependency-optimization.md\\\\\\\",\\\\\\\"guides/dependency-optimization\\\\\\\",[],{\\\\\\\"_16\\\\\\\":795,\\\\\\\"_22\\\\\\\":797,\\\\\\\"_24\\\\\\\":798,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":799},{\\\\\\\"_18\\\\\\\":796,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Deployment\\\\\\\",\\\\\\\"guides/deployment.md\\\\\\\",\\\\\\\"guides/deployment\\\\\\\",[],{\\\\\\\"_16\\\\\\\":801,\\\\\\\"_22\\\\\\\":803,\\\\\\\"_24\\\\\\\":804,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":805},{\\\\\\\"_18\\\\\\\":802,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Disabling JavaScript\\\\\\\",\\\\\\\"guides/disabling-javascript.md\\\\\\\",\\\\\\\"guides/disabling-javascript\\\\\\\",[],{\\\\\\\"_16\\\\\\\":807,\\\\\\\"_22\\\\\\\":809,\\\\\\\"_24\\\\\\\":810,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":811},{\\\\\\\"_18\\\\\\\":808},\\\\\\\"Environment Variables\\\\\\\",\\\\\\\"guides/envvars.md\\\\\\\",\\\\\\\"guides/envvars\\\\\\\",[],{\\\\\\\"_16\\\\\\\":813,\\\\\\\"_22\\\\\\\":815,\\\\\\\"_24\\\\\\\":816,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":817},{\\\\\\\"_18\\\\\\\":814},\\\\\\\"Error Handling\\\\\\\",\\\\\\\"guides/errors.md\\\\\\\",\\\\\\\"guides/errors\\\\\\\",[],{\\\\\\\"_16\\\\\\\":819,\\\\\\\"_22\\\\\\\":822,\\\\\\\"_24\\\\\\\":823,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":824},{\\\\\\\"_18\\\\\\\":820,\\\\\\\"_53\\\\\\\":821},\\\\\\\"FAQs\\\\\\\",\\\\\\\"Frequently Asked Questions about Remix\\\\\\\",\\\\\\\"guides/faq.md\\\\\\\",\\\\\\\"guides/faq\\\\\\\",[],{\\\\\\\"_16\\\\\\\":826,\\\\\\\"_22\\\\\\\":828,\\\\\\\"_24\\\\\\\":829,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":830},{\\\\\\\"_18\\\\\\\":827},\\\\\\\"File Uploads\\\\\\\",\\\\\\\"guides/file-uploads.md\\\\\\\",\\\\\\\"guides/file-uploads\\\\\\\",[],{\\\\\\\"_16\\\\\\\":832,\\\\\\\"_22\\\\\\\":834,\\\\\\\"_24\\\\\\\":835,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":836},{\\\\\\\"_18\\\\\\\":833},\\\\\\\"Form Validation\\\\\\\",\\\\\\\"guides/form-validation.md\\\\\\\",\\\\\\\"guides/form-validation\\\\\\\",[],{\\\\\\\"_16\\\\\\\":838,\\\\\\\"_22\\\\\\\":840,\\\\\\\"_24\\\\\\\":841,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":842},{\\\\\\\"_18\\\\\\\":839},\\\\\\\"Gotchas\\\\\\\",\\\\\\\"guides/gotchas.md\\\\\\\",\\\\\\\"guides/gotchas\\\\\\\",[],{\\\\\\\"_16\\\\\\\":844,\\\\\\\"_22\\\\\\\":846,\\\\\\\"_24\\\\\\\":847,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":848},{\\\\\\\"_18\\\\\\\":845,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Index Query Param\\\\\\\",\\\\\\\"guides/index-query-param.md\\\\\\\",\\\\\\\"guides/index-query-param\\\\\\\",[],{\\\\\\\"_16\\\\\\\":850,\\\\\\\"_22\\\\\\\":852,\\\\\\\"_24\\\\\\\":853,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":854},{\\\\\\\"_18\\\\\\\":851},\\\\\\\"Lazy Route Discovery\\\\\\\",\\\\\\\"guides/lazy-route-discovery.md\\\\\\\",\\\\\\\"guides/lazy-route-discovery\\\\\\\",[],{\\\\\\\"_16\\\\\\\":856,\\\\\\\"_22\\\\\\\":858,\\\\\\\"_24\\\\\\\":859,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":860},{\\\\\\\"_18\\\\\\\":857},\\\\\\\"Local TLS\\\\\\\",\\\\\\\"guides/local-tls.md\\\\\\\",\\\\\\\"guides/local-tls\\\\\\\",[],{\\\\\\\"_16\\\\\\\":862,\\\\\\\"_22\\\\\\\":864,\\\\\\\"_24\\\\\\\":865,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":866},{\\\\\\\"_18\\\\\\\":863},\\\\\\\"Manual Dev Server\\\\\\\",\\\\\\\"guides/manual-mode.md\\\\\\\",\\\\\\\"guides/manual-mode\\\\\\\",[],{\\\\\\\"_16\\\\\\\":868,\\\\\\\"_22\\\\\\\":871,\\\\\\\"_24\\\\\\\":872,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":873},{\\\\\\\"_18\\\\\\\":869,\\\\\\\"_53\\\\\\\":870},\\\\\\\"MDX\\\\\\\",\\\\\\\"Remix makes integrating MDX into your project a breeze with built in routes and \\\\\\\\\\\\\\\"import\\\\\\\\\\\\\\\" support.\\\\\\\",\\\\\\\"guides/mdx.md\\\\\\\",\\\\\\\"guides/mdx\\\\\\\",[],{\\\\\\\"_16\\\\\\\":875,\\\\\\\"_22\\\\\\\":878,\\\\\\\"_24\\\\\\\":879,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":880},{\\\\\\\"_18\\\\\\\":876,\\\\\\\"_53\\\\\\\":877},\\\\\\\"Migrating from React Router\\\\\\\",\\\\\\\"Migrating your React Router app to Remix can be done all at once or in stages. This guide will walk you through an iterative approach to get your app running quickly.\\\\\\\",\\\\\\\"guides/migrating-react-router-app.md\\\\\\\",\\\\\\\"guides/migrating-react-router-app\\\\\\\",[],{\\\\\\\"_16\\\\\\\":882,\\\\\\\"_22\\\\\\\":884,\\\\\\\"_24\\\\\\\":885,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":886},{\\\\\\\"_18\\\\\\\":883},\\\\\\\"Not Found Handling\\\\\\\",\\\\\\\"guides/not-found.md\\\\\\\",\\\\\\\"guides/not-found\\\\\\\",[],{\\\\\\\"_16\\\\\\\":888,\\\\\\\"_22\\\\\\\":890,\\\\\\\"_24\\\\\\\":891,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":892},{\\\\\\\"_18\\\\\\\":889},\\\\\\\"Performance\\\\\\\",\\\\\\\"guides/performance.md\\\\\\\",\\\\\\\"guides/performance\\\\\\\",[],{\\\\\\\"_16\\\\\\\":894,\\\\\\\"_22\\\\\\\":896,\\\\\\\"_24\\\\\\\":897,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":898},{\\\\\\\"_18\\\\\\\":895},\\\\\\\"Presets\\\\\\\",\\\\\\\"guides/presets.md\\\\\\\",\\\\\\\"guides/presets\\\\\\\",[],{\\\\\\\"_16\\\\\\\":900,\\\\\\\"_22\\\\\\\":902,\\\\\\\"_24\\\\\\\":903,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":904},{\\\\\\\"_18\\\\\\\":901},\\\\\\\"Resource Routes\\\\\\\",\\\\\\\"guides/resource-routes.md\\\\\\\",\\\\\\\"guides/resource-routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":906,\\\\\\\"_22\\\\\\\":908,\\\\\\\"_24\\\\\\\":909,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":910},{\\\\\\\"_18\\\\\\\":907},\\\\\\\"Server Bundles\\\\\\\",\\\\\\\"guides/server-bundles.md\\\\\\\",\\\\\\\"guides/server-bundles\\\\\\\",[],{\\\\\\\"_16\\\\\\\":912,\\\\\\\"_22\\\\\\\":914,\\\\\\\"_24\\\\\\\":915,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":916},{\\\\\\\"_18\\\\\\\":913},\\\\\\\"Single Fetch\\\\\\\",\\\\\\\"guides/single-fetch.md\\\\\\\",\\\\\\\"guides/single-fetch\\\\\\\",[],{\\\\\\\"_16\\\\\\\":918,\\\\\\\"_22\\\\\\\":920,\\\\\\\"_24\\\\\\\":921,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":922},{\\\\\\\"_18\\\\\\\":919},\\\\\\\"SPA Mode\\\\\\\",\\\\\\\"guides/spa-mode.md\\\\\\\",\\\\\\\"guides/spa-mode\\\\\\\",[],{\\\\\\\"_16\\\\\\\":924,\\\\\\\"_22\\\\\\\":927,\\\\\\\"_24\\\\\\\":928,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":929},{\\\\\\\"_18\\\\\\\":925,\\\\\\\"_53\\\\\\\":926},\\\\\\\"Streaming\\\\\\\",\\\\\\\"When, why, and how to stream with React 18 and Remix's deferred API.\\\\\\\",\\\\\\\"guides/streaming.md\\\\\\\",\\\\\\\"guides/streaming\\\\\\\",[],{\\\\\\\"_16\\\\\\\":931,\\\\\\\"_22\\\\\\\":934,\\\\\\\"_24\\\\\\\":935,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":936},{\\\\\\\"_18\\\\\\\":932,\\\\\\\"_53\\\\\\\":933},\\\\\\\"Templates\\\\\\\",\\\\\\\"The quickest way to get rocking and rolling with Remix\\\\\\\",\\\\\\\"guides/templates.md\\\\\\\",\\\\\\\"guides/templates\\\\\\\",[],{\\\\\\\"_16\\\\\\\":938,\\\\\\\"_22\\\\\\\":940,\\\\\\\"_24\\\\\\\":941,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":942},{\\\\\\\"_18\\\\\\\":939,\\\\\\\"_169\\\\\\\":10},\\\\\\\"TypeScript\\\\\\\",\\\\\\\"guides/typescript.md\\\\\\\",\\\\\\\"guides/typescript\\\\\\\",[],{\\\\\\\"_16\\\\\\\":944,\\\\\\\"_22\\\\\\\":946,\\\\\\\"_24\\\\\\\":947,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":948},{\\\\\\\"_18\\\\\\\":945},\\\\\\\"Vite\\\\\\\",\\\\\\\"guides/vite.md\\\\\\\",\\\\\\\"guides/vite\\\\\\\",[],\\\\\\\"routes/docs.$\\\\\\\",{\\\\\\\"_951\\\\\\\":952},\\\\\\\"doc\\\\\\\",{\\\\\\\"_16\\\\\\\":953,\\\\\\\"_22\\\\\\\":954,\\\\\\\"_955\\\\\\\":956,\\\\\\\"_24\\\\\\\":957,\\\\\\\"_958\\\\\\\":959,\\\\\\\"_27\\\\\\\":975},{\\\\\\\"_18\\\\\\\":193,\\\\\\\"_169\\\\\\\":10},\\\\\\\"docs/file-conventions/entry.server.md\\\\\\\",\\\\\\\"html\\\\\\\",\\\\\\\"\\\\u003ch1 id=\\\\\\\\\\\\\\\"entryserver\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#entryserver\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003eentry.server\\\\u003c/h1\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eBy default, Remix will handle generating the HTTP Response for you. If you want to customize this behavior, you can run \\\\u003ccode\\\\u003enpx remix reveal\\\\u003c/code\\\\u003e to generate an \\\\u003ccode\\\\u003eapp/entry.server.tsx\\\\u003c/code\\\\u003e (or \\\\u003ccode\\\\u003e.jsx\\\\u003c/code\\\\u003e) that will take precedence. The \\\\u003ccode\\\\u003edefault\\\\u003c/code\\\\u003e export of this module is a function that lets you create the response, including HTTP status, headers, and HTML, giving you full control over the way the markup is generated and sent to the client.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eThis module should render the markup for the current page using a \\\\u003ccode\\\\u003e\\\\u0026#x3C;RemixServer\\\\u003e\\\\u003c/code\\\\u003e element with the \\\\u003ccode\\\\u003econtext\\\\u003c/code\\\\u003e and \\\\u003ccode\\\\u003eurl\\\\u003c/code\\\\u003e for the current request. This markup will (optionally) be re-hydrated once JavaScript loads in the browser using the \\\\u003ca href=\\\\\\\\\\\\\\\"./entry.client\\\\\\\\\\\\\\\"\\\\u003ebrowser entry module\\\\u003c/a\\\\u003e.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003ch2 id=\\\\\\\\\\\\\\\"handledatarequest\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#handledatarequest\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003e\\\\u003ccode\\\\u003ehandleDataRequest\\\\u003c/code\\\\u003e\\\\u003c/h2\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eYou can export an optional \\\\u003ccode\\\\u003ehandleDataRequest\\\\u003c/code\\\\u003e function that will allow you to modify the response of a data request. These are the requests that do not render HTML but rather return the loader and action data to the browser once client-side hydration has occurred.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cdiv data-code-block=\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\" data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"tsx\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cpre data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"tsx\\\\\\\\\\\\\\\" style=\\\\\\\\\\\\\\\"color: var(--base05);\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"1\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eexport\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003efunction\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003ehandleDataRequest\\\\u003c/span\\\\u003e(\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"2\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eresponse\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e:\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eResponse\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"3\\\\\\\\\\\\\\\"\\\\u003e {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"4\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003erequest\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"5\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eparams\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"6\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003econtext\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"7\\\\\\\\\\\\\\\"\\\\u003e }\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e:\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eLoaderFunctionArgs\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e|\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eActionFunctionArgs\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"8\\\\\\\\\\\\\\\"\\\\u003e) {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"9\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eresponse\\\\u003c/span\\\\u003e.\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003eheaders\\\\u003c/span\\\\u003e.\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003eset\\\\u003c/span\\\\u003e(\\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003eX-Custom-Header\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\", \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003evalue\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\");\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"10\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003ereturn\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eresponse\\\\u003c/span\\\\u003e;\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"11\\\\\\\\\\\\\\\"\\\\u003e}\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003c/code\\\\u003e\\\\u003c/pre\\\\u003e\\\\u003c/div\\\\u003e\\\\\\\\n\\\\u003ch2 id=\\\\\\\\\\\\\\\"handleerror\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#handleerror\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003e\\\\u003ccode\\\\u003ehandleError\\\\u003c/code\\\\u003e\\\\u003c/h2\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eBy default, Remix will log encountered server-side errors to the console. If you'd like more control over the logging, or would like to also report these errors to an external service, then you can export an optional \\\\u003ccode\\\\u003ehandleError\\\\u003c/code\\\\u003e function which will give you control (and will disable the built-in error logging).\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cdiv data-code-block=\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\" data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"tsx\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cpre data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"tsx\\\\\\\\\\\\\\\" style=\\\\\\\\\\\\\\\"color: var(--base05);\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"1\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eexport\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003efunction\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003ehandleError\\\\u003c/span\\\\u003e(\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"2\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eerror\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e:\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0C)\\\\\\\\\\\\\\\"\\\\u003eunknown\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"3\\\\\\\\\\\\\\\"\\\\u003e {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"4\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003erequest\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"5\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eparams\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"6\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003econtext\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"7\\\\\\\\\\\\\\\"\\\\u003e }\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e:\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eLoaderFunctionArgs\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e|\\\\u003c/span\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eActionFunctionArgs\\\\u003c/span\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"8\\\\\\\\\\\\\\\"\\\\u003e) {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"9\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eif\\\\u003c/span\\\\u003e (\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003e!\\\\u003c/span\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003erequest\\\\u003c/span\\\\u003e.\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003esignal\\\\u003c/span\\\\u003e.\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eaborted\\\\u003c/span\\\\u003e) {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"10\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003esendErrorToErrorReportingService\\\\u003c/span\\\\u003e(\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eerror\\\\u003c/span\\\\u003e);\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"11\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003econsole\\\\u003c/span\\\\u003e.\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003eerror\\\\u003c/span\\\\u003e(\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003eformatErrorForJsonLogging\\\\u003c/span\\\\u003e(\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eerror\\\\u003c/span\\\\u003e));\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"12\\\\\\\\\\\\\\\"\\\\u003e }\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"13\\\\\\\\\\\\\\\"\\\\u003e}\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003c/code\\\\u003e\\\\u003c/pre\\\\u003e\\\\u003c/div\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003e\\\\u003cem\\\\u003eNote that you generally want to avoid logging when the request was aborted, since Remix's cancellation and race-condition handling can cause a lot of requests to be aborted.\\\\u003c/em\\\\u003e\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003ch3 id=\\\\\\\\\\\\\\\"streaming-rendering-errors\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#streaming-rendering-errors\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003eStreaming Rendering Errors\\\\u003c/h3\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eWhen you are streaming your HTML responses via \\\\u003ca href=\\\\\\\\\\\\\\\"https://react.dev/reference/react-dom/server/renderToPipeableStream\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003erenderToPipeableStream\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e or \\\\u003ca href=\\\\\\\\\\\\\\\"https://react.dev/reference/react-dom/server/renderToReadableStream\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003erenderToReadableStream\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e, your own \\\\u003ccode\\\\u003ehandleError\\\\u003c/code\\\\u003e implementation will only handle errors encountered during the initial shell render. If you encounter a rendering error during subsequent streamed rendering, you will need to handle these errors manually since the Remix server has already sent the Response by that point.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cul\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003eFor \\\\u003ccode\\\\u003erenderToPipeableStream\\\\u003c/code\\\\u003e, you can handle these errors in the \\\\u003ccode\\\\u003eonError\\\\u003c/code\\\\u003e callback function. You will need to toggle a boolean in \\\\u003ccode\\\\u003eonShellReady\\\\u003c/code\\\\u003e so you know if the error was a shell rendering error (and can be ignored) or an async rendering error (and must be handled).\\\\\\\\n\\\\u003cul\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003eFor an example, please refer to the default \\\\u003ca href=\\\\\\\\\\\\\\\"https://github.com/remix-run/remix/blob/main/packages/remix-dev/config/defaults/entry.server.node.tsx\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003eentry.server.tsx\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e for Node.\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003c/ul\\\\u003e\\\\\\\\n\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003eFor \\\\u003ccode\\\\u003erenderToReadableStream\\\\u003c/code\\\\u003e, you can handle these errors in the \\\\u003ccode\\\\u003eonError\\\\u003c/code\\\\u003e callback function\\\\\\\\n\\\\u003cul\\\\u003e\\\\\\\\n\\\\u003cli\\\\u003eFor an example, please refer to the default \\\\u003ca href=\\\\\\\\\\\\\\\"https://github.com/remix-run/remix/blob/main/packages/remix-dev/config/defaults/entry.server.cloudflare.tsx\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003eentry.server.tsx\\\\u003c/code\\\\u003e\\\\u003c/a\\\\u003e for Cloudflare\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003c/ul\\\\u003e\\\\\\\\n\\\\u003c/li\\\\u003e\\\\\\\\n\\\\u003c/ul\\\\u003e\\\\\\\\n\\\\u003ch3 id=\\\\\\\\\\\\\\\"thrown-responses\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#thrown-responses\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003eThrown Responses\\\\u003c/h3\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eNote that this does not handle thrown \\\\u003ccode\\\\u003eResponse\\\\u003c/code\\\\u003e instances from your \\\\u003ccode\\\\u003eloader\\\\u003c/code\\\\u003e/\\\\u003ccode\\\\u003eaction\\\\u003c/code\\\\u003e functions. The intention of this handler is to find bugs in your code which result in unexpected thrown errors. If you are detecting a scenario and throwing a 401/404/etc. \\\\u003ccode\\\\u003eResponse\\\\u003c/code\\\\u003e in your \\\\u003ccode\\\\u003eloader\\\\u003c/code\\\\u003e/\\\\u003ccode\\\\u003eaction\\\\u003c/code\\\\u003e then it's an expected flow handled by your code. If you also wish to log or send those to an external service, that should be done at the time you throw the response.\\\\u003c/p\\\\u003e\\\\\\\",\\\\\\\"docs/file-conventions/entry.server\\\\\\\",\\\\\\\"headings\\\\\\\",[960,965,968,972],{\\\\\\\"_961\\\\\\\":962,\\\\\\\"_955\\\\\\\":963,\\\\\\\"_24\\\\\\\":964},\\\\\\\"headingLevel\\\\\\\",\\\\\\\"h2\\\\\\\",\\\\\\\"\\\\u003ccode\\\\u003ehandleDataRequest\\\\u003c/code\\\\u003e\\\\\\\",\\\\\\\"handledatarequest\\\\\\\",{\\\\\\\"_961\\\\\\\":962,\\\\\\\"_955\\\\\\\":966,\\\\\\\"_24\\\\\\\":967},\\\\\\\"\\\\u003ccode\\\\u003ehandleError\\\\u003c/code\\\\u003e\\\\\\\",\\\\\\\"handleerror\\\\\\\",{\\\\\\\"_961\\\\\\\":969,\\\\\\\"_955\\\\\\\":970,\\\\\\\"_24\\\\\\\":971},\\\\\\\"h3\\\\\\\",\\\\\\\"Streaming Rendering Errors\\\\\\\",\\\\\\\"streaming-rendering-errors\\\\\\\",{\\\\\\\"_961\\\\\\\":969,\\\\\\\"_955\\\\\\\":973,\\\\\\\"_24\\\\\\\":974},\\\\\\\"Thrown Responses\\\\\\\",\\\\\\\"thrown-responses\\\\\\\",[],\\\\\\\"actionData\\\\\\\",\\\\\\\"errors\\\\\\\"]\\\\n\\\");function $RC(a,b){a=document.getElementById(a);b=document.getElementById(b);b.parentNode.removeChild(b);if(a){a=a.previousSibling;var f=a.parentNode,c=a.nextSibling,e=0;do{if(c\\u0026\\u00268===c.nodeType){var d=c.data;if(\\\"/$\\\"===d)if(0===e)break;else e--;else\\\"$\\\"!==d\\u0026\\u0026\\\"$?\\\"!==d\\u0026\\u0026\\\"$!\\\"!==d||e++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;b.firstChild;)f.insertBefore(b.firstChild,c);a.data=\\\"$\\\";a._reactRetry\\u0026\\u0026a._reactRetry()}};$RC(\\\"B:0\\\",\\\"S:0\\\")window.__reactRouterContext.streamController.close();$RC(\\\"B:1\\\",\\\"S:1\\\")\","
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/languages.go::c649491143e101b9": {
|
|
"id": "boilerplate_duplication::internal/quality/languages.go::c649491143e101b9",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/languages.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 12 lines): internal/quality/languages.go:104, internal/quality/scanner.go:174",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 12,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/languages.go",
|
|
"line": 104
|
|
},
|
|
{
|
|
"file": "internal/quality/scanner.go",
|
|
"line": 174
|
|
}
|
|
],
|
|
"sample": [
|
|
"if info.IsDir() {",
|
|
"\t\t\t// Skip hidden directories and common exclude dirs",
|
|
"\t\t\tbase := filepath.Base(filePath)",
|
|
"\t\t\tif filePath != path && (strings.HasPrefix(base, \".\") || base == \"node_modules\" || base == \"vendor\") {"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::devour_data/docs/entry.client---remix-bde65f99.json::c9e859e5cc0c8bb3": {
|
|
"id": "boilerplate_duplication::devour_data/docs/entry.client---remix-bde65f99.json::c9e859e5cc0c8bb3",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "devour_data/docs/entry.client---remix-bde65f99.json",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 170 lines): devour_data/docs/entry.client---remix-bde65f99.json:3, devour_data/docs/entry.client---remix.json:3",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 170,
|
|
"locations": [
|
|
{
|
|
"file": "devour_data/docs/entry.client---remix-bde65f99.json",
|
|
"line": 3
|
|
},
|
|
{
|
|
"file": "devour_data/docs/entry.client---remix.json",
|
|
"line": 3
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" \"type\": \"html\",",
|
|
" \"title\": \"entry.client | Remix\",",
|
|
" \"content\": \"DocsBlogResourcesReact Router v7 has been released. View the docsDocsBlogResourcesView code on GitHubChat on DiscordReact Router v7 has been released. View the docsentry.clientGetting StartedQuick Start (5m) Tutorial (30m) Upgrading to v2 Community Future Flags Changelog Discussion TopicsIntroduction, Technical Explanation Runtimes, Adapters, Templates, and Deployment Route Configuration Fullstack Data Flow Server vs. Client Code Execution React Router Progressive Enhancement Pending UI State Management Network Concurrency Management Form vs. fetcher Hot Module Replacement Form Resubmissions File Conventions.client modules .server modules Asset Imports entry.client entry.server root Route File Naming vite.config.ts Route Moduleaction clientAction clientLoader Component ErrorBoundary handle headers HydrateFallback links loader meta shouldRevalidate ComponentsAwait Form Link Links LiveReload Meta NavLink Outlet PrefetchPageLinks Scripts ScrollRestoration HooksuseActionData useAsyncError \ud83c\udd95useAsyncValue \ud83c\udd95useBeforeUnload useBlocker useFetcher useFetchers useFormAction useHref useLoaderData useLocation useMatches useNavigate useNavigation useNavigationType useOutlet useOutletContext useParams unstable_usePrompt useResolvedPath useRevalidator \ud83c\udd95useRouteError \ud83c\udd95useRouteLoaderData useSearchParams useSubmit useViewTransitionState UtilitiesCookies createRemixStub data defer isRouteErrorResponse json unstable_parseMultipartFormData redirect redirectDocument replace Sessions unstable_createFileUploadHandler unstable_createMemoryUploadHandler StylingCSS Bundling Regular CSS CSS Imports CSS in JS CSS Modules PostCSS Tailwind Vanilla Extract Other API@remix-run/dev CLI \ud83c\udd95@remix-run/{adapter} @remix-run/serve create-remix (CLI) @remix-run/node @remix-run/testing GuidesAccessibility Development Strategy API Routes Backend For Frontend Breadcrumbs Guide Browser Support Client Data Module Constraints Contributing CSS Files Data Loading Data Writes Dependency optimization Deployment Disabling JavaScript Environment Variables Error Handling FAQs File Uploads Form Validation Gotchas Index Query Param Lazy Route Discovery Local TLS Manual Dev Server MDX Migrating from React Router Not Found Handling Performance Presets Resource Routes Server Bundles Single Fetch SPA Mode Streaming Templates TypeScript Vite Getting StartedQuick Start (5m) Tutorial (30m) Upgrading to v2 Community Future Flags Changelog Discussion TopicsIntroduction, Technical Explanation Runtimes, Adapters, Templates, and Deployment Route Configuration Fullstack Data Flow Server vs. Client Code Execution React Router Progressive Enhancement Pending UI State Management Network Concurrency Management Form vs. fetcher Hot Module Replacement Form Resubmissions File Conventions.client modules .server modules Asset Imports entry.client entry.server root Route File Naming vite.config.ts Route Moduleaction clientAction clientLoader Component ErrorBoundary handle headers HydrateFallback links loader meta shouldRevalidate ComponentsAwait Form Link Links LiveReload Meta NavLink Outlet PrefetchPageLinks Scripts ScrollRestoration HooksuseActionData useAsyncError \ud83c\udd95useAsyncValue \ud83c\udd95useBeforeUnload useBlocker useFetcher useFetchers useFormAction useHref useLoaderData useLocation useMatches useNavigate useNavigation useNavigationType useOutlet useOutletContext useParams unstable_usePrompt useResolvedPath useRevalidator \ud83c\udd95useRouteError \ud83c\udd95useRouteLoaderData useSearchParams useSubmit useViewTransitionState UtilitiesCookies createRemixStub data defer isRouteErrorResponse json unstable_parseMultipartFormData redirect redirectDocument replace Sessions unstable_createFileUploadHandler unstable_createMemoryUploadHandler StylingCSS Bundling Regular CSS CSS Imports CSS in JS CSS Modules PostCSS Tailwind Vanilla Extract Other API@remix-run/dev CLI \ud83c\udd95@remix-run/{adapter} @remix-run/serve create-remix (CLI) @remix-run/node @remix-run/testing GuidesAccessibility Development Strategy API Routes Backend For Frontend Breadcrumbs Guide Browser Support Client Data Module Constraints Contributing CSS Files Data Loading Data Writes Dependency optimization Deployment Disabling JavaScript Environment Variables Error Handling FAQs File Uploads Form Validation Gotchas Index Query Param Lazy Route Discovery Local TLS Manual Dev Server MDX Migrating from React Router Not Found Handling Performance Presets Resource Routes Server Bundles Single Fetch SPA Mode Streaming Templates TypeScript Vite entry.client By default, Remix will handle hydrating your app on the client for you. If you want to customize this behavior, you can run npx remix reveal to generate a app/entry.client.tsx (or .jsx) that will take precedence. This file is the entry point for the browser and is responsible for hydrating the markup generated by the server in your server entry module; however, you can also initialize any other client-side code here. Typically, this module uses ReactDOM.hydrateRoot to hydrate the markup already generated on the server in your server entry module. Here's a basic example: import { RemixBrowser } from \\\"@remix-run/react\\\"; import { startTransition, StrictMode } from \\\"react\\\"; import { hydrateRoot } from \\\"react-dom/client\\\"; startTransition(() =\\u003e { hydrateRoot( document, \\u003cStrictMode\\u003e \\u003cRemixBrowser /\\u003e \\u003c/StrictMode\\u003e ); }); This is the first piece of code that runs in the browser. You can initialize client side libraries, add client-only providers, etc.\u00a9 Shopify, Inc.\u2022Docs and examples licensed under MITEdit((storageKey2, restoreKey) =\\u003e { if (!window.history.state || !window.history.state.key) { let key = Math.random().toString(32).slice(2); window.history.replaceState({ key }, \\\"\\\"); } try { let positions = JSON.parse(sessionStorage.getItem(storageKey2) || \\\"{}\\\"); let storedY = positions[restoreKey || window.history.state.key]; if (typeof storedY === \\\"number\\\") { window.scrollTo(0, storedY); } } catch (error) { console.error(error); sessionStorage.removeItem(storageKey2); } })(\\\"react-router-scroll-positions\\\", null)window.__reactRouterContext = {\\\"basename\\\":\\\"/\\\",\\\"future\\\":{\\\"unstable_optimizeDeps\\\":true,\\\"unstable_subResourceIntegrity\\\":false,\\\"v8_middleware\\\":true,\\\"v8_splitRouteModules\\\":true,\\\"v8_viteEnvironmentApi\\\":true},\\\"routeDiscovery\\\":{\\\"mode\\\":\\\"initial\\\"},\\\"ssr\\\":true,\\\"isSpaMode\\\":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());import \\\"/assets/manifest-b010e014.js\\\"; import * as route0 from \\\"/assets/root-CtUYAfRS.js\\\"; import * as route1 from \\\"/assets/docs-DauuYQK6.js\\\"; import * as route2 from \\\"/assets/docs._-B4dRXAHv.js\\\"; window.__reactRouterRouteModules = {\\\"root\\\":route0,\\\"routes/docs\\\":route1,\\\"routes/docs.$\\\":route2}; import(\\\"/assets/entry.client-q2ogymM2.js\\\");window.__reactRouterContext.streamController.enqueue(\\\"[{\\\\\\\"_1\\\\\\\":2,\\\\\\\"_961\\\\\\\":-5,\\\\\\\"_962\\\\\\\":-5},\\\\\\\"loaderData\\\\\\\",{\\\\\\\"_3\\\\\\\":4,\\\\\\\"_11\\\\\\\":12,\\\\\\\"_949\\\\\\\":950},\\\\\\\"root\\\\\\\",{\\\\\\\"_5\\\\\\\":6,\\\\\\\"_7\\\\\\\":8,\\\\\\\"_9\\\\\\\":10},\\\\\\\"host\\\\\\\",\\\\\\\"localhost\\\\\\\",\\\\\\\"siteUrl\\\\\\\",\\\\\\\"https://v2.remix.run\\\\\\\",\\\\\\\"noIndex\\\\\\\",false,\\\\\\\"routes/docs\\\\\\\",{\\\\\\\"_13\\\\\\\":14},\\\\\\\"menu\\\\\\\",[15,72,160,214,292,364,527,611,665,707],{\\\\\\\"_16\\\\\\\":17,\\\\\\\"_22\\\\\\\":23,\\\\\\\"_24\\\\\\\":25,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":28},\\\\\\\"attrs\\\\\\\",{\\\\\\\"_18\\\\\\\":19,\\\\\\\"_20\\\\\\\":21},\\\\\\\"title\\\\\\\",\\\\\\\"Getting Started\\\\\\\",\\\\\\\"order\\\\\\\",1,\\\\\\\"filename\\\\\\\",\\\\\\\"start/index.md\\\\\\\",\\\\\\\"slug\\\\\\\",\\\\\\\"start\\\\\\\",\\\\\\\"hasContent\\\\\\\",\\\\\\\"children\\\\\\\",[29,36,43,50,59,66],{\\\\\\\"_16\\\\\\\":30,\\\\\\\"_22\\\\\\\":32,\\\\\\\"_24\\\\\\\":33,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":35},{\\\\\\\"_18\\\\\\\":31,\\\\\\\"_20\\\\\\\":21},\\\\\\\"Quick Start (5m)\\\\\\\",\\\\\\\"start/quickstart.md\\\\\\\",\\\\\\\"start/quickstart\\\\\\\",true,[],{\\\\\\\"_16\\\\\\\":37,\\\\\\\"_22\\\\\\\":40,\\\\\\\"_24\\\\\\\":41,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":42},{\\\\\\\"_18\\\\\\\":38,\\\\\\\"_20\\\\\\\":39},\\\\\\\"Tutorial (30m)\\\\\\\",2,\\\\\\\"start/tutorial.md\\\\\\\",\\\\\\\"start/tutorial\\\\\\\",[],{\\\\\\\"_16\\\\\\\":44,\\\\\\\"_22\\\\\\\":47,\\\\\\\"_24\\\\\\\":48,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":49},{\\\\\\\"_18\\\\\\\":45,\\\\\\\"_20\\\\\\\":46},\\\\\\\"Upgrading to v2\\\\\\\",3,\\\\\\\"start/v2.md\\\\\\\",\\\\\\\"start/v2\\\\\\\",[],{\\\\\\\"_16\\\\\\\":51,\\\\\\\"_22\\\\\\\":56,\\\\\\\"_24\\\\\\\":57,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":58},{\\\\\\\"_18\\\\\\\":52,\\\\\\\"_53\\\\\\\":54,\\\\\\\"_20\\\\\\\":55},\\\\\\\"Community\\\\\\\",\\\\\\\"description\\\\\\\",\\\\\\\"Community resources for learning Remix and related technologies\\\\\\\",4,\\\\\\\"start/community.md\\\\\\\",\\\\\\\"start/community\\\\\\\",[],{\\\\\\\"_16\\\\\\\":60,\\\\\\\"_22\\\\\\\":63,\\\\\\\"_24\\\\\\\":64,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":65},{\\\\\\\"_18\\\\\\\":61,\\\\\\\"_20\\\\\\\":62},\\\\\\\"Future Flags\\\\\\\",5,\\\\\\\"start/future-flags.md\\\\\\\",\\\\\\\"start/future-flags\\\\\\\",[],{\\\\\\\"_16\\\\\\\":67,\\\\\\\"_22\\\\\\\":69,\\\\\\\"_24\\\\\\\":70,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":71},{\\\\\\\"_18\\\\\\\":68},\\\\\\\"Changelog\\\\\\\",\\\\\\\"start/changelog.md\\\\\\\",\\\\\\\"start/changelog\\\\\\\",[],{\\\\\\\"_16\\\\\\\":73,\\\\\\\"_22\\\\\\\":75,\\\\\\\"_24\\\\\\\":76,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":77},{\\\\\\\"_18\\\\\\\":74,\\\\\\\"_20\\\\\\\":39},\\\\\\\"Discussion Topics\\\\\\\",\\\\\\\"discussion/index.md\\\\\\\",\\\\\\\"discussion\\\\\\\",[78,84,90,96,102,108,115,122,129,136,142,148,154],{\\\\\\\"_16\\\\\\\":79,\\\\\\\"_22\\\\\\\":81,\\\\\\\"_24\\\\\\\":82,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":83},{\\\\\\\"_18\\\\\\\":80,\\\\\\\"_20\\\\\\\":21},\\\\\\\"Introduction, Technical Explanation\\\\\\\",\\\\\\\"discussion/introduction.md\\\\\\\",\\\\\\\"discussion/introduction\\\\\\\",[],{\\\\\\\"_16\\\\\\\":85,\\\\\\\"_22\\\\\\\":87,\\\\\\\"_24\\\\\\\":88,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":89},{\\\\\\\"_18\\\\\\\":86,\\\\\\\"_20\\\\\\\":39},\\\\\\\"Runtimes, Adapters, Templates, and Deployment\\\\\\\",\\\\\\\"discussion/runtimes.md\\\\\\\",\\\\\\\"discussion/runtimes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":91,\\\\\\\"_22\\\\\\\":93,\\\\\\\"_24\\\\\\\":94,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":95},{\\\\\\\"_18\\\\\\\":92,\\\\\\\"_20\\\\\\\":46},\\\\\\\"Route Configuration\\\\\\\",\\\\\\\"discussion/routes.md\\\\\\\",\\\\\\\"discussion/routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":97,\\\\\\\"_22\\\\\\\":99,\\\\\\\"_24\\\\\\\":100,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":101},{\\\\\\\"_18\\\\\\\":98,\\\\\\\"_20\\\\\\\":55},\\\\\\\"Fullstack Data Flow\\\\\\\",\\\\\\\"discussion/data-flow.md\\\\\\\",\\\\\\\"discussion/data-flow\\\\\\\",[],{\\\\\\\"_16\\\\\\\":103,\\\\\\\"_22\\\\\\\":105,\\\\\\\"_24\\\\\\\":106,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":107},{\\\\\\\"_18\\\\\\\":104,\\\\\\\"_20\\\\\\\":62},\\\\\\\"Server vs. Client Code Execution\\\\\\\",\\\\\\\"discussion/server-vs-client.md\\\\\\\",\\\\\\\"discussion/server-vs-client\\\\\\\",[],{\\\\\\\"_16\\\\\\\":109,\\\\\\\"_22\\\\\\\":112,\\\\\\\"_24\\\\\\\":113,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":114},{\\\\\\\"_18\\\\\\\":110,\\\\\\\"_20\\\\\\\":111},\\\\\\\"React Router\\\\\\\",6,\\\\\\\"discussion/react-router.md\\\\\\\",\\\\\\\"discussion/react-router\\\\\\\",[],{\\\\\\\"_16\\\\\\\":116,\\\\\\\"_22\\\\\\\":119,\\\\\\\"_24\\\\\\\":120,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":121},{\\\\\\\"_18\\\\\\\":117,\\\\\\\"_20\\\\\\\":118},\\\\\\\"Progressive Enhancement\\\\\\\",7,\\\\\\\"discussion/progressive-enhancement.md\\\\\\\",\\\\\\\"discussion/progressive-enhancement\\\\\\\",[],{\\\\\\\"_16\\\\\\\":123,\\\\\\\"_22\\\\\\\":126,\\\\\\\"_24\\\\\\\":127,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":128},{\\\\\\\"_18\\\\\\\":124,\\\\\\\"_20\\\\\\\":125},\\\\\\\"Pending UI\\\\\\\",8,\\\\\\\"discussion/pending-ui.md\\\\\\\",\\\\\\\"discussion/pending-ui\\\\\\\",[],{\\\\\\\"_16\\\\\\\":130,\\\\\\\"_22\\\\\\\":133,\\\\\\\"_24\\\\\\\":134,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":135},{\\\\\\\"_18\\\\\\\":131,\\\\\\\"_20\\\\\\\":132},\\\\\\\"State Management\\\\\\\",9,\\\\\\\"discussion/state-management.md\\\\\\\",\\\\\\\"discussion/state-management\\\\\\\",[],{\\\\\\\"_16\\\\\\\":137,\\\\\\\"_22\\\\\\\":139,\\\\\\\"_24\\\\\\\":140,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":141},{\\\\\\\"_18\\\\\\\":138},\\\\\\\"Network Concurrency Management\\\\\\\",\\\\\\\"discussion/concurrency.md\\\\\\\",\\\\\\\"discussion/concurrency\\\\\\\",[],{\\\\\\\"_16\\\\\\\":143,\\\\\\\"_22\\\\\\\":145,\\\\\\\"_24\\\\\\\":146,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":147},{\\\\\\\"_18\\\\\\\":144},\\\\\\\"Form vs. fetcher\\\\\\\",\\\\\\\"discussion/form-vs-fetcher.md\\\\\\\",\\\\\\\"discussion/form-vs-fetcher\\\\\\\",[],{\\\\\\\"_16\\\\\\\":149,\\\\\\\"_22\\\\\\\":151,\\\\\\\"_24\\\\\\\":152,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":153},{\\\\\\\"_18\\\\\\\":150},\\\\\\\"Hot Module Replacement\\\\\\\",\\\\\\\"discussion/hot-module-replacement.md\\\\\\\",\\\\\\\"discussion/hot-module-replacement\\\\\\\",[],{\\\\\\\"_16\\\\\\\":155,\\\\\\\"_22\\\\\\\":157,\\\\\\\"_24\\\\\\\":158,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":159},{\\\\\\\"_18\\\\\\\":156},\\\\\\\"Form Resubmissions\\\\\\\",\\\\\\\"discussion/resubmissions.md\\\\\\\",\\\\\\\"discussion/resubmissions\\\\\\\",[],{\\\\\\\"_16\\\\\\\":161,\\\\\\\"_22\\\\\\\":163,\\\\\\\"_24\\\\\\\":164,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":165},{\\\\\\\"_18\\\\\\\":162,\\\\\\\"_20\\\\\\\":46},\\\\\\\"File Conventions\\\\\\\",\\\\\\\"file-conventions/index.md\\\\\\\",\\\\\\\"file-conventions\\\\\\\",[166,173,179,185,191,197,202,208],{\\\\\\\"_16\\\\\\\":167,\\\\\\\"_22\\\\\\\":170,\\\\\\\"_24\\\\\\\":171,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":172},{\\\\\\\"_18\\\\\\\":168,\\\\\\\"_169\\\\\\\":10},\\\\\\\".client modules\\\\\\\",\\\\\\\"toc\\\\\\\",\\\\\\\"file-conventions/-client.md\\\\\\\",\\\\\\\"file-conventions/-client\\\\\\\",[],{\\\\\\\"_16\\\\\\\":174,\\\\\\\"_22\\\\\\\":176,\\\\\\\"_24\\\\\\\":177,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":178},{\\\\\\\"_18\\\\\\\":175,\\\\\\\"_169\\\\\\\":10},\\\\\\\".server modules\\\\\\\",\\\\\\\"file-conventions/-server.md\\\\\\\",\\\\\\\"file-conventions/-server\\\\\\\",[],{\\\\\\\"_16\\\\\\\":180,\\\\\\\"_22\\\\\\\":182,\\\\\\\"_24\\\\\\\":183,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":184},{\\\\\\\"_18\\\\\\\":181,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Asset Imports\\\\\\\",\\\\\\\"file-conventions/asset-imports.md\\\\\\\",\\\\\\\"file-conventions/asset-imports\\\\\\\",[],{\\\\\\\"_16\\\\\\\":186,\\\\\\\"_22\\\\\\\":188,\\\\\\\"_24\\\\\\\":189,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":190},{\\\\\\\"_18\\\\\\\":187,\\\\\\\"_169\\\\\\\":10},\\\\\\\"entry.client\\\\\\\",\\\\\\\"file-conventions/entry.client.md\\\\\\\",\\\\\\\"file-conventions/entry.client\\\\\\\",[],{\\\\\\\"_16\\\\\\\":192,\\\\\\\"_22\\\\\\\":194,\\\\\\\"_24\\\\\\\":195,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":196},{\\\\\\\"_18\\\\\\\":193,\\\\\\\"_169\\\\\\\":10},\\\\\\\"entry.server\\\\\\\",\\\\\\\"file-conventions/entry.server.md\\\\\\\",\\\\\\\"file-conventions/entry.server\\\\\\\",[],{\\\\\\\"_16\\\\\\\":198,\\\\\\\"_22\\\\\\\":199,\\\\\\\"_24\\\\\\\":200,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":201},{\\\\\\\"_18\\\\\\\":3,\\\\\\\"_169\\\\\\\":10},\\\\\\\"file-conventions/root.md\\\\\\\",\\\\\\\"file-conventions/root\\\\\\\",[],{\\\\\\\"_16\\\\\\\":203,\\\\\\\"_22\\\\\\\":205,\\\\\\\"_24\\\\\\\":206,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":207},{\\\\\\\"_18\\\\\\\":204},\\\\\\\"Route File Naming\\\\\\\",\\\\\\\"file-conventions/routes.md\\\\\\\",\\\\\\\"file-conventions/routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":209,\\\\\\\"_22\\\\\\\":211,\\\\\\\"_24\\\\\\\":212,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":213},{\\\\\\\"_18\\\\\\\":210},\\\\\\\"vite.config.ts\\\\\\\",\\\\\\\"file-conventions/vite-config.md\\\\\\\",\\\\\\\"file-conventions/vite-config\\\\\\\",[],{\\\\\\\"_16\\\\\\\":215,\\\\\\\"_22\\\\\\\":217,\\\\\\\"_24\\\\\\\":218,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":219},{\\\\\\\"_18\\\\\\\":216,\\\\\\\"_20\\\\\\\":55},\\\\\\\"Route Module\\\\\\\",\\\\\\\"route/index.md\\\\\\\",\\\\\\\"route\\\\\\\",[220,226,232,238,244,250,256,262,268,274,280,286],{\\\\\\\"_16\\\\\\\":221,\\\\\\\"_22\\\\\\\":223,\\\\\\\"_24\\\\\\\":224,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":225},{\\\\\\\"_18\\\\\\\":222},\\\\\\\"action\\\\\\\",\\\\\\\"route/action.md\\\\\\\",\\\\\\\"route/action\\\\\\\",[],{\\\\\\\"_16\\\\\\\":227,\\\\\\\"_22\\\\\\\":229,\\\\\\\"_24\\\\\\\":230,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":231},{\\\\\\\"_18\\\\\\\":228},\\\\\\\"clientAction\\\\\\\",\\\\\\\"route/client-action.md\\\\\\\",\\\\\\\"route/client-action\\\\\\\",[],{\\\\\\\"_16\\\\\\\":233,\\\\\\\"_22\\\\\\\":235,\\\\\\\"_24\\\\\\\":236,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":237},{\\\\\\\"_18\\\\\\\":234},\\\\\\\"clientLoader\\\\\\\",\\\\\\\"route/client-loader.md\\\\\\\",\\\\\\\"route/client-loader\\\\\\\",[],{\\\\\\\"_16\\\\\\\":239,\\\\\\\"_22\\\\\\\":241,\\\\\\\"_24\\\\\\\":242,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":243},{\\\\\\\"_18\\\\\\\":240},\\\\\\\"Component\\\\\\\",\\\\\\\"route/component.md\\\\\\\",\\\\\\\"route/component\\\\\\\",[],{\\\\\\\"_16\\\\\\\":245,\\\\\\\"_22\\\\\\\":247,\\\\\\\"_24\\\\\\\":248,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":249},{\\\\\\\"_18\\\\\\\":246},\\\\\\\"ErrorBoundary\\\\\\\",\\\\\\\"route/error-boundary.md\\\\\\\",\\\\\\\"route/error-boundary\\\\\\\",[],{\\\\\\\"_16\\\\\\\":251,\\\\\\\"_22\\\\\\\":253,\\\\\\\"_24\\\\\\\":254,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":255},{\\\\\\\"_18\\\\\\\":252},\\\\\\\"handle\\\\\\\",\\\\\\\"route/handle.md\\\\\\\",\\\\\\\"route/handle\\\\\\\",[],{\\\\\\\"_16\\\\\\\":257,\\\\\\\"_22\\\\\\\":259,\\\\\\\"_24\\\\\\\":260,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":261},{\\\\\\\"_18\\\\\\\":258},\\\\\\\"headers\\\\\\\",\\\\\\\"route/headers.md\\\\\\\",\\\\\\\"route/headers\\\\\\\",[],{\\\\\\\"_16\\\\\\\":263,\\\\\\\"_22\\\\\\\":265,\\\\\\\"_24\\\\\\\":266,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":267},{\\\\\\\"_18\\\\\\\":264},\\\\\\\"HydrateFallback\\\\\\\",\\\\\\\"route/hydrate-fallback.md\\\\\\\",\\\\\\\"route/hydrate-fallback\\\\\\\",[],{\\\\\\\"_16\\\\\\\":269,\\\\\\\"_22\\\\\\\":271,\\\\\\\"_24\\\\\\\":272,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":273},{\\\\\\\"_18\\\\\\\":270},\\\\\\\"links\\\\\\\",\\\\\\\"route/links.md\\\\\\\",\\\\\\\"route/links\\\\\\\",[],{\\\\\\\"_16\\\\\\\":275,\\\\\\\"_22\\\\\\\":277,\\\\\\\"_24\\\\\\\":278,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":279},{\\\\\\\"_18\\\\\\\":276},\\\\\\\"loader\\\\\\\",\\\\\\\"route/loader.md\\\\\\\",\\\\\\\"route/loader\\\\\\\",[],{\\\\\\\"_16\\\\\\\":281,\\\\\\\"_22\\\\\\\":283,\\\\\\\"_24\\\\\\\":284,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":285},{\\\\\\\"_18\\\\\\\":282},\\\\\\\"meta\\\\\\\",\\\\\\\"route/meta.md\\\\\\\",\\\\\\\"route/meta\\\\\\\",[],{\\\\\\\"_16\\\\\\\":287,\\\\\\\"_22\\\\\\\":289,\\\\\\\"_24\\\\\\\":290,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":291},{\\\\\\\"_18\\\\\\\":288},\\\\\\\"shouldRevalidate\\\\\\\",\\\\\\\"route/should-revalidate.md\\\\\\\",\\\\\\\"route/should-revalidate\\\\\\\",[],{\\\\\\\"_16\\\\\\\":293,\\\\\\\"_22\\\\\\\":295,\\\\\\\"_24\\\\\\\":296,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":297},{\\\\\\\"_18\\\\\\\":294,\\\\\\\"_20\\\\\\\":62},\\\\\\\"Components\\\\\\\",\\\\\\\"components/index.md\\\\\\\",\\\\\\\"components\\\\\\\",[298,304,310,316,322,328,334,340,346,352,358],{\\\\\\\"_16\\\\\\\":299,\\\\\\\"_22\\\\\\\":301,\\\\\\\"_24\\\\\\\":302,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":303},{\\\\\\\"_18\\\\\\\":300},\\\\\\\"Await\\\\\\\",\\\\\\\"components/await.md\\\\\\\",\\\\\\\"components/await\\\\\\\",[],{\\\\\\\"_16\\\\\\\":305,\\\\\\\"_22\\\\\\\":307,\\\\\\\"_24\\\\\\\":308,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":309},{\\\\\\\"_18\\\\\\\":306},\\\\\\\"Form\\\\\\\",\\\\\\\"components/form.md\\\\\\\",\\\\\\\"components/form\\\\\\\",[],{\\\\\\\"_16\\\\\\\":311,\\\\\\\"_22\\\\\\\":313,\\\\\\\"_24\\\\\\\":314,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":315},{\\\\\\\"_18\\\\\\\":312},\\\\\\\"Link\\\\\\\",\\\\\\\"components/link.md\\\\\\\",\\\\\\\"components/link\\\\\\\",[],{\\\\\\\"_16\\\\\\\":317,\\\\\\\"_22\\\\\\\":319,\\\\\\\"_24\\\\\\\":320,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":321},{\\\\\\\"_18\\\\\\\":318,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Links\\\\\\\",\\\\\\\"components/links.md\\\\\\\",\\\\\\\"components/links\\\\\\\",[],{\\\\\\\"_16\\\\\\\":323,\\\\\\\"_22\\\\\\\":325,\\\\\\\"_24\\\\\\\":326,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":327},{\\\\\\\"_18\\\\\\\":324,\\\\\\\"_169\\\\\\\":10},\\\\\\\"LiveReload\\\\\\\",\\\\\\\"components/live-reload.md\\\\\\\",\\\\\\\"components/live-reload\\\\\\\",[],{\\\\\\\"_16\\\\\\\":329,\\\\\\\"_22\\\\\\\":331,\\\\\\\"_24\\\\\\\":332,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":333},{\\\\\\\"_18\\\\\\\":330,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Meta\\\\\\\",\\\\\\\"components/meta.md\\\\\\\",\\\\\\\"components/meta\\\\\\\",[],{\\\\\\\"_16\\\\\\\":335,\\\\\\\"_22\\\\\\\":337,\\\\\\\"_24\\\\\\\":338,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":339},{\\\\\\\"_18\\\\\\\":336},\\\\\\\"NavLink\\\\\\\",\\\\\\\"components/nav-link.md\\\\\\\",\\\\\\\"components/nav-link\\\\\\\",[],{\\\\\\\"_16\\\\\\\":341,\\\\\\\"_22\\\\\\\":343,\\\\\\\"_24\\\\\\\":344,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":345},{\\\\\\\"_18\\\\\\\":342},\\\\\\\"Outlet\\\\\\\",\\\\\\\"components/outlet.md\\\\\\\",\\\\\\\"components/outlet\\\\\\\",[],{\\\\\\\"_16\\\\\\\":347,\\\\\\\"_22\\\\\\\":349,\\\\\\\"_24\\\\\\\":350,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":351},{\\\\\\\"_18\\\\\\\":348,\\\\\\\"_169\\\\\\\":10},\\\\\\\"PrefetchPageLinks\\\\\\\",\\\\\\\"components/prefetch-page-links.md\\\\\\\",\\\\\\\"components/prefetch-page-links\\\\\\\",[],{\\\\\\\"_16\\\\\\\":353,\\\\\\\"_22\\\\\\\":355,\\\\\\\"_24\\\\\\\":356,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":357},{\\\\\\\"_18\\\\\\\":354,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Scripts\\\\\\\",\\\\\\\"components/scripts.md\\\\\\\",\\\\\\\"components/scripts\\\\\\\",[],{\\\\\\\"_16\\\\\\\":359,\\\\\\\"_22\\\\\\\":361,\\\\\\\"_24\\\\\\\":362,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":363},{\\\\\\\"_18\\\\\\\":360},\\\\\\\"ScrollRestoration\\\\\\\",\\\\\\\"components/scroll-restoration.md\\\\\\\",\\\\\\\"components/scroll-restoration\\\\\\\",[],{\\\\\\\"_16\\\\\\\":365,\\\\\\\"_22\\\\\\\":367,\\\\\\\"_24\\\\\\\":368,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":369},{\\\\\\\"_18\\\\\\\":366,\\\\\\\"_20\\\\\\\":111},\\\\\\\"Hooks\\\\\\\",\\\\\\\"hooks/index.md\\\\\\\",\\\\\\\"hooks\\\\\\\",[370,376,383,389,395,401,407,413,419,425,431,437,443,449,455,461,467,473,479,485,491,497,503,509,515,521],{\\\\\\\"_16\\\\\\\":371,\\\\\\\"_22\\\\\\\":373,\\\\\\\"_24\\\\\\\":374,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":375},{\\\\\\\"_18\\\\\\\":372,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useActionData\\\\\\\",\\\\\\\"hooks/use-action-data.md\\\\\\\",\\\\\\\"hooks/use-action-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":377,\\\\\\\"_22\\\\\\\":380,\\\\\\\"_24\\\\\\\":381,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":382},{\\\\\\\"_18\\\\\\\":378,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useAsyncError\\\\\\\",\\\\\\\"new\\\\\\\",\\\\\\\"hooks/use-async-error.md\\\\\\\",\\\\\\\"hooks/use-async-error\\\\\\\",[],{\\\\\\\"_16\\\\\\\":384,\\\\\\\"_22\\\\\\\":386,\\\\\\\"_24\\\\\\\":387,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":388},{\\\\\\\"_18\\\\\\\":385,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useAsyncValue\\\\\\\",\\\\\\\"hooks/use-async-value.md\\\\\\\",\\\\\\\"hooks/use-async-value\\\\\\\",[],{\\\\\\\"_16\\\\\\\":390,\\\\\\\"_22\\\\\\\":392,\\\\\\\"_24\\\\\\\":393,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":394},{\\\\\\\"_18\\\\\\\":391,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useBeforeUnload\\\\\\\",\\\\\\\"hooks/use-before-unload.md\\\\\\\",\\\\\\\"hooks/use-before-unload\\\\\\\",[],{\\\\\\\"_16\\\\\\\":396,\\\\\\\"_22\\\\\\\":398,\\\\\\\"_24\\\\\\\":399,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":400},{\\\\\\\"_18\\\\\\\":397},\\\\\\\"useBlocker\\\\\\\",\\\\\\\"hooks/use-blocker.md\\\\\\\",\\\\\\\"hooks/use-blocker\\\\\\\",[],{\\\\\\\"_16\\\\\\\":402,\\\\\\\"_22\\\\\\\":404,\\\\\\\"_24\\\\\\\":405,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":406},{\\\\\\\"_18\\\\\\\":403},\\\\\\\"useFetcher\\\\\\\",\\\\\\\"hooks/use-fetcher.md\\\\\\\",\\\\\\\"hooks/use-fetcher\\\\\\\",[],{\\\\\\\"_16\\\\\\\":408,\\\\\\\"_22\\\\\\\":410,\\\\\\\"_24\\\\\\\":411,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":412},{\\\\\\\"_18\\\\\\\":409,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useFetchers\\\\\\\",\\\\\\\"hooks/use-fetchers.md\\\\\\\",\\\\\\\"hooks/use-fetchers\\\\\\\",[],{\\\\\\\"_16\\\\\\\":414,\\\\\\\"_22\\\\\\\":416,\\\\\\\"_24\\\\\\\":417,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":418},{\\\\\\\"_18\\\\\\\":415},\\\\\\\"useFormAction\\\\\\\",\\\\\\\"hooks/use-form-action.md\\\\\\\",\\\\\\\"hooks/use-form-action\\\\\\\",[],{\\\\\\\"_16\\\\\\\":420,\\\\\\\"_22\\\\\\\":422,\\\\\\\"_24\\\\\\\":423,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":424},{\\\\\\\"_18\\\\\\\":421},\\\\\\\"useHref\\\\\\\",\\\\\\\"hooks/use-href.md\\\\\\\",\\\\\\\"hooks/use-href\\\\\\\",[],{\\\\\\\"_16\\\\\\\":426,\\\\\\\"_22\\\\\\\":428,\\\\\\\"_24\\\\\\\":429,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":430},{\\\\\\\"_18\\\\\\\":427},\\\\\\\"useLoaderData\\\\\\\",\\\\\\\"hooks/use-loader-data.md\\\\\\\",\\\\\\\"hooks/use-loader-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":432,\\\\\\\"_22\\\\\\\":434,\\\\\\\"_24\\\\\\\":435,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":436},{\\\\\\\"_18\\\\\\\":433},\\\\\\\"useLocation\\\\\\\",\\\\\\\"hooks/use-location.md\\\\\\\",\\\\\\\"hooks/use-location\\\\\\\",[],{\\\\\\\"_16\\\\\\\":438,\\\\\\\"_22\\\\\\\":440,\\\\\\\"_24\\\\\\\":441,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":442},{\\\\\\\"_18\\\\\\\":439,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useMatches\\\\\\\",\\\\\\\"hooks/use-matches.md\\\\\\\",\\\\\\\"hooks/use-matches\\\\\\\",[],{\\\\\\\"_16\\\\\\\":444,\\\\\\\"_22\\\\\\\":446,\\\\\\\"_24\\\\\\\":447,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":448},{\\\\\\\"_18\\\\\\\":445},\\\\\\\"useNavigate\\\\\\\",\\\\\\\"hooks/use-navigate.md\\\\\\\",\\\\\\\"hooks/use-navigate\\\\\\\",[],{\\\\\\\"_16\\\\\\\":450,\\\\\\\"_22\\\\\\\":452,\\\\\\\"_24\\\\\\\":453,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":454},{\\\\\\\"_18\\\\\\\":451},\\\\\\\"useNavigation\\\\\\\",\\\\\\\"hooks/use-navigation.md\\\\\\\",\\\\\\\"hooks/use-navigation\\\\\\\",[],{\\\\\\\"_16\\\\\\\":456,\\\\\\\"_22\\\\\\\":458,\\\\\\\"_24\\\\\\\":459,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":460},{\\\\\\\"_18\\\\\\\":457},\\\\\\\"useNavigationType\\\\\\\",\\\\\\\"hooks/use-navigation-type.md\\\\\\\",\\\\\\\"hooks/use-navigation-type\\\\\\\",[],{\\\\\\\"_16\\\\\\\":462,\\\\\\\"_22\\\\\\\":464,\\\\\\\"_24\\\\\\\":465,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":466},{\\\\\\\"_18\\\\\\\":463},\\\\\\\"useOutlet\\\\\\\",\\\\\\\"hooks/use-outlet.md\\\\\\\",\\\\\\\"hooks/use-outlet\\\\\\\",[],{\\\\\\\"_16\\\\\\\":468,\\\\\\\"_22\\\\\\\":470,\\\\\\\"_24\\\\\\\":471,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":472},{\\\\\\\"_18\\\\\\\":469},\\\\\\\"useOutletContext\\\\\\\",\\\\\\\"hooks/use-outlet-context.md\\\\\\\",\\\\\\\"hooks/use-outlet-context\\\\\\\",[],{\\\\\\\"_16\\\\\\\":474,\\\\\\\"_22\\\\\\\":476,\\\\\\\"_24\\\\\\\":477,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":478},{\\\\\\\"_18\\\\\\\":475},\\\\\\\"useParams\\\\\\\",\\\\\\\"hooks/use-params.md\\\\\\\",\\\\\\\"hooks/use-params\\\\\\\",[],{\\\\\\\"_16\\\\\\\":480,\\\\\\\"_22\\\\\\\":482,\\\\\\\"_24\\\\\\\":483,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":484},{\\\\\\\"_18\\\\\\\":481},\\\\\\\"unstable_usePrompt\\\\\\\",\\\\\\\"hooks/use-prompt.md\\\\\\\",\\\\\\\"hooks/use-prompt\\\\\\\",[],{\\\\\\\"_16\\\\\\\":486,\\\\\\\"_22\\\\\\\":488,\\\\\\\"_24\\\\\\\":489,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":490},{\\\\\\\"_18\\\\\\\":487},\\\\\\\"useResolvedPath\\\\\\\",\\\\\\\"hooks/use-resolved-path.md\\\\\\\",\\\\\\\"hooks/use-resolved-path\\\\\\\",[],{\\\\\\\"_16\\\\\\\":492,\\\\\\\"_22\\\\\\\":494,\\\\\\\"_24\\\\\\\":495,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":496},{\\\\\\\"_18\\\\\\\":493,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useRevalidator\\\\\\\",\\\\\\\"hooks/use-revalidator.md\\\\\\\",\\\\\\\"hooks/use-revalidator\\\\\\\",[],{\\\\\\\"_16\\\\\\\":498,\\\\\\\"_22\\\\\\\":500,\\\\\\\"_24\\\\\\\":501,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":502},{\\\\\\\"_18\\\\\\\":499,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useRouteError\\\\\\\",\\\\\\\"hooks/use-route-error.md\\\\\\\",\\\\\\\"hooks/use-route-error\\\\\\\",[],{\\\\\\\"_16\\\\\\\":504,\\\\\\\"_22\\\\\\\":506,\\\\\\\"_24\\\\\\\":507,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":508},{\\\\\\\"_18\\\\\\\":505,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useRouteLoaderData\\\\\\\",\\\\\\\"hooks/use-route-loader-data.md\\\\\\\",\\\\\\\"hooks/use-route-loader-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":510,\\\\\\\"_22\\\\\\\":512,\\\\\\\"_24\\\\\\\":513,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":514},{\\\\\\\"_18\\\\\\\":511},\\\\\\\"useSearchParams\\\\\\\",\\\\\\\"hooks/use-search-params.md\\\\\\\",\\\\\\\"hooks/use-search-params\\\\\\\",[],{\\\\\\\"_16\\\\\\\":516,\\\\\\\"_22\\\\\\\":518,\\\\\\\"_24\\\\\\\":519,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":520},{\\\\\\\"_18\\\\\\\":517},\\\\\\\"useSubmit\\\\\\\",\\\\\\\"hooks/use-submit.md\\\\\\\",\\\\\\\"hooks/use-submit\\\\\\\",[],{\\\\\\\"_16\\\\\\\":522,\\\\\\\"_22\\\\\\\":524,\\\\\\\"_24\\\\\\\":525,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":526},{\\\\\\\"_18\\\\\\\":523,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useViewTransitionState\\\\\\\",\\\\\\\"hooks/use-view-transition-state.md\\\\\\\",\\\\\\\"hooks/use-view-transition-state\\\\\\\",[],{\\\\\\\"_16\\\\\\\":528,\\\\\\\"_22\\\\\\\":530,\\\\\\\"_24\\\\\\\":531,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":532},{\\\\\\\"_18\\\\\\\":529,\\\\\\\"_20\\\\\\\":111},\\\\\\\"Utilities\\\\\\\",\\\\\\\"utils/index.md\\\\\\\",\\\\\\\"utils\\\\\\\",[533,539,545,551,557,563,569,575,581,587,593,599,605],{\\\\\\\"_16\\\\\\\":534,\\\\\\\"_22\\\\\\\":536,\\\\\\\"_24\\\\\\\":537,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":538},{\\\\\\\"_18\\\\\\\":535},\\\\\\\"Cookies\\\\\\\",\\\\\\\"utils/cookies.md\\\\\\\",\\\\\\\"utils/cookies\\\\\\\",[],{\\\\\\\"_16\\\\\\\":540,\\\\\\\"_22\\\\\\\":542,\\\\\\\"_24\\\\\\\":543,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":544},{\\\\\\\"_18\\\\\\\":541},\\\\\\\"createRemixStub\\\\\\\",\\\\\\\"utils/create-remix-stub.md\\\\\\\",\\\\\\\"utils/create-remix-stub\\\\\\\",[],{\\\\\\\"_16\\\\\\\":546,\\\\\\\"_22\\\\\\\":548,\\\\\\\"_24\\\\\\\":549,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":550},{\\\\\\\"_18\\\\\\\":547,\\\\\\\"_169\\\\\\\":10},\\\\\\\"data\\\\\\\",\\\\\\\"utils/data.md\\\\\\\",\\\\\\\"utils/data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":552,\\\\\\\"_22\\\\\\\":554,\\\\\\\"_24\\\\\\\":555,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":556},{\\\\\\\"_18\\\\\\\":553,\\\\\\\"_169\\\\\\\":10},\\\\\\\"defer\\\\\\\",\\\\\\\"utils/defer.md\\\\\\\",\\\\\\\"utils/defer\\\\\\\",[],{\\\\\\\"_16\\\\\\\":558,\\\\\\\"_22\\\\\\\":560,\\\\\\\"_24\\\\\\\":561,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":562},{\\\\\\\"_18\\\\\\\":559,\\\\\\\"_169\\\\\\\":10},\\\\\\\"isRouteErrorResponse\\\\\\\",\\\\\\\"utils/is-route-error-response.md\\\\\\\",\\\\\\\"utils/is-route-error-response\\\\\\\",[],{\\\\\\\"_16\\\\\\\":564,\\\\\\\"_22\\\\\\\":566,\\\\\\\"_24\\\\\\\":567,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":568},{\\\\\\\"_18\\\\\\\":565,\\\\\\\"_169\\\\\\\":10},\\\\\\\"json\\\\\\\",\\\\\\\"utils/json.md\\\\\\\",\\\\\\\"utils/json\\\\\\\",[],{\\\\\\\"_16\\\\\\\":570,\\\\\\\"_22\\\\\\\":572,\\\\\\\"_24\\\\\\\":573,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":574},{\\\\\\\"_18\\\\\\\":571},\\\\\\\"unstable_parseMultipartFormData\\\\\\\",\\\\\\\"utils/parse-multipart-form-data.md\\\\\\\",\\\\\\\"utils/parse-multipart-form-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":576,\\\\\\\"_22\\\\\\\":578,\\\\\\\"_24\\\\\\\":579,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":580},{\\\\\\\"_18\\\\\\\":577,\\\\\\\"_169\\\\\\\":10},\\\\\\\"redirect\\\\\\\",\\\\\\\"utils/redirect.md\\\\\\\",\\\\\\\"utils/redirect\\\\\\\",[],{\\\\\\\"_16\\\\\\\":582,\\\\\\\"_22\\\\\\\":584,\\\\\\\"_24\\\\\\\":585,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":586},{\\\\\\\"_18\\\\\\\":583,\\\\\\\"_169\\\\\\\":10},\\\\\\\"redirectDocument\\\\\\\",\\\\\\\"utils/redirectDocument.md\\\\\\\",\\\\\\\"utils/redirectDocument\\\\\\\",[],{\\\\\\\"_16\\\\\\\":588,\\\\\\\"_22\\\\\\\":590,\\\\\\\"_24\\\\\\\":591,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":592},{\\\\\\\"_18\\\\\\\":589,\\\\\\\"_169\\\\\\\":10},\\\\\\\"replace\\\\\\\",\\\\\\\"utils/replace.md\\\\\\\",\\\\\\\"utils/replace\\\\\\\",[],{\\\\\\\"_16\\\\\\\":594,\\\\\\\"_22\\\\\\\":596,\\\\\\\"_24\\\\\\\":597,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":598},{\\\\\\\"_18\\\\\\\":595},\\\\\\\"Sessions\\\\\\\",\\\\\\\"utils/sessions.md\\\\\\\",\\\\\\\"utils/sessions\\\\\\\",[],{\\\\\\\"_16\\\\\\\":600,\\\\\\\"_22\\\\\\\":602,\\\\\\\"_24\\\\\\\":603,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":604},{\\\\\\\"_18\\\\\\\":601,\\\\\\\"_169\\\\\\\":10},\\\\\\\"unstable_createFileUploadHandler\\\\\\\",\\\\\\\"utils/unstable-create-file-upload-handler.md\\\\\\\",\\\\\\\"utils/unstable-create-file-upload-handler\\\\\\\",[],{\\\\\\\"_16\\\\\\\":606,\\\\\\\"_22\\\\\\\":608,\\\\\\\"_24\\\\\\\":609,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":610},{\\\\\\\"_18\\\\\\\":607,\\\\\\\"_169\\\\\\\":10},\\\\\\\"unstable_createMemoryUploadHandler\\\\\\\",\\\\\\\"utils/unstable-create-memory-upload-handler.md\\\\\\\",\\\\\\\"utils/unstable-create-memory-upload-handler\\\\\\\",[],{\\\\\\\"_16\\\\\\\":612,\\\\\\\"_22\\\\\\\":614,\\\\\\\"_24\\\\\\\":615,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":616},{\\\\\\\"_18\\\\\\\":613,\\\\\\\"_20\\\\\\\":118},\\\\\\\"Styling\\\\\\\",\\\\\\\"styling/index.md\\\\\\\",\\\\\\\"styling\\\\\\\",[617,623,629,635,641,647,653,659],{\\\\\\\"_16\\\\\\\":618,\\\\\\\"_22\\\\\\\":620,\\\\\\\"_24\\\\\\\":621,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":622},{\\\\\\\"_18\\\\\\\":619},\\\\\\\"CSS Bundling\\\\\\\",\\\\\\\"styling/bundling.md\\\\\\\",\\\\\\\"styling/bundling\\\\\\\",[],{\\\\\\\"_16\\\\\\\":624,\\\\\\\"_22\\\\\\\":626,\\\\\\\"_24\\\\\\\":627,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":628},{\\\\\\\"_18\\\\\\\":625},\\\\\\\"Regular CSS\\\\\\\",\\\\\\\"styling/css.md\\\\\\\",\\\\\\\"styling/css\\\\\\\",[],{\\\\\\\"_16\\\\\\\":630,\\\\\\\"_22\\\\\\\":632,\\\\\\\"_24\\\\\\\":633,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":634},{\\\\\\\"_18\\\\\\\":631},\\\\\\\"CSS Imports\\\\\\\",\\\\\\\"styling/css-imports.md\\\\\\\",\\\\\\\"styling/css-imports\\\\\\\",[],{\\\\\\\"_16\\\\\\\":636,\\\\\\\"_22\\\\\\\":638,\\\\\\\"_24\\\\\\\":639,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":640},{\\\\\\\"_18\\\\\\\":637},\\\\\\\"CSS in JS\\\\\\\",\\\\\\\"styling/css-in-js.md\\\\\\\",\\\\\\\"styling/css-in-js\\\\\\\",[],{\\\\\\\"_16\\\\\\\":642,\\\\\\\"_22\\\\\\\":644,\\\\\\\"_24\\\\\\\":645,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":646},{\\\\\\\"_18\\\\\\\":643},\\\\\\\"CSS Modules\\\\\\\",\\\\\\\"styling/css-modules.md\\\\\\\",\\\\\\\"styling/css-modules\\\\\\\",[],{\\\\\\\"_16\\\\\\\":648,\\\\\\\"_22\\\\\\\":650,\\\\\\\"_24\\\\\\\":651,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":652},{\\\\\\\"_18\\\\\\\":649},\\\\\\\"PostCSS\\\\\\\",\\\\\\\"styling/postcss.md\\\\\\\",\\\\\\\"styling/postcss\\\\\\\",[],{\\\\\\\"_16\\\\\\\":654,\\\\\\\"_22\\\\\\\":656,\\\\\\\"_24\\\\\\\":657,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":658},{\\\\\\\"_18\\\\\\\":655},\\\\\\\"Tailwind\\\\\\\",\\\\\\\"styling/tailwind.md\\\\\\\",\\\\\\\"styling/tailwind\\\\\\\",[],{\\\\\\\"_16\\\\\\\":660,\\\\\\\"_22\\\\\\\":662,\\\\\\\"_24\\\\\\\":663,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":664},{\\\\\\\"_18\\\\\\\":661},\\\\\\\"Vanilla Extract\\\\\\\",\\\\\\\"styling/vanilla-extract.md\\\\\\\",\\\\\\\"styling/vanilla-extract\\\\\\\",[],{\\\\\\\"_16\\\\\\\":666,\\\\\\\"_22\\\\\\\":668,\\\\\\\"_24\\\\\\\":669,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":670},{\\\\\\\"_18\\\\\\\":667,\\\\\\\"_20\\\\\\\":132},\\\\\\\"Other API\\\\\\\",\\\\\\\"other-api/index.md\\\\\\\",\\\\\\\"other-api\\\\\\\",[671,677,683,689,695,701],{\\\\\\\"_16\\\\\\\":672,\\\\\\\"_22\\\\\\\":674,\\\\\\\"_24\\\\\\\":675,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":676},{\\\\\\\"_18\\\\\\\":673,\\\\\\\"_20\\\\\\\":39,\\\\\\\"_379\\\\\\\":34},\\\\\\\"@remix-run/dev CLI\\\\\\\",\\\\\\\"other-api/dev.md\\\\\\\",\\\\\\\"other-api/dev\\\\\\\",[],{\\\\\\\"_16\\\\\\\":678,\\\\\\\"_22\\\\\\\":680,\\\\\\\"_24\\\\\\\":681,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":682},{\\\\\\\"_18\\\\\\\":679,\\\\\\\"_20\\\\\\\":46},\\\\\\\"@remix-run/{adapter}\\\\\\\",\\\\\\\"other-api/adapter.md\\\\\\\",\\\\\\\"other-api/adapter\\\\\\\",[],{\\\\\\\"_16\\\\\\\":684,\\\\\\\"_22\\\\\\\":686,\\\\\\\"_24\\\\\\\":687,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":688},{\\\\\\\"_18\\\\\\\":685,\\\\\\\"_20\\\\\\\":46},\\\\\\\"@remix-run/serve\\\\\\\",\\\\\\\"other-api/serve.md\\\\\\\",\\\\\\\"other-api/serve\\\\\\\",[],{\\\\\\\"_16\\\\\\\":690,\\\\\\\"_22\\\\\\\":692,\\\\\\\"_24\\\\\\\":693,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":694},{\\\\\\\"_18\\\\\\\":691},\\\\\\\"create-remix (CLI)\\\\\\\",\\\\\\\"other-api/create-remix.md\\\\\\\",\\\\\\\"other-api/create-remix\\\\\\\",[],{\\\\\\\"_16\\\\\\\":696,\\\\\\\"_22\\\\\\\":698,\\\\\\\"_24\\\\\\\":699,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":700},{\\\\\\\"_18\\\\\\\":697},\\\\\\\"@remix-run/node\\\\\\\",\\\\\\\"other-api/node.md\\\\\\\",\\\\\\\"other-api/node\\\\\\\",[],{\\\\\\\"_16\\\\\\\":702,\\\\\\\"_22\\\\\\\":704,\\\\\\\"_24\\\\\\\":705,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":706},{\\\\\\\"_18\\\\\\\":703},\\\\\\\"@remix-run/testing\\\\\\\",\\\\\\\"other-api/testing.md\\\\\\\",\\\\\\\"other-api/testing\\\\\\\",[],{\\\\\\\"_16\\\\\\\":708,\\\\\\\"_22\\\\\\\":711,\\\\\\\"_24\\\\\\\":712,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":713},{\\\\\\\"_18\\\\\\\":709,\\\\\\\"_20\\\\\\\":710},\\\\\\\"Guides\\\\\\\",10,\\\\\\\"guides/index.md\\\\\\\",\\\\\\\"guides\\\\\\\",[714,720,726,732,738,744,750,756,762,769,775,782,788,794,800,806,812,818,825,831,837,843,849,855,861,867,874,881,887,893,899,905,911,917,923,930,937,943],{\\\\\\\"_16\\\\\\\":715,\\\\\\\"_22\\\\\\\":717,\\\\\\\"_24\\\\\\\":718,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":719},{\\\\\\\"_18\\\\\\\":716},\\\\\\\"Accessibility\\\\\\\",\\\\\\\"guides/accessibility.md\\\\\\\",\\\\\\\"guides/accessibility\\\\\\\",[],{\\\\\\\"_16\\\\\\\":721,\\\\\\\"_22\\\\\\\":723,\\\\\\\"_24\\\\\\\":724,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":725},{\\\\\\\"_18\\\\\\\":722},\\\\\\\"Development Strategy\\\\\\\",\\\\\\\"guides/api-development-strategy.md\\\\\\\",\\\\\\\"guides/api-development-strategy\\\\\\\",[],{\\\\\\\"_16\\\\\\\":727,\\\\\\\"_22\\\\\\\":729,\\\\\\\"_24\\\\\\\":730,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":731},{\\\\\\\"_18\\\\\\\":728},\\\\\\\"API Routes\\\\\\\",\\\\\\\"guides/api-routes.md\\\\\\\",\\\\\\\"guides/api-routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":733,\\\\\\\"_22\\\\\\\":735,\\\\\\\"_24\\\\\\\":736,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":737},{\\\\\\\"_18\\\\\\\":734,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Backend For Frontend\\\\\\\",\\\\\\\"guides/bff.md\\\\\\\",\\\\\\\"guides/bff\\\\\\\",[],{\\\\\\\"_16\\\\\\\":739,\\\\\\\"_22\\\\\\\":741,\\\\\\\"_24\\\\\\\":742,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":743},{\\\\\\\"_18\\\\\\\":740},\\\\\\\"Breadcrumbs Guide\\\\\\\",\\\\\\\"guides/breadcrumbs.md\\\\\\\",\\\\\\\"guides/breadcrumbs\\\\\\\",[],{\\\\\\\"_16\\\\\\\":745,\\\\\\\"_22\\\\\\\":747,\\\\\\\"_24\\\\\\\":748,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":749},{\\\\\\\"_18\\\\\\\":746},\\\\\\\"Browser Support\\\\\\\",\\\\\\\"guides/browser-support.md\\\\\\\",\\\\\\\"guides/browser-support\\\\\\\",[],{\\\\\\\"_16\\\\\\\":751,\\\\\\\"_22\\\\\\\":753,\\\\\\\"_24\\\\\\\":754,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":755},{\\\\\\\"_18\\\\\\\":752},\\\\\\\"Client Data\\\\\\\",\\\\\\\"guides/client-data.md\\\\\\\",\\\\\\\"guides/client-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":757,\\\\\\\"_22\\\\\\\":759,\\\\\\\"_24\\\\\\\":760,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":761},{\\\\\\\"_18\\\\\\\":758},\\\\\\\"Module Constraints\\\\\\\",\\\\\\\"guides/constraints.md\\\\\\\",\\\\\\\"guides/constraints\\\\\\\",[],{\\\\\\\"_16\\\\\\\":763,\\\\\\\"_22\\\\\\\":766,\\\\\\\"_24\\\\\\\":767,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":768},{\\\\\\\"_18\\\\\\\":764,\\\\\\\"_53\\\\\\\":765},\\\\\\\"Contributing\\\\\\\",\\\\\\\"Thank you for contributing to Remix! Here's everything you need to know before you open a pull request.\\\\\\\",\\\\\\\"guides/contributing.md\\\\\\\",\\\\\\\"guides/contributing\\\\\\\",[],{\\\\\\\"_16\\\\\\\":770,\\\\\\\"_22\\\\\\\":772,\\\\\\\"_24\\\\\\\":773,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":774},{\\\\\\\"_18\\\\\\\":771},\\\\\\\"CSS Files\\\\\\\",\\\\\\\"guides/css-files.md\\\\\\\",\\\\\\\"guides/css-files\\\\\\\",[],{\\\\\\\"_16\\\\\\\":776,\\\\\\\"_22\\\\\\\":779,\\\\\\\"_24\\\\\\\":780,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":781},{\\\\\\\"_18\\\\\\\":777,\\\\\\\"_53\\\\\\\":778},\\\\\\\"Data Loading\\\\\\\",\\\\\\\"One of the primary features of Remix is simplifying interactions with the server to get data into components. This document will help you get the most out of data loading in Remix.\\\\\\\",\\\\\\\"guides/data-loading.md\\\\\\\",\\\\\\\"guides/data-loading\\\\\\\",[],{\\\\\\\"_16\\\\\\\":783,\\\\\\\"_22\\\\\\\":785,\\\\\\\"_24\\\\\\\":786,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":787},{\\\\\\\"_18\\\\\\\":784},\\\\\\\"Data Writes\\\\\\\",\\\\\\\"guides/data-writes.md\\\\\\\",\\\\\\\"guides/data-writes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":789,\\\\\\\"_22\\\\\\\":791,\\\\\\\"_24\\\\\\\":792,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":793},{\\\\\\\"_18\\\\\\\":790},\\\\\\\"Dependency optimization\\\\\\\",\\\\\\\"guides/dependency-optimization.md\\\\\\\",\\\\\\\"guides/dependency-optimization\\\\\\\",[],{\\\\\\\"_16\\\\\\\":795,\\\\\\\"_22\\\\\\\":797,\\\\\\\"_24\\\\\\\":798,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":799},{\\\\\\\"_18\\\\\\\":796,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Deployment\\\\\\\",\\\\\\\"guides/deployment.md\\\\\\\",\\\\\\\"guides/deployment\\\\\\\",[],{\\\\\\\"_16\\\\\\\":801,\\\\\\\"_22\\\\\\\":803,\\\\\\\"_24\\\\\\\":804,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":805},{\\\\\\\"_18\\\\\\\":802,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Disabling JavaScript\\\\\\\",\\\\\\\"guides/disabling-javascript.md\\\\\\\",\\\\\\\"guides/disabling-javascript\\\\\\\",[],{\\\\\\\"_16\\\\\\\":807,\\\\\\\"_22\\\\\\\":809,\\\\\\\"_24\\\\\\\":810,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":811},{\\\\\\\"_18\\\\\\\":808},\\\\\\\"Environment Variables\\\\\\\",\\\\\\\"guides/envvars.md\\\\\\\",\\\\\\\"guides/envvars\\\\\\\",[],{\\\\\\\"_16\\\\\\\":813,\\\\\\\"_22\\\\\\\":815,\\\\\\\"_24\\\\\\\":816,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":817},{\\\\\\\"_18\\\\\\\":814},\\\\\\\"Error Handling\\\\\\\",\\\\\\\"guides/errors.md\\\\\\\",\\\\\\\"guides/errors\\\\\\\",[],{\\\\\\\"_16\\\\\\\":819,\\\\\\\"_22\\\\\\\":822,\\\\\\\"_24\\\\\\\":823,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":824},{\\\\\\\"_18\\\\\\\":820,\\\\\\\"_53\\\\\\\":821},\\\\\\\"FAQs\\\\\\\",\\\\\\\"Frequently Asked Questions about Remix\\\\\\\",\\\\\\\"guides/faq.md\\\\\\\",\\\\\\\"guides/faq\\\\\\\",[],{\\\\\\\"_16\\\\\\\":826,\\\\\\\"_22\\\\\\\":828,\\\\\\\"_24\\\\\\\":829,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":830},{\\\\\\\"_18\\\\\\\":827},\\\\\\\"File Uploads\\\\\\\",\\\\\\\"guides/file-uploads.md\\\\\\\",\\\\\\\"guides/file-uploads\\\\\\\",[],{\\\\\\\"_16\\\\\\\":832,\\\\\\\"_22\\\\\\\":834,\\\\\\\"_24\\\\\\\":835,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":836},{\\\\\\\"_18\\\\\\\":833},\\\\\\\"Form Validation\\\\\\\",\\\\\\\"guides/form-validation.md\\\\\\\",\\\\\\\"guides/form-validation\\\\\\\",[],{\\\\\\\"_16\\\\\\\":838,\\\\\\\"_22\\\\\\\":840,\\\\\\\"_24\\\\\\\":841,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":842},{\\\\\\\"_18\\\\\\\":839},\\\\\\\"Gotchas\\\\\\\",\\\\\\\"guides/gotchas.md\\\\\\\",\\\\\\\"guides/gotchas\\\\\\\",[],{\\\\\\\"_16\\\\\\\":844,\\\\\\\"_22\\\\\\\":846,\\\\\\\"_24\\\\\\\":847,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":848},{\\\\\\\"_18\\\\\\\":845,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Index Query Param\\\\\\\",\\\\\\\"guides/index-query-param.md\\\\\\\",\\\\\\\"guides/index-query-param\\\\\\\",[],{\\\\\\\"_16\\\\\\\":850,\\\\\\\"_22\\\\\\\":852,\\\\\\\"_24\\\\\\\":853,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":854},{\\\\\\\"_18\\\\\\\":851},\\\\\\\"Lazy Route Discovery\\\\\\\",\\\\\\\"guides/lazy-route-discovery.md\\\\\\\",\\\\\\\"guides/lazy-route-discovery\\\\\\\",[],{\\\\\\\"_16\\\\\\\":856,\\\\\\\"_22\\\\\\\":858,\\\\\\\"_24\\\\\\\":859,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":860},{\\\\\\\"_18\\\\\\\":857},\\\\\\\"Local TLS\\\\\\\",\\\\\\\"guides/local-tls.md\\\\\\\",\\\\\\\"guides/local-tls\\\\\\\",[],{\\\\\\\"_16\\\\\\\":862,\\\\\\\"_22\\\\\\\":864,\\\\\\\"_24\\\\\\\":865,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":866},{\\\\\\\"_18\\\\\\\":863},\\\\\\\"Manual Dev Server\\\\\\\",\\\\\\\"guides/manual-mode.md\\\\\\\",\\\\\\\"guides/manual-mode\\\\\\\",[],{\\\\\\\"_16\\\\\\\":868,\\\\\\\"_22\\\\\\\":871,\\\\\\\"_24\\\\\\\":872,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":873},{\\\\\\\"_18\\\\\\\":869,\\\\\\\"_53\\\\\\\":870},\\\\\\\"MDX\\\\\\\",\\\\\\\"Remix makes integrating MDX into your project a breeze with built in routes and \\\\\\\\\\\\\\\"import\\\\\\\\\\\\\\\" support.\\\\\\\",\\\\\\\"guides/mdx.md\\\\\\\",\\\\\\\"guides/mdx\\\\\\\",[],{\\\\\\\"_16\\\\\\\":875,\\\\\\\"_22\\\\\\\":878,\\\\\\\"_24\\\\\\\":879,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":880},{\\\\\\\"_18\\\\\\\":876,\\\\\\\"_53\\\\\\\":877},\\\\\\\"Migrating from React Router\\\\\\\",\\\\\\\"Migrating your React Router app to Remix can be done all at once or in stages. This guide will walk you through an iterative approach to get your app running quickly.\\\\\\\",\\\\\\\"guides/migrating-react-router-app.md\\\\\\\",\\\\\\\"guides/migrating-react-router-app\\\\\\\",[],{\\\\\\\"_16\\\\\\\":882,\\\\\\\"_22\\\\\\\":884,\\\\\\\"_24\\\\\\\":885,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":886},{\\\\\\\"_18\\\\\\\":883},\\\\\\\"Not Found Handling\\\\\\\",\\\\\\\"guides/not-found.md\\\\\\\",\\\\\\\"guides/not-found\\\\\\\",[],{\\\\\\\"_16\\\\\\\":888,\\\\\\\"_22\\\\\\\":890,\\\\\\\"_24\\\\\\\":891,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":892},{\\\\\\\"_18\\\\\\\":889},\\\\\\\"Performance\\\\\\\",\\\\\\\"guides/performance.md\\\\\\\",\\\\\\\"guides/performance\\\\\\\",[],{\\\\\\\"_16\\\\\\\":894,\\\\\\\"_22\\\\\\\":896,\\\\\\\"_24\\\\\\\":897,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":898},{\\\\\\\"_18\\\\\\\":895},\\\\\\\"Presets\\\\\\\",\\\\\\\"guides/presets.md\\\\\\\",\\\\\\\"guides/presets\\\\\\\",[],{\\\\\\\"_16\\\\\\\":900,\\\\\\\"_22\\\\\\\":902,\\\\\\\"_24\\\\\\\":903,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":904},{\\\\\\\"_18\\\\\\\":901},\\\\\\\"Resource Routes\\\\\\\",\\\\\\\"guides/resource-routes.md\\\\\\\",\\\\\\\"guides/resource-routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":906,\\\\\\\"_22\\\\\\\":908,\\\\\\\"_24\\\\\\\":909,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":910},{\\\\\\\"_18\\\\\\\":907},\\\\\\\"Server Bundles\\\\\\\",\\\\\\\"guides/server-bundles.md\\\\\\\",\\\\\\\"guides/server-bundles\\\\\\\",[],{\\\\\\\"_16\\\\\\\":912,\\\\\\\"_22\\\\\\\":914,\\\\\\\"_24\\\\\\\":915,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":916},{\\\\\\\"_18\\\\\\\":913},\\\\\\\"Single Fetch\\\\\\\",\\\\\\\"guides/single-fetch.md\\\\\\\",\\\\\\\"guides/single-fetch\\\\\\\",[],{\\\\\\\"_16\\\\\\\":918,\\\\\\\"_22\\\\\\\":920,\\\\\\\"_24\\\\\\\":921,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":922},{\\\\\\\"_18\\\\\\\":919},\\\\\\\"SPA Mode\\\\\\\",\\\\\\\"guides/spa-mode.md\\\\\\\",\\\\\\\"guides/spa-mode\\\\\\\",[],{\\\\\\\"_16\\\\\\\":924,\\\\\\\"_22\\\\\\\":927,\\\\\\\"_24\\\\\\\":928,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":929},{\\\\\\\"_18\\\\\\\":925,\\\\\\\"_53\\\\\\\":926},\\\\\\\"Streaming\\\\\\\",\\\\\\\"When, why, and how to stream with React 18 and Remix's deferred API.\\\\\\\",\\\\\\\"guides/streaming.md\\\\\\\",\\\\\\\"guides/streaming\\\\\\\",[],{\\\\\\\"_16\\\\\\\":931,\\\\\\\"_22\\\\\\\":934,\\\\\\\"_24\\\\\\\":935,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":936},{\\\\\\\"_18\\\\\\\":932,\\\\\\\"_53\\\\\\\":933},\\\\\\\"Templates\\\\\\\",\\\\\\\"The quickest way to get rocking and rolling with Remix\\\\\\\",\\\\\\\"guides/templates.md\\\\\\\",\\\\\\\"guides/templates\\\\\\\",[],{\\\\\\\"_16\\\\\\\":938,\\\\\\\"_22\\\\\\\":940,\\\\\\\"_24\\\\\\\":941,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":942},{\\\\\\\"_18\\\\\\\":939,\\\\\\\"_169\\\\\\\":10},\\\\\\\"TypeScript\\\\\\\",\\\\\\\"guides/typescript.md\\\\\\\",\\\\\\\"guides/typescript\\\\\\\",[],{\\\\\\\"_16\\\\\\\":944,\\\\\\\"_22\\\\\\\":946,\\\\\\\"_24\\\\\\\":947,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":948},{\\\\\\\"_18\\\\\\\":945},\\\\\\\"Vite\\\\\\\",\\\\\\\"guides/vite.md\\\\\\\",\\\\\\\"guides/vite\\\\\\\",[],\\\\\\\"routes/docs.$\\\\\\\",{\\\\\\\"_951\\\\\\\":952},\\\\\\\"doc\\\\\\\",{\\\\\\\"_16\\\\\\\":953,\\\\\\\"_22\\\\\\\":954,\\\\\\\"_955\\\\\\\":956,\\\\\\\"_24\\\\\\\":957,\\\\\\\"_958\\\\\\\":959,\\\\\\\"_27\\\\\\\":960},{\\\\\\\"_18\\\\\\\":187,\\\\\\\"_169\\\\\\\":10},\\\\\\\"docs/file-conventions/entry.client.md\\\\\\\",\\\\\\\"html\\\\\\\",\\\\\\\"\\\\u003ch1 id=\\\\\\\\\\\\\\\"entryclient\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#entryclient\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003eentry.client\\\\u003c/h1\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eBy default, Remix will handle hydrating your app on the client for you. If you want to customize this behavior, you can run \\\\u003ccode\\\\u003enpx remix reveal\\\\u003c/code\\\\u003e to generate a \\\\u003ccode\\\\u003eapp/entry.client.tsx\\\\u003c/code\\\\u003e (or \\\\u003ccode\\\\u003e.jsx\\\\u003c/code\\\\u003e) that will take precedence. This file is the entry point for the browser and is responsible for hydrating the markup generated by the server in your \\\\u003ca href=\\\\\\\\\\\\\\\"./entry.server\\\\\\\\\\\\\\\"\\\\u003eserver entry module\\\\u003c/a\\\\u003e; however, you can also initialize any other client-side code here.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eTypically, this module uses \\\\u003ccode\\\\u003eReactDOM.hydrateRoot\\\\u003c/code\\\\u003e to hydrate the markup already generated on the server in your \\\\u003ca href=\\\\\\\\\\\\\\\"./entry.server\\\\\\\\\\\\\\\"\\\\u003eserver entry module\\\\u003c/a\\\\u003e.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eHere's a basic example:\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cdiv data-code-block=\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\" data-filename=\\\\\\\\\\\\\\\"app/entry.client.tsx\\\\\\\\\\\\\\\" data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"tsx\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cpre data-filename=\\\\\\\\\\\\\\\"app/entry.client.tsx\\\\\\\\\\\\\\\" data-line-numbers=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" data-lang=\\\\\\\\\\\\\\\"tsx\\\\\\\\\\\\\\\" style=\\\\\\\\\\\\\\\"color: var(--base05);\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ccode\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"1\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eimport\\\\u003c/span\\\\u003e { \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eRemixBrowser\\\\u003c/span\\\\u003e } \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003efrom\\\\u003c/span\\\\u003e \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003e@remix-run/react\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\";\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"2\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eimport\\\\u003c/span\\\\u003e { \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003estartTransition\\\\u003c/span\\\\u003e, \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003eStrictMode\\\\u003c/span\\\\u003e } \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003efrom\\\\u003c/span\\\\u003e \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003ereact\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\";\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"3\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003eimport\\\\u003c/span\\\\u003e { \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003ehydrateRoot\\\\u003c/span\\\\u003e } \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0E)\\\\\\\\\\\\\\\"\\\\u003efrom\\\\u003c/span\\\\u003e \\\\\\\\\\\\\\\"\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0B)\\\\\\\\\\\\\\\"\\\\u003ereact-dom/client\\\\u003c/span\\\\u003e\\\\\\\\\\\\\\\";\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"4\\\\\\\\\\\\\\\"\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"5\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003estartTransition\\\\u003c/span\\\\u003e(() \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003e=\\\\u003e\\\\u003c/span\\\\u003e {\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"6\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0D)\\\\\\\\\\\\\\\"\\\\u003ehydrateRoot\\\\u003c/span\\\\u003e(\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"7\\\\\\\\\\\\\\\"\\\\u003e \\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base08)\\\\\\\\\\\\\\\"\\\\u003edocument\\\\u003c/span\\\\u003e,\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"8\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eStrictMode\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"9\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eRemixBrowser\\\\u003c/span\\\\u003e /\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"10\\\\\\\\\\\\\\\"\\\\u003e \\\\u0026#x3C;/\\\\u003cspan style=\\\\\\\\\\\\\\\"color: var(--base0A)\\\\\\\\\\\\\\\"\\\\u003eStrictMode\\\\u003c/span\\\\u003e\\\\u003e\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"11\\\\\\\\\\\\\\\"\\\\u003e );\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"codeblock-line\\\\\\\\\\\\\\\" data-line-number=\\\\\\\\\\\\\\\"12\\\\\\\\\\\\\\\"\\\\u003e});\\\\\\\\n\\\\u003c/span\\\\u003e\\\\u003c/code\\\\u003e\\\\u003c/pre\\\\u003e\\\\u003c/div\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eThis is the first piece of code that runs in the browser. You can initialize client side libraries, add client-only providers, etc.\\\\u003c/p\\\\u003e\\\\\\\",\\\\\\\"docs/file-conventions/entry.client\\\\\\\",\\\\\\\"headings\\\\\\\",[],[],\\\\\\\"actionData\\\\\\\",\\\\\\\"errors\\\\\\\"]\\\\n\\\");function $RC(a,b){a=document.getElementById(a);b=document.getElementById(b);b.parentNode.removeChild(b);if(a){a=a.previousSibling;var f=a.parentNode,c=a.nextSibling,e=0;do{if(c\\u0026\\u00268===c.nodeType){var d=c.data;if(\\\"/$\\\"===d)if(0===e)break;else e--;else\\\"$\\\"!==d\\u0026\\u0026\\\"$?\\\"!==d\\u0026\\u0026\\\"$!\\\"!==d||e++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;b.firstChild;)f.insertBefore(b.firstChild,c);a.data=\\\"$\\\";a._reactRetry\\u0026\\u0026a._reactRetry()}};$RC(\\\"B:0\\\",\\\"S:0\\\")window.__reactRouterContext.streamController.close();$RC(\\\"B:1\\\",\\\"S:1\\\")\","
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/languages_test.go::cac43520b2734946": {
|
|
"id": "boilerplate_duplication::internal/quality/languages_test.go::cac43520b2734946",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/languages_test.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 21 lines): internal/quality/languages_test.go:174, internal/quality/scanner_test.go:464",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 21,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/languages_test.go",
|
|
"line": 174
|
|
},
|
|
{
|
|
"file": "internal/quality/scanner_test.go",
|
|
"line": 464
|
|
}
|
|
],
|
|
"sample": [
|
|
")",
|
|
"\tif err != nil {",
|
|
"\t\tt.Fatalf(\"Failed to create temp dir: %v\", err)",
|
|
"\t}"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "test",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::.desloppify/config.json::dae849469b9c2c4d": {
|
|
"id": "boilerplate_duplication::.desloppify/config.json::dae849469b9c2c4d",
|
|
"detector": "boilerplate_duplication",
|
|
"file": ".desloppify/config.json",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 22 lines): .desloppify/config.json:1, .desloppify/query.json:403",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 22,
|
|
"locations": [
|
|
{
|
|
"file": ".desloppify/config.json",
|
|
"line": 1
|
|
},
|
|
{
|
|
"file": ".desloppify/query.json",
|
|
"line": 403
|
|
}
|
|
],
|
|
"sample": [
|
|
"{",
|
|
" \"target_strict_score\": 95,",
|
|
" \"review_max_age_days\": 30,",
|
|
" \"holistic_max_age_days\": 30,"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::devour_data/docs/server-modules---remix-c071e6d8.json::fee19a40f84daf09": {
|
|
"id": "boilerplate_duplication::devour_data/docs/server-modules---remix-c071e6d8.json::fee19a40f84daf09",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "devour_data/docs/server-modules---remix-c071e6d8.json",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 171 lines): devour_data/docs/server-modules---remix-c071e6d8.json:3, devour_data/docs/server-modules---remix.json:3",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 171,
|
|
"locations": [
|
|
{
|
|
"file": "devour_data/docs/server-modules---remix-c071e6d8.json",
|
|
"line": 3
|
|
},
|
|
{
|
|
"file": "devour_data/docs/server-modules---remix.json",
|
|
"line": 3
|
|
}
|
|
],
|
|
"sample": [
|
|
",",
|
|
" \"type\": \"html\",",
|
|
" \"title\": \"server modules | Remix\",",
|
|
" \"content\": \"DocsBlogResourcesReact Router v7 has been released. View the docsDocsBlogResourcesView code on GitHubChat on DiscordReact Router v7 has been released. View the docs.server modulesGetting StartedQuick Start (5m) Tutorial (30m) Upgrading to v2 Community Future Flags Changelog Discussion TopicsIntroduction, Technical Explanation Runtimes, Adapters, Templates, and Deployment Route Configuration Fullstack Data Flow Server vs. Client Code Execution React Router Progressive Enhancement Pending UI State Management Network Concurrency Management Form vs. fetcher Hot Module Replacement Form Resubmissions File Conventions.client modules .server modules Asset Imports entry.client entry.server root Route File Naming vite.config.ts Route Moduleaction clientAction clientLoader Component ErrorBoundary handle headers HydrateFallback links loader meta shouldRevalidate ComponentsAwait Form Link Links LiveReload Meta NavLink Outlet PrefetchPageLinks Scripts ScrollRestoration HooksuseActionData useAsyncError \ud83c\udd95useAsyncValue \ud83c\udd95useBeforeUnload useBlocker useFetcher useFetchers useFormAction useHref useLoaderData useLocation useMatches useNavigate useNavigation useNavigationType useOutlet useOutletContext useParams unstable_usePrompt useResolvedPath useRevalidator \ud83c\udd95useRouteError \ud83c\udd95useRouteLoaderData useSearchParams useSubmit useViewTransitionState UtilitiesCookies createRemixStub data defer isRouteErrorResponse json unstable_parseMultipartFormData redirect redirectDocument replace Sessions unstable_createFileUploadHandler unstable_createMemoryUploadHandler StylingCSS Bundling Regular CSS CSS Imports CSS in JS CSS Modules PostCSS Tailwind Vanilla Extract Other API@remix-run/dev CLI \ud83c\udd95@remix-run/{adapter} @remix-run/serve create-remix (CLI) @remix-run/node @remix-run/testing GuidesAccessibility Development Strategy API Routes Backend For Frontend Breadcrumbs Guide Browser Support Client Data Module Constraints Contributing CSS Files Data Loading Data Writes Dependency optimization Deployment Disabling JavaScript Environment Variables Error Handling FAQs File Uploads Form Validation Gotchas Index Query Param Lazy Route Discovery Local TLS Manual Dev Server MDX Migrating from React Router Not Found Handling Performance Presets Resource Routes Server Bundles Single Fetch SPA Mode Streaming Templates TypeScript Vite Getting StartedQuick Start (5m) Tutorial (30m) Upgrading to v2 Community Future Flags Changelog Discussion TopicsIntroduction, Technical Explanation Runtimes, Adapters, Templates, and Deployment Route Configuration Fullstack Data Flow Server vs. Client Code Execution React Router Progressive Enhancement Pending UI State Management Network Concurrency Management Form vs. fetcher Hot Module Replacement Form Resubmissions File Conventions.client modules .server modules Asset Imports entry.client entry.server root Route File Naming vite.config.ts Route Moduleaction clientAction clientLoader Component ErrorBoundary handle headers HydrateFallback links loader meta shouldRevalidate ComponentsAwait Form Link Links LiveReload Meta NavLink Outlet PrefetchPageLinks Scripts ScrollRestoration HooksuseActionData useAsyncError \ud83c\udd95useAsyncValue \ud83c\udd95useBeforeUnload useBlocker useFetcher useFetchers useFormAction useHref useLoaderData useLocation useMatches useNavigate useNavigation useNavigationType useOutlet useOutletContext useParams unstable_usePrompt useResolvedPath useRevalidator \ud83c\udd95useRouteError \ud83c\udd95useRouteLoaderData useSearchParams useSubmit useViewTransitionState UtilitiesCookies createRemixStub data defer isRouteErrorResponse json unstable_parseMultipartFormData redirect redirectDocument replace Sessions unstable_createFileUploadHandler unstable_createMemoryUploadHandler StylingCSS Bundling Regular CSS CSS Imports CSS in JS CSS Modules PostCSS Tailwind Vanilla Extract Other API@remix-run/dev CLI \ud83c\udd95@remix-run/{adapter} @remix-run/serve create-remix (CLI) @remix-run/node @remix-run/testing GuidesAccessibility Development Strategy API Routes Backend For Frontend Breadcrumbs Guide Browser Support Client Data Module Constraints Contributing CSS Files Data Loading Data Writes Dependency optimization Deployment Disabling JavaScript Environment Variables Error Handling FAQs File Uploads Form Validation Gotchas Index Query Param Lazy Route Discovery Local TLS Manual Dev Server MDX Migrating from React Router Not Found Handling Performance Presets Resource Routes Server Bundles Single Fetch SPA Mode Streaming Templates TypeScript Vite .server modules While not strictly necessary, .server modules are a good way to explicitly mark entire modules as server-only. The build will fail if any code in a .server file or .server directory accidentally ends up in the client module graph. app \u251c\u2500\u2500 .server \ud83d\udc48 marks all files in this directory as server-only \u2502 \u251c\u2500\u2500 auth.ts \u2502 \u2514\u2500\u2500 db.ts \u251c\u2500\u2500 cms.server.ts \ud83d\udc48 marks this file as server-only \u251c\u2500\u2500 root.tsx \u2514\u2500\u2500 routes \u2514\u2500\u2500 _index.tsx .server modules must be within your Remix app directory. Refer to the Route Module section in the sidebar for more information. .server directories are only supported when using Remix Vite. The Classic Remix Compiler only supports .server files. When using the Classic Remix Compiler, .server modules are replaced with empty modules and will not result in a compilation error. Note that this can result in runtime errors.\u00a9 Shopify, Inc.\u2022Docs and examples licensed under MITEdit((storageKey2, restoreKey) =\\u003e { if (!window.history.state || !window.history.state.key) { let key = Math.random().toString(32).slice(2); window.history.replaceState({ key }, \\\"\\\"); } try { let positions = JSON.parse(sessionStorage.getItem(storageKey2) || \\\"{}\\\"); let storedY = positions[restoreKey || window.history.state.key]; if (typeof storedY === \\\"number\\\") { window.scrollTo(0, storedY); } } catch (error) { console.error(error); sessionStorage.removeItem(storageKey2); } })(\\\"react-router-scroll-positions\\\", null)window.__reactRouterContext = {\\\"basename\\\":\\\"/\\\",\\\"future\\\":{\\\"unstable_optimizeDeps\\\":true,\\\"unstable_subResourceIntegrity\\\":false,\\\"v8_middleware\\\":true,\\\"v8_splitRouteModules\\\":true,\\\"v8_viteEnvironmentApi\\\":true},\\\"routeDiscovery\\\":{\\\"mode\\\":\\\"initial\\\"},\\\"ssr\\\":true,\\\"isSpaMode\\\":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeThrough(new TextEncoderStream());import \\\"/assets/manifest-b010e014.js\\\"; import * as route0 from \\\"/assets/root-CtUYAfRS.js\\\"; import * as route1 from \\\"/assets/docs-DauuYQK6.js\\\"; import * as route2 from \\\"/assets/docs._-B4dRXAHv.js\\\"; window.__reactRouterRouteModules = {\\\"root\\\":route0,\\\"routes/docs\\\":route1,\\\"routes/docs.$\\\":route2}; import(\\\"/assets/entry.client-q2ogymM2.js\\\");window.__reactRouterContext.streamController.enqueue(\\\"[{\\\\\\\"_1\\\\\\\":2,\\\\\\\"_961\\\\\\\":-5,\\\\\\\"_962\\\\\\\":-5},\\\\\\\"loaderData\\\\\\\",{\\\\\\\"_3\\\\\\\":4,\\\\\\\"_11\\\\\\\":12,\\\\\\\"_949\\\\\\\":950},\\\\\\\"root\\\\\\\",{\\\\\\\"_5\\\\\\\":6,\\\\\\\"_7\\\\\\\":8,\\\\\\\"_9\\\\\\\":10},\\\\\\\"host\\\\\\\",\\\\\\\"localhost\\\\\\\",\\\\\\\"siteUrl\\\\\\\",\\\\\\\"https://v2.remix.run\\\\\\\",\\\\\\\"noIndex\\\\\\\",false,\\\\\\\"routes/docs\\\\\\\",{\\\\\\\"_13\\\\\\\":14},\\\\\\\"menu\\\\\\\",[15,72,160,214,292,364,527,611,665,707],{\\\\\\\"_16\\\\\\\":17,\\\\\\\"_22\\\\\\\":23,\\\\\\\"_24\\\\\\\":25,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":28},\\\\\\\"attrs\\\\\\\",{\\\\\\\"_18\\\\\\\":19,\\\\\\\"_20\\\\\\\":21},\\\\\\\"title\\\\\\\",\\\\\\\"Getting Started\\\\\\\",\\\\\\\"order\\\\\\\",1,\\\\\\\"filename\\\\\\\",\\\\\\\"start/index.md\\\\\\\",\\\\\\\"slug\\\\\\\",\\\\\\\"start\\\\\\\",\\\\\\\"hasContent\\\\\\\",\\\\\\\"children\\\\\\\",[29,36,43,50,59,66],{\\\\\\\"_16\\\\\\\":30,\\\\\\\"_22\\\\\\\":32,\\\\\\\"_24\\\\\\\":33,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":35},{\\\\\\\"_18\\\\\\\":31,\\\\\\\"_20\\\\\\\":21},\\\\\\\"Quick Start (5m)\\\\\\\",\\\\\\\"start/quickstart.md\\\\\\\",\\\\\\\"start/quickstart\\\\\\\",true,[],{\\\\\\\"_16\\\\\\\":37,\\\\\\\"_22\\\\\\\":40,\\\\\\\"_24\\\\\\\":41,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":42},{\\\\\\\"_18\\\\\\\":38,\\\\\\\"_20\\\\\\\":39},\\\\\\\"Tutorial (30m)\\\\\\\",2,\\\\\\\"start/tutorial.md\\\\\\\",\\\\\\\"start/tutorial\\\\\\\",[],{\\\\\\\"_16\\\\\\\":44,\\\\\\\"_22\\\\\\\":47,\\\\\\\"_24\\\\\\\":48,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":49},{\\\\\\\"_18\\\\\\\":45,\\\\\\\"_20\\\\\\\":46},\\\\\\\"Upgrading to v2\\\\\\\",3,\\\\\\\"start/v2.md\\\\\\\",\\\\\\\"start/v2\\\\\\\",[],{\\\\\\\"_16\\\\\\\":51,\\\\\\\"_22\\\\\\\":56,\\\\\\\"_24\\\\\\\":57,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":58},{\\\\\\\"_18\\\\\\\":52,\\\\\\\"_53\\\\\\\":54,\\\\\\\"_20\\\\\\\":55},\\\\\\\"Community\\\\\\\",\\\\\\\"description\\\\\\\",\\\\\\\"Community resources for learning Remix and related technologies\\\\\\\",4,\\\\\\\"start/community.md\\\\\\\",\\\\\\\"start/community\\\\\\\",[],{\\\\\\\"_16\\\\\\\":60,\\\\\\\"_22\\\\\\\":63,\\\\\\\"_24\\\\\\\":64,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":65},{\\\\\\\"_18\\\\\\\":61,\\\\\\\"_20\\\\\\\":62},\\\\\\\"Future Flags\\\\\\\",5,\\\\\\\"start/future-flags.md\\\\\\\",\\\\\\\"start/future-flags\\\\\\\",[],{\\\\\\\"_16\\\\\\\":67,\\\\\\\"_22\\\\\\\":69,\\\\\\\"_24\\\\\\\":70,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":71},{\\\\\\\"_18\\\\\\\":68},\\\\\\\"Changelog\\\\\\\",\\\\\\\"start/changelog.md\\\\\\\",\\\\\\\"start/changelog\\\\\\\",[],{\\\\\\\"_16\\\\\\\":73,\\\\\\\"_22\\\\\\\":75,\\\\\\\"_24\\\\\\\":76,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":77},{\\\\\\\"_18\\\\\\\":74,\\\\\\\"_20\\\\\\\":39},\\\\\\\"Discussion Topics\\\\\\\",\\\\\\\"discussion/index.md\\\\\\\",\\\\\\\"discussion\\\\\\\",[78,84,90,96,102,108,115,122,129,136,142,148,154],{\\\\\\\"_16\\\\\\\":79,\\\\\\\"_22\\\\\\\":81,\\\\\\\"_24\\\\\\\":82,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":83},{\\\\\\\"_18\\\\\\\":80,\\\\\\\"_20\\\\\\\":21},\\\\\\\"Introduction, Technical Explanation\\\\\\\",\\\\\\\"discussion/introduction.md\\\\\\\",\\\\\\\"discussion/introduction\\\\\\\",[],{\\\\\\\"_16\\\\\\\":85,\\\\\\\"_22\\\\\\\":87,\\\\\\\"_24\\\\\\\":88,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":89},{\\\\\\\"_18\\\\\\\":86,\\\\\\\"_20\\\\\\\":39},\\\\\\\"Runtimes, Adapters, Templates, and Deployment\\\\\\\",\\\\\\\"discussion/runtimes.md\\\\\\\",\\\\\\\"discussion/runtimes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":91,\\\\\\\"_22\\\\\\\":93,\\\\\\\"_24\\\\\\\":94,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":95},{\\\\\\\"_18\\\\\\\":92,\\\\\\\"_20\\\\\\\":46},\\\\\\\"Route Configuration\\\\\\\",\\\\\\\"discussion/routes.md\\\\\\\",\\\\\\\"discussion/routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":97,\\\\\\\"_22\\\\\\\":99,\\\\\\\"_24\\\\\\\":100,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":101},{\\\\\\\"_18\\\\\\\":98,\\\\\\\"_20\\\\\\\":55},\\\\\\\"Fullstack Data Flow\\\\\\\",\\\\\\\"discussion/data-flow.md\\\\\\\",\\\\\\\"discussion/data-flow\\\\\\\",[],{\\\\\\\"_16\\\\\\\":103,\\\\\\\"_22\\\\\\\":105,\\\\\\\"_24\\\\\\\":106,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":107},{\\\\\\\"_18\\\\\\\":104,\\\\\\\"_20\\\\\\\":62},\\\\\\\"Server vs. Client Code Execution\\\\\\\",\\\\\\\"discussion/server-vs-client.md\\\\\\\",\\\\\\\"discussion/server-vs-client\\\\\\\",[],{\\\\\\\"_16\\\\\\\":109,\\\\\\\"_22\\\\\\\":112,\\\\\\\"_24\\\\\\\":113,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":114},{\\\\\\\"_18\\\\\\\":110,\\\\\\\"_20\\\\\\\":111},\\\\\\\"React Router\\\\\\\",6,\\\\\\\"discussion/react-router.md\\\\\\\",\\\\\\\"discussion/react-router\\\\\\\",[],{\\\\\\\"_16\\\\\\\":116,\\\\\\\"_22\\\\\\\":119,\\\\\\\"_24\\\\\\\":120,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":121},{\\\\\\\"_18\\\\\\\":117,\\\\\\\"_20\\\\\\\":118},\\\\\\\"Progressive Enhancement\\\\\\\",7,\\\\\\\"discussion/progressive-enhancement.md\\\\\\\",\\\\\\\"discussion/progressive-enhancement\\\\\\\",[],{\\\\\\\"_16\\\\\\\":123,\\\\\\\"_22\\\\\\\":126,\\\\\\\"_24\\\\\\\":127,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":128},{\\\\\\\"_18\\\\\\\":124,\\\\\\\"_20\\\\\\\":125},\\\\\\\"Pending UI\\\\\\\",8,\\\\\\\"discussion/pending-ui.md\\\\\\\",\\\\\\\"discussion/pending-ui\\\\\\\",[],{\\\\\\\"_16\\\\\\\":130,\\\\\\\"_22\\\\\\\":133,\\\\\\\"_24\\\\\\\":134,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":135},{\\\\\\\"_18\\\\\\\":131,\\\\\\\"_20\\\\\\\":132},\\\\\\\"State Management\\\\\\\",9,\\\\\\\"discussion/state-management.md\\\\\\\",\\\\\\\"discussion/state-management\\\\\\\",[],{\\\\\\\"_16\\\\\\\":137,\\\\\\\"_22\\\\\\\":139,\\\\\\\"_24\\\\\\\":140,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":141},{\\\\\\\"_18\\\\\\\":138},\\\\\\\"Network Concurrency Management\\\\\\\",\\\\\\\"discussion/concurrency.md\\\\\\\",\\\\\\\"discussion/concurrency\\\\\\\",[],{\\\\\\\"_16\\\\\\\":143,\\\\\\\"_22\\\\\\\":145,\\\\\\\"_24\\\\\\\":146,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":147},{\\\\\\\"_18\\\\\\\":144},\\\\\\\"Form vs. fetcher\\\\\\\",\\\\\\\"discussion/form-vs-fetcher.md\\\\\\\",\\\\\\\"discussion/form-vs-fetcher\\\\\\\",[],{\\\\\\\"_16\\\\\\\":149,\\\\\\\"_22\\\\\\\":151,\\\\\\\"_24\\\\\\\":152,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":153},{\\\\\\\"_18\\\\\\\":150},\\\\\\\"Hot Module Replacement\\\\\\\",\\\\\\\"discussion/hot-module-replacement.md\\\\\\\",\\\\\\\"discussion/hot-module-replacement\\\\\\\",[],{\\\\\\\"_16\\\\\\\":155,\\\\\\\"_22\\\\\\\":157,\\\\\\\"_24\\\\\\\":158,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":159},{\\\\\\\"_18\\\\\\\":156},\\\\\\\"Form Resubmissions\\\\\\\",\\\\\\\"discussion/resubmissions.md\\\\\\\",\\\\\\\"discussion/resubmissions\\\\\\\",[],{\\\\\\\"_16\\\\\\\":161,\\\\\\\"_22\\\\\\\":163,\\\\\\\"_24\\\\\\\":164,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":165},{\\\\\\\"_18\\\\\\\":162,\\\\\\\"_20\\\\\\\":46},\\\\\\\"File Conventions\\\\\\\",\\\\\\\"file-conventions/index.md\\\\\\\",\\\\\\\"file-conventions\\\\\\\",[166,173,179,185,191,197,202,208],{\\\\\\\"_16\\\\\\\":167,\\\\\\\"_22\\\\\\\":170,\\\\\\\"_24\\\\\\\":171,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":172},{\\\\\\\"_18\\\\\\\":168,\\\\\\\"_169\\\\\\\":10},\\\\\\\".client modules\\\\\\\",\\\\\\\"toc\\\\\\\",\\\\\\\"file-conventions/-client.md\\\\\\\",\\\\\\\"file-conventions/-client\\\\\\\",[],{\\\\\\\"_16\\\\\\\":174,\\\\\\\"_22\\\\\\\":176,\\\\\\\"_24\\\\\\\":177,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":178},{\\\\\\\"_18\\\\\\\":175,\\\\\\\"_169\\\\\\\":10},\\\\\\\".server modules\\\\\\\",\\\\\\\"file-conventions/-server.md\\\\\\\",\\\\\\\"file-conventions/-server\\\\\\\",[],{\\\\\\\"_16\\\\\\\":180,\\\\\\\"_22\\\\\\\":182,\\\\\\\"_24\\\\\\\":183,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":184},{\\\\\\\"_18\\\\\\\":181,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Asset Imports\\\\\\\",\\\\\\\"file-conventions/asset-imports.md\\\\\\\",\\\\\\\"file-conventions/asset-imports\\\\\\\",[],{\\\\\\\"_16\\\\\\\":186,\\\\\\\"_22\\\\\\\":188,\\\\\\\"_24\\\\\\\":189,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":190},{\\\\\\\"_18\\\\\\\":187,\\\\\\\"_169\\\\\\\":10},\\\\\\\"entry.client\\\\\\\",\\\\\\\"file-conventions/entry.client.md\\\\\\\",\\\\\\\"file-conventions/entry.client\\\\\\\",[],{\\\\\\\"_16\\\\\\\":192,\\\\\\\"_22\\\\\\\":194,\\\\\\\"_24\\\\\\\":195,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":196},{\\\\\\\"_18\\\\\\\":193,\\\\\\\"_169\\\\\\\":10},\\\\\\\"entry.server\\\\\\\",\\\\\\\"file-conventions/entry.server.md\\\\\\\",\\\\\\\"file-conventions/entry.server\\\\\\\",[],{\\\\\\\"_16\\\\\\\":198,\\\\\\\"_22\\\\\\\":199,\\\\\\\"_24\\\\\\\":200,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":201},{\\\\\\\"_18\\\\\\\":3,\\\\\\\"_169\\\\\\\":10},\\\\\\\"file-conventions/root.md\\\\\\\",\\\\\\\"file-conventions/root\\\\\\\",[],{\\\\\\\"_16\\\\\\\":203,\\\\\\\"_22\\\\\\\":205,\\\\\\\"_24\\\\\\\":206,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":207},{\\\\\\\"_18\\\\\\\":204},\\\\\\\"Route File Naming\\\\\\\",\\\\\\\"file-conventions/routes.md\\\\\\\",\\\\\\\"file-conventions/routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":209,\\\\\\\"_22\\\\\\\":211,\\\\\\\"_24\\\\\\\":212,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":213},{\\\\\\\"_18\\\\\\\":210},\\\\\\\"vite.config.ts\\\\\\\",\\\\\\\"file-conventions/vite-config.md\\\\\\\",\\\\\\\"file-conventions/vite-config\\\\\\\",[],{\\\\\\\"_16\\\\\\\":215,\\\\\\\"_22\\\\\\\":217,\\\\\\\"_24\\\\\\\":218,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":219},{\\\\\\\"_18\\\\\\\":216,\\\\\\\"_20\\\\\\\":55},\\\\\\\"Route Module\\\\\\\",\\\\\\\"route/index.md\\\\\\\",\\\\\\\"route\\\\\\\",[220,226,232,238,244,250,256,262,268,274,280,286],{\\\\\\\"_16\\\\\\\":221,\\\\\\\"_22\\\\\\\":223,\\\\\\\"_24\\\\\\\":224,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":225},{\\\\\\\"_18\\\\\\\":222},\\\\\\\"action\\\\\\\",\\\\\\\"route/action.md\\\\\\\",\\\\\\\"route/action\\\\\\\",[],{\\\\\\\"_16\\\\\\\":227,\\\\\\\"_22\\\\\\\":229,\\\\\\\"_24\\\\\\\":230,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":231},{\\\\\\\"_18\\\\\\\":228},\\\\\\\"clientAction\\\\\\\",\\\\\\\"route/client-action.md\\\\\\\",\\\\\\\"route/client-action\\\\\\\",[],{\\\\\\\"_16\\\\\\\":233,\\\\\\\"_22\\\\\\\":235,\\\\\\\"_24\\\\\\\":236,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":237},{\\\\\\\"_18\\\\\\\":234},\\\\\\\"clientLoader\\\\\\\",\\\\\\\"route/client-loader.md\\\\\\\",\\\\\\\"route/client-loader\\\\\\\",[],{\\\\\\\"_16\\\\\\\":239,\\\\\\\"_22\\\\\\\":241,\\\\\\\"_24\\\\\\\":242,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":243},{\\\\\\\"_18\\\\\\\":240},\\\\\\\"Component\\\\\\\",\\\\\\\"route/component.md\\\\\\\",\\\\\\\"route/component\\\\\\\",[],{\\\\\\\"_16\\\\\\\":245,\\\\\\\"_22\\\\\\\":247,\\\\\\\"_24\\\\\\\":248,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":249},{\\\\\\\"_18\\\\\\\":246},\\\\\\\"ErrorBoundary\\\\\\\",\\\\\\\"route/error-boundary.md\\\\\\\",\\\\\\\"route/error-boundary\\\\\\\",[],{\\\\\\\"_16\\\\\\\":251,\\\\\\\"_22\\\\\\\":253,\\\\\\\"_24\\\\\\\":254,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":255},{\\\\\\\"_18\\\\\\\":252},\\\\\\\"handle\\\\\\\",\\\\\\\"route/handle.md\\\\\\\",\\\\\\\"route/handle\\\\\\\",[],{\\\\\\\"_16\\\\\\\":257,\\\\\\\"_22\\\\\\\":259,\\\\\\\"_24\\\\\\\":260,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":261},{\\\\\\\"_18\\\\\\\":258},\\\\\\\"headers\\\\\\\",\\\\\\\"route/headers.md\\\\\\\",\\\\\\\"route/headers\\\\\\\",[],{\\\\\\\"_16\\\\\\\":263,\\\\\\\"_22\\\\\\\":265,\\\\\\\"_24\\\\\\\":266,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":267},{\\\\\\\"_18\\\\\\\":264},\\\\\\\"HydrateFallback\\\\\\\",\\\\\\\"route/hydrate-fallback.md\\\\\\\",\\\\\\\"route/hydrate-fallback\\\\\\\",[],{\\\\\\\"_16\\\\\\\":269,\\\\\\\"_22\\\\\\\":271,\\\\\\\"_24\\\\\\\":272,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":273},{\\\\\\\"_18\\\\\\\":270},\\\\\\\"links\\\\\\\",\\\\\\\"route/links.md\\\\\\\",\\\\\\\"route/links\\\\\\\",[],{\\\\\\\"_16\\\\\\\":275,\\\\\\\"_22\\\\\\\":277,\\\\\\\"_24\\\\\\\":278,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":279},{\\\\\\\"_18\\\\\\\":276},\\\\\\\"loader\\\\\\\",\\\\\\\"route/loader.md\\\\\\\",\\\\\\\"route/loader\\\\\\\",[],{\\\\\\\"_16\\\\\\\":281,\\\\\\\"_22\\\\\\\":283,\\\\\\\"_24\\\\\\\":284,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":285},{\\\\\\\"_18\\\\\\\":282},\\\\\\\"meta\\\\\\\",\\\\\\\"route/meta.md\\\\\\\",\\\\\\\"route/meta\\\\\\\",[],{\\\\\\\"_16\\\\\\\":287,\\\\\\\"_22\\\\\\\":289,\\\\\\\"_24\\\\\\\":290,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":291},{\\\\\\\"_18\\\\\\\":288},\\\\\\\"shouldRevalidate\\\\\\\",\\\\\\\"route/should-revalidate.md\\\\\\\",\\\\\\\"route/should-revalidate\\\\\\\",[],{\\\\\\\"_16\\\\\\\":293,\\\\\\\"_22\\\\\\\":295,\\\\\\\"_24\\\\\\\":296,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":297},{\\\\\\\"_18\\\\\\\":294,\\\\\\\"_20\\\\\\\":62},\\\\\\\"Components\\\\\\\",\\\\\\\"components/index.md\\\\\\\",\\\\\\\"components\\\\\\\",[298,304,310,316,322,328,334,340,346,352,358],{\\\\\\\"_16\\\\\\\":299,\\\\\\\"_22\\\\\\\":301,\\\\\\\"_24\\\\\\\":302,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":303},{\\\\\\\"_18\\\\\\\":300},\\\\\\\"Await\\\\\\\",\\\\\\\"components/await.md\\\\\\\",\\\\\\\"components/await\\\\\\\",[],{\\\\\\\"_16\\\\\\\":305,\\\\\\\"_22\\\\\\\":307,\\\\\\\"_24\\\\\\\":308,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":309},{\\\\\\\"_18\\\\\\\":306},\\\\\\\"Form\\\\\\\",\\\\\\\"components/form.md\\\\\\\",\\\\\\\"components/form\\\\\\\",[],{\\\\\\\"_16\\\\\\\":311,\\\\\\\"_22\\\\\\\":313,\\\\\\\"_24\\\\\\\":314,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":315},{\\\\\\\"_18\\\\\\\":312},\\\\\\\"Link\\\\\\\",\\\\\\\"components/link.md\\\\\\\",\\\\\\\"components/link\\\\\\\",[],{\\\\\\\"_16\\\\\\\":317,\\\\\\\"_22\\\\\\\":319,\\\\\\\"_24\\\\\\\":320,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":321},{\\\\\\\"_18\\\\\\\":318,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Links\\\\\\\",\\\\\\\"components/links.md\\\\\\\",\\\\\\\"components/links\\\\\\\",[],{\\\\\\\"_16\\\\\\\":323,\\\\\\\"_22\\\\\\\":325,\\\\\\\"_24\\\\\\\":326,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":327},{\\\\\\\"_18\\\\\\\":324,\\\\\\\"_169\\\\\\\":10},\\\\\\\"LiveReload\\\\\\\",\\\\\\\"components/live-reload.md\\\\\\\",\\\\\\\"components/live-reload\\\\\\\",[],{\\\\\\\"_16\\\\\\\":329,\\\\\\\"_22\\\\\\\":331,\\\\\\\"_24\\\\\\\":332,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":333},{\\\\\\\"_18\\\\\\\":330,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Meta\\\\\\\",\\\\\\\"components/meta.md\\\\\\\",\\\\\\\"components/meta\\\\\\\",[],{\\\\\\\"_16\\\\\\\":335,\\\\\\\"_22\\\\\\\":337,\\\\\\\"_24\\\\\\\":338,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":339},{\\\\\\\"_18\\\\\\\":336},\\\\\\\"NavLink\\\\\\\",\\\\\\\"components/nav-link.md\\\\\\\",\\\\\\\"components/nav-link\\\\\\\",[],{\\\\\\\"_16\\\\\\\":341,\\\\\\\"_22\\\\\\\":343,\\\\\\\"_24\\\\\\\":344,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":345},{\\\\\\\"_18\\\\\\\":342},\\\\\\\"Outlet\\\\\\\",\\\\\\\"components/outlet.md\\\\\\\",\\\\\\\"components/outlet\\\\\\\",[],{\\\\\\\"_16\\\\\\\":347,\\\\\\\"_22\\\\\\\":349,\\\\\\\"_24\\\\\\\":350,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":351},{\\\\\\\"_18\\\\\\\":348,\\\\\\\"_169\\\\\\\":10},\\\\\\\"PrefetchPageLinks\\\\\\\",\\\\\\\"components/prefetch-page-links.md\\\\\\\",\\\\\\\"components/prefetch-page-links\\\\\\\",[],{\\\\\\\"_16\\\\\\\":353,\\\\\\\"_22\\\\\\\":355,\\\\\\\"_24\\\\\\\":356,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":357},{\\\\\\\"_18\\\\\\\":354,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Scripts\\\\\\\",\\\\\\\"components/scripts.md\\\\\\\",\\\\\\\"components/scripts\\\\\\\",[],{\\\\\\\"_16\\\\\\\":359,\\\\\\\"_22\\\\\\\":361,\\\\\\\"_24\\\\\\\":362,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":363},{\\\\\\\"_18\\\\\\\":360},\\\\\\\"ScrollRestoration\\\\\\\",\\\\\\\"components/scroll-restoration.md\\\\\\\",\\\\\\\"components/scroll-restoration\\\\\\\",[],{\\\\\\\"_16\\\\\\\":365,\\\\\\\"_22\\\\\\\":367,\\\\\\\"_24\\\\\\\":368,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":369},{\\\\\\\"_18\\\\\\\":366,\\\\\\\"_20\\\\\\\":111},\\\\\\\"Hooks\\\\\\\",\\\\\\\"hooks/index.md\\\\\\\",\\\\\\\"hooks\\\\\\\",[370,376,383,389,395,401,407,413,419,425,431,437,443,449,455,461,467,473,479,485,491,497,503,509,515,521],{\\\\\\\"_16\\\\\\\":371,\\\\\\\"_22\\\\\\\":373,\\\\\\\"_24\\\\\\\":374,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":375},{\\\\\\\"_18\\\\\\\":372,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useActionData\\\\\\\",\\\\\\\"hooks/use-action-data.md\\\\\\\",\\\\\\\"hooks/use-action-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":377,\\\\\\\"_22\\\\\\\":380,\\\\\\\"_24\\\\\\\":381,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":382},{\\\\\\\"_18\\\\\\\":378,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useAsyncError\\\\\\\",\\\\\\\"new\\\\\\\",\\\\\\\"hooks/use-async-error.md\\\\\\\",\\\\\\\"hooks/use-async-error\\\\\\\",[],{\\\\\\\"_16\\\\\\\":384,\\\\\\\"_22\\\\\\\":386,\\\\\\\"_24\\\\\\\":387,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":388},{\\\\\\\"_18\\\\\\\":385,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useAsyncValue\\\\\\\",\\\\\\\"hooks/use-async-value.md\\\\\\\",\\\\\\\"hooks/use-async-value\\\\\\\",[],{\\\\\\\"_16\\\\\\\":390,\\\\\\\"_22\\\\\\\":392,\\\\\\\"_24\\\\\\\":393,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":394},{\\\\\\\"_18\\\\\\\":391,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useBeforeUnload\\\\\\\",\\\\\\\"hooks/use-before-unload.md\\\\\\\",\\\\\\\"hooks/use-before-unload\\\\\\\",[],{\\\\\\\"_16\\\\\\\":396,\\\\\\\"_22\\\\\\\":398,\\\\\\\"_24\\\\\\\":399,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":400},{\\\\\\\"_18\\\\\\\":397},\\\\\\\"useBlocker\\\\\\\",\\\\\\\"hooks/use-blocker.md\\\\\\\",\\\\\\\"hooks/use-blocker\\\\\\\",[],{\\\\\\\"_16\\\\\\\":402,\\\\\\\"_22\\\\\\\":404,\\\\\\\"_24\\\\\\\":405,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":406},{\\\\\\\"_18\\\\\\\":403},\\\\\\\"useFetcher\\\\\\\",\\\\\\\"hooks/use-fetcher.md\\\\\\\",\\\\\\\"hooks/use-fetcher\\\\\\\",[],{\\\\\\\"_16\\\\\\\":408,\\\\\\\"_22\\\\\\\":410,\\\\\\\"_24\\\\\\\":411,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":412},{\\\\\\\"_18\\\\\\\":409,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useFetchers\\\\\\\",\\\\\\\"hooks/use-fetchers.md\\\\\\\",\\\\\\\"hooks/use-fetchers\\\\\\\",[],{\\\\\\\"_16\\\\\\\":414,\\\\\\\"_22\\\\\\\":416,\\\\\\\"_24\\\\\\\":417,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":418},{\\\\\\\"_18\\\\\\\":415},\\\\\\\"useFormAction\\\\\\\",\\\\\\\"hooks/use-form-action.md\\\\\\\",\\\\\\\"hooks/use-form-action\\\\\\\",[],{\\\\\\\"_16\\\\\\\":420,\\\\\\\"_22\\\\\\\":422,\\\\\\\"_24\\\\\\\":423,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":424},{\\\\\\\"_18\\\\\\\":421},\\\\\\\"useHref\\\\\\\",\\\\\\\"hooks/use-href.md\\\\\\\",\\\\\\\"hooks/use-href\\\\\\\",[],{\\\\\\\"_16\\\\\\\":426,\\\\\\\"_22\\\\\\\":428,\\\\\\\"_24\\\\\\\":429,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":430},{\\\\\\\"_18\\\\\\\":427},\\\\\\\"useLoaderData\\\\\\\",\\\\\\\"hooks/use-loader-data.md\\\\\\\",\\\\\\\"hooks/use-loader-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":432,\\\\\\\"_22\\\\\\\":434,\\\\\\\"_24\\\\\\\":435,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":436},{\\\\\\\"_18\\\\\\\":433},\\\\\\\"useLocation\\\\\\\",\\\\\\\"hooks/use-location.md\\\\\\\",\\\\\\\"hooks/use-location\\\\\\\",[],{\\\\\\\"_16\\\\\\\":438,\\\\\\\"_22\\\\\\\":440,\\\\\\\"_24\\\\\\\":441,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":442},{\\\\\\\"_18\\\\\\\":439,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useMatches\\\\\\\",\\\\\\\"hooks/use-matches.md\\\\\\\",\\\\\\\"hooks/use-matches\\\\\\\",[],{\\\\\\\"_16\\\\\\\":444,\\\\\\\"_22\\\\\\\":446,\\\\\\\"_24\\\\\\\":447,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":448},{\\\\\\\"_18\\\\\\\":445},\\\\\\\"useNavigate\\\\\\\",\\\\\\\"hooks/use-navigate.md\\\\\\\",\\\\\\\"hooks/use-navigate\\\\\\\",[],{\\\\\\\"_16\\\\\\\":450,\\\\\\\"_22\\\\\\\":452,\\\\\\\"_24\\\\\\\":453,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":454},{\\\\\\\"_18\\\\\\\":451},\\\\\\\"useNavigation\\\\\\\",\\\\\\\"hooks/use-navigation.md\\\\\\\",\\\\\\\"hooks/use-navigation\\\\\\\",[],{\\\\\\\"_16\\\\\\\":456,\\\\\\\"_22\\\\\\\":458,\\\\\\\"_24\\\\\\\":459,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":460},{\\\\\\\"_18\\\\\\\":457},\\\\\\\"useNavigationType\\\\\\\",\\\\\\\"hooks/use-navigation-type.md\\\\\\\",\\\\\\\"hooks/use-navigation-type\\\\\\\",[],{\\\\\\\"_16\\\\\\\":462,\\\\\\\"_22\\\\\\\":464,\\\\\\\"_24\\\\\\\":465,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":466},{\\\\\\\"_18\\\\\\\":463},\\\\\\\"useOutlet\\\\\\\",\\\\\\\"hooks/use-outlet.md\\\\\\\",\\\\\\\"hooks/use-outlet\\\\\\\",[],{\\\\\\\"_16\\\\\\\":468,\\\\\\\"_22\\\\\\\":470,\\\\\\\"_24\\\\\\\":471,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":472},{\\\\\\\"_18\\\\\\\":469},\\\\\\\"useOutletContext\\\\\\\",\\\\\\\"hooks/use-outlet-context.md\\\\\\\",\\\\\\\"hooks/use-outlet-context\\\\\\\",[],{\\\\\\\"_16\\\\\\\":474,\\\\\\\"_22\\\\\\\":476,\\\\\\\"_24\\\\\\\":477,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":478},{\\\\\\\"_18\\\\\\\":475},\\\\\\\"useParams\\\\\\\",\\\\\\\"hooks/use-params.md\\\\\\\",\\\\\\\"hooks/use-params\\\\\\\",[],{\\\\\\\"_16\\\\\\\":480,\\\\\\\"_22\\\\\\\":482,\\\\\\\"_24\\\\\\\":483,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":484},{\\\\\\\"_18\\\\\\\":481},\\\\\\\"unstable_usePrompt\\\\\\\",\\\\\\\"hooks/use-prompt.md\\\\\\\",\\\\\\\"hooks/use-prompt\\\\\\\",[],{\\\\\\\"_16\\\\\\\":486,\\\\\\\"_22\\\\\\\":488,\\\\\\\"_24\\\\\\\":489,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":490},{\\\\\\\"_18\\\\\\\":487},\\\\\\\"useResolvedPath\\\\\\\",\\\\\\\"hooks/use-resolved-path.md\\\\\\\",\\\\\\\"hooks/use-resolved-path\\\\\\\",[],{\\\\\\\"_16\\\\\\\":492,\\\\\\\"_22\\\\\\\":494,\\\\\\\"_24\\\\\\\":495,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":496},{\\\\\\\"_18\\\\\\\":493,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useRevalidator\\\\\\\",\\\\\\\"hooks/use-revalidator.md\\\\\\\",\\\\\\\"hooks/use-revalidator\\\\\\\",[],{\\\\\\\"_16\\\\\\\":498,\\\\\\\"_22\\\\\\\":500,\\\\\\\"_24\\\\\\\":501,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":502},{\\\\\\\"_18\\\\\\\":499,\\\\\\\"_379\\\\\\\":34},\\\\\\\"useRouteError\\\\\\\",\\\\\\\"hooks/use-route-error.md\\\\\\\",\\\\\\\"hooks/use-route-error\\\\\\\",[],{\\\\\\\"_16\\\\\\\":504,\\\\\\\"_22\\\\\\\":506,\\\\\\\"_24\\\\\\\":507,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":508},{\\\\\\\"_18\\\\\\\":505,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useRouteLoaderData\\\\\\\",\\\\\\\"hooks/use-route-loader-data.md\\\\\\\",\\\\\\\"hooks/use-route-loader-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":510,\\\\\\\"_22\\\\\\\":512,\\\\\\\"_24\\\\\\\":513,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":514},{\\\\\\\"_18\\\\\\\":511},\\\\\\\"useSearchParams\\\\\\\",\\\\\\\"hooks/use-search-params.md\\\\\\\",\\\\\\\"hooks/use-search-params\\\\\\\",[],{\\\\\\\"_16\\\\\\\":516,\\\\\\\"_22\\\\\\\":518,\\\\\\\"_24\\\\\\\":519,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":520},{\\\\\\\"_18\\\\\\\":517},\\\\\\\"useSubmit\\\\\\\",\\\\\\\"hooks/use-submit.md\\\\\\\",\\\\\\\"hooks/use-submit\\\\\\\",[],{\\\\\\\"_16\\\\\\\":522,\\\\\\\"_22\\\\\\\":524,\\\\\\\"_24\\\\\\\":525,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":526},{\\\\\\\"_18\\\\\\\":523,\\\\\\\"_169\\\\\\\":10},\\\\\\\"useViewTransitionState\\\\\\\",\\\\\\\"hooks/use-view-transition-state.md\\\\\\\",\\\\\\\"hooks/use-view-transition-state\\\\\\\",[],{\\\\\\\"_16\\\\\\\":528,\\\\\\\"_22\\\\\\\":530,\\\\\\\"_24\\\\\\\":531,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":532},{\\\\\\\"_18\\\\\\\":529,\\\\\\\"_20\\\\\\\":111},\\\\\\\"Utilities\\\\\\\",\\\\\\\"utils/index.md\\\\\\\",\\\\\\\"utils\\\\\\\",[533,539,545,551,557,563,569,575,581,587,593,599,605],{\\\\\\\"_16\\\\\\\":534,\\\\\\\"_22\\\\\\\":536,\\\\\\\"_24\\\\\\\":537,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":538},{\\\\\\\"_18\\\\\\\":535},\\\\\\\"Cookies\\\\\\\",\\\\\\\"utils/cookies.md\\\\\\\",\\\\\\\"utils/cookies\\\\\\\",[],{\\\\\\\"_16\\\\\\\":540,\\\\\\\"_22\\\\\\\":542,\\\\\\\"_24\\\\\\\":543,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":544},{\\\\\\\"_18\\\\\\\":541},\\\\\\\"createRemixStub\\\\\\\",\\\\\\\"utils/create-remix-stub.md\\\\\\\",\\\\\\\"utils/create-remix-stub\\\\\\\",[],{\\\\\\\"_16\\\\\\\":546,\\\\\\\"_22\\\\\\\":548,\\\\\\\"_24\\\\\\\":549,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":550},{\\\\\\\"_18\\\\\\\":547,\\\\\\\"_169\\\\\\\":10},\\\\\\\"data\\\\\\\",\\\\\\\"utils/data.md\\\\\\\",\\\\\\\"utils/data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":552,\\\\\\\"_22\\\\\\\":554,\\\\\\\"_24\\\\\\\":555,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":556},{\\\\\\\"_18\\\\\\\":553,\\\\\\\"_169\\\\\\\":10},\\\\\\\"defer\\\\\\\",\\\\\\\"utils/defer.md\\\\\\\",\\\\\\\"utils/defer\\\\\\\",[],{\\\\\\\"_16\\\\\\\":558,\\\\\\\"_22\\\\\\\":560,\\\\\\\"_24\\\\\\\":561,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":562},{\\\\\\\"_18\\\\\\\":559,\\\\\\\"_169\\\\\\\":10},\\\\\\\"isRouteErrorResponse\\\\\\\",\\\\\\\"utils/is-route-error-response.md\\\\\\\",\\\\\\\"utils/is-route-error-response\\\\\\\",[],{\\\\\\\"_16\\\\\\\":564,\\\\\\\"_22\\\\\\\":566,\\\\\\\"_24\\\\\\\":567,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":568},{\\\\\\\"_18\\\\\\\":565,\\\\\\\"_169\\\\\\\":10},\\\\\\\"json\\\\\\\",\\\\\\\"utils/json.md\\\\\\\",\\\\\\\"utils/json\\\\\\\",[],{\\\\\\\"_16\\\\\\\":570,\\\\\\\"_22\\\\\\\":572,\\\\\\\"_24\\\\\\\":573,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":574},{\\\\\\\"_18\\\\\\\":571},\\\\\\\"unstable_parseMultipartFormData\\\\\\\",\\\\\\\"utils/parse-multipart-form-data.md\\\\\\\",\\\\\\\"utils/parse-multipart-form-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":576,\\\\\\\"_22\\\\\\\":578,\\\\\\\"_24\\\\\\\":579,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":580},{\\\\\\\"_18\\\\\\\":577,\\\\\\\"_169\\\\\\\":10},\\\\\\\"redirect\\\\\\\",\\\\\\\"utils/redirect.md\\\\\\\",\\\\\\\"utils/redirect\\\\\\\",[],{\\\\\\\"_16\\\\\\\":582,\\\\\\\"_22\\\\\\\":584,\\\\\\\"_24\\\\\\\":585,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":586},{\\\\\\\"_18\\\\\\\":583,\\\\\\\"_169\\\\\\\":10},\\\\\\\"redirectDocument\\\\\\\",\\\\\\\"utils/redirectDocument.md\\\\\\\",\\\\\\\"utils/redirectDocument\\\\\\\",[],{\\\\\\\"_16\\\\\\\":588,\\\\\\\"_22\\\\\\\":590,\\\\\\\"_24\\\\\\\":591,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":592},{\\\\\\\"_18\\\\\\\":589,\\\\\\\"_169\\\\\\\":10},\\\\\\\"replace\\\\\\\",\\\\\\\"utils/replace.md\\\\\\\",\\\\\\\"utils/replace\\\\\\\",[],{\\\\\\\"_16\\\\\\\":594,\\\\\\\"_22\\\\\\\":596,\\\\\\\"_24\\\\\\\":597,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":598},{\\\\\\\"_18\\\\\\\":595},\\\\\\\"Sessions\\\\\\\",\\\\\\\"utils/sessions.md\\\\\\\",\\\\\\\"utils/sessions\\\\\\\",[],{\\\\\\\"_16\\\\\\\":600,\\\\\\\"_22\\\\\\\":602,\\\\\\\"_24\\\\\\\":603,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":604},{\\\\\\\"_18\\\\\\\":601,\\\\\\\"_169\\\\\\\":10},\\\\\\\"unstable_createFileUploadHandler\\\\\\\",\\\\\\\"utils/unstable-create-file-upload-handler.md\\\\\\\",\\\\\\\"utils/unstable-create-file-upload-handler\\\\\\\",[],{\\\\\\\"_16\\\\\\\":606,\\\\\\\"_22\\\\\\\":608,\\\\\\\"_24\\\\\\\":609,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":610},{\\\\\\\"_18\\\\\\\":607,\\\\\\\"_169\\\\\\\":10},\\\\\\\"unstable_createMemoryUploadHandler\\\\\\\",\\\\\\\"utils/unstable-create-memory-upload-handler.md\\\\\\\",\\\\\\\"utils/unstable-create-memory-upload-handler\\\\\\\",[],{\\\\\\\"_16\\\\\\\":612,\\\\\\\"_22\\\\\\\":614,\\\\\\\"_24\\\\\\\":615,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":616},{\\\\\\\"_18\\\\\\\":613,\\\\\\\"_20\\\\\\\":118},\\\\\\\"Styling\\\\\\\",\\\\\\\"styling/index.md\\\\\\\",\\\\\\\"styling\\\\\\\",[617,623,629,635,641,647,653,659],{\\\\\\\"_16\\\\\\\":618,\\\\\\\"_22\\\\\\\":620,\\\\\\\"_24\\\\\\\":621,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":622},{\\\\\\\"_18\\\\\\\":619},\\\\\\\"CSS Bundling\\\\\\\",\\\\\\\"styling/bundling.md\\\\\\\",\\\\\\\"styling/bundling\\\\\\\",[],{\\\\\\\"_16\\\\\\\":624,\\\\\\\"_22\\\\\\\":626,\\\\\\\"_24\\\\\\\":627,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":628},{\\\\\\\"_18\\\\\\\":625},\\\\\\\"Regular CSS\\\\\\\",\\\\\\\"styling/css.md\\\\\\\",\\\\\\\"styling/css\\\\\\\",[],{\\\\\\\"_16\\\\\\\":630,\\\\\\\"_22\\\\\\\":632,\\\\\\\"_24\\\\\\\":633,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":634},{\\\\\\\"_18\\\\\\\":631},\\\\\\\"CSS Imports\\\\\\\",\\\\\\\"styling/css-imports.md\\\\\\\",\\\\\\\"styling/css-imports\\\\\\\",[],{\\\\\\\"_16\\\\\\\":636,\\\\\\\"_22\\\\\\\":638,\\\\\\\"_24\\\\\\\":639,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":640},{\\\\\\\"_18\\\\\\\":637},\\\\\\\"CSS in JS\\\\\\\",\\\\\\\"styling/css-in-js.md\\\\\\\",\\\\\\\"styling/css-in-js\\\\\\\",[],{\\\\\\\"_16\\\\\\\":642,\\\\\\\"_22\\\\\\\":644,\\\\\\\"_24\\\\\\\":645,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":646},{\\\\\\\"_18\\\\\\\":643},\\\\\\\"CSS Modules\\\\\\\",\\\\\\\"styling/css-modules.md\\\\\\\",\\\\\\\"styling/css-modules\\\\\\\",[],{\\\\\\\"_16\\\\\\\":648,\\\\\\\"_22\\\\\\\":650,\\\\\\\"_24\\\\\\\":651,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":652},{\\\\\\\"_18\\\\\\\":649},\\\\\\\"PostCSS\\\\\\\",\\\\\\\"styling/postcss.md\\\\\\\",\\\\\\\"styling/postcss\\\\\\\",[],{\\\\\\\"_16\\\\\\\":654,\\\\\\\"_22\\\\\\\":656,\\\\\\\"_24\\\\\\\":657,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":658},{\\\\\\\"_18\\\\\\\":655},\\\\\\\"Tailwind\\\\\\\",\\\\\\\"styling/tailwind.md\\\\\\\",\\\\\\\"styling/tailwind\\\\\\\",[],{\\\\\\\"_16\\\\\\\":660,\\\\\\\"_22\\\\\\\":662,\\\\\\\"_24\\\\\\\":663,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":664},{\\\\\\\"_18\\\\\\\":661},\\\\\\\"Vanilla Extract\\\\\\\",\\\\\\\"styling/vanilla-extract.md\\\\\\\",\\\\\\\"styling/vanilla-extract\\\\\\\",[],{\\\\\\\"_16\\\\\\\":666,\\\\\\\"_22\\\\\\\":668,\\\\\\\"_24\\\\\\\":669,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":670},{\\\\\\\"_18\\\\\\\":667,\\\\\\\"_20\\\\\\\":132},\\\\\\\"Other API\\\\\\\",\\\\\\\"other-api/index.md\\\\\\\",\\\\\\\"other-api\\\\\\\",[671,677,683,689,695,701],{\\\\\\\"_16\\\\\\\":672,\\\\\\\"_22\\\\\\\":674,\\\\\\\"_24\\\\\\\":675,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":676},{\\\\\\\"_18\\\\\\\":673,\\\\\\\"_20\\\\\\\":39,\\\\\\\"_379\\\\\\\":34},\\\\\\\"@remix-run/dev CLI\\\\\\\",\\\\\\\"other-api/dev.md\\\\\\\",\\\\\\\"other-api/dev\\\\\\\",[],{\\\\\\\"_16\\\\\\\":678,\\\\\\\"_22\\\\\\\":680,\\\\\\\"_24\\\\\\\":681,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":682},{\\\\\\\"_18\\\\\\\":679,\\\\\\\"_20\\\\\\\":46},\\\\\\\"@remix-run/{adapter}\\\\\\\",\\\\\\\"other-api/adapter.md\\\\\\\",\\\\\\\"other-api/adapter\\\\\\\",[],{\\\\\\\"_16\\\\\\\":684,\\\\\\\"_22\\\\\\\":686,\\\\\\\"_24\\\\\\\":687,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":688},{\\\\\\\"_18\\\\\\\":685,\\\\\\\"_20\\\\\\\":46},\\\\\\\"@remix-run/serve\\\\\\\",\\\\\\\"other-api/serve.md\\\\\\\",\\\\\\\"other-api/serve\\\\\\\",[],{\\\\\\\"_16\\\\\\\":690,\\\\\\\"_22\\\\\\\":692,\\\\\\\"_24\\\\\\\":693,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":694},{\\\\\\\"_18\\\\\\\":691},\\\\\\\"create-remix (CLI)\\\\\\\",\\\\\\\"other-api/create-remix.md\\\\\\\",\\\\\\\"other-api/create-remix\\\\\\\",[],{\\\\\\\"_16\\\\\\\":696,\\\\\\\"_22\\\\\\\":698,\\\\\\\"_24\\\\\\\":699,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":700},{\\\\\\\"_18\\\\\\\":697},\\\\\\\"@remix-run/node\\\\\\\",\\\\\\\"other-api/node.md\\\\\\\",\\\\\\\"other-api/node\\\\\\\",[],{\\\\\\\"_16\\\\\\\":702,\\\\\\\"_22\\\\\\\":704,\\\\\\\"_24\\\\\\\":705,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":706},{\\\\\\\"_18\\\\\\\":703},\\\\\\\"@remix-run/testing\\\\\\\",\\\\\\\"other-api/testing.md\\\\\\\",\\\\\\\"other-api/testing\\\\\\\",[],{\\\\\\\"_16\\\\\\\":708,\\\\\\\"_22\\\\\\\":711,\\\\\\\"_24\\\\\\\":712,\\\\\\\"_26\\\\\\\":10,\\\\\\\"_27\\\\\\\":713},{\\\\\\\"_18\\\\\\\":709,\\\\\\\"_20\\\\\\\":710},\\\\\\\"Guides\\\\\\\",10,\\\\\\\"guides/index.md\\\\\\\",\\\\\\\"guides\\\\\\\",[714,720,726,732,738,744,750,756,762,769,775,782,788,794,800,806,812,818,825,831,837,843,849,855,861,867,874,881,887,893,899,905,911,917,923,930,937,943],{\\\\\\\"_16\\\\\\\":715,\\\\\\\"_22\\\\\\\":717,\\\\\\\"_24\\\\\\\":718,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":719},{\\\\\\\"_18\\\\\\\":716},\\\\\\\"Accessibility\\\\\\\",\\\\\\\"guides/accessibility.md\\\\\\\",\\\\\\\"guides/accessibility\\\\\\\",[],{\\\\\\\"_16\\\\\\\":721,\\\\\\\"_22\\\\\\\":723,\\\\\\\"_24\\\\\\\":724,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":725},{\\\\\\\"_18\\\\\\\":722},\\\\\\\"Development Strategy\\\\\\\",\\\\\\\"guides/api-development-strategy.md\\\\\\\",\\\\\\\"guides/api-development-strategy\\\\\\\",[],{\\\\\\\"_16\\\\\\\":727,\\\\\\\"_22\\\\\\\":729,\\\\\\\"_24\\\\\\\":730,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":731},{\\\\\\\"_18\\\\\\\":728},\\\\\\\"API Routes\\\\\\\",\\\\\\\"guides/api-routes.md\\\\\\\",\\\\\\\"guides/api-routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":733,\\\\\\\"_22\\\\\\\":735,\\\\\\\"_24\\\\\\\":736,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":737},{\\\\\\\"_18\\\\\\\":734,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Backend For Frontend\\\\\\\",\\\\\\\"guides/bff.md\\\\\\\",\\\\\\\"guides/bff\\\\\\\",[],{\\\\\\\"_16\\\\\\\":739,\\\\\\\"_22\\\\\\\":741,\\\\\\\"_24\\\\\\\":742,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":743},{\\\\\\\"_18\\\\\\\":740},\\\\\\\"Breadcrumbs Guide\\\\\\\",\\\\\\\"guides/breadcrumbs.md\\\\\\\",\\\\\\\"guides/breadcrumbs\\\\\\\",[],{\\\\\\\"_16\\\\\\\":745,\\\\\\\"_22\\\\\\\":747,\\\\\\\"_24\\\\\\\":748,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":749},{\\\\\\\"_18\\\\\\\":746},\\\\\\\"Browser Support\\\\\\\",\\\\\\\"guides/browser-support.md\\\\\\\",\\\\\\\"guides/browser-support\\\\\\\",[],{\\\\\\\"_16\\\\\\\":751,\\\\\\\"_22\\\\\\\":753,\\\\\\\"_24\\\\\\\":754,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":755},{\\\\\\\"_18\\\\\\\":752},\\\\\\\"Client Data\\\\\\\",\\\\\\\"guides/client-data.md\\\\\\\",\\\\\\\"guides/client-data\\\\\\\",[],{\\\\\\\"_16\\\\\\\":757,\\\\\\\"_22\\\\\\\":759,\\\\\\\"_24\\\\\\\":760,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":761},{\\\\\\\"_18\\\\\\\":758},\\\\\\\"Module Constraints\\\\\\\",\\\\\\\"guides/constraints.md\\\\\\\",\\\\\\\"guides/constraints\\\\\\\",[],{\\\\\\\"_16\\\\\\\":763,\\\\\\\"_22\\\\\\\":766,\\\\\\\"_24\\\\\\\":767,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":768},{\\\\\\\"_18\\\\\\\":764,\\\\\\\"_53\\\\\\\":765},\\\\\\\"Contributing\\\\\\\",\\\\\\\"Thank you for contributing to Remix! Here's everything you need to know before you open a pull request.\\\\\\\",\\\\\\\"guides/contributing.md\\\\\\\",\\\\\\\"guides/contributing\\\\\\\",[],{\\\\\\\"_16\\\\\\\":770,\\\\\\\"_22\\\\\\\":772,\\\\\\\"_24\\\\\\\":773,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":774},{\\\\\\\"_18\\\\\\\":771},\\\\\\\"CSS Files\\\\\\\",\\\\\\\"guides/css-files.md\\\\\\\",\\\\\\\"guides/css-files\\\\\\\",[],{\\\\\\\"_16\\\\\\\":776,\\\\\\\"_22\\\\\\\":779,\\\\\\\"_24\\\\\\\":780,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":781},{\\\\\\\"_18\\\\\\\":777,\\\\\\\"_53\\\\\\\":778},\\\\\\\"Data Loading\\\\\\\",\\\\\\\"One of the primary features of Remix is simplifying interactions with the server to get data into components. This document will help you get the most out of data loading in Remix.\\\\\\\",\\\\\\\"guides/data-loading.md\\\\\\\",\\\\\\\"guides/data-loading\\\\\\\",[],{\\\\\\\"_16\\\\\\\":783,\\\\\\\"_22\\\\\\\":785,\\\\\\\"_24\\\\\\\":786,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":787},{\\\\\\\"_18\\\\\\\":784},\\\\\\\"Data Writes\\\\\\\",\\\\\\\"guides/data-writes.md\\\\\\\",\\\\\\\"guides/data-writes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":789,\\\\\\\"_22\\\\\\\":791,\\\\\\\"_24\\\\\\\":792,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":793},{\\\\\\\"_18\\\\\\\":790},\\\\\\\"Dependency optimization\\\\\\\",\\\\\\\"guides/dependency-optimization.md\\\\\\\",\\\\\\\"guides/dependency-optimization\\\\\\\",[],{\\\\\\\"_16\\\\\\\":795,\\\\\\\"_22\\\\\\\":797,\\\\\\\"_24\\\\\\\":798,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":799},{\\\\\\\"_18\\\\\\\":796,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Deployment\\\\\\\",\\\\\\\"guides/deployment.md\\\\\\\",\\\\\\\"guides/deployment\\\\\\\",[],{\\\\\\\"_16\\\\\\\":801,\\\\\\\"_22\\\\\\\":803,\\\\\\\"_24\\\\\\\":804,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":805},{\\\\\\\"_18\\\\\\\":802,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Disabling JavaScript\\\\\\\",\\\\\\\"guides/disabling-javascript.md\\\\\\\",\\\\\\\"guides/disabling-javascript\\\\\\\",[],{\\\\\\\"_16\\\\\\\":807,\\\\\\\"_22\\\\\\\":809,\\\\\\\"_24\\\\\\\":810,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":811},{\\\\\\\"_18\\\\\\\":808},\\\\\\\"Environment Variables\\\\\\\",\\\\\\\"guides/envvars.md\\\\\\\",\\\\\\\"guides/envvars\\\\\\\",[],{\\\\\\\"_16\\\\\\\":813,\\\\\\\"_22\\\\\\\":815,\\\\\\\"_24\\\\\\\":816,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":817},{\\\\\\\"_18\\\\\\\":814},\\\\\\\"Error Handling\\\\\\\",\\\\\\\"guides/errors.md\\\\\\\",\\\\\\\"guides/errors\\\\\\\",[],{\\\\\\\"_16\\\\\\\":819,\\\\\\\"_22\\\\\\\":822,\\\\\\\"_24\\\\\\\":823,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":824},{\\\\\\\"_18\\\\\\\":820,\\\\\\\"_53\\\\\\\":821},\\\\\\\"FAQs\\\\\\\",\\\\\\\"Frequently Asked Questions about Remix\\\\\\\",\\\\\\\"guides/faq.md\\\\\\\",\\\\\\\"guides/faq\\\\\\\",[],{\\\\\\\"_16\\\\\\\":826,\\\\\\\"_22\\\\\\\":828,\\\\\\\"_24\\\\\\\":829,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":830},{\\\\\\\"_18\\\\\\\":827},\\\\\\\"File Uploads\\\\\\\",\\\\\\\"guides/file-uploads.md\\\\\\\",\\\\\\\"guides/file-uploads\\\\\\\",[],{\\\\\\\"_16\\\\\\\":832,\\\\\\\"_22\\\\\\\":834,\\\\\\\"_24\\\\\\\":835,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":836},{\\\\\\\"_18\\\\\\\":833},\\\\\\\"Form Validation\\\\\\\",\\\\\\\"guides/form-validation.md\\\\\\\",\\\\\\\"guides/form-validation\\\\\\\",[],{\\\\\\\"_16\\\\\\\":838,\\\\\\\"_22\\\\\\\":840,\\\\\\\"_24\\\\\\\":841,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":842},{\\\\\\\"_18\\\\\\\":839},\\\\\\\"Gotchas\\\\\\\",\\\\\\\"guides/gotchas.md\\\\\\\",\\\\\\\"guides/gotchas\\\\\\\",[],{\\\\\\\"_16\\\\\\\":844,\\\\\\\"_22\\\\\\\":846,\\\\\\\"_24\\\\\\\":847,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":848},{\\\\\\\"_18\\\\\\\":845,\\\\\\\"_169\\\\\\\":10},\\\\\\\"Index Query Param\\\\\\\",\\\\\\\"guides/index-query-param.md\\\\\\\",\\\\\\\"guides/index-query-param\\\\\\\",[],{\\\\\\\"_16\\\\\\\":850,\\\\\\\"_22\\\\\\\":852,\\\\\\\"_24\\\\\\\":853,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":854},{\\\\\\\"_18\\\\\\\":851},\\\\\\\"Lazy Route Discovery\\\\\\\",\\\\\\\"guides/lazy-route-discovery.md\\\\\\\",\\\\\\\"guides/lazy-route-discovery\\\\\\\",[],{\\\\\\\"_16\\\\\\\":856,\\\\\\\"_22\\\\\\\":858,\\\\\\\"_24\\\\\\\":859,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":860},{\\\\\\\"_18\\\\\\\":857},\\\\\\\"Local TLS\\\\\\\",\\\\\\\"guides/local-tls.md\\\\\\\",\\\\\\\"guides/local-tls\\\\\\\",[],{\\\\\\\"_16\\\\\\\":862,\\\\\\\"_22\\\\\\\":864,\\\\\\\"_24\\\\\\\":865,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":866},{\\\\\\\"_18\\\\\\\":863},\\\\\\\"Manual Dev Server\\\\\\\",\\\\\\\"guides/manual-mode.md\\\\\\\",\\\\\\\"guides/manual-mode\\\\\\\",[],{\\\\\\\"_16\\\\\\\":868,\\\\\\\"_22\\\\\\\":871,\\\\\\\"_24\\\\\\\":872,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":873},{\\\\\\\"_18\\\\\\\":869,\\\\\\\"_53\\\\\\\":870},\\\\\\\"MDX\\\\\\\",\\\\\\\"Remix makes integrating MDX into your project a breeze with built in routes and \\\\\\\\\\\\\\\"import\\\\\\\\\\\\\\\" support.\\\\\\\",\\\\\\\"guides/mdx.md\\\\\\\",\\\\\\\"guides/mdx\\\\\\\",[],{\\\\\\\"_16\\\\\\\":875,\\\\\\\"_22\\\\\\\":878,\\\\\\\"_24\\\\\\\":879,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":880},{\\\\\\\"_18\\\\\\\":876,\\\\\\\"_53\\\\\\\":877},\\\\\\\"Migrating from React Router\\\\\\\",\\\\\\\"Migrating your React Router app to Remix can be done all at once or in stages. This guide will walk you through an iterative approach to get your app running quickly.\\\\\\\",\\\\\\\"guides/migrating-react-router-app.md\\\\\\\",\\\\\\\"guides/migrating-react-router-app\\\\\\\",[],{\\\\\\\"_16\\\\\\\":882,\\\\\\\"_22\\\\\\\":884,\\\\\\\"_24\\\\\\\":885,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":886},{\\\\\\\"_18\\\\\\\":883},\\\\\\\"Not Found Handling\\\\\\\",\\\\\\\"guides/not-found.md\\\\\\\",\\\\\\\"guides/not-found\\\\\\\",[],{\\\\\\\"_16\\\\\\\":888,\\\\\\\"_22\\\\\\\":890,\\\\\\\"_24\\\\\\\":891,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":892},{\\\\\\\"_18\\\\\\\":889},\\\\\\\"Performance\\\\\\\",\\\\\\\"guides/performance.md\\\\\\\",\\\\\\\"guides/performance\\\\\\\",[],{\\\\\\\"_16\\\\\\\":894,\\\\\\\"_22\\\\\\\":896,\\\\\\\"_24\\\\\\\":897,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":898},{\\\\\\\"_18\\\\\\\":895},\\\\\\\"Presets\\\\\\\",\\\\\\\"guides/presets.md\\\\\\\",\\\\\\\"guides/presets\\\\\\\",[],{\\\\\\\"_16\\\\\\\":900,\\\\\\\"_22\\\\\\\":902,\\\\\\\"_24\\\\\\\":903,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":904},{\\\\\\\"_18\\\\\\\":901},\\\\\\\"Resource Routes\\\\\\\",\\\\\\\"guides/resource-routes.md\\\\\\\",\\\\\\\"guides/resource-routes\\\\\\\",[],{\\\\\\\"_16\\\\\\\":906,\\\\\\\"_22\\\\\\\":908,\\\\\\\"_24\\\\\\\":909,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":910},{\\\\\\\"_18\\\\\\\":907},\\\\\\\"Server Bundles\\\\\\\",\\\\\\\"guides/server-bundles.md\\\\\\\",\\\\\\\"guides/server-bundles\\\\\\\",[],{\\\\\\\"_16\\\\\\\":912,\\\\\\\"_22\\\\\\\":914,\\\\\\\"_24\\\\\\\":915,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":916},{\\\\\\\"_18\\\\\\\":913},\\\\\\\"Single Fetch\\\\\\\",\\\\\\\"guides/single-fetch.md\\\\\\\",\\\\\\\"guides/single-fetch\\\\\\\",[],{\\\\\\\"_16\\\\\\\":918,\\\\\\\"_22\\\\\\\":920,\\\\\\\"_24\\\\\\\":921,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":922},{\\\\\\\"_18\\\\\\\":919},\\\\\\\"SPA Mode\\\\\\\",\\\\\\\"guides/spa-mode.md\\\\\\\",\\\\\\\"guides/spa-mode\\\\\\\",[],{\\\\\\\"_16\\\\\\\":924,\\\\\\\"_22\\\\\\\":927,\\\\\\\"_24\\\\\\\":928,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":929},{\\\\\\\"_18\\\\\\\":925,\\\\\\\"_53\\\\\\\":926},\\\\\\\"Streaming\\\\\\\",\\\\\\\"When, why, and how to stream with React 18 and Remix's deferred API.\\\\\\\",\\\\\\\"guides/streaming.md\\\\\\\",\\\\\\\"guides/streaming\\\\\\\",[],{\\\\\\\"_16\\\\\\\":931,\\\\\\\"_22\\\\\\\":934,\\\\\\\"_24\\\\\\\":935,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":936},{\\\\\\\"_18\\\\\\\":932,\\\\\\\"_53\\\\\\\":933},\\\\\\\"Templates\\\\\\\",\\\\\\\"The quickest way to get rocking and rolling with Remix\\\\\\\",\\\\\\\"guides/templates.md\\\\\\\",\\\\\\\"guides/templates\\\\\\\",[],{\\\\\\\"_16\\\\\\\":938,\\\\\\\"_22\\\\\\\":940,\\\\\\\"_24\\\\\\\":941,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":942},{\\\\\\\"_18\\\\\\\":939,\\\\\\\"_169\\\\\\\":10},\\\\\\\"TypeScript\\\\\\\",\\\\\\\"guides/typescript.md\\\\\\\",\\\\\\\"guides/typescript\\\\\\\",[],{\\\\\\\"_16\\\\\\\":944,\\\\\\\"_22\\\\\\\":946,\\\\\\\"_24\\\\\\\":947,\\\\\\\"_26\\\\\\\":34,\\\\\\\"_27\\\\\\\":948},{\\\\\\\"_18\\\\\\\":945},\\\\\\\"Vite\\\\\\\",\\\\\\\"guides/vite.md\\\\\\\",\\\\\\\"guides/vite\\\\\\\",[],\\\\\\\"routes/docs.$\\\\\\\",{\\\\\\\"_951\\\\\\\":952},\\\\\\\"doc\\\\\\\",{\\\\\\\"_16\\\\\\\":953,\\\\\\\"_22\\\\\\\":954,\\\\\\\"_955\\\\\\\":956,\\\\\\\"_24\\\\\\\":957,\\\\\\\"_958\\\\\\\":959,\\\\\\\"_27\\\\\\\":960},{\\\\\\\"_18\\\\\\\":175,\\\\\\\"_169\\\\\\\":10},\\\\\\\"docs/file-conventions/-server.md\\\\\\\",\\\\\\\"html\\\\\\\",\\\\\\\"\\\\u003ch1 id=\\\\\\\\\\\\\\\"server-modules\\\\\\\\\\\\\\\"\\\\u003e\\\\u003ca aria-hidden=\\\\\\\\\\\\\\\"true\\\\\\\\\\\\\\\" tabindex=\\\\\\\\\\\\\\\"-1\\\\\\\\\\\\\\\" href=\\\\\\\\\\\\\\\"#server-modules\\\\\\\\\\\\\\\"\\\\u003e\\\\u003cspan class=\\\\\\\\\\\\\\\"icon icon-link\\\\\\\\\\\\\\\"\\\\u003e\\\\u003c/span\\\\u003e\\\\u003c/a\\\\u003e\\\\u003ccode\\\\u003e.server\\\\u003c/code\\\\u003e modules\\\\u003c/h1\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eWhile not strictly necessary, \\\\u003ccode\\\\u003e.server\\\\u003c/code\\\\u003e modules are a good way to explicitly mark entire modules as server-only.\\\\\\\\nThe build will fail if any code in a \\\\u003ccode\\\\u003e.server\\\\u003c/code\\\\u003e file or \\\\u003ccode\\\\u003e.server\\\\u003c/code\\\\u003e directory accidentally ends up in the client module graph.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cpre\\\\u003e\\\\u003ccode class=\\\\\\\\\\\\\\\"language-txt\\\\\\\\\\\\\\\"\\\\u003eapp\\\\\\\\n\u251c\u2500\u2500 .server \ud83d\udc48 marks all files in this directory as server-only\\\\\\\\n\u2502 \u251c\u2500\u2500 auth.ts\\\\\\\\n\u2502 \u2514\u2500\u2500 db.ts\\\\\\\\n\u251c\u2500\u2500 cms.server.ts \ud83d\udc48 marks this file as server-only\\\\\\\\n\u251c\u2500\u2500 root.tsx\\\\\\\\n\u2514\u2500\u2500 routes\\\\\\\\n \u2514\u2500\u2500 _index.tsx\\\\\\\\n\\\\u003c/code\\\\u003e\\\\u003c/pre\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003e\\\\u003ccode\\\\u003e.server\\\\u003c/code\\\\u003e modules must be within your Remix app directory.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003eRefer to the Route Module section in the sidebar for more information.\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003e\\\\u003cdocs-warning\\\\u003e\\\\u003ccode\\\\u003e.server\\\\u003c/code\\\\u003e directories are only supported when using \\\\u003ca href=\\\\\\\\\\\\\\\"../guides/vite\\\\\\\\\\\\\\\"\\\\u003eRemix Vite\\\\u003c/a\\\\u003e. The \\\\u003ca href=\\\\\\\\\\\\\\\"../guides/vite#classic-remix-compiler-vs-remix-vite\\\\\\\\\\\\\\\"\\\\u003eClassic Remix Compiler\\\\u003c/a\\\\u003e only supports \\\\u003ccode\\\\u003e.server\\\\u003c/code\\\\u003e files.\\\\u003c/docs-warning\\\\u003e\\\\u003c/p\\\\u003e\\\\\\\\n\\\\u003cp\\\\u003e\\\\u003cdocs-warning\\\\u003eWhen using the \\\\u003ca href=\\\\\\\\\\\\\\\"../guides/vite#classic-remix-compiler-vs-remix-vite\\\\\\\\\\\\\\\"\\\\u003eClassic Remix Compiler\\\\u003c/a\\\\u003e, \\\\u003ccode\\\\u003e.server\\\\u003c/code\\\\u003e modules are replaced with empty modules and will not result in a compilation error. Note that this can result in runtime errors.\\\\u003c/docs-warning\\\\u003e\\\\u003c/p\\\\u003e\\\\\\\",\\\\\\\"docs/file-conventions/-server\\\\\\\",\\\\\\\"headings\\\\\\\",[],[],\\\\\\\"actionData\\\\\\\",\\\\\\\"errors\\\\\\\"]\\\\n\\\");function $RC(a,b){a=document.getElementById(a);b=document.getElementById(b);b.parentNode.removeChild(b);if(a){a=a.previousSibling;var f=a.parentNode,c=a.nextSibling,e=0;do{if(c\\u0026\\u00268===c.nodeType){var d=c.data;if(\\\"/$\\\"===d)if(0===e)break;else e--;else\\\"$\\\"!==d\\u0026\\u0026\\\"$?\\\"!==d\\u0026\\u0026\\\"$!\\\"!==d||e++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;b.firstChild;)f.insertBefore(b.firstChild,c);a.data=\\\"$\\\";a._reactRetry\\u0026\\u0026a._reactRetry()}};$RC(\\\"B:0\\\",\\\"S:0\\\")window.__reactRouterContext.streamController.close();$RC(\\\"B:1\\\",\\\"S:1\\\")\","
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::internal/quality/plugins/go/analyzers/deadcode.go::7c6c69453a2ae395": {
|
|
"id": "boilerplate_duplication::internal/quality/plugins/go/analyzers/deadcode.go::7c6c69453a2ae395",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/plugins/go/analyzers/deadcode.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 10 lines): internal/quality/plugins/go/analyzers/deadcode.go:187",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 10,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/plugins/go/analyzers/deadcode.go",
|
|
"line": 187
|
|
}
|
|
],
|
|
"sample": [
|
|
"for _, imp := range node.Imports {",
|
|
"\t\tpkgPath := strings.Trim(imp.Path.Value, `\"`)",
|
|
"\t\tname := \"\"",
|
|
"\t\tif imp.Name != nil {"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:14:29+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::error_consistency::quality_detectors_silent_failure_paths::6d989853": {
|
|
"id": "review::.::holistic::error_consistency::quality_detectors_silent_failure_paths::6d989853",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Quality detectors silently skip failures in some paths but fail loudly in others",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"internal/quality/plugins/go/analyzers/test_coverage.go",
|
|
"internal/quality/plugins/go/analyzers/detectors.go"
|
|
],
|
|
"evidence": [
|
|
"`TestCoverageDetector.Detect` returns `nil, nil` when `go` is unavailable and when `coverage.out` is missing after test run, making tooling/environment failures indistinguishable from a clean run.",
|
|
"`LargeFileDetector.Detect` continues on `countLines` error and `GodStructDetector.analyzeFile` returns nil on parse error, suppressing scanner visibility into unreadable/unparseable files."
|
|
],
|
|
"suggestion": "Standardize detector contracts: return typed non-fatal diagnostics (or wrapped errors) for tool-missing/parse/read failures, and let scanner decide whether to downgrade to warnings instead of silently returning no findings.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:19:22+00:00",
|
|
"last_seen": "2026-02-24T10:19:22+00:00",
|
|
"resolved_at": "2026-02-24T10:23:18+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::error_consistency::scraper_partial_failure_contract_drift::f7108803": {
|
|
"id": "review::.::holistic::error_consistency::scraper_partial_failure_contract_drift::f7108803",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Scraper implementations disagree on whether per-item errors are surfaced or dropped",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"internal/scraper/local.go",
|
|
"internal/scraper/web.go",
|
|
"internal/scraper/localsearch.go"
|
|
],
|
|
"evidence": [
|
|
"`LocalScraper.Scrape` ignores `fileToDocument` errors by returning nil in the walk callback and continues without recording failures.",
|
|
"`WebScraper` and `LocalSearchScraper` collect per-URL failures and return an explicit error when no documents are produced."
|
|
],
|
|
"suggestion": "Adopt one partial-failure policy across scrapers (for example: collect bounded per-item errors and return them when output is empty, optionally include warnings when output is partial). Implement this via a shared helper used by local/web/localsearch scrapers.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:19:22+00:00",
|
|
"last_seen": "2026-02-24T10:19:22+00:00",
|
|
"resolved_at": "2026-02-24T10:23:18+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::error_consistency::http_error_context_inconsistent::601b805a": {
|
|
"id": "review::.::holistic::error_consistency::http_error_context_inconsistent::601b805a",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "HTTP failure messages vary from rich context to opaque status-only strings",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"internal/scraper/external/astrodocs.go",
|
|
"internal/scraper/external/cloudflaredocs.go",
|
|
"internal/scraper/external/dockerdocs.go",
|
|
"internal/scraper/external/nuxtdocs.go",
|
|
"internal/scraper/localsearch.go"
|
|
],
|
|
"evidence": [
|
|
"External docs scrapers return generic `HTTP %d` without endpoint or response snippet, reducing traceability during failures.",
|
|
"Local search includes status code and trimmed response body in error messages, providing significantly better debugging context."
|
|
],
|
|
"suggestion": "Create a shared HTTP error formatter for scraper clients that includes URL host/path, status code, and a bounded response-body excerpt; update all external scraper fetchers to use it.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "fixed",
|
|
"note": "Added shared external scraper HTTP fetch helper with consistent URL+status+bounded-body error context and migrated all external fetchPage methods to it.",
|
|
"first_seen": "2026-02-24T10:19:22+00:00",
|
|
"last_seen": "2026-02-24T10:19:22+00:00",
|
|
"resolved_at": "2026-02-24T10:21:19+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "manual",
|
|
"text": "I have actually implemented a shared HTTP error formatter in internal/scraper/external/types.go and migrated external scraper adapters to use it, and I am not gaming the score by resolving without fixing.",
|
|
"attested_at": "2026-02-24T10:21:19+00:00",
|
|
"scan_verified": false
|
|
}
|
|
},
|
|
"boilerplate_duplication::.desloppify/subagents/runs/20260224_101201/prompts/batch-5.md::a774a9286b2ed17a": {
|
|
"id": "boilerplate_duplication::.desloppify/subagents/runs/20260224_101201/prompts/batch-5.md::a774a9286b2ed17a",
|
|
"detector": "boilerplate_duplication",
|
|
"file": ".desloppify/subagents/runs/20260224_101201/prompts/batch-5.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 32 lines): .desloppify/subagents/runs/20260224_101201/prompts/batch-5.md:6, .desloppify/subagents/runs/20260224_110336/prompts/batch-1.md:6",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 32,
|
|
"locations": [
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_101201/prompts/batch-5.md",
|
|
"line": 6
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_110336/prompts/batch-1.md",
|
|
"line": 6
|
|
}
|
|
],
|
|
"sample": [
|
|
"Batch name: Cross-cutting Sweep",
|
|
"Batch dimensions: error_consistency",
|
|
"Batch rationale: selected dimensions had no direct batch mapping; review representative cross-cutting files",
|
|
""
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:19:48+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::error_consistency::wrong_error_wrapped_in_sources_fallback_parse::6a93a0df": {
|
|
"id": "review::.::holistic::error_consistency::wrong_error_wrapped_in_sources_fallback_parse::6a93a0df",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Fallback YAML parse wraps the wrong error variable, losing true parse context.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"cmd/scrape.go",
|
|
"internal/config/config.go"
|
|
],
|
|
"evidence": [
|
|
"cmd/scrape.go:153-155 checks `wrapErr` but returns `%w` with `err` from a different scope.",
|
|
"internal/config/config.go consistently wraps the current failing error with `%w` at parse/read boundaries, showing intended local convention."
|
|
],
|
|
"suggestion": "In cmd/scrape.go, change the return to `fmt.Errorf(\"parse sources file: %w\", wrapErr)` so the emitted error always preserves the actual fallback parse failure.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:23:18+00:00",
|
|
"last_seen": "2026-02-24T10:23:18+00:00",
|
|
"resolved_at": "2026-02-24T10:32:25+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::error_consistency::local_ask_retrieval_error_is_silently_dropped::84b082d3": {
|
|
"id": "review::.::holistic::error_consistency::local_ask_retrieval_error_is_silently_dropped::84b082d3",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Local retrieval failures are discarded, so final errors hide one failing path.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"cmd/ask.go",
|
|
"cmd/serve.go"
|
|
],
|
|
"evidence": [
|
|
"cmd/ask.go:122-125 sets `localRanked = nil` on `localErr` and does not append/report that error.",
|
|
"cmd/ask.go:145-147 returns only `fetchErrors` for failure messaging, excluding local retrieval failure cause.",
|
|
"cmd/serve.go wraps and propagates lower-level errors with operation context (`run devour_ask search: %w`), showing a stricter error propagation pattern at adjacent boundary code."
|
|
],
|
|
"suggestion": "Capture `localErr` into the same error aggregation path (or return immediately with context) so both local and live retrieval failures are visible to callers.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "fixed",
|
|
"note": "Ask command now aggregates local retrieval errors into returned no-results diagnostics instead of silently discarding them.",
|
|
"first_seen": "2026-02-24T10:23:18+00:00",
|
|
"last_seen": "2026-02-24T10:23:18+00:00",
|
|
"resolved_at": "2026-02-24T10:30:28+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "manual",
|
|
"text": "I have actually updated cmd/ask.go to preserve local retrieval failures in the error aggregation path and I am not gaming the score by resolving without fixing.",
|
|
"attested_at": "2026-02-24T10:30:28+00:00",
|
|
"scan_verified": false
|
|
}
|
|
},
|
|
"review::.::holistic::error_consistency::search_engine_drops_operation_context_on_io_errors::81cf96fa": {
|
|
"id": "review::.::holistic::error_consistency::search_engine_drops_operation_context_on_io_errors::81cf96fa",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Search engine returns raw IO/JSON errors without operation context at key boundaries.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"internal/search/engine.go",
|
|
"internal/indexer/indexer.go"
|
|
],
|
|
"evidence": [
|
|
"internal/search/engine.go returns bare errors at several boundaries (e.g., MkdirAll/listDocFiles/os.ReadFile/json.Unmarshal paths).",
|
|
"internal/indexer/indexer.go wraps errors with explicit operation strings (`failed to generate embeddings`, `failed to add to vector store`), improving traceability."
|
|
],
|
|
"suggestion": "Wrap engine boundary errors with operation-specific context (`fmt.Errorf(\"ensure index metadata: %w\", err)`, etc.) consistently across Rebuild/EnsureIndexed/Search.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:23:18+00:00",
|
|
"last_seen": "2026-02-24T10:23:18+00:00",
|
|
"resolved_at": "2026-02-24T10:32:25+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::error_consistency::test_coverage_detector_mixes_silent_skip_and_hard_failure::4c8004b9": {
|
|
"id": "review::.::holistic::error_consistency::test_coverage_detector_mixes_silent_skip_and_hard_failure::4c8004b9",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Coverage detector silently skips some environment failures but fails hard on others.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"internal/quality/plugins/go/analyzers/test_coverage.go",
|
|
"internal/quality/scanner.go"
|
|
],
|
|
"evidence": [
|
|
"internal/quality/plugins/go/analyzers/test_coverage.go:39-41 returns `nil, nil` if `go` is unavailable; lines 50-51 also return `nil, nil` when profile is missing.",
|
|
"The same detector returns hard errors for command execution failures (`failed to run test coverage`) and parse failures, yielding mixed failure contracts.",
|
|
"internal/quality/scanner.go aggregates detector errors, so silent `nil,nil` prevents scanner-level visibility for some failure modes."
|
|
],
|
|
"suggestion": "Standardize detector contract: either return explicit typed 'skipped' metadata/finding for non-actionable environment gaps, or return wrapped errors consistently so scanner can report them predictably.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:23:18+00:00",
|
|
"last_seen": "2026-02-24T10:23:18+00:00",
|
|
"resolved_at": "2026-02-24T10:32:25+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::error_consistency::plugin_registration_uses_panic_while_cli_paths_return_errors::12b4954c": {
|
|
"id": "review::.::holistic::error_consistency::plugin_registration_uses_panic_while_cli_paths_return_errors::12b4954c",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Plugin init panics on registration failure instead of using returned error flow.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"internal/quality/plugins/go/plugin.go",
|
|
"cmd/root.go"
|
|
],
|
|
"evidence": [
|
|
"internal/quality/plugins/go/plugin.go:360-363 panics in `init()` when registration fails.",
|
|
"cmd/root.go:41-45 follows controlled error propagation (`Execute` prints error and exits), indicating a different process-level failure strategy."
|
|
],
|
|
"suggestion": "Replace panic-based registration with explicit initialization returning errors (or a centralized startup validation step) so failures follow the same surfaced error path as other startup errors.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "fixed",
|
|
"note": "Go quality plugin registration no longer panics in init; registration failures are captured and surfaced as warnings.",
|
|
"first_seen": "2026-02-24T10:23:18+00:00",
|
|
"last_seen": "2026-02-24T10:23:18+00:00",
|
|
"resolved_at": "2026-02-24T10:30:42+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "manual",
|
|
"text": "I have actually replaced the init panic with captured registration error handling in internal/quality/plugins/go/plugin.go and I am not gaming the score by resolving without fixing.",
|
|
"attested_at": "2026-02-24T10:30:42+00:00",
|
|
"scan_verified": false
|
|
}
|
|
},
|
|
"test_coverage::internal/scraper/external/rustdocs.go::untested_module": {
|
|
"id": "test_coverage::internal/scraper/external/rustdocs.go::untested_module",
|
|
"detector": "test_coverage",
|
|
"file": "internal/scraper/external/rustdocs.go",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Untested module (541 LOC, 0 importers)",
|
|
"detail": {
|
|
"kind": "untested_module",
|
|
"loc": 541,
|
|
"importer_count": 0,
|
|
"loc_weight": 23.259406699226016
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:23:19+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::.desloppify/subagents/runs/20260224_101740/prompts/batch-1.md::2eb0cfa06b9ed24e": {
|
|
"id": "boilerplate_duplication::.desloppify/subagents/runs/20260224_101740/prompts/batch-1.md::2eb0cfa06b9ed24e",
|
|
"detector": "boilerplate_duplication",
|
|
"file": ".desloppify/subagents/runs/20260224_101740/prompts/batch-1.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 7 files (window 121 lines): .desloppify/subagents/runs/20260224_101740/prompts/batch-1.md:5, .desloppify/subagents/runs/20260224_102123/prompts/batch-1.md:5, .desloppify/subagents/runs/20260224_103046/prompts/batch-1.md:5, .desloppify/subagents/runs/20260224_104658/prompts/batch-1.md:5, +3 more",
|
|
"detail": {
|
|
"distinct_files": 7,
|
|
"window_size": 121,
|
|
"locations": [
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_101740/prompts/batch-1.md",
|
|
"line": 5
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_102123/prompts/batch-1.md",
|
|
"line": 5
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_103046/prompts/batch-1.md",
|
|
"line": 5
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_104658/prompts/batch-1.md",
|
|
"line": 5
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_105325/prompts/batch-1.md",
|
|
"line": 5
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_105807/prompts/batch-1.md",
|
|
"line": 5
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_110336/prompts/batch-1.md",
|
|
"line": 5
|
|
}
|
|
],
|
|
"sample": [
|
|
"Batch index: 1",
|
|
"Batch name: Cross-cutting Sweep",
|
|
"Batch dimensions: error_consistency",
|
|
"Batch rationale: selected dimensions had no direct batch mapping; review representative cross-cutting files"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:23:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::.desloppify/subagents/runs/20260224_101740/prompts/batch-1.md::e663619724393116": {
|
|
"id": "boilerplate_duplication::.desloppify/subagents/runs/20260224_101740/prompts/batch-1.md::e663619724393116",
|
|
"detector": "boilerplate_duplication",
|
|
"file": ".desloppify/subagents/runs/20260224_101740/prompts/batch-1.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 4 files (window 25 lines): .desloppify/subagents/runs/20260224_101740/prompts/batch-1.md:64, .desloppify/subagents/runs/20260224_102123/prompts/batch-1.md:65, .desloppify/subagents/runs/20260224_105325/prompts/batch-1.md:66, .desloppify/subagents/runs/20260224_110336/prompts/batch-1.md:67",
|
|
"detail": {
|
|
"distinct_files": 4,
|
|
"window_size": 25,
|
|
"locations": [
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_101740/prompts/batch-1.md",
|
|
"line": 64
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_102123/prompts/batch-1.md",
|
|
"line": 65
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_105325/prompts/batch-1.md",
|
|
"line": 66
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_110336/prompts/batch-1.md",
|
|
"line": 67
|
|
}
|
|
],
|
|
"sample": [
|
|
"- .github/workflows/ci.yml",
|
|
"- AGENTS.md",
|
|
"- cmd/devour_enhanced.py",
|
|
"- cmd/devour_enhanced_fixed.py"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:23:44+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::error_consistency::silent_parse_failures_in_analyzers::e272e2a5": {
|
|
"id": "review::.::holistic::error_consistency::silent_parse_failures_in_analyzers::e272e2a5",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Analyzer parse/read errors are silently converted to no findings.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"internal/quality/plugins/go/analyzers/detectors.go",
|
|
"internal/quality/plugins/go/analyzers/test_coverage.go",
|
|
"internal/quality/scanner.go"
|
|
],
|
|
"evidence": [
|
|
"GodStructDetector.analyzeFile returns nil on parser.ParseFile error (detectors.go:112-114).",
|
|
"DebugLogDetector.analyzeFile also returns nil on parse failure (detectors.go:240-241).",
|
|
"UntestedFuncDetector returns (nil, nil) when coverage.out read fails (test_coverage.go:211-214), making failure indistinguishable from success.",
|
|
"Scanner loop logs detector failure and continues (scanner.go:77-79), so detector internals that swallow errors become invisible."
|
|
],
|
|
"suggestion": "Standardize detector contract: return wrapped errors for parse/read failures (`fmt.Errorf(\"parse %s: %w\", path, err)`) and let scanner classify them as detector execution errors instead of empty findings.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:32:25+00:00",
|
|
"last_seen": "2026-02-24T10:32:25+00:00",
|
|
"resolved_at": "2026-02-24T10:48:40+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::error_consistency::mixed_error_wrapping_at_scraper_boundaries::9b56c2c5": {
|
|
"id": "review::.::holistic::error_consistency::mixed_error_wrapping_at_scraper_boundaries::9b56c2c5",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Scrapers mix raw error passthrough with contextual wrapping.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"internal/scraper/openapi.go",
|
|
"internal/scraper/github.go",
|
|
"internal/scraper/external/nuxtdocs.go"
|
|
],
|
|
"evidence": [
|
|
"OpenAPI scraper returns raw `err` from readSpec/parseOpenAPISpec (openapi.go:43-50).",
|
|
"GitHub scraper returns raw resolveRepo/MkdirTemp errors (github.go:29-37).",
|
|
"Nuxt external scraper wraps fetch/parse failures with operation context and `%w` (nuxtdocs.go:39-45)."
|
|
],
|
|
"suggestion": "Adopt one boundary rule for scraper packages: every external I/O or parse failure should be wrapped with operation context and `%w` before returning.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "fixed",
|
|
"note": "OpenAPI and GitHub scrapers now wrap external boundary errors with operation context and %w, aligning with contextual wrapper patterns used in other scrapers.",
|
|
"first_seen": "2026-02-24T10:32:25+00:00",
|
|
"last_seen": "2026-02-24T10:32:25+00:00",
|
|
"resolved_at": "2026-02-24T10:46:44+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "manual",
|
|
"text": "I have actually updated internal/scraper/openapi.go and internal/scraper/github.go to use consistent contextual wrapping for boundary failures and I am not gaming the score by resolving without fixing.",
|
|
"attested_at": "2026-02-24T10:46:44+00:00",
|
|
"scan_verified": false
|
|
}
|
|
},
|
|
"review::.::holistic::error_consistency::string_aggregated_errors_lose_causal_chain::a055005c": {
|
|
"id": "review::.::holistic::error_consistency::string_aggregated_errors_lose_causal_chain::a055005c",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Aggregated scrape failures are flattened to strings, losing unwrap support.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"internal/scraper/web.go",
|
|
"internal/scraper/localsearch.go",
|
|
"cmd/ask.go"
|
|
],
|
|
"evidence": [
|
|
"Web scraper returns `fmt.Errorf(\"web scrape failed: %s\", strings.Join(scrapeErrors, \"; \"))` (web.go:259).",
|
|
"Local search scraper similarly returns joined string error text (localsearch.go:143).",
|
|
"ask command accumulates URL/term errors as formatted strings (ask.go:320,340), not typed/wrapped errors."
|
|
],
|
|
"suggestion": "Store and return structured error sets (e.g., `[]error` wrapped via a multi-error type) and only stringify at CLI presentation boundaries.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "fixed",
|
|
"note": "Replaced string-only scrape error aggregation with structured []error joined via errors.Join in web/localsearch scrapers and ask live-fetch aggregation.",
|
|
"first_seen": "2026-02-24T10:32:25+00:00",
|
|
"last_seen": "2026-02-24T10:32:25+00:00",
|
|
"resolved_at": "2026-02-24T10:46:53+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "manual",
|
|
"text": "I have actually updated internal/scraper/web.go, internal/scraper/localsearch.go, and cmd/ask.go to preserve causal error chains using errors.Join and I am not gaming the score by resolving without fixing.",
|
|
"attested_at": "2026-02-24T10:46:53+00:00",
|
|
"scan_verified": false
|
|
}
|
|
},
|
|
"review::.::holistic::error_consistency::error_drop_and_continue_without_signal::c7e2c9bf": {
|
|
"id": "review::.::holistic::error_consistency::error_drop_and_continue_without_signal::c7e2c9bf",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Some failures are intentionally ignored with no traceable signal.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"internal/server/server.go",
|
|
"internal/scraper/local.go",
|
|
"internal/search/engine.go"
|
|
],
|
|
"evidence": [
|
|
"Server ignores encode error when writing parse-error RPC response (`_ = out.Encode(...)`) (server.go:213).",
|
|
"Local scraper drops file conversion errors by returning nil in walk callback (local.go:90-93).",
|
|
"Search engine skips parseDocFile errors with `continue` and no reporting (engine.go:134-137)."
|
|
],
|
|
"suggestion": "When continuing after non-fatal errors, emit a consistent warning/collector path (counter + sampled log + optional returned diagnostics) so operators can detect degraded runs.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:32:25+00:00",
|
|
"last_seen": "2026-02-24T10:32:25+00:00",
|
|
"resolved_at": "2026-02-24T10:48:40+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::error_consistency::rpc_transport_error_detail_divergence::cb0835c6": {
|
|
"id": "review::.::holistic::error_consistency::rpc_transport_error_detail_divergence::cb0835c6",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "HTTP and stdio RPC transports expose write/encode failures with different fidelity.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"internal/server/server.go",
|
|
"cmd/serve.go"
|
|
],
|
|
"evidence": [
|
|
"In `internal/server/server.go`, HTTP `/rpc` writes generic `rpc write error` on writeRPC failure (lines ~132-140), dropping underlying encode context.",
|
|
"In the same file, stdio transport returns wrapped encode errors (line ~218) and raw encode failures (line ~224), preserving actionable context.",
|
|
"`cmd/serve.go` uses one server abstraction for both modes, so callers see transport-dependent error behavior for equivalent failure classes."
|
|
],
|
|
"suggestion": "Unify transport error contract: introduce a shared helper that classifies encode/write failures and records structured context (operation, transport, cause). Keep client-facing RPC payload stable, but log/return wrapped internal causes consistently for both HTTP and stdio.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "fixed",
|
|
"note": "RPC transports now use a shared transport error wrapper and log wrapped write/encode causes consistently for HTTP and stdio.",
|
|
"first_seen": "2026-02-24T10:48:39+00:00",
|
|
"last_seen": "2026-02-24T10:48:39+00:00",
|
|
"resolved_at": "2026-02-24T10:53:18+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "manual",
|
|
"text": "I have actually unified transport write/encode error wrapping in internal/server/server.go and I am not gaming the score by resolving without fixing.",
|
|
"attested_at": "2026-02-24T10:53:18+00:00",
|
|
"scan_verified": false
|
|
}
|
|
},
|
|
"review::.::holistic::error_consistency::batch_scrape_error_cause_loss::3ce28dc0": {
|
|
"id": "review::.::holistic::error_consistency::batch_scrape_error_cause_loss::3ce28dc0",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Batch scrape returns a generic terminal error after printing detailed source failures.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"cmd/scrape.go",
|
|
"cmd/ask.go"
|
|
],
|
|
"evidence": [
|
|
"`cmd/scrape.go` records per-source failures, prints each error, then returns `one or more sources failed` (lines ~187-207), losing machine-readable causes.",
|
|
"`cmd/ask.go` returns joined upstream causes when retrieval fails (`errors.Join(fetchErrors...)`, lines ~149-154), preserving aggregate failure detail.",
|
|
"This creates inconsistent caller behavior across commands: some flows expose causal chains, others require scraping stdout logs."
|
|
],
|
|
"suggestion": "Accumulate per-source errors in `scrapeFromConfig` and return `fmt.Errorf(\"...: %w\", errors.Join(errs...))` while still printing the summary; this keeps CLI UX and provides consistent programmatic error chains.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "fixed",
|
|
"note": "Batch scrape now accumulates per-source errors and returns a joined causal chain instead of a generic terminal error.",
|
|
"first_seen": "2026-02-24T10:48:39+00:00",
|
|
"last_seen": "2026-02-24T10:48:39+00:00",
|
|
"resolved_at": "2026-02-24T10:53:06+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "manual",
|
|
"text": "I have actually updated cmd/scrape.go to return errors.Join of per-source failures and I am not gaming the score by resolving without fixing.",
|
|
"attested_at": "2026-02-24T10:53:06+00:00",
|
|
"scan_verified": false
|
|
}
|
|
},
|
|
"review::.::holistic::error_consistency::quality_scan_detector_failure_semantics_mixed::eff5116e": {
|
|
"id": "review::.::holistic::error_consistency::quality_scan_detector_failure_semantics_mixed::eff5116e",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Quality scanning mixes swallowed detector failures with fail-fast detector behavior.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"internal/quality/scanner.go",
|
|
"internal/quality/plugins/go/analyzers/detectors.go",
|
|
"internal/quality/plugins/go/analyzers/advanced.go"
|
|
],
|
|
"evidence": [
|
|
"`internal/quality/scanner.go` logs detector errors and continues (lines ~76-79), so scan succeeds even when detectors fail.",
|
|
"`detectors.go` has inconsistent per-file policy: `LargeFileDetector` silently `continue`s on count errors (lines ~44-47), while `GodStructDetector` returns wrapped errors and aborts detector run (lines ~102-105).",
|
|
"This produces non-uniform failure propagation: some analysis gaps are silent, some are surfaced, and scanner-level behavior masks both as successful scans."
|
|
],
|
|
"suggestion": "Define a uniform detector error policy (e.g., collect per-file errors + thresholded hard-fail) and enforce it via shared helper APIs so scanner output includes a structured `partial_failures` section instead of ad-hoc continue/abort choices.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:48:39+00:00",
|
|
"last_seen": "2026-02-24T10:48:39+00:00",
|
|
"resolved_at": "2026-02-24T10:54:51+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::error_consistency::ask_fallback_ignores_persistence_errors::6bc0224a": {
|
|
"id": "review::.::holistic::error_consistency::ask_fallback_ignores_persistence_errors::6bc0224a",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Ask fallback suppresses save/reindex failures that analogous command flows propagate.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"cmd/ask.go",
|
|
"cmd/push.go",
|
|
"cmd/scrape.go"
|
|
],
|
|
"evidence": [
|
|
"`cmd/ask.go` ignores persistence/index maintenance errors with blank identifier assignments (lines ~369-377).",
|
|
"`cmd/push.go` and `cmd/scrape.go` both return save/reindex failures (`save docs failed`, `reindex failed`, `reindex after scrape...`) instead of suppressing them.",
|
|
"Equivalent storage/index boundary failures therefore produce different observability depending on command path."
|
|
],
|
|
"suggestion": "Handle ask fallback persistence/reindex errors explicitly: either return them when they invalidate guarantees, or attach them to response metadata/logged warnings with a consistent typed error category used across commands.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "fixed",
|
|
"note": "Ask fallback now handles save/reindex failures explicitly by recording persistence warnings and surfacing them in response notes instead of dropping errors.",
|
|
"first_seen": "2026-02-24T10:48:39+00:00",
|
|
"last_seen": "2026-02-24T10:48:39+00:00",
|
|
"resolved_at": "2026-02-24T10:53:06+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "manual",
|
|
"text": "I have actually changed cmd/ask.go to capture and surface fallback persistence/reindex errors and I am not gaming the score by resolving without fixing.",
|
|
"attested_at": "2026-02-24T10:53:06+00:00",
|
|
"scan_verified": false
|
|
}
|
|
},
|
|
"boilerplate_duplication::internal/quality/plugins/go/analyzers/detectors.go::40a80999a472ed84": {
|
|
"id": "boilerplate_duplication::internal/quality/plugins/go/analyzers/detectors.go::40a80999a472ed84",
|
|
"detector": "boilerplate_duplication",
|
|
"file": "internal/quality/plugins/go/analyzers/detectors.go",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 1 files (window 7 lines): internal/quality/plugins/go/analyzers/detectors.go:258",
|
|
"detail": {
|
|
"distinct_files": 1,
|
|
"window_size": 7,
|
|
"locations": [
|
|
{
|
|
"file": "internal/quality/plugins/go/analyzers/detectors.go",
|
|
"line": 258
|
|
}
|
|
],
|
|
"sample": [
|
|
") analyzeFile(path string) ([]quality.Finding, error) {",
|
|
"\tfset := token.NewFileSet()",
|
|
"\tnode, err := parser.ParseFile(fset, path, nil, 0)",
|
|
"\tif err != nil {"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:49:11+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::error_consistency::mixed_wrapped_and_bare_error_propagation::1651c26b": {
|
|
"id": "review::.::holistic::error_consistency::mixed_wrapped_and_bare_error_propagation::1651c26b",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Adjacent layers mix contextual wrapping and bare error returns",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"cmd/serve.go",
|
|
"internal/config/config.go",
|
|
"internal/scraper/local.go",
|
|
"cmd/scrape.go"
|
|
],
|
|
"evidence": [
|
|
"`cmd/serve.go:87-109` wraps errors with operation labels, but `cmd/serve.go:45` and `cmd/serve.go:75` return raw `loadAppConfig` errors.",
|
|
"`internal/config/config.go:207` and `:364` return bare errors, while nearby code uses contextual `fmt.Errorf(...: %w)`.",
|
|
"`internal/scraper/local.go:49`, `:57`, `:104`, `:154`, `:164` return raw errors despite other branches adding context and joins."
|
|
],
|
|
"suggestion": "Adopt a single propagation rule for non-boundary layers: always wrap external/I-O failures with operation context (e.g., `fmt.Errorf(\"load config path: %w\", err)`). Apply this consistently in `cmd/serve.go`, `internal/config/config.go`, and `internal/scraper/local.go`.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:54:51+00:00",
|
|
"last_seen": "2026-02-24T10:54:51+00:00",
|
|
"resolved_at": "2026-02-24T11:05:03+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::error_consistency::string_based_error_classification_in_ask_flow::1d684e21": {
|
|
"id": "review::.::holistic::error_consistency::string_based_error_classification_in_ask_flow::1d684e21",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Ask flow branches on error message text instead of typed categories",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"cmd/ask.go",
|
|
"cmd/scrape.go",
|
|
"internal/server/server.go"
|
|
],
|
|
"evidence": [
|
|
"`cmd/ask.go:379` and `:384` encode category in message prefix (`\"persistence warning:\"`).",
|
|
"`cmd/ask.go:191` uses `strings.Contains(fetchErr.Error(), \"persistence warning:\")` for control flow, coupling behavior to mutable message strings.",
|
|
"Other modules treat errors opaquely and pass through generic text (`internal/server/server.go:256` returns `err.Error()` to RPC clients), amplifying inconsistency in downstream handling."
|
|
],
|
|
"suggestion": "Introduce typed/sentinel errors for recoverable warning classes (e.g., `var ErrPersistenceWarning`) and use `errors.Is`/`errors.As` in `cmd/ask.go` instead of string matching. Keep human-readable text separate from machine classification.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "fixed",
|
|
"note": "Replaced ask-flow string-matching warning classification with a typed askPersistenceWarning and errors.As checks.",
|
|
"first_seen": "2026-02-24T10:54:51+00:00",
|
|
"last_seen": "2026-02-24T10:54:51+00:00",
|
|
"resolved_at": "2026-02-24T10:58:00+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "manual",
|
|
"text": "I have actually introduced typed warning classification in cmd/ask.go and removed string-based branching logic, and I am not gaming the score by resolving without fixing.",
|
|
"attested_at": "2026-02-24T10:58:00+00:00",
|
|
"scan_verified": false
|
|
}
|
|
},
|
|
"review::.::holistic::error_consistency::analyzer_error_handling_policy_is_incoherent::95022370": {
|
|
"id": "review::.::holistic::error_consistency::analyzer_error_handling_policy_is_incoherent::95022370",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Analyzer/plugin paths alternate between explicit, wrapped, and silent failures",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"internal/quality/plugins/go/analyzers/detectors.go",
|
|
"internal/quality/plugins/go/analyzers/advanced.go",
|
|
"internal/quality/plugins/go/plugin.go"
|
|
],
|
|
"evidence": [
|
|
"`internal/quality/plugins/go/analyzers/detectors.go:46-60` converts read failures into synthetic findings (`detector_error`) rather than returning an error.",
|
|
"`internal/quality/plugins/go/analyzers/advanced.go:242` returns raw parse errors from helper methods without context.",
|
|
"`internal/quality/plugins/go/plugin.go:353-356` swallows file read failures in `countLOC` by returning `0`, losing failure provenance entirely."
|
|
],
|
|
"suggestion": "Define a consistent analyzer failure contract: either (a) report detector-execution issues as standardized `detector_error` findings with metadata, or (b) return wrapped errors; do not silently coerce errors to default values. Refactor `countLOC` to return `(int, error)` and propagate classification consistently.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "auto_resolved",
|
|
"note": "not reported in latest holistic re-import",
|
|
"first_seen": "2026-02-24T10:54:51+00:00",
|
|
"last_seen": "2026-02-24T10:54:51+00:00",
|
|
"resolved_at": "2026-02-24T11:05:03+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"boilerplate_duplication::.desloppify/subagents/runs/20260224_104658/prompts/batch-1.md::2a0ceb1e3f61c2e0": {
|
|
"id": "boilerplate_duplication::.desloppify/subagents/runs/20260224_104658/prompts/batch-1.md::2a0ceb1e3f61c2e0",
|
|
"detector": "boilerplate_duplication",
|
|
"file": ".desloppify/subagents/runs/20260224_104658/prompts/batch-1.md",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Boilerplate block repeated across 2 files (window 85 lines): .desloppify/subagents/runs/20260224_104658/prompts/batch-1.md:41, .desloppify/subagents/runs/20260224_110336/prompts/batch-1.md:41",
|
|
"detail": {
|
|
"distinct_files": 2,
|
|
"window_size": 85,
|
|
"locations": [
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_104658/prompts/batch-1.md",
|
|
"line": 41
|
|
},
|
|
{
|
|
"file": ".desloppify/subagents/runs/20260224_110336/prompts/batch-1.md",
|
|
"line": 41
|
|
}
|
|
],
|
|
"sample": [
|
|
"- internal/search/engine.go",
|
|
"- internal/scraper/github.go",
|
|
"- internal/scraper/external/astrodocs.go",
|
|
"- internal/scraper/external/cloudflaredocs.go"
|
|
]
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T10:55:19+00:00",
|
|
"last_seen": "2026-02-24T11:05:35+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"zone": "production",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::error_consistency::cli_raw_error_passthrough_inconsistent_context::5da862c4": {
|
|
"id": "review::.::holistic::error_consistency::cli_raw_error_passthrough_inconsistent_context::5da862c4",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Sibling CLI commands mix raw error passthrough and contextual wrapping.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"cmd/get.go",
|
|
"cmd/scrape.go",
|
|
"cmd/push.go",
|
|
"cmd/ask.go"
|
|
],
|
|
"evidence": [
|
|
"runGet returns constructDocURL error directly (cmd/get.go:47).",
|
|
"runScrape returns load/scrape errors directly (cmd/scrape.go:91, cmd/scrape.go:126).",
|
|
"runPush returns loadAppConfig error directly (cmd/push.go:52), but wraps later failures with operation labels (cmd/push.go:81, cmd/push.go:91, cmd/push.go:97).",
|
|
"runAsk similarly passes config load error directly (cmd/ask.go:130)."
|
|
],
|
|
"suggestion": "Standardize command-boundary wrapping: every external call failure should be wrapped with command+operation context (for example, \"load app config for get command: %w\") before returning.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "fixed",
|
|
"note": "CLI command boundaries now consistently wrap config/url/scrape errors with command-operation context in get/scrape/push/ask.",
|
|
"first_seen": "2026-02-24T11:05:03+00:00",
|
|
"last_seen": "2026-02-24T11:05:03+00:00",
|
|
"resolved_at": "2026-02-24T11:08:51+00:00",
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null,
|
|
"resolution_attestation": {
|
|
"kind": "manual",
|
|
"text": "I have actually updated cmd/get.go, cmd/scrape.go, cmd/push.go, and cmd/ask.go for consistent contextual wrapping and I am not gaming the score by resolving without fixing.",
|
|
"attested_at": "2026-02-24T11:08:51+00:00",
|
|
"scan_verified": false
|
|
}
|
|
},
|
|
"review::.::holistic::error_consistency::transport_error_contract_mixed_wrapped_and_raw::0a81c4f1": {
|
|
"id": "review::.::holistic::error_consistency::transport_error_contract_mixed_wrapped_and_raw::0a81c4f1",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "high",
|
|
"summary": "Server transport code alternates between wrapped errors and raw returns.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"internal/server/server.go",
|
|
"cmd/serve.go"
|
|
],
|
|
"evidence": [
|
|
"RPC setup/handler paths in cmd/serve consistently wrap with operation context (e.g., cmd/serve.go:69, cmd/serve.go:96, cmd/serve.go:107).",
|
|
"internal server code has contextual wrappers for encode paths (internal/server/server.go:223, 229, 267, 273), but returns raw runtime errors in Start (internal/server/server.go:171, 234)."
|
|
],
|
|
"suggestion": "Define a transport-level error policy (wrapped with transport+operation context vs typed sentinel mapping) and apply it to listener/scanner failure returns in Start for parity with existing wrapped encode paths.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T11:05:03+00:00",
|
|
"last_seen": "2026-02-24T11:05:03+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
},
|
|
"review::.::holistic::error_consistency::python_cli_exit_strategy_fragmented::d0bf0952": {
|
|
"id": "review::.::holistic::error_consistency::python_cli_exit_strategy_fragmented::d0bf0952",
|
|
"detector": "review",
|
|
"file": ".",
|
|
"tier": 3,
|
|
"confidence": "medium",
|
|
"summary": "Python command flows use inconsistent fatal-error signaling patterns.",
|
|
"detail": {
|
|
"holistic": true,
|
|
"dimension": "error_consistency",
|
|
"related_files": [
|
|
"cmd/devour_enhanced.py",
|
|
"cmd/devour_enhanced_v2.py",
|
|
"desloppify/desloppify/desloppify/app/commands/next.py",
|
|
"desloppify/desloppify/desloppify/app/commands/resolve/selection.py"
|
|
],
|
|
"evidence": [
|
|
"Enhanced scripts print then call sys.exit(1) in multiple branches (cmd/devour_enhanced.py:600/607/616; cmd/devour_enhanced_v2.py:601/608/617).",
|
|
"Another command raises SystemExit directly on output failure (desloppify/.../next.py:137).",
|
|
"Resolve validation path also exits process directly via sys.exit(1) (desloppify/.../resolve/selection.py:84/87)."
|
|
],
|
|
"suggestion": "Adopt one CLI failure contract for Python commands (for example, raise a command exception and let one top-level runner map to exit code and formatted output) instead of mixing local sys.exit, print+exit, and raise SystemExit.",
|
|
"reasoning": ""
|
|
},
|
|
"status": "open",
|
|
"note": null,
|
|
"first_seen": "2026-02-24T11:05:03+00:00",
|
|
"last_seen": "2026-02-24T11:05:03+00:00",
|
|
"resolved_at": null,
|
|
"reopen_count": 0,
|
|
"lang": "go",
|
|
"suppressed": false,
|
|
"suppressed_at": null,
|
|
"suppression_pattern": null
|
|
}
|
|
},
|
|
"subjective_integrity": {
|
|
"status": "disabled",
|
|
"target_score": null,
|
|
"matched_count": 0,
|
|
"matched_dimensions": [],
|
|
"reset_dimensions": []
|
|
},
|
|
"subjective_assessments": {
|
|
"abstraction_fitness": {
|
|
"score": 45.8,
|
|
"source": "holistic",
|
|
"assessed_at": "2026-02-24T10:14:02+00:00",
|
|
"components": [
|
|
"Abstraction Leverage",
|
|
"Indirection Cost",
|
|
"Interface Honesty"
|
|
],
|
|
"component_scores": {
|
|
"Abstraction Leverage": 65.5,
|
|
"Indirection Cost": 62.1,
|
|
"Interface Honesty": 71.5
|
|
}
|
|
},
|
|
"ai_generated_debt": {
|
|
"score": 0.0,
|
|
"source": "scan_reset_subjective",
|
|
"assessed_at": "2026-02-23T10:09:26+00:00",
|
|
"reset_by": "scan_reset_subjective",
|
|
"placeholder": true
|
|
},
|
|
"contract_coherence": {
|
|
"score": 0.0,
|
|
"source": "scan_reset_subjective",
|
|
"assessed_at": "2026-02-23T10:09:26+00:00",
|
|
"reset_by": "scan_reset_subjective",
|
|
"placeholder": true
|
|
},
|
|
"design_coherence": {
|
|
"score": 49.3,
|
|
"source": "holistic",
|
|
"assessed_at": "2026-02-24T10:14:02+00:00"
|
|
},
|
|
"error_consistency": {
|
|
"score": 56.5,
|
|
"source": "holistic",
|
|
"assessed_at": "2026-02-24T11:05:03+00:00",
|
|
"needs_review_refresh": true,
|
|
"refresh_reason": "review_finding_fixed",
|
|
"stale_since": "2026-02-24T11:08:51+00:00"
|
|
},
|
|
"high_level_elegance": {
|
|
"score": 0.0,
|
|
"source": "scan_reset_subjective",
|
|
"assessed_at": "2026-02-23T10:09:26+00:00",
|
|
"reset_by": "scan_reset_subjective",
|
|
"placeholder": true
|
|
},
|
|
"logic_clarity": {
|
|
"score": 0.0,
|
|
"source": "scan_reset_subjective",
|
|
"assessed_at": "2026-02-23T10:09:26+00:00",
|
|
"reset_by": "scan_reset_subjective",
|
|
"placeholder": true
|
|
},
|
|
"low_level_elegance": {
|
|
"score": 0.0,
|
|
"source": "scan_reset_subjective",
|
|
"assessed_at": "2026-02-23T10:09:26+00:00",
|
|
"reset_by": "scan_reset_subjective",
|
|
"placeholder": true
|
|
},
|
|
"mid_level_elegance": {
|
|
"score": 0.0,
|
|
"source": "scan_reset_subjective",
|
|
"assessed_at": "2026-02-23T10:09:26+00:00",
|
|
"reset_by": "scan_reset_subjective",
|
|
"placeholder": true
|
|
},
|
|
"naming_quality": {
|
|
"score": 0.0,
|
|
"source": "scan_reset_subjective",
|
|
"assessed_at": "2026-02-23T10:09:26+00:00",
|
|
"reset_by": "scan_reset_subjective",
|
|
"placeholder": true
|
|
},
|
|
"package_organization": {
|
|
"score": 0.0,
|
|
"source": "scan_reset_subjective",
|
|
"assessed_at": "2026-02-23T10:09:26+00:00",
|
|
"reset_by": "scan_reset_subjective",
|
|
"placeholder": true
|
|
},
|
|
"type_safety": {
|
|
"score": 0.0,
|
|
"source": "scan_reset_subjective",
|
|
"assessed_at": "2026-02-23T10:09:26+00:00",
|
|
"reset_by": "scan_reset_subjective",
|
|
"placeholder": true
|
|
},
|
|
"cross_module_architecture": {
|
|
"score": 56.0,
|
|
"source": "holistic",
|
|
"assessed_at": "2026-02-24T10:14:02+00:00"
|
|
},
|
|
"test_strategy": {
|
|
"score": 46.3,
|
|
"source": "holistic",
|
|
"assessed_at": "2026-02-24T10:14:02+00:00"
|
|
}
|
|
},
|
|
"lang_capabilities": {
|
|
"go": {
|
|
"fixers": [],
|
|
"typecheck_cmd": "go vet ./..."
|
|
}
|
|
},
|
|
"zone_distribution": {
|
|
"production": 116,
|
|
"test": 37
|
|
},
|
|
"scan_history": [
|
|
{
|
|
"timestamp": "2026-02-24T10:08:05+00:00",
|
|
"lang": "go",
|
|
"strict_score": 39.1,
|
|
"verified_strict_score": 78.4,
|
|
"objective_score": 78.4,
|
|
"overall_score": 39.1,
|
|
"open": 529,
|
|
"diff_new": 0,
|
|
"diff_resolved": 0,
|
|
"ignored": 0,
|
|
"raw_findings": 208,
|
|
"suppressed_pct": 0.0,
|
|
"ignore_patterns": 0,
|
|
"subjective_integrity": {
|
|
"status": "pass",
|
|
"matched_count": 0,
|
|
"reset_count": 0,
|
|
"target_score": 95.0
|
|
},
|
|
"dimension_scores": {
|
|
"File health": {
|
|
"score": 90.9,
|
|
"strict": 90.9
|
|
},
|
|
"Code quality": {
|
|
"score": 98.3,
|
|
"strict": 98.3
|
|
},
|
|
"Test health": {
|
|
"score": 40.8,
|
|
"strict": 40.8
|
|
},
|
|
"Security": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Naming Quality": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Logic Clarity": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Type Safety": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Contracts": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Error Consistency": {
|
|
"score": 45.2,
|
|
"strict": 45.2
|
|
},
|
|
"Abstraction Fit": {
|
|
"score": 40.7,
|
|
"strict": 40.7
|
|
},
|
|
"AI Generated Debt": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"High Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Mid Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Low Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Cross-Module Arch": {
|
|
"score": 68.3,
|
|
"strict": 68.3
|
|
},
|
|
"Init Coupling": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Convention Drift": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Dep Health": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Test Strategy": {
|
|
"score": 46.4,
|
|
"strict": 46.4
|
|
},
|
|
"API Coherence": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Auth Consistency": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Stale Migration": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Structure Nav": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Design Coherence": {
|
|
"score": 40.9,
|
|
"strict": 40.9
|
|
},
|
|
"Duplication": {
|
|
"score": 84.9,
|
|
"strict": 84.9
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"timestamp": "2026-02-24T10:10:20+00:00",
|
|
"lang": "go",
|
|
"strict_score": 39.1,
|
|
"verified_strict_score": 78.4,
|
|
"objective_score": 78.4,
|
|
"overall_score": 39.1,
|
|
"open": 529,
|
|
"diff_new": 0,
|
|
"diff_resolved": 0,
|
|
"ignored": 0,
|
|
"raw_findings": 208,
|
|
"suppressed_pct": 0.0,
|
|
"ignore_patterns": 0,
|
|
"subjective_integrity": {
|
|
"status": "pass",
|
|
"matched_count": 0,
|
|
"reset_count": 0,
|
|
"target_score": 95.0
|
|
},
|
|
"dimension_scores": {
|
|
"File health": {
|
|
"score": 90.9,
|
|
"strict": 90.9
|
|
},
|
|
"Code quality": {
|
|
"score": 98.3,
|
|
"strict": 98.3
|
|
},
|
|
"Test health": {
|
|
"score": 40.8,
|
|
"strict": 40.8
|
|
},
|
|
"Security": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Naming Quality": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Logic Clarity": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Type Safety": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Contracts": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Error Consistency": {
|
|
"score": 45.2,
|
|
"strict": 45.2
|
|
},
|
|
"Abstraction Fit": {
|
|
"score": 40.7,
|
|
"strict": 40.7
|
|
},
|
|
"AI Generated Debt": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"High Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Mid Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Low Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Cross-Module Arch": {
|
|
"score": 68.3,
|
|
"strict": 68.3
|
|
},
|
|
"Init Coupling": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Convention Drift": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Dep Health": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Test Strategy": {
|
|
"score": 46.4,
|
|
"strict": 46.4
|
|
},
|
|
"API Coherence": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Auth Consistency": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Stale Migration": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Structure Nav": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Design Coherence": {
|
|
"score": 40.9,
|
|
"strict": 40.9
|
|
},
|
|
"Duplication": {
|
|
"score": 84.9,
|
|
"strict": 84.9
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"timestamp": "2026-02-24T10:10:53+00:00",
|
|
"lang": "go",
|
|
"strict_score": 39.1,
|
|
"verified_strict_score": 78.4,
|
|
"objective_score": 78.4,
|
|
"overall_score": 39.1,
|
|
"open": 529,
|
|
"diff_new": 0,
|
|
"diff_resolved": 0,
|
|
"ignored": 0,
|
|
"raw_findings": 208,
|
|
"suppressed_pct": 0.0,
|
|
"ignore_patterns": 0,
|
|
"subjective_integrity": {
|
|
"status": "pass",
|
|
"matched_count": 0,
|
|
"reset_count": 0,
|
|
"target_score": 95.0
|
|
},
|
|
"dimension_scores": {
|
|
"File health": {
|
|
"score": 90.9,
|
|
"strict": 90.9
|
|
},
|
|
"Code quality": {
|
|
"score": 98.3,
|
|
"strict": 98.3
|
|
},
|
|
"Test health": {
|
|
"score": 40.8,
|
|
"strict": 40.8
|
|
},
|
|
"Security": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Naming Quality": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Logic Clarity": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Type Safety": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Contracts": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Error Consistency": {
|
|
"score": 45.2,
|
|
"strict": 45.2
|
|
},
|
|
"Abstraction Fit": {
|
|
"score": 40.7,
|
|
"strict": 40.7
|
|
},
|
|
"AI Generated Debt": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"High Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Mid Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Low Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Cross-Module Arch": {
|
|
"score": 68.3,
|
|
"strict": 68.3
|
|
},
|
|
"Init Coupling": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Convention Drift": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Dep Health": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Test Strategy": {
|
|
"score": 46.4,
|
|
"strict": 46.4
|
|
},
|
|
"API Coherence": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Auth Consistency": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Stale Migration": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Structure Nav": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Design Coherence": {
|
|
"score": 40.9,
|
|
"strict": 40.9
|
|
},
|
|
"Duplication": {
|
|
"score": 84.9,
|
|
"strict": 84.9
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"timestamp": "2026-02-24T10:11:28+00:00",
|
|
"lang": "go",
|
|
"strict_score": 39.1,
|
|
"verified_strict_score": 78.4,
|
|
"objective_score": 78.4,
|
|
"overall_score": 39.1,
|
|
"open": 531,
|
|
"diff_new": 2,
|
|
"diff_resolved": 0,
|
|
"ignored": 0,
|
|
"raw_findings": 210,
|
|
"suppressed_pct": 0.0,
|
|
"ignore_patterns": 0,
|
|
"subjective_integrity": {
|
|
"status": "pass",
|
|
"matched_count": 0,
|
|
"reset_count": 0,
|
|
"target_score": 95.0
|
|
},
|
|
"dimension_scores": {
|
|
"File health": {
|
|
"score": 90.9,
|
|
"strict": 90.9
|
|
},
|
|
"Code quality": {
|
|
"score": 98.3,
|
|
"strict": 98.3
|
|
},
|
|
"Test health": {
|
|
"score": 40.8,
|
|
"strict": 40.8
|
|
},
|
|
"Security": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Naming Quality": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Logic Clarity": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Type Safety": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Contracts": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Error Consistency": {
|
|
"score": 45.2,
|
|
"strict": 45.2
|
|
},
|
|
"Abstraction Fit": {
|
|
"score": 40.7,
|
|
"strict": 40.7
|
|
},
|
|
"AI Generated Debt": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"High Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Mid Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Low Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Cross-Module Arch": {
|
|
"score": 68.3,
|
|
"strict": 68.3
|
|
},
|
|
"Init Coupling": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Convention Drift": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Dep Health": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Test Strategy": {
|
|
"score": 46.4,
|
|
"strict": 46.4
|
|
},
|
|
"API Coherence": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Auth Consistency": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Stale Migration": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Structure Nav": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Design Coherence": {
|
|
"score": 40.9,
|
|
"strict": 40.9
|
|
},
|
|
"Duplication": {
|
|
"score": 84.9,
|
|
"strict": 84.9
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"timestamp": "2026-02-24T10:11:38+00:00",
|
|
"lang": "go",
|
|
"strict_score": 39.1,
|
|
"verified_strict_score": 78.4,
|
|
"objective_score": 78.4,
|
|
"overall_score": 39.1,
|
|
"open": 369,
|
|
"diff_new": 0,
|
|
"diff_resolved": 164,
|
|
"ignored": 0,
|
|
"raw_findings": 210,
|
|
"suppressed_pct": 0.0,
|
|
"ignore_patterns": 0,
|
|
"subjective_integrity": {
|
|
"status": "pass",
|
|
"matched_count": 0,
|
|
"reset_count": 0,
|
|
"target_score": 95.0
|
|
},
|
|
"dimension_scores": {
|
|
"File health": {
|
|
"score": 90.9,
|
|
"strict": 90.9
|
|
},
|
|
"Code quality": {
|
|
"score": 98.3,
|
|
"strict": 98.3
|
|
},
|
|
"Test health": {
|
|
"score": 40.8,
|
|
"strict": 40.8
|
|
},
|
|
"Security": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Naming Quality": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Logic Clarity": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Type Safety": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Contracts": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Error Consistency": {
|
|
"score": 45.2,
|
|
"strict": 45.2
|
|
},
|
|
"Abstraction Fit": {
|
|
"score": 40.7,
|
|
"strict": 40.7
|
|
},
|
|
"AI Generated Debt": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"High Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Mid Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Low Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Cross-Module Arch": {
|
|
"score": 68.3,
|
|
"strict": 68.3
|
|
},
|
|
"Init Coupling": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Convention Drift": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Dep Health": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Test Strategy": {
|
|
"score": 46.4,
|
|
"strict": 46.4
|
|
},
|
|
"API Coherence": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Auth Consistency": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Stale Migration": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Structure Nav": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Design Coherence": {
|
|
"score": 40.9,
|
|
"strict": 40.9
|
|
},
|
|
"Duplication": {
|
|
"score": 84.9,
|
|
"strict": 84.9
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"timestamp": "2026-02-24T10:14:02+00:00",
|
|
"lang": "go",
|
|
"strict_score": 39.6,
|
|
"verified_strict_score": 78.4,
|
|
"objective_score": 78.4,
|
|
"overall_score": 39.6,
|
|
"open": 389,
|
|
"diff_new": 20,
|
|
"diff_resolved": 0,
|
|
"ignored": 0,
|
|
"raw_findings": 20,
|
|
"suppressed_pct": 0.0,
|
|
"ignore_patterns": 0,
|
|
"subjective_integrity": {
|
|
"status": "disabled",
|
|
"matched_count": 0,
|
|
"reset_count": 0,
|
|
"target_score": null
|
|
},
|
|
"dimension_scores": {
|
|
"File health": {
|
|
"score": 90.9,
|
|
"strict": 90.9
|
|
},
|
|
"Code quality": {
|
|
"score": 98.3,
|
|
"strict": 98.3
|
|
},
|
|
"Test health": {
|
|
"score": 40.8,
|
|
"strict": 40.8
|
|
},
|
|
"Security": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Naming Quality": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Logic Clarity": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Type Safety": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Contracts": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Error Consistency": {
|
|
"score": 44.4,
|
|
"strict": 44.4
|
|
},
|
|
"Abstraction Fit": {
|
|
"score": 45.8,
|
|
"strict": 45.8
|
|
},
|
|
"AI Generated Debt": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"High Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Mid Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Low Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Cross-Module Arch": {
|
|
"score": 56.0,
|
|
"strict": 56.0
|
|
},
|
|
"Init Coupling": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Convention Drift": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Dep Health": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Test Strategy": {
|
|
"score": 46.3,
|
|
"strict": 46.3
|
|
},
|
|
"API Coherence": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Auth Consistency": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Stale Migration": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Structure Nav": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Design Coherence": {
|
|
"score": 49.3,
|
|
"strict": 49.3
|
|
},
|
|
"Duplication": {
|
|
"score": 84.9,
|
|
"strict": 84.9
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"timestamp": "2026-02-24T10:14:29+00:00",
|
|
"lang": "go",
|
|
"strict_score": 39.6,
|
|
"verified_strict_score": 78.4,
|
|
"objective_score": 78.4,
|
|
"overall_score": 39.6,
|
|
"open": 541,
|
|
"diff_new": 24,
|
|
"diff_resolved": 0,
|
|
"ignored": 0,
|
|
"raw_findings": 521,
|
|
"suppressed_pct": 0.0,
|
|
"ignore_patterns": 0,
|
|
"subjective_integrity": {
|
|
"status": "pass",
|
|
"matched_count": 0,
|
|
"reset_count": 0,
|
|
"target_score": 95.0
|
|
},
|
|
"dimension_scores": {
|
|
"File health": {
|
|
"score": 90.9,
|
|
"strict": 90.9
|
|
},
|
|
"Code quality": {
|
|
"score": 98.3,
|
|
"strict": 98.3
|
|
},
|
|
"Duplication": {
|
|
"score": 84.9,
|
|
"strict": 84.9
|
|
},
|
|
"Test health": {
|
|
"score": 40.8,
|
|
"strict": 40.8
|
|
},
|
|
"Security": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Naming Quality": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Logic Clarity": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Type Safety": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Contracts": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Error Consistency": {
|
|
"score": 44.4,
|
|
"strict": 44.4
|
|
},
|
|
"Abstraction Fit": {
|
|
"score": 45.8,
|
|
"strict": 45.8
|
|
},
|
|
"AI Generated Debt": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"High Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Mid Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Low Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Cross-Module Arch": {
|
|
"score": 56.0,
|
|
"strict": 56.0
|
|
},
|
|
"Init Coupling": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Convention Drift": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Dep Health": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Test Strategy": {
|
|
"score": 46.3,
|
|
"strict": 46.3
|
|
},
|
|
"API Coherence": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Auth Consistency": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Stale Migration": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Structure Nav": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Design Coherence": {
|
|
"score": 49.3,
|
|
"strict": 49.3
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"timestamp": "2026-02-24T10:14:45+00:00",
|
|
"lang": "go",
|
|
"strict_score": 39.6,
|
|
"verified_strict_score": 78.4,
|
|
"objective_score": 78.4,
|
|
"overall_score": 39.6,
|
|
"open": 541,
|
|
"diff_new": 0,
|
|
"diff_resolved": 0,
|
|
"ignored": 0,
|
|
"raw_findings": 210,
|
|
"suppressed_pct": 0.0,
|
|
"ignore_patterns": 0,
|
|
"subjective_integrity": {
|
|
"status": "pass",
|
|
"matched_count": 0,
|
|
"reset_count": 0,
|
|
"target_score": 95.0
|
|
},
|
|
"dimension_scores": {
|
|
"File health": {
|
|
"score": 90.9,
|
|
"strict": 90.9
|
|
},
|
|
"Code quality": {
|
|
"score": 98.3,
|
|
"strict": 98.3
|
|
},
|
|
"Test health": {
|
|
"score": 40.8,
|
|
"strict": 40.8
|
|
},
|
|
"Security": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Naming Quality": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Logic Clarity": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Type Safety": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Contracts": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Error Consistency": {
|
|
"score": 44.4,
|
|
"strict": 44.4
|
|
},
|
|
"Abstraction Fit": {
|
|
"score": 45.8,
|
|
"strict": 45.8
|
|
},
|
|
"AI Generated Debt": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"High Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Mid Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Low Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Cross-Module Arch": {
|
|
"score": 56.0,
|
|
"strict": 56.0
|
|
},
|
|
"Init Coupling": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Convention Drift": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Dep Health": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Test Strategy": {
|
|
"score": 46.3,
|
|
"strict": 46.3
|
|
},
|
|
"API Coherence": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Auth Consistency": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Stale Migration": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Structure Nav": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Design Coherence": {
|
|
"score": 49.3,
|
|
"strict": 49.3
|
|
},
|
|
"Duplication": {
|
|
"score": 84.9,
|
|
"strict": 84.9
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"timestamp": "2026-02-24T10:19:22+00:00",
|
|
"lang": "go",
|
|
"strict_score": 39.8,
|
|
"verified_strict_score": 78.4,
|
|
"objective_score": 78.4,
|
|
"overall_score": 39.8,
|
|
"open": 542,
|
|
"diff_new": 3,
|
|
"diff_resolved": 0,
|
|
"ignored": 0,
|
|
"raw_findings": 3,
|
|
"suppressed_pct": 0.0,
|
|
"ignore_patterns": 0,
|
|
"subjective_integrity": {
|
|
"status": "disabled",
|
|
"matched_count": 0,
|
|
"reset_count": 0,
|
|
"target_score": null
|
|
},
|
|
"dimension_scores": {
|
|
"File health": {
|
|
"score": 90.9,
|
|
"strict": 90.9
|
|
},
|
|
"Code quality": {
|
|
"score": 98.3,
|
|
"strict": 98.3
|
|
},
|
|
"Test health": {
|
|
"score": 40.8,
|
|
"strict": 40.8
|
|
},
|
|
"Security": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Naming Quality": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Logic Clarity": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Type Safety": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Contracts": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Error Consistency": {
|
|
"score": 56.9,
|
|
"strict": 56.9
|
|
},
|
|
"Abstraction Fit": {
|
|
"score": 45.8,
|
|
"strict": 45.8
|
|
},
|
|
"AI Generated Debt": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"High Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Mid Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Low Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Cross-Module Arch": {
|
|
"score": 56.0,
|
|
"strict": 56.0
|
|
},
|
|
"Init Coupling": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Convention Drift": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Dep Health": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Test Strategy": {
|
|
"score": 46.3,
|
|
"strict": 46.3
|
|
},
|
|
"API Coherence": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Auth Consistency": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Stale Migration": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Structure Nav": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Design Coherence": {
|
|
"score": 49.3,
|
|
"strict": 49.3
|
|
},
|
|
"Duplication": {
|
|
"score": 84.9,
|
|
"strict": 84.9
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"timestamp": "2026-02-24T10:19:49+00:00",
|
|
"lang": "go",
|
|
"strict_score": 39.8,
|
|
"verified_strict_score": 78.4,
|
|
"objective_score": 78.4,
|
|
"overall_score": 39.8,
|
|
"open": 525,
|
|
"diff_new": 1,
|
|
"diff_resolved": 0,
|
|
"ignored": 0,
|
|
"raw_findings": 522,
|
|
"suppressed_pct": 0.0,
|
|
"ignore_patterns": 0,
|
|
"subjective_integrity": {
|
|
"status": "pass",
|
|
"matched_count": 0,
|
|
"reset_count": 0,
|
|
"target_score": 95.0
|
|
},
|
|
"dimension_scores": {
|
|
"File health": {
|
|
"score": 90.9,
|
|
"strict": 90.9
|
|
},
|
|
"Code quality": {
|
|
"score": 98.3,
|
|
"strict": 98.3
|
|
},
|
|
"Duplication": {
|
|
"score": 84.9,
|
|
"strict": 84.9
|
|
},
|
|
"Test health": {
|
|
"score": 40.7,
|
|
"strict": 40.7
|
|
},
|
|
"Security": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Naming Quality": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Logic Clarity": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Type Safety": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Contracts": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Error Consistency": {
|
|
"score": 56.9,
|
|
"strict": 56.9
|
|
},
|
|
"Abstraction Fit": {
|
|
"score": 45.8,
|
|
"strict": 45.8
|
|
},
|
|
"AI Generated Debt": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"High Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Mid Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Low Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Cross-Module Arch": {
|
|
"score": 56.0,
|
|
"strict": 56.0
|
|
},
|
|
"Init Coupling": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Convention Drift": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Dep Health": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Test Strategy": {
|
|
"score": 46.3,
|
|
"strict": 46.3
|
|
},
|
|
"API Coherence": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Auth Consistency": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Stale Migration": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Structure Nav": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Design Coherence": {
|
|
"score": 49.3,
|
|
"strict": 49.3
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"timestamp": "2026-02-24T10:23:18+00:00",
|
|
"lang": "go",
|
|
"strict_score": 39.7,
|
|
"verified_strict_score": 78.4,
|
|
"objective_score": 78.4,
|
|
"overall_score": 39.7,
|
|
"open": 529,
|
|
"diff_new": 5,
|
|
"diff_resolved": 0,
|
|
"ignored": 0,
|
|
"raw_findings": 5,
|
|
"suppressed_pct": 0.0,
|
|
"ignore_patterns": 0,
|
|
"subjective_integrity": {
|
|
"status": "disabled",
|
|
"matched_count": 0,
|
|
"reset_count": 0,
|
|
"target_score": null
|
|
},
|
|
"dimension_scores": {
|
|
"File health": {
|
|
"score": 90.9,
|
|
"strict": 90.9
|
|
},
|
|
"Code quality": {
|
|
"score": 98.3,
|
|
"strict": 98.3
|
|
},
|
|
"Duplication": {
|
|
"score": 84.9,
|
|
"strict": 84.9
|
|
},
|
|
"Test health": {
|
|
"score": 40.7,
|
|
"strict": 40.7
|
|
},
|
|
"Security": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Naming Quality": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Logic Clarity": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Type Safety": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Contracts": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Error Consistency": {
|
|
"score": 50.0,
|
|
"strict": 50.0
|
|
},
|
|
"Abstraction Fit": {
|
|
"score": 45.8,
|
|
"strict": 45.8
|
|
},
|
|
"AI Generated Debt": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"High Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Mid Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Low Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Cross-Module Arch": {
|
|
"score": 56.0,
|
|
"strict": 56.0
|
|
},
|
|
"Init Coupling": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Convention Drift": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Dep Health": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Test Strategy": {
|
|
"score": 46.3,
|
|
"strict": 46.3
|
|
},
|
|
"API Coherence": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Auth Consistency": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Stale Migration": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Structure Nav": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Design Coherence": {
|
|
"score": 49.3,
|
|
"strict": 49.3
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"timestamp": "2026-02-24T10:23:45+00:00",
|
|
"lang": "go",
|
|
"strict_score": 39.7,
|
|
"verified_strict_score": 78.4,
|
|
"objective_score": 78.4,
|
|
"overall_score": 39.7,
|
|
"open": 527,
|
|
"diff_new": 3,
|
|
"diff_resolved": 3,
|
|
"ignored": 0,
|
|
"raw_findings": 522,
|
|
"suppressed_pct": 0.0,
|
|
"ignore_patterns": 0,
|
|
"subjective_integrity": {
|
|
"status": "pass",
|
|
"matched_count": 0,
|
|
"reset_count": 0,
|
|
"target_score": 95.0
|
|
},
|
|
"dimension_scores": {
|
|
"File health": {
|
|
"score": 90.9,
|
|
"strict": 90.9
|
|
},
|
|
"Code quality": {
|
|
"score": 98.3,
|
|
"strict": 98.3
|
|
},
|
|
"Duplication": {
|
|
"score": 84.9,
|
|
"strict": 84.9
|
|
},
|
|
"Test health": {
|
|
"score": 40.8,
|
|
"strict": 40.8
|
|
},
|
|
"Security": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Naming Quality": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Logic Clarity": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Type Safety": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Contracts": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Error Consistency": {
|
|
"score": 50.0,
|
|
"strict": 50.0
|
|
},
|
|
"Abstraction Fit": {
|
|
"score": 45.8,
|
|
"strict": 45.8
|
|
},
|
|
"AI Generated Debt": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"High Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Mid Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Low Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Cross-Module Arch": {
|
|
"score": 56.0,
|
|
"strict": 56.0
|
|
},
|
|
"Init Coupling": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Convention Drift": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Dep Health": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Test Strategy": {
|
|
"score": 46.3,
|
|
"strict": 46.3
|
|
},
|
|
"API Coherence": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Auth Consistency": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Stale Migration": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Structure Nav": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Design Coherence": {
|
|
"score": 49.3,
|
|
"strict": 49.3
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"timestamp": "2026-02-24T10:32:25+00:00",
|
|
"lang": "go",
|
|
"strict_score": 39.7,
|
|
"verified_strict_score": 78.4,
|
|
"objective_score": 78.4,
|
|
"overall_score": 39.7,
|
|
"open": 529,
|
|
"diff_new": 4,
|
|
"diff_resolved": 0,
|
|
"ignored": 0,
|
|
"raw_findings": 4,
|
|
"suppressed_pct": 0.0,
|
|
"ignore_patterns": 0,
|
|
"subjective_integrity": {
|
|
"status": "disabled",
|
|
"matched_count": 0,
|
|
"reset_count": 0,
|
|
"target_score": null
|
|
},
|
|
"dimension_scores": {
|
|
"File health": {
|
|
"score": 90.9,
|
|
"strict": 90.9
|
|
},
|
|
"Code quality": {
|
|
"score": 98.3,
|
|
"strict": 98.3
|
|
},
|
|
"Duplication": {
|
|
"score": 84.9,
|
|
"strict": 84.9
|
|
},
|
|
"Test health": {
|
|
"score": 40.8,
|
|
"strict": 40.8
|
|
},
|
|
"Security": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Naming Quality": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Logic Clarity": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Type Safety": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Contracts": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Error Consistency": {
|
|
"score": 47.2,
|
|
"strict": 47.2
|
|
},
|
|
"Abstraction Fit": {
|
|
"score": 45.8,
|
|
"strict": 45.8
|
|
},
|
|
"AI Generated Debt": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"High Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Mid Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Low Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Cross-Module Arch": {
|
|
"score": 56.0,
|
|
"strict": 56.0
|
|
},
|
|
"Init Coupling": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Convention Drift": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Dep Health": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Test Strategy": {
|
|
"score": 46.3,
|
|
"strict": 46.3
|
|
},
|
|
"API Coherence": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Auth Consistency": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Stale Migration": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Structure Nav": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Design Coherence": {
|
|
"score": 49.3,
|
|
"strict": 49.3
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"timestamp": "2026-02-24T10:33:02+00:00",
|
|
"lang": "go",
|
|
"strict_score": 39.7,
|
|
"verified_strict_score": 78.4,
|
|
"objective_score": 78.4,
|
|
"overall_score": 39.7,
|
|
"open": 526,
|
|
"diff_new": 0,
|
|
"diff_resolved": 0,
|
|
"ignored": 0,
|
|
"raw_findings": 522,
|
|
"suppressed_pct": 0.0,
|
|
"ignore_patterns": 0,
|
|
"subjective_integrity": {
|
|
"status": "pass",
|
|
"matched_count": 0,
|
|
"reset_count": 0,
|
|
"target_score": 95.0
|
|
},
|
|
"dimension_scores": {
|
|
"File health": {
|
|
"score": 90.9,
|
|
"strict": 90.9
|
|
},
|
|
"Code quality": {
|
|
"score": 98.3,
|
|
"strict": 98.3
|
|
},
|
|
"Duplication": {
|
|
"score": 84.9,
|
|
"strict": 84.9
|
|
},
|
|
"Test health": {
|
|
"score": 40.8,
|
|
"strict": 40.8
|
|
},
|
|
"Security": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Naming Quality": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Logic Clarity": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Type Safety": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Contracts": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Error Consistency": {
|
|
"score": 47.2,
|
|
"strict": 47.2
|
|
},
|
|
"Abstraction Fit": {
|
|
"score": 45.8,
|
|
"strict": 45.8
|
|
},
|
|
"AI Generated Debt": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"High Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Mid Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Low Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Cross-Module Arch": {
|
|
"score": 56.0,
|
|
"strict": 56.0
|
|
},
|
|
"Init Coupling": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Convention Drift": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Dep Health": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Test Strategy": {
|
|
"score": 46.3,
|
|
"strict": 46.3
|
|
},
|
|
"API Coherence": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Auth Consistency": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Stale Migration": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Structure Nav": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Design Coherence": {
|
|
"score": 49.3,
|
|
"strict": 49.3
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"timestamp": "2026-02-24T10:48:39+00:00",
|
|
"lang": "go",
|
|
"strict_score": 39.8,
|
|
"verified_strict_score": 78.4,
|
|
"objective_score": 78.4,
|
|
"overall_score": 39.8,
|
|
"open": 528,
|
|
"diff_new": 4,
|
|
"diff_resolved": 0,
|
|
"ignored": 0,
|
|
"raw_findings": 4,
|
|
"suppressed_pct": 0.0,
|
|
"ignore_patterns": 0,
|
|
"subjective_integrity": {
|
|
"status": "disabled",
|
|
"matched_count": 0,
|
|
"reset_count": 0,
|
|
"target_score": null
|
|
},
|
|
"dimension_scores": {
|
|
"File health": {
|
|
"score": 90.9,
|
|
"strict": 90.9
|
|
},
|
|
"Code quality": {
|
|
"score": 98.3,
|
|
"strict": 98.3
|
|
},
|
|
"Duplication": {
|
|
"score": 84.9,
|
|
"strict": 84.9
|
|
},
|
|
"Test health": {
|
|
"score": 40.8,
|
|
"strict": 40.8
|
|
},
|
|
"Security": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Naming Quality": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Logic Clarity": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Type Safety": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Contracts": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Error Consistency": {
|
|
"score": 52.1,
|
|
"strict": 52.1
|
|
},
|
|
"Abstraction Fit": {
|
|
"score": 45.8,
|
|
"strict": 45.8
|
|
},
|
|
"AI Generated Debt": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"High Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Mid Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Low Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Cross-Module Arch": {
|
|
"score": 56.0,
|
|
"strict": 56.0
|
|
},
|
|
"Init Coupling": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Convention Drift": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Dep Health": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Test Strategy": {
|
|
"score": 46.3,
|
|
"strict": 46.3
|
|
},
|
|
"API Coherence": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Auth Consistency": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Stale Migration": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Structure Nav": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Design Coherence": {
|
|
"score": 49.3,
|
|
"strict": 49.3
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"timestamp": "2026-02-24T10:49:12+00:00",
|
|
"lang": "go",
|
|
"strict_score": 39.8,
|
|
"verified_strict_score": 78.4,
|
|
"objective_score": 78.4,
|
|
"overall_score": 39.8,
|
|
"open": 527,
|
|
"diff_new": 1,
|
|
"diff_resolved": 0,
|
|
"ignored": 0,
|
|
"raw_findings": 523,
|
|
"suppressed_pct": 0.0,
|
|
"ignore_patterns": 0,
|
|
"subjective_integrity": {
|
|
"status": "pass",
|
|
"matched_count": 0,
|
|
"reset_count": 0,
|
|
"target_score": 95.0
|
|
},
|
|
"dimension_scores": {
|
|
"File health": {
|
|
"score": 90.9,
|
|
"strict": 90.9
|
|
},
|
|
"Code quality": {
|
|
"score": 98.3,
|
|
"strict": 98.3
|
|
},
|
|
"Duplication": {
|
|
"score": 84.9,
|
|
"strict": 84.9
|
|
},
|
|
"Test health": {
|
|
"score": 40.8,
|
|
"strict": 40.8
|
|
},
|
|
"Security": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Naming Quality": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Logic Clarity": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Type Safety": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Contracts": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Error Consistency": {
|
|
"score": 52.1,
|
|
"strict": 52.1
|
|
},
|
|
"Abstraction Fit": {
|
|
"score": 45.8,
|
|
"strict": 45.8
|
|
},
|
|
"AI Generated Debt": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"High Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Mid Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Low Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Cross-Module Arch": {
|
|
"score": 56.0,
|
|
"strict": 56.0
|
|
},
|
|
"Init Coupling": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Convention Drift": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Dep Health": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Test Strategy": {
|
|
"score": 46.3,
|
|
"strict": 46.3
|
|
},
|
|
"API Coherence": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Auth Consistency": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Stale Migration": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Structure Nav": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Design Coherence": {
|
|
"score": 49.3,
|
|
"strict": 49.3
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"timestamp": "2026-02-24T10:54:51+00:00",
|
|
"lang": "go",
|
|
"strict_score": 39.8,
|
|
"verified_strict_score": 78.4,
|
|
"objective_score": 78.4,
|
|
"overall_score": 39.8,
|
|
"open": 527,
|
|
"diff_new": 3,
|
|
"diff_resolved": 0,
|
|
"ignored": 0,
|
|
"raw_findings": 3,
|
|
"suppressed_pct": 0.0,
|
|
"ignore_patterns": 0,
|
|
"subjective_integrity": {
|
|
"status": "disabled",
|
|
"matched_count": 0,
|
|
"reset_count": 0,
|
|
"target_score": null
|
|
},
|
|
"dimension_scores": {
|
|
"File health": {
|
|
"score": 90.9,
|
|
"strict": 90.9
|
|
},
|
|
"Code quality": {
|
|
"score": 98.3,
|
|
"strict": 98.3
|
|
},
|
|
"Duplication": {
|
|
"score": 84.9,
|
|
"strict": 84.9
|
|
},
|
|
"Test health": {
|
|
"score": 40.8,
|
|
"strict": 40.8
|
|
},
|
|
"Security": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Naming Quality": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Logic Clarity": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Type Safety": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Contracts": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Error Consistency": {
|
|
"score": 56.5,
|
|
"strict": 56.5
|
|
},
|
|
"Abstraction Fit": {
|
|
"score": 45.8,
|
|
"strict": 45.8
|
|
},
|
|
"AI Generated Debt": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"High Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Mid Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Low Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Cross-Module Arch": {
|
|
"score": 56.0,
|
|
"strict": 56.0
|
|
},
|
|
"Init Coupling": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Convention Drift": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Dep Health": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Test Strategy": {
|
|
"score": 46.3,
|
|
"strict": 46.3
|
|
},
|
|
"API Coherence": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Auth Consistency": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Stale Migration": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Structure Nav": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Design Coherence": {
|
|
"score": 49.3,
|
|
"strict": 49.3
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"timestamp": "2026-02-24T10:55:20+00:00",
|
|
"lang": "go",
|
|
"strict_score": 39.8,
|
|
"verified_strict_score": 78.4,
|
|
"objective_score": 78.4,
|
|
"overall_score": 39.8,
|
|
"open": 527,
|
|
"diff_new": 1,
|
|
"diff_resolved": 0,
|
|
"ignored": 0,
|
|
"raw_findings": 524,
|
|
"suppressed_pct": 0.0,
|
|
"ignore_patterns": 0,
|
|
"subjective_integrity": {
|
|
"status": "pass",
|
|
"matched_count": 0,
|
|
"reset_count": 0,
|
|
"target_score": 95.0
|
|
},
|
|
"dimension_scores": {
|
|
"File health": {
|
|
"score": 90.9,
|
|
"strict": 90.9
|
|
},
|
|
"Code quality": {
|
|
"score": 98.3,
|
|
"strict": 98.3
|
|
},
|
|
"Duplication": {
|
|
"score": 84.8,
|
|
"strict": 84.8
|
|
},
|
|
"Test health": {
|
|
"score": 40.8,
|
|
"strict": 40.8
|
|
},
|
|
"Security": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Naming Quality": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Logic Clarity": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Type Safety": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Contracts": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Error Consistency": {
|
|
"score": 56.5,
|
|
"strict": 56.5
|
|
},
|
|
"Abstraction Fit": {
|
|
"score": 45.8,
|
|
"strict": 45.8
|
|
},
|
|
"AI Generated Debt": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"High Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Mid Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Low Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Cross-Module Arch": {
|
|
"score": 56.0,
|
|
"strict": 56.0
|
|
},
|
|
"Init Coupling": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Convention Drift": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Dep Health": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Test Strategy": {
|
|
"score": 46.3,
|
|
"strict": 46.3
|
|
},
|
|
"API Coherence": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Auth Consistency": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Stale Migration": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Structure Nav": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Design Coherence": {
|
|
"score": 49.3,
|
|
"strict": 49.3
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"timestamp": "2026-02-24T11:05:03+00:00",
|
|
"lang": "go",
|
|
"strict_score": 39.8,
|
|
"verified_strict_score": 78.4,
|
|
"objective_score": 78.4,
|
|
"overall_score": 39.8,
|
|
"open": 529,
|
|
"diff_new": 3,
|
|
"diff_resolved": 0,
|
|
"ignored": 0,
|
|
"raw_findings": 3,
|
|
"suppressed_pct": 0.0,
|
|
"ignore_patterns": 0,
|
|
"subjective_integrity": {
|
|
"status": "disabled",
|
|
"matched_count": 0,
|
|
"reset_count": 0,
|
|
"target_score": null
|
|
},
|
|
"dimension_scores": {
|
|
"File health": {
|
|
"score": 90.9,
|
|
"strict": 90.9
|
|
},
|
|
"Code quality": {
|
|
"score": 98.3,
|
|
"strict": 98.3
|
|
},
|
|
"Duplication": {
|
|
"score": 84.8,
|
|
"strict": 84.8
|
|
},
|
|
"Test health": {
|
|
"score": 40.8,
|
|
"strict": 40.8
|
|
},
|
|
"Security": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Naming Quality": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Logic Clarity": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Type Safety": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Contracts": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Error Consistency": {
|
|
"score": 56.5,
|
|
"strict": 56.5
|
|
},
|
|
"Abstraction Fit": {
|
|
"score": 45.8,
|
|
"strict": 45.8
|
|
},
|
|
"AI Generated Debt": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"High Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Mid Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Low Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Cross-Module Arch": {
|
|
"score": 56.0,
|
|
"strict": 56.0
|
|
},
|
|
"Init Coupling": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Convention Drift": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Dep Health": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Test Strategy": {
|
|
"score": 46.3,
|
|
"strict": 46.3
|
|
},
|
|
"API Coherence": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Auth Consistency": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Stale Migration": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Structure Nav": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Design Coherence": {
|
|
"score": 49.3,
|
|
"strict": 49.3
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"timestamp": "2026-02-24T11:05:35+00:00",
|
|
"lang": "go",
|
|
"strict_score": 39.8,
|
|
"verified_strict_score": 78.4,
|
|
"objective_score": 78.4,
|
|
"overall_score": 39.8,
|
|
"open": 527,
|
|
"diff_new": 0,
|
|
"diff_resolved": 0,
|
|
"ignored": 0,
|
|
"raw_findings": 524,
|
|
"suppressed_pct": 0.0,
|
|
"ignore_patterns": 0,
|
|
"subjective_integrity": {
|
|
"status": "pass",
|
|
"matched_count": 0,
|
|
"reset_count": 0,
|
|
"target_score": 95.0
|
|
},
|
|
"dimension_scores": {
|
|
"File health": {
|
|
"score": 90.9,
|
|
"strict": 90.9
|
|
},
|
|
"Code quality": {
|
|
"score": 98.3,
|
|
"strict": 98.3
|
|
},
|
|
"Duplication": {
|
|
"score": 84.9,
|
|
"strict": 84.9
|
|
},
|
|
"Test health": {
|
|
"score": 40.8,
|
|
"strict": 40.8
|
|
},
|
|
"Security": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Naming Quality": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Logic Clarity": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Type Safety": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Contracts": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Error Consistency": {
|
|
"score": 56.5,
|
|
"strict": 56.5
|
|
},
|
|
"Abstraction Fit": {
|
|
"score": 45.8,
|
|
"strict": 45.8
|
|
},
|
|
"AI Generated Debt": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"High Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Mid Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Low Elegance": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Cross-Module Arch": {
|
|
"score": 56.0,
|
|
"strict": 56.0
|
|
},
|
|
"Init Coupling": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Convention Drift": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Dep Health": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Test Strategy": {
|
|
"score": 46.3,
|
|
"strict": 46.3
|
|
},
|
|
"API Coherence": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Auth Consistency": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Stale Migration": {
|
|
"score": 100.0,
|
|
"strict": 100.0
|
|
},
|
|
"Structure Nav": {
|
|
"score": 0.0,
|
|
"strict": 0.0
|
|
},
|
|
"Design Coherence": {
|
|
"score": 49.3,
|
|
"strict": 49.3
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"tool_hash": "c8e8b32df435",
|
|
"scan_path": ".",
|
|
"scan_completeness": {
|
|
"go": "full"
|
|
},
|
|
"potentials": {
|
|
"go": {
|
|
"structural": 116,
|
|
"flat_dirs": 42,
|
|
"signature": 12,
|
|
"test_coverage": 1449,
|
|
"security": 116,
|
|
"subjective_review": 113,
|
|
"boilerplate_duplication": 256,
|
|
"dupes": 1105,
|
|
"stale_wontfix": 0
|
|
}
|
|
},
|
|
"codebase_metrics": {
|
|
"go": {
|
|
"total_files": 153,
|
|
"total_loc": 32573,
|
|
"total_directories": 42
|
|
}
|
|
},
|
|
"dimension_scores": {
|
|
"File health": {
|
|
"score": 90.9,
|
|
"strict_score": 90.9,
|
|
"verified_strict_score": 90.9,
|
|
"checks": 116,
|
|
"issues": 15,
|
|
"tier": 3,
|
|
"detectors": {
|
|
"structural": {
|
|
"potential": 116,
|
|
"pass_rate": 0.9094827586206896,
|
|
"issues": 15,
|
|
"weighted_failures": 10.499999999999998
|
|
}
|
|
},
|
|
"strict": 90.9
|
|
},
|
|
"Code quality": {
|
|
"score": 98.3,
|
|
"strict_score": 98.3,
|
|
"verified_strict_score": 98.3,
|
|
"checks": 42,
|
|
"issues": 1,
|
|
"tier": 3,
|
|
"detectors": {
|
|
"flat_dirs": {
|
|
"potential": 42,
|
|
"pass_rate": 0.9833333333333333,
|
|
"issues": 1,
|
|
"weighted_failures": 0.7
|
|
}
|
|
},
|
|
"strict": 98.3
|
|
},
|
|
"Duplication": {
|
|
"score": 84.9,
|
|
"strict_score": 84.9,
|
|
"verified_strict_score": 84.9,
|
|
"checks": 1361,
|
|
"issues": 296,
|
|
"tier": 3,
|
|
"detectors": {
|
|
"dupes": {
|
|
"potential": 1105,
|
|
"pass_rate": 0.9989140271493212,
|
|
"issues": 4,
|
|
"weighted_failures": 1.2
|
|
},
|
|
"boilerplate_duplication": {
|
|
"potential": 256,
|
|
"pass_rate": 0.20156250000000342,
|
|
"issues": 292,
|
|
"weighted_failures": 204.39999999999912
|
|
}
|
|
},
|
|
"strict": 84.9
|
|
},
|
|
"Test health": {
|
|
"score": 40.8,
|
|
"strict_score": 40.8,
|
|
"verified_strict_score": 40.8,
|
|
"checks": 1562,
|
|
"issues": 177,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"test_coverage": {
|
|
"potential": 1449,
|
|
"pass_rate": 0.3857561425419955,
|
|
"issues": 64,
|
|
"weighted_failures": 890.0393494566486
|
|
},
|
|
"subjective_review": {
|
|
"potential": 113,
|
|
"pass_rate": 0.7,
|
|
"issues": 113,
|
|
"weighted_failures": 33.9
|
|
}
|
|
},
|
|
"strict": 40.8
|
|
},
|
|
"Security": {
|
|
"score": 100.0,
|
|
"strict_score": 100.0,
|
|
"verified_strict_score": 100.0,
|
|
"checks": 116,
|
|
"issues": 0,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"security": {
|
|
"potential": 116,
|
|
"pass_rate": 1.0,
|
|
"issues": 0,
|
|
"weighted_failures": 0.0
|
|
}
|
|
},
|
|
"strict": 100.0
|
|
},
|
|
"Naming Quality": {
|
|
"score": 0.0,
|
|
"strict_score": 0.0,
|
|
"verified_strict_score": 0.0,
|
|
"checks": 10,
|
|
"issues": 0,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"subjective_assessment": {
|
|
"potential": 10,
|
|
"pass_rate": 0.0,
|
|
"issues": 0,
|
|
"weighted_failures": 10.0,
|
|
"assessment_score": 0.0,
|
|
"placeholder": true,
|
|
"dimension_key": "naming_quality",
|
|
"configured_weight": 2.0,
|
|
"components": []
|
|
}
|
|
},
|
|
"strict": 0.0
|
|
},
|
|
"Logic Clarity": {
|
|
"score": 0.0,
|
|
"strict_score": 0.0,
|
|
"verified_strict_score": 0.0,
|
|
"checks": 10,
|
|
"issues": 0,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"subjective_assessment": {
|
|
"potential": 10,
|
|
"pass_rate": 0.0,
|
|
"issues": 0,
|
|
"weighted_failures": 10.0,
|
|
"assessment_score": 0.0,
|
|
"placeholder": true,
|
|
"dimension_key": "logic_clarity",
|
|
"configured_weight": 6.0,
|
|
"components": []
|
|
}
|
|
},
|
|
"strict": 0.0
|
|
},
|
|
"Type Safety": {
|
|
"score": 0.0,
|
|
"strict_score": 0.0,
|
|
"verified_strict_score": 0.0,
|
|
"checks": 10,
|
|
"issues": 0,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"subjective_assessment": {
|
|
"potential": 10,
|
|
"pass_rate": 0.0,
|
|
"issues": 0,
|
|
"weighted_failures": 10.0,
|
|
"assessment_score": 0.0,
|
|
"placeholder": true,
|
|
"dimension_key": "type_safety",
|
|
"configured_weight": 12.0,
|
|
"components": []
|
|
}
|
|
},
|
|
"strict": 0.0
|
|
},
|
|
"Contracts": {
|
|
"score": 0.0,
|
|
"strict_score": 0.0,
|
|
"verified_strict_score": 0.0,
|
|
"checks": 10,
|
|
"issues": 0,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"subjective_assessment": {
|
|
"potential": 10,
|
|
"pass_rate": 0.0,
|
|
"issues": 0,
|
|
"weighted_failures": 10.0,
|
|
"assessment_score": 0.0,
|
|
"placeholder": true,
|
|
"dimension_key": "contract_coherence",
|
|
"configured_weight": 12.0,
|
|
"components": []
|
|
}
|
|
},
|
|
"strict": 0.0
|
|
},
|
|
"Error Consistency": {
|
|
"score": 56.5,
|
|
"strict_score": 56.5,
|
|
"verified_strict_score": 56.5,
|
|
"checks": 10,
|
|
"issues": 2,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"subjective_assessment": {
|
|
"potential": 10,
|
|
"pass_rate": 0.565,
|
|
"issues": 2,
|
|
"weighted_failures": 4.35,
|
|
"assessment_score": 56.5,
|
|
"placeholder": false,
|
|
"dimension_key": "error_consistency",
|
|
"configured_weight": 3.0,
|
|
"components": []
|
|
}
|
|
},
|
|
"strict": 56.5
|
|
},
|
|
"Abstraction Fit": {
|
|
"score": 45.8,
|
|
"strict_score": 45.8,
|
|
"verified_strict_score": 45.8,
|
|
"checks": 10,
|
|
"issues": 0,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"subjective_assessment": {
|
|
"potential": 10,
|
|
"pass_rate": 0.458,
|
|
"issues": 0,
|
|
"weighted_failures": 5.42,
|
|
"assessment_score": 45.8,
|
|
"placeholder": false,
|
|
"dimension_key": "abstraction_fitness",
|
|
"configured_weight": 8.0,
|
|
"components": [
|
|
"Abstraction Leverage",
|
|
"Indirection Cost",
|
|
"Interface Honesty"
|
|
],
|
|
"component_scores": {
|
|
"Abstraction Leverage": 65.5,
|
|
"Indirection Cost": 62.1,
|
|
"Interface Honesty": 71.5
|
|
}
|
|
}
|
|
},
|
|
"strict": 45.8
|
|
},
|
|
"AI Generated Debt": {
|
|
"score": 0.0,
|
|
"strict_score": 0.0,
|
|
"verified_strict_score": 0.0,
|
|
"checks": 10,
|
|
"issues": 0,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"subjective_assessment": {
|
|
"potential": 10,
|
|
"pass_rate": 0.0,
|
|
"issues": 0,
|
|
"weighted_failures": 10.0,
|
|
"assessment_score": 0.0,
|
|
"placeholder": true,
|
|
"dimension_key": "ai_generated_debt",
|
|
"configured_weight": 1.0,
|
|
"components": []
|
|
}
|
|
},
|
|
"strict": 0.0
|
|
},
|
|
"High Elegance": {
|
|
"score": 0.0,
|
|
"strict_score": 0.0,
|
|
"verified_strict_score": 0.0,
|
|
"checks": 10,
|
|
"issues": 0,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"subjective_assessment": {
|
|
"potential": 10,
|
|
"pass_rate": 0.0,
|
|
"issues": 0,
|
|
"weighted_failures": 10.0,
|
|
"assessment_score": 0.0,
|
|
"placeholder": true,
|
|
"dimension_key": "high_level_elegance",
|
|
"configured_weight": 22.0,
|
|
"components": []
|
|
}
|
|
},
|
|
"strict": 0.0
|
|
},
|
|
"Mid Elegance": {
|
|
"score": 0.0,
|
|
"strict_score": 0.0,
|
|
"verified_strict_score": 0.0,
|
|
"checks": 10,
|
|
"issues": 0,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"subjective_assessment": {
|
|
"potential": 10,
|
|
"pass_rate": 0.0,
|
|
"issues": 0,
|
|
"weighted_failures": 10.0,
|
|
"assessment_score": 0.0,
|
|
"placeholder": true,
|
|
"dimension_key": "mid_level_elegance",
|
|
"configured_weight": 22.0,
|
|
"components": []
|
|
}
|
|
},
|
|
"strict": 0.0
|
|
},
|
|
"Low Elegance": {
|
|
"score": 0.0,
|
|
"strict_score": 0.0,
|
|
"verified_strict_score": 0.0,
|
|
"checks": 10,
|
|
"issues": 0,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"subjective_assessment": {
|
|
"potential": 10,
|
|
"pass_rate": 0.0,
|
|
"issues": 0,
|
|
"weighted_failures": 10.0,
|
|
"assessment_score": 0.0,
|
|
"placeholder": true,
|
|
"dimension_key": "low_level_elegance",
|
|
"configured_weight": 12.0,
|
|
"components": []
|
|
}
|
|
},
|
|
"strict": 0.0
|
|
},
|
|
"Cross-Module Arch": {
|
|
"score": 56.0,
|
|
"strict_score": 56.0,
|
|
"verified_strict_score": 56.0,
|
|
"checks": 10,
|
|
"issues": 0,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"subjective_assessment": {
|
|
"potential": 10,
|
|
"pass_rate": 0.56,
|
|
"issues": 0,
|
|
"weighted_failures": 4.4,
|
|
"assessment_score": 56.0,
|
|
"placeholder": false,
|
|
"dimension_key": "cross_module_architecture",
|
|
"configured_weight": 1.0,
|
|
"components": []
|
|
}
|
|
},
|
|
"strict": 56.0
|
|
},
|
|
"Init Coupling": {
|
|
"score": 100.0,
|
|
"strict_score": 100.0,
|
|
"verified_strict_score": 100.0,
|
|
"checks": 10,
|
|
"issues": 0,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"subjective_assessment": {
|
|
"potential": 10,
|
|
"pass_rate": 1.0,
|
|
"issues": 0,
|
|
"weighted_failures": 0.0,
|
|
"assessment_score": 0.0,
|
|
"placeholder": false,
|
|
"dimension_key": "initialization_coupling",
|
|
"configured_weight": 1.0,
|
|
"components": []
|
|
}
|
|
},
|
|
"strict": 100.0
|
|
},
|
|
"Convention Drift": {
|
|
"score": 100.0,
|
|
"strict_score": 100.0,
|
|
"verified_strict_score": 100.0,
|
|
"checks": 10,
|
|
"issues": 0,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"subjective_assessment": {
|
|
"potential": 10,
|
|
"pass_rate": 1.0,
|
|
"issues": 0,
|
|
"weighted_failures": 0.0,
|
|
"assessment_score": 0.0,
|
|
"placeholder": false,
|
|
"dimension_key": "convention_outlier",
|
|
"configured_weight": 1.0,
|
|
"components": []
|
|
}
|
|
},
|
|
"strict": 100.0
|
|
},
|
|
"Dep Health": {
|
|
"score": 100.0,
|
|
"strict_score": 100.0,
|
|
"verified_strict_score": 100.0,
|
|
"checks": 10,
|
|
"issues": 0,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"subjective_assessment": {
|
|
"potential": 10,
|
|
"pass_rate": 1.0,
|
|
"issues": 0,
|
|
"weighted_failures": 0.0,
|
|
"assessment_score": 0.0,
|
|
"placeholder": false,
|
|
"dimension_key": "dependency_health",
|
|
"configured_weight": 1.0,
|
|
"components": []
|
|
}
|
|
},
|
|
"strict": 100.0
|
|
},
|
|
"Test Strategy": {
|
|
"score": 46.3,
|
|
"strict_score": 46.3,
|
|
"verified_strict_score": 46.3,
|
|
"checks": 10,
|
|
"issues": 0,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"subjective_assessment": {
|
|
"potential": 10,
|
|
"pass_rate": 0.463,
|
|
"issues": 0,
|
|
"weighted_failures": 5.37,
|
|
"assessment_score": 46.3,
|
|
"placeholder": false,
|
|
"dimension_key": "test_strategy",
|
|
"configured_weight": 1.0,
|
|
"components": []
|
|
}
|
|
},
|
|
"strict": 46.3
|
|
},
|
|
"API Coherence": {
|
|
"score": 100.0,
|
|
"strict_score": 100.0,
|
|
"verified_strict_score": 100.0,
|
|
"checks": 10,
|
|
"issues": 0,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"subjective_assessment": {
|
|
"potential": 10,
|
|
"pass_rate": 1.0,
|
|
"issues": 0,
|
|
"weighted_failures": 0.0,
|
|
"assessment_score": 0.0,
|
|
"placeholder": false,
|
|
"dimension_key": "api_surface_coherence",
|
|
"configured_weight": 1.0,
|
|
"components": []
|
|
}
|
|
},
|
|
"strict": 100.0
|
|
},
|
|
"Auth Consistency": {
|
|
"score": 100.0,
|
|
"strict_score": 100.0,
|
|
"verified_strict_score": 100.0,
|
|
"checks": 10,
|
|
"issues": 0,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"subjective_assessment": {
|
|
"potential": 10,
|
|
"pass_rate": 1.0,
|
|
"issues": 0,
|
|
"weighted_failures": 0.0,
|
|
"assessment_score": 0.0,
|
|
"placeholder": false,
|
|
"dimension_key": "authorization_consistency",
|
|
"configured_weight": 1.0,
|
|
"components": []
|
|
}
|
|
},
|
|
"strict": 100.0
|
|
},
|
|
"Stale Migration": {
|
|
"score": 100.0,
|
|
"strict_score": 100.0,
|
|
"verified_strict_score": 100.0,
|
|
"checks": 10,
|
|
"issues": 0,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"subjective_assessment": {
|
|
"potential": 10,
|
|
"pass_rate": 1.0,
|
|
"issues": 0,
|
|
"weighted_failures": 0.0,
|
|
"assessment_score": 0.0,
|
|
"placeholder": false,
|
|
"dimension_key": "incomplete_migration",
|
|
"configured_weight": 1.0,
|
|
"components": []
|
|
}
|
|
},
|
|
"strict": 100.0
|
|
},
|
|
"Structure Nav": {
|
|
"score": 0.0,
|
|
"strict_score": 0.0,
|
|
"verified_strict_score": 0.0,
|
|
"checks": 10,
|
|
"issues": 0,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"subjective_assessment": {
|
|
"potential": 10,
|
|
"pass_rate": 0.0,
|
|
"issues": 0,
|
|
"weighted_failures": 10.0,
|
|
"assessment_score": 0.0,
|
|
"placeholder": true,
|
|
"dimension_key": "package_organization",
|
|
"configured_weight": 5.0,
|
|
"components": []
|
|
}
|
|
},
|
|
"strict": 0.0
|
|
},
|
|
"Design Coherence": {
|
|
"score": 49.3,
|
|
"strict_score": 49.3,
|
|
"verified_strict_score": 49.3,
|
|
"checks": 10,
|
|
"issues": 0,
|
|
"tier": 4,
|
|
"detectors": {
|
|
"subjective_assessment": {
|
|
"potential": 10,
|
|
"pass_rate": 0.493,
|
|
"issues": 0,
|
|
"weighted_failures": 5.07,
|
|
"assessment_score": 49.3,
|
|
"placeholder": false,
|
|
"dimension_key": "design_coherence",
|
|
"configured_weight": 10.0,
|
|
"components": []
|
|
}
|
|
},
|
|
"strict": 49.3
|
|
}
|
|
},
|
|
"reminder_history": {
|
|
"zone_classification": 3,
|
|
"report_scores": 22,
|
|
"review_not_run": 2,
|
|
"badge_recommendation": 1,
|
|
"feedback_nudge": 3,
|
|
"stagnant_nudge": 9,
|
|
"review_findings_pending": 3
|
|
},
|
|
"review_cache": {
|
|
"holistic": {
|
|
"reviewed_at": "2026-02-24T11:05:03+00:00",
|
|
"file_count_at_review": 153,
|
|
"finding_count": 3
|
|
}
|
|
}
|
|
}
|