From ef2d8e274bc30dc11fd6c628e26ea61dd2b2f7db Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Thu, 3 Sep 2026 19:27:53 +0300 Subject: [PATCH] chore(tooling): adopt final W14 enforcement Use the immutable shared cohesion contract so repository metadata, documentation, specification monitoring, and CI remain aligned. Impact: none --- .github/workflows/ci.yml | 4 +- .golib.yaml | 4 +- ...3e64804927e11adeff3f1ed193e6c88a75abf.json | 19 ++++++ ...3e64804927e11adeff3f1ed193e6c88a75abf.json | 1 + CHANGELOG.md | 6 ++ Makefile | 1 + README.md | 6 +- modules.json | 2 +- specification/README.md | 2 + specification/upstream-reviews.md | 66 +++++++++++++++++++ 10 files changed, 104 insertions(+), 7 deletions(-) create mode 100644 .verification/by-input/mutation/ee29420c00b74caa48988accc1f3e64804927e11adeff3f1ed193e6c88a75abf.json create mode 100644 .verification/mutation/reports/ee29420c00b74caa48988accc1f3e64804927e11adeff3f1ed193e6c88a75abf.json create mode 100644 specification/upstream-reviews.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9ff673e..95b654b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,9 +20,9 @@ permissions: jobs: ci: - uses: faustbrian/go-library-tools/.github/workflows/library-ci.yml@6c76f5c670d193ce369a7242d4c634f1117286e9 # v1.3.0 cohesion enforcement + uses: faustbrian/go-library-tools/.github/workflows/library-ci.yml@531e4db50fd81a7201257a7b488a0cf22d333aca # v1.4.0 public-first resolution with: - tooling_sha: 6c76f5c670d193ce369a7242d4c634f1117286e9 + tooling_sha: 531e4db50fd81a7201257a7b488a0cf22d333aca release_dry_run: ${{ inputs.release_dry_run || false }} required: diff --git a/.golib.yaml b/.golib.yaml index f9ecbc8..dc9a0c2 100644 --- a/.golib.yaml +++ b/.golib.yaml @@ -1,6 +1,6 @@ schema_version: 1 -tool_version: v1.3.0 -tool_checksums_sha256: 72d38d7d0cab33bfeb9345df6b141eacf9841c5d6817f597ff25b957dc8dc48f +tool_version: v1.4.0 +tool_checksums_sha256: ba1b71d41dc9b58d5bfb411bc89ae2d45b6f3f778152714bfd1afeab0bef2f33 manifest: modules: modules.json diff --git a/.verification/by-input/mutation/ee29420c00b74caa48988accc1f3e64804927e11adeff3f1ed193e6c88a75abf.json b/.verification/by-input/mutation/ee29420c00b74caa48988accc1f3e64804927e11adeff3f1ed193e6c88a75abf.json new file mode 100644 index 0000000..868e8a7 --- /dev/null +++ b/.verification/by-input/mutation/ee29420c00b74caa48988accc1f3e64804927e11adeff3f1ed193e6c88a75abf.json @@ -0,0 +1,19 @@ +{ + "schema_version": 1, + "repository": "github.com/faustbrian/go-router", + "module": ".", + "package": ".", + "gate": "mutation", + "input_digest": "sha256:ee29420c00b74caa48988accc1f3e64804927e11adeff3f1ed193e6c88a75abf", + "verifier_digest": "sha256:9a9499ff68a8dfd49a0be7995590297a8ee563a1aa226bfd8b9361dc53058108", + "result": "passed", + "report_digest": "sha256:3ae9aeb641027eb399861cdcd1d8016bfe4fae05daaa52df3da0a8142a7a6e91", + "environment": { + "CGO_ENABLED": "1", + "GOARCH": "arm64", + "GOOS": "darwin", + "GOVERSION": "go1.26.6", + "gremlins_binary_sha256": "sha256:e05bf25d661b16ab96d6f2e17aed481d393930e0f24205cc341b010f887368a0" + }, + "completed_at": "2026-09-03T16:22:56.515252Z" +} diff --git a/.verification/mutation/reports/ee29420c00b74caa48988accc1f3e64804927e11adeff3f1ed193e6c88a75abf.json b/.verification/mutation/reports/ee29420c00b74caa48988accc1f3e64804927e11adeff3f1ed193e6c88a75abf.json new file mode 100644 index 0000000..4272501 --- /dev/null +++ b/.verification/mutation/reports/ee29420c00b74caa48988accc1f3e64804927e11adeff3f1ed193e6c88a75abf.json @@ -0,0 +1 @@ +{"go_module":"github.com/faustbrian/go-router","files":[{"file_name":"builder.go","mutations":[{"type":"INVERT_BITWISE","status":"KILLED","line":18,"column":24},{"type":"INVERT_BITWISE","status":"KILLED","line":50,"column":13},{"type":"INVERT_BITWISE","status":"KILLED","line":53,"column":24},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":58,"column":23},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":52,"column":13},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":60,"column":38},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":60,"column":38},{"type":"INVERT_BITWISE","status":"KILLED","line":61,"column":24},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":63,"column":32},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":63,"column":32},{"type":"INVERT_BITWISE","status":"KILLED","line":65,"column":24},{"type":"INVERT_BITWISE","status":"KILLED","line":77,"column":24},{"type":"INVERT_BITWISE","status":"KILLED","line":89,"column":24},{"type":"INVERT_LOGICAL","status":"KILLED","line":114,"column":32},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":114,"column":13},{"type":"INVERT_BITWISE","status":"KILLED","line":115,"column":24},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":114,"column":42},{"type":"INVERT_BITWISE","status":"KILLED","line":125,"column":10},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":124,"column":7},{"type":"INVERT_BITWISE","status":"KILLED","line":131,"column":10},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":127,"column":17},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":133,"column":19},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":133,"column":19},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":136,"column":24},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":136,"column":24},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":139,"column":27},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":139,"column":27},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":142,"column":34},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":142,"column":34},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":145,"column":25},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":145,"column":25},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":149,"column":16},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":149,"column":16},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":155,"column":9},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":158,"column":40},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":167,"column":7},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":181,"column":24},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":184,"column":24},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":184,"column":24},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":189,"column":18},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":189,"column":18},{"type":"INVERT_LOGICAL","status":"KILLED","line":192,"column":56},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":192,"column":13},{"type":"INVERT_LOGICAL","status":"KILLED","line":192,"column":19},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":195,"column":13},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":192,"column":29},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":203,"column":21},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":203,"column":21},{"type":"INVERT_LOGICAL","status":"KILLED","line":206,"column":22},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":206,"column":16},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":209,"column":58},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":212,"column":58},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":215,"column":48},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":215,"column":48},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":218,"column":23},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":218,"column":23},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":221,"column":26},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":221,"column":26},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":224,"column":30},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":224,"column":30},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":227,"column":27},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":227,"column":27},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":232,"column":27},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":232,"column":27},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":235,"column":28},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":238,"column":22},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":252,"column":10},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":255,"column":15},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":265,"column":12},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":255,"column":15},{"type":"INVERT_NEGATIVES","status":"KILLED","line":272,"column":32},{"type":"ARITHMETIC_BASE","status":"KILLED","line":272,"column":32},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":273,"column":17},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":273,"column":17},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":292,"column":15},{"type":"INVERT_LOOPCTRL","status":"KILLED","line":279,"column":4},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":292,"column":15},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":295,"column":10},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":303,"column":10},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":298,"column":13},{"type":"INVERT_LOGICAL","status":"KILLED","line":306,"column":21},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":306,"column":14},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":306,"column":32},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":309,"column":14},{"type":"INVERT_LOGICAL","status":"KILLED","line":310,"column":60},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":310,"column":73},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":310,"column":73},{"type":"INCREMENT_DECREMENT","status":"KILLED","line":322,"column":9},{"type":"INVERT_BITWISE","status":"KILLED","line":329,"column":9},{"type":"ARITHMETIC_BASE","status":"KILLED","line":334,"column":39},{"type":"ARITHMETIC_BASE","status":"KILLED","line":334,"column":35},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":353,"column":13},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":340,"column":40},{"type":"INVERT_LOGICAL","status":"KILLED","line":359,"column":23},{"type":"INVERT_LOGICAL","status":"KILLED","line":359,"column":50},{"type":"INVERT_LOGICAL","status":"KILLED","line":358,"column":79},{"type":"INVERT_LOGICAL","status":"KILLED","line":358,"column":50},{"type":"INVERT_LOGICAL","status":"KILLED","line":358,"column":26},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":358,"column":10},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":358,"column":34},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":358,"column":58},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":359,"column":8},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":359,"column":31},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":359,"column":58},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":366,"column":11},{"type":"INVERT_LOOPCTRL","status":"KILLED","line":371,"column":4},{"type":"INVERT_LOGICAL","status":"KILLED","line":373,"column":16},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":373,"column":12},{"type":"INVERT_LOOPCTRL","status":"KILLED","line":374,"column":4},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":373,"column":12},{"type":"INVERT_LOOPCTRL","status":"KILLED","line":385,"column":4},{"type":"INVERT_LOGICAL","status":"KILLED","line":384,"column":36},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":389,"column":15},{"type":"INVERT_LOGICAL","status":"KILLED","line":394,"column":40},{"type":"INVERT_LOGICAL","status":"KILLED","line":393,"column":46},{"type":"INVERT_LOGICAL","status":"KILLED","line":393,"column":26},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":393,"column":19},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":393,"column":19},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":393,"column":39},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":393,"column":39},{"type":"INVERT_LOGICAL","status":"KILLED","line":394,"column":20},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":394,"column":13},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":394,"column":13},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":394,"column":33},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":394,"column":33},{"type":"INVERT_LOGICAL","status":"KILLED","line":395,"column":20},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":395,"column":13},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":395,"column":13},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":395,"column":33},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":395,"column":33}]},{"file_name":"generation.go","mutations":[{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":37,"column":19},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":37,"column":19},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":51,"column":17},{"type":"INVERT_LOGICAL","status":"KILLED","line":55,"column":22},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":51,"column":17},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":55,"column":12},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":55,"column":32},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":58,"column":20},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":58,"column":20},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":61,"column":15},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":78,"column":7},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":81,"column":15},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":81,"column":15},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":89,"column":9},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":93,"column":9},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":96,"column":46},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":99,"column":15},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":99,"column":15},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":108,"column":7},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":114,"column":15},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":111,"column":17},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":117,"column":15},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":117,"column":15},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":129,"column":9},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":125,"column":9},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":133,"column":9},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":139,"column":46},{"type":"ARITHMETIC_BASE","status":"KILLED","line":145,"column":42},{"type":"ARITHMETIC_BASE","status":"KILLED","line":145,"column":35},{"type":"ARITHMETIC_BASE","status":"KILLED","line":145,"column":27},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":142,"column":48},{"type":"INVERT_ASSIGNMENTS","status":"KILLED","line":147,"column":13},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":146,"column":40},{"type":"ARITHMETIC_BASE","status":"KILLED","line":147,"column":20},{"type":"REMOVE_SELF_ASSIGNMENTS","status":"KILLED","line":147,"column":13},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":149,"column":20},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":149,"column":20},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":156,"column":21},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":156,"column":21},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":166,"column":26},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":166,"column":26},{"type":"INVERT_ASSIGNMENTS","status":"KILLED","line":169,"column":9},{"type":"REMOVE_SELF_ASSIGNMENTS","status":"KILLED","line":169,"column":9},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":170,"column":12},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":170,"column":12},{"type":"INVERT_ASSIGNMENTS","status":"KILLED","line":173,"column":10},{"type":"REMOVE_SELF_ASSIGNMENTS","status":"KILLED","line":173,"column":10},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":174,"column":13},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":174,"column":13},{"type":"REMOVE_SELF_ASSIGNMENTS","status":"KILLED","line":178,"column":10},{"type":"INVERT_ASSIGNMENTS","status":"KILLED","line":178,"column":10},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":179,"column":13},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":179,"column":13},{"type":"INVERT_LOGICAL","status":"KILLED","line":199,"column":54},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":195,"column":11},{"type":"INVERT_LOGICAL","status":"KILLED","line":199,"column":34},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":199,"column":47},{"type":"INVERT_LOGICAL","status":"KILLED","line":200,"column":14},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":200,"column":10},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":200,"column":10},{"type":"INVERT_LOOPCTRL","status":"KILLED","line":201,"column":4},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":213,"column":14},{"type":"INVERT_LOOPCTRL","status":"KILLED","line":215,"column":4},{"type":"INVERT_LOOPCTRL","status":"KILLED","line":220,"column":4},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":226,"column":21},{"type":"INVERT_LOGICAL","status":"KILLED","line":232,"column":31},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":229,"column":28},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":232,"column":56},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":232,"column":11},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":247,"column":13},{"type":"INVERT_LOOPCTRL","status":"KILLED","line":254,"column":4},{"type":"ARITHMETIC_BASE","status":"KILLED","line":256,"column":31},{"type":"INVERT_NEGATIVES","status":"KILLED","line":256,"column":31},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":264,"column":28},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":261,"column":21},{"type":"ARITHMETIC_BASE","status":"KILLED","line":274,"column":30},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":275,"column":33},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":282,"column":18},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":282,"column":18},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":285,"column":16},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":288,"column":29},{"type":"INVERT_NEGATIVES","status":"KILLED","line":288,"column":25},{"type":"ARITHMETIC_BASE","status":"KILLED","line":288,"column":25},{"type":"INVERT_NEGATIVES","status":"KILLED","line":291,"column":34},{"type":"ARITHMETIC_BASE","status":"KILLED","line":291,"column":34},{"type":"INVERT_LOGICAL","status":"KILLED","line":308,"column":33},{"type":"INVERT_LOGICAL","status":"KILLED","line":308,"column":17},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":308,"column":11},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":308,"column":26},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":308,"column":42},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":311,"column":30},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":318,"column":11},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":321,"column":16},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":321,"column":16},{"type":"INVERT_LOGICAL","status":"KILLED","line":324,"column":21},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":324,"column":14},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":324,"column":44},{"type":"INVERT_NEGATIVES","status":"KILLED","line":324,"column":40},{"type":"ARITHMETIC_BASE","status":"KILLED","line":324,"column":40},{"type":"INVERT_LOGICAL","status":"KILLED","line":328,"column":36},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":328,"column":49},{"type":"INVERT_LOOPCTRL","status":"KILLED","line":329,"column":4},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":337,"column":17},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":337,"column":17},{"type":"INVERT_ASSIGNMENTS","status":"KILLED","line":343,"column":9},{"type":"REMOVE_SELF_ASSIGNMENTS","status":"KILLED","line":343,"column":9},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":344,"column":12},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":344,"column":12},{"type":"INCREMENT_DECREMENT","status":"KILLED","line":348,"column":9},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":347,"column":19},{"type":"INVERT_ASSIGNMENTS","status":"KILLED","line":350,"column":10},{"type":"REMOVE_SELF_ASSIGNMENTS","status":"KILLED","line":350,"column":10},{"type":"REMOVE_SELF_ASSIGNMENTS","status":"KILLED","line":352,"column":11},{"type":"INVERT_ASSIGNMENTS","status":"KILLED","line":352,"column":11},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":353,"column":14},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":353,"column":14},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":358,"column":12},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":358,"column":12},{"type":"INVERT_BITWISE","status":"KILLED","line":366,"column":9},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":371,"column":16},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":371,"column":16}]},{"file_name":"group.go","mutations":[{"type":"INVERT_BITWISE","status":"KILLED","line":30,"column":10},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":29,"column":7},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":32,"column":17},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":38,"column":12},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":41,"column":20},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":41,"column":20},{"type":"ARITHMETIC_BASE","status":"KILLED","line":41,"column":17},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":44,"column":14},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":44,"column":14},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":48,"column":9},{"type":"INVERT_NEGATIVES","status":"KILLED","line":52,"column":56},{"type":"ARITHMETIC_BASE","status":"KILLED","line":52,"column":56},{"type":"INVERT_NEGATIVES","status":"KILLED","line":52,"column":45},{"type":"ARITHMETIC_BASE","status":"KILLED","line":52,"column":45},{"type":"INVERT_NEGATIVES","status":"KILLED","line":53,"column":45},{"type":"INVERT_BITWISE","status":"KILLED","line":54,"column":11},{"type":"ARITHMETIC_BASE","status":"KILLED","line":53,"column":45},{"type":"ARITHMETIC_BASE","status":"KILLED","line":62,"column":34},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":66,"column":9},{"type":"ARITHMETIC_BASE","status":"KILLED","line":69,"column":19},{"type":"INVERT_ASSIGNMENTS","status":"KILLED","line":71,"column":11},{"type":"REMOVE_SELF_ASSIGNMENTS","status":"KILLED","line":71,"column":11},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":76,"column":18},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":77,"column":51},{"type":"INVERT_LOGICAL","status":"KILLED","line":80,"column":25},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":80,"column":19},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":84,"column":54},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":88,"column":21},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":88,"column":21},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":91,"column":29},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":91,"column":29},{"type":"INVERT_LOGICAL","status":"KILLED","line":94,"column":30},{"type":"ARITHMETIC_BASE","status":"KILLED","line":97,"column":35},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":94,"column":24},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":98,"column":21},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":98,"column":21},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":101,"column":53},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":101,"column":53},{"type":"ARITHMETIC_BASE","status":"KILLED","line":101,"column":28},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":105,"column":27},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":105,"column":27},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":108,"column":28},{"type":"INVERT_LOGICAL","status":"KILLED","line":111,"column":28},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":111,"column":22},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":116,"column":9},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":120,"column":10},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":134,"column":18},{"type":"INVERT_LOGICAL","status":"KILLED","line":135,"column":27},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":135,"column":21},{"type":"ARITHMETIC_BASE","status":"KILLED","line":141,"column":38},{"type":"INVERT_BITWISE","status":"KILLED","line":147,"column":21},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":145,"column":9},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":163,"column":21},{"type":"INVERT_LOGICAL","status":"KILLED","line":174,"column":18},{"type":"INVERT_LOOPCTRL","status":"KILLED","line":165,"column":5},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":174,"column":12},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":174,"column":28},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":177,"column":17},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":177,"column":17},{"type":"INVERT_LOGICAL","status":"KILLED","line":183,"column":34},{"type":"INVERT_LOGICAL","status":"KILLED","line":182,"column":73},{"type":"INVERT_LOGICAL","status":"KILLED","line":182,"column":39},{"type":"INVERT_LOGICAL","status":"KILLED","line":181,"column":22},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":181,"column":15},{"type":"INVERT_LOGICAL","status":"KILLED","line":187,"column":77},{"type":"INVERT_LOGICAL","status":"KILLED","line":187,"column":21},{"type":"INVERT_LOGICAL","status":"KILLED","line":187,"column":40},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":187,"column":14},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":187,"column":32},{"type":"INVERT_LOGICAL","status":"KILLED","line":195,"column":18},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":195,"column":12},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":195,"column":28},{"type":"ARITHMETIC_BASE","status":"KILLED","line":201,"column":41},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":198,"column":10},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":205,"column":31},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":205,"column":31},{"type":"INVERT_BITWISE","status":"KILLED","line":206,"column":15},{"type":"ARITHMETIC_BASE","status":"KILLED","line":205,"column":19},{"type":"INVERT_BITWISE","status":"KILLED","line":214,"column":16},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":210,"column":60},{"type":"INVERT_LOGICAL","status":"KILLED","line":222,"column":15},{"type":"INVERT_LOGICAL","status":"KILLED","line":222,"column":56},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":222,"column":9},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":222,"column":27},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":222,"column":27},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":222,"column":70},{"type":"INVERT_BITWISE","status":"KILLED","line":223,"column":10},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":222,"column":70}]},{"file_name":"limits.go","mutations":[{"type":"INVERT_LOGICAL","status":"KILLED","line":72,"column":23},{"type":"INVERT_LOGICAL","status":"KILLED","line":71,"column":54},{"type":"INVERT_LOGICAL","status":"KILLED","line":71,"column":30},{"type":"INVERT_LOGICAL","status":"KILLED","line":70,"column":26},{"type":"INVERT_LOGICAL","status":"KILLED","line":69,"column":54},{"type":"INVERT_LOGICAL","status":"KILLED","line":69,"column":23},{"type":"INVERT_LOGICAL","status":"KILLED","line":68,"column":60},{"type":"INVERT_LOGICAL","status":"KILLED","line":68,"column":29},{"type":"INVERT_LOGICAL","status":"KILLED","line":67,"column":28},{"type":"INVERT_LOGICAL","status":"KILLED","line":66,"column":58},{"type":"INVERT_LOGICAL","status":"KILLED","line":66,"column":27},{"type":"INVERT_LOGICAL","status":"KILLED","line":65,"column":46},{"type":"INVERT_LOGICAL","status":"KILLED","line":65,"column":22},{"type":"INVERT_LOGICAL","status":"KILLED","line":64,"column":47},{"type":"INVERT_LOGICAL","status":"KILLED","line":64,"column":25},{"type":"INVERT_LOGICAL","status":"KILLED","line":63,"column":60},{"type":"INVERT_LOGICAL","status":"KILLED","line":63,"column":30},{"type":"INVERT_LOGICAL","status":"KILLED","line":62,"column":52},{"type":"INVERT_LOGICAL","status":"KILLED","line":62,"column":28},{"type":"INVERT_LOGICAL","status":"KILLED","line":61,"column":67},{"type":"INVERT_LOGICAL","status":"KILLED","line":61,"column":44},{"type":"INVERT_LOGICAL","status":"KILLED","line":61,"column":25},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":61,"column":21},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":61,"column":21},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":61,"column":40},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":61,"column":40},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":61,"column":63},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":61,"column":63},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":62,"column":24},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":62,"column":24},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":62,"column":48},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":63,"column":26},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":62,"column":48},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":63,"column":56},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":63,"column":26},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":64,"column":21},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":63,"column":56},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":64,"column":21},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":64,"column":43},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":65,"column":18},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":64,"column":43},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":65,"column":18},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":65,"column":42},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":66,"column":23},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":65,"column":42},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":66,"column":23},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":66,"column":54},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":66,"column":54},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":67,"column":24},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":67,"column":24},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":68,"column":25},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":68,"column":56},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":68,"column":25},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":68,"column":56},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":69,"column":19},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":69,"column":19},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":69,"column":50},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":70,"column":22},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":69,"column":50},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":70,"column":22},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":71,"column":26},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":71,"column":50},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":71,"column":26},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":71,"column":50},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":72,"column":19},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":72,"column":49},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":72,"column":19},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":72,"column":49}]},{"file_name":"mount.go","mutations":[{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":26,"column":7},{"type":"INVERT_BITWISE","status":"KILLED","line":27,"column":10},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":29,"column":17},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":29,"column":17},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":32,"column":12},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":35,"column":15},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":41,"column":42},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":45,"column":14},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":52,"column":11},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":59,"column":18},{"type":"ARITHMETIC_BASE","status":"KILLED","line":66,"column":22},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":67,"column":14},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":86,"column":14},{"type":"ARITHMETIC_BASE","status":"KILLED","line":87,"column":62},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":91,"column":16},{"type":"INVERT_LOGICAL","status":"KILLED","line":95,"column":43},{"type":"INVERT_LOGICAL","status":"KILLED","line":95,"column":29},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":95,"column":22},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":95,"column":37},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":100,"column":26},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":95,"column":54},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":102,"column":18},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":102,"column":18},{"type":"INVERT_LOGICAL","status":"KILLED","line":108,"column":20},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":108,"column":16},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":108,"column":34},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":108,"column":16},{"type":"ARITHMETIC_BASE","status":"KILLED","line":109,"column":19},{"type":"INVERT_BITWISE","status":"KILLED","line":116,"column":15},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":108,"column":34}]},{"file_name":"route.go","mutations":[{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":36,"column":20}]},{"file_name":"compiler.go","mutations":[{"type":"INVERT_BITWISE","status":"KILLED","line":16,"column":15},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":15,"column":7},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":18,"column":17},{"type":"INVERT_BITWISE","status":"KILLED","line":22,"column":15},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":24,"column":46},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":30,"column":83},{"type":"INVERT_NEGATIVES","status":"KILLED","line":30,"column":86},{"type":"ARITHMETIC_BASE","status":"KILLED","line":30,"column":86},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":35,"column":68},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":32,"column":53},{"type":"INVERT_BITWISE","status":"KILLED","line":42,"column":14},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":38,"column":51},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":60,"column":10},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":64,"column":10},{"type":"INVERT_NEGATIVES","status":"KILLED","line":68,"column":36},{"type":"ARITHMETIC_BASE","status":"KILLED","line":68,"column":36},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":69,"column":17},{"type":"INVERT_BITWISE","status":"KILLED","line":85,"column":11},{"type":"ARITHMETIC_BASE","status":"KILLED","line":89,"column":32},{"type":"ARITHMETIC_BASE","status":"KILLED","line":89,"column":28},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":86,"column":45},{"type":"ARITHMETIC_BASE","status":"KILLED","line":99,"column":30},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":94,"column":10},{"type":"ARITHMETIC_BASE","status":"KILLED","line":99,"column":26},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":102,"column":14},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":117,"column":21},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":118,"column":57},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":120,"column":38},{"type":"ARITHMETIC_BASE","status":"KILLED","line":120,"column":41},{"type":"INVERT_NEGATIVES","status":"KILLED","line":120,"column":41},{"type":"ARITHMETIC_BASE","status":"KILLED","line":135,"column":45},{"type":"ARITHMETIC_BASE","status":"KILLED","line":135,"column":41},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":128,"column":10},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":135,"column":101},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":146,"column":28},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":149,"column":22},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":165,"column":11},{"type":"ARITHMETIC_BASE","status":"KILLED","line":176,"column":64},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":183,"column":19},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":183,"column":19},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":189,"column":22},{"type":"INVERT_LOOPCTRL","status":"KILLED","line":191,"column":4},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":205,"column":17},{"type":"INVERT_LOOPCTRL","status":"KILLED","line":206,"column":4},{"type":"ARITHMETIC_BASE","status":"KILLED","line":218,"column":21},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":218,"column":32},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":218,"column":32},{"type":"INCREMENT_DECREMENT","status":"KILLED","line":218,"column":52},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":219,"column":40},{"type":"INVERT_LOOPCTRL","status":"KILLED","line":220,"column":5},{"type":"INVERT_LOGICAL","status":"KILLED","line":223,"column":65},{"type":"INVERT_LOGICAL","status":"KILLED","line":222,"column":81},{"type":"INVERT_LOOPCTRL","status":"KILLED","line":225,"column":5},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":222,"column":42},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":244,"column":10},{"type":"INVERT_LOGICAL","status":"KILLED","line":244,"column":16},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":249,"column":21},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":244,"column":25},{"type":"INVERT_LOGICAL","status":"KILLED","line":253,"column":42},{"type":"INVERT_LOGICAL","status":"KILLED","line":253,"column":82},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":273,"column":10},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":276,"column":10},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":279,"column":10},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":277,"column":16},{"type":"ARITHMETIC_BASE","status":"KILLED","line":288,"column":73},{"type":"ARITHMETIC_BASE","status":"KILLED","line":288,"column":64},{"type":"ARITHMETIC_BASE","status":"KILLED","line":288,"column":51},{"type":"ARITHMETIC_BASE","status":"KILLED","line":288,"column":42},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":280,"column":16},{"type":"ARITHMETIC_BASE","status":"KILLED","line":288,"column":29},{"type":"ARITHMETIC_BASE","status":"KILLED","line":288,"column":20},{"type":"INVERT_BITWISE","status":"KILLED","line":298,"column":10},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":293,"column":40},{"type":"INVERT_NEGATIVES","status":"KILLED","line":317,"column":31},{"type":"ARITHMETIC_BASE","status":"KILLED","line":317,"column":31},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":317,"column":42},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":317,"column":42},{"type":"INCREMENT_DECREMENT","status":"KILLED","line":317,"column":53},{"type":"INVERT_BITWISE","status":"KILLED","line":320,"column":16},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":330,"column":13},{"type":"INVERT_NEGATIVES","status":"KILLED","line":331,"column":10},{"type":"ARITHMETIC_BASE","status":"KILLED","line":331,"column":10},{"type":"INCREMENT_DECREMENT","status":"KILLED","line":336,"column":9}]},{"file_name":"errors.go","mutations":[{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":43,"column":7},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":47,"column":12},{"type":"INVERT_ASSIGNMENTS","status":"KILLED","line":52,"column":11},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":51,"column":13},{"type":"REMOVE_SELF_ASSIGNMENTS","status":"KILLED","line":52,"column":11},{"type":"ARITHMETIC_BASE","status":"KILLED","line":52,"column":19},{"type":"INVERT_ASSIGNMENTS","status":"KILLED","line":55,"column":11},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":54,"column":14},{"type":"REMOVE_SELF_ASSIGNMENTS","status":"KILLED","line":55,"column":11},{"type":"ARITHMETIC_BASE","status":"KILLED","line":55,"column":19},{"type":"INVERT_ASSIGNMENTS","status":"KILLED","line":58,"column":11},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":57,"column":14},{"type":"REMOVE_SELF_ASSIGNMENTS","status":"KILLED","line":58,"column":11},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":65,"column":7},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":72,"column":11},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":72,"column":11},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":75,"column":31},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":75,"column":31},{"type":"INVERT_LOGICAL","status":"KILLED","line":80,"column":21},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":80,"column":35},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":80,"column":35},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":83,"column":11},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":83,"column":11},{"type":"ARITHMETIC_BASE","status":"KILLED","line":86,"column":51},{"type":"INVERT_NEGATIVES","status":"KILLED","line":86,"column":46},{"type":"ARITHMETIC_BASE","status":"KILLED","line":86,"column":46},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":90,"column":14},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":90,"column":14},{"type":"INVERT_LOGICAL","status":"KILLED","line":93,"column":20},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":93,"column":15},{"type":"INCREMENT_DECREMENT","status":"KILLED","line":94,"column":11}]},{"file_name":"router.go","mutations":[{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":56,"column":7},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":69,"column":13},{"type":"INVERT_LOGICAL","status":"KILLED","line":81,"column":32},{"type":"INVERT_LOGICAL","status":"KILLED","line":81,"column":14},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":81,"column":7},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":81,"column":25},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":81,"column":47},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":89,"column":25},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":89,"column":25},{"type":"INVERT_LOGICAL","status":"KILLED","line":93,"column":30},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":93,"column":48},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":101,"column":24},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":102,"column":21},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":111,"column":19},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":111,"column":19},{"type":"INVERT_LOGICAL","status":"KILLED","line":117,"column":41},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":117,"column":22},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":123,"column":59},{"type":"INVERT_LOGICAL","status":"KILLED","line":132,"column":64},{"type":"INVERT_LOGICAL","status":"KILLED","line":132,"column":42},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":132,"column":20},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":132,"column":80},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":132,"column":80},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":137,"column":18},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":137,"column":18},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":139,"column":25},{"type":"INVERT_LOGICAL","status":"KILLED","line":146,"column":61},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":146,"column":79},{"type":"INVERT_LOGICAL","status":"KILLED","line":154,"column":37},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":154,"column":29},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":154,"column":29},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":154,"column":62},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":154,"column":62},{"type":"INVERT_LOGICAL","status":"KILLED","line":157,"column":38},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":157,"column":30},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":157,"column":30},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":157,"column":67},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":157,"column":67},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":161,"column":22},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":161,"column":22},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":164,"column":35},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":164,"column":35},{"type":"INVERT_NEGATIVES","status":"KILLED","line":164,"column":42},{"type":"ARITHMETIC_BASE","status":"KILLED","line":164,"column":42},{"type":"INVERT_BITWISE","status":"KILLED","line":209,"column":30},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":168,"column":16},{"type":"INVERT_LOGICAL","status":"KILLED","line":225,"column":41},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":225,"column":22},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":229,"column":13},{"type":"INVERT_LOGICAL","status":"KILLED","line":232,"column":45},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":232,"column":26},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":243,"column":15},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":249,"column":18},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":272,"column":56},{"type":"INVERT_LOGICAL","status":"KILLED","line":275,"column":14},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":275,"column":43},{"type":"INVERT_NEGATIVES","status":"KILLED","line":286,"column":32},{"type":"ARITHMETIC_BASE","status":"KILLED","line":286,"column":32},{"type":"INVERT_LOGICAL","status":"KILLED","line":287,"column":19},{"type":"INVERT_BITWISE","status":"KILLED","line":294,"column":14},{"type":"INVERT_BITWISE","status":"KILLED","line":302,"column":14},{"type":"ARITHMETIC_BASE","status":"KILLED","line":303,"column":45},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":287,"column":10},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":310,"column":30},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":314,"column":11},{"type":"ARITHMETIC_BASE","status":"KILLED","line":318,"column":15},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":317,"column":14},{"type":"INVERT_LOGICAL","status":"KILLED","line":321,"column":35},{"type":"INVERT_ASSIGNMENTS","status":"KILLED","line":322,"column":11},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":321,"column":46},{"type":"REMOVE_SELF_ASSIGNMENTS","status":"KILLED","line":322,"column":11},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":329,"column":18},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":329,"column":18},{"type":"INVERT_NEGATIVES","status":"KILLED","line":343,"column":32},{"type":"INVERT_BITWISE","status":"KILLED","line":345,"column":30},{"type":"ARITHMETIC_BASE","status":"KILLED","line":343,"column":32},{"type":"INVERT_LOGICAL","status":"KILLED","line":353,"column":78},{"type":"INVERT_LOGICAL","status":"KILLED","line":353,"column":44},{"type":"INVERT_LOGICAL","status":"KILLED","line":353,"column":23},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":353,"column":19},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":353,"column":19},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":353,"column":37},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":353,"column":71},{"type":"INVERT_NEGATIVES","status":"KILLED","line":353,"column":67},{"type":"ARITHMETIC_BASE","status":"KILLED","line":353,"column":67},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":353,"column":89},{"type":"INVERT_LOOPCTRL","status":"KILLED","line":354,"column":4},{"type":"INVERT_NEGATIVES","status":"KILLED","line":356,"column":52},{"type":"INVERT_BITWISE","status":"KILLED","line":358,"column":29},{"type":"ARITHMETIC_BASE","status":"KILLED","line":356,"column":52},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":363,"column":21},{"type":"INVERT_BITWISE","status":"KILLED","line":364,"column":28},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":363,"column":21},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":398,"column":13},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":403,"column":24},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":409,"column":25},{"type":"INVERT_LOOPCTRL","status":"KILLED","line":413,"column":4},{"type":"INVERT_LOGICAL","status":"KILLED","line":423,"column":43},{"type":"INVERT_LOGICAL","status":"KILLED","line":423,"column":24},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":423,"column":20},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":423,"column":20},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":423,"column":36},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":423,"column":66},{"type":"INVERT_NEGATIVES","status":"KILLED","line":423,"column":62},{"type":"ARITHMETIC_BASE","status":"KILLED","line":423,"column":62},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":428,"column":9},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":435,"column":15},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":438,"column":20},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":438,"column":20},{"type":"INVERT_LOGICAL","status":"KILLED","line":441,"column":23},{"type":"ARITHMETIC_BASE","status":"KILLED","line":444,"column":32},{"type":"INVERT_LOGICAL","status":"KILLED","line":446,"column":27},{"type":"INVERT_LOGICAL","status":"KILLED","line":445,"column":66},{"type":"INVERT_LOGICAL","status":"KILLED","line":445,"column":16},{"type":"INVERT_LOGICAL","status":"KILLED","line":445,"column":44},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":445,"column":31},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":445,"column":9},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":446,"column":21},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":445,"column":59},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":449,"column":33},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":446,"column":42},{"type":"INVERT_LOGICAL","status":"KILLED","line":451,"column":26},{"type":"INVERT_LOGICAL","status":"KILLED","line":451,"column":40},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":451,"column":19},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":451,"column":36},{"type":"CONDITIONALS_BOUNDARY","status":"KILLED","line":451,"column":50},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":451,"column":36},{"type":"CONDITIONALS_NEGATION","status":"KILLED","line":451,"column":50}]}],"test_efficacy":100,"mutations_coverage":100,"mutants_total":680,"mutants_killed":680,"mutants_lived":0,"mutants_not_viable":0,"mutants_not_covered":0,"elapsed_time":267.494559667,"mutator_statistics":{"arithmetic_base":58,"conditionals_negation":313,"conditionals_boundary":111,"increment_decrement":6,"invert_assignments":12,"invert_bitwise":32,"invert_logical":100,"invert_loop_ctrl":16,"invert_negatives":20,"remove_self_assignments":12}} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index d9a4908..5964bc7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,10 @@ Versioning. ### Changed +- Adopt the checksum-verified `go-library-tools` v1.4.0 CLI and immutable + shared workflow while preserving every existing repository gate. +- Include authoritative online specification validation in the complete local + CI contract enforced by `make ci`. - Replace copied repository tooling with the checksum-pinned `go-library-tools` v1.2.0 specification-governance contract while retaining package-owned policy and verification evidence. @@ -26,6 +30,8 @@ Versioning. ### Documentation +- Preserve the reviewed Go release and RFC 9110 errata dispositions in an + append-only upstream authority history. - Make the [specification decision register](docs/specification-decisions.md) machine-auditable with monitored source and errata authorities, attributable conformance evidence, classified interoperability results, and durable diff --git a/Makefile b/Makefile index 7925167..a125b0e 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,7 @@ check: ci: $(GOLIB) repository check $(GOLIB) cohesion check + $(GOLIB) specification check --online $(GOLIB) check --all cohesion: diff --git a/README.md b/README.md index 2e3ba2f..f28d9bc 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,8 @@ The minimum supported toolchain is Go 1.26.6. The package has no runtime dependencies and no global router, reflection discovery, controller resolver, container, session, template, or application lifecycle. -See the versioned [Golib ecosystem index](https://github.com/faustbrian/go-library-tools/blob/v1.3.0/docs/ecosystem/README.md) -and its [service-edge package guidance](https://github.com/faustbrian/go-library-tools/blob/v1.3.0/docs/ecosystem/design-language.md#package-families-and-selection) +See the versioned [Golib ecosystem index](https://github.com/faustbrian/go-library-tools/blob/v1.4.0/docs/ecosystem/README.md) +and its [service-edge package guidance](https://github.com/faustbrian/go-library-tools/blob/v1.4.0/docs/ecosystem/design-language.md#package-families-and-selection) for the shared design language and related packages. ## Five-minute start @@ -77,6 +77,8 @@ reproducible. Run `make cohesion` to validate this module's catalog classification, ownership contract, documentation entry points, and ecosystem navigation. +Run `make ci` for the complete local contract, including online specification +source validation. ## License diff --git a/modules.json b/modules.json index 45d52f6..03065c3 100644 --- a/modules.json +++ b/modules.json @@ -143,7 +143,7 @@ "faq": "docs/faq.md", "changelog": "CHANGELOG.md", "pkg_go_dev": "https://pkg.go.dev/github.com/faustbrian/go-router", - "ecosystem_index": "https://github.com/faustbrian/go-library-tools/blob/v1.3.0/docs/ecosystem/README.md" + "ecosystem_index": "https://github.com/faustbrian/go-library-tools/blob/v1.4.0/docs/ecosystem/README.md" }, "known_good_compatibility_sets": [], "delivery": { diff --git a/specification/README.md b/specification/README.md index 3b776f8..795066b 100644 --- a/specification/README.md +++ b/specification/README.md @@ -13,6 +13,8 @@ The canonical [`docs/specification-decisions.md`](../docs/specification-decisions.md) records every material interpretation, consequence, and condition for reconsideration behind this conformance matrix. +Reviewed monitoring changes and their decision applicability are preserved in +the append-only [`upstream-reviews.md`](upstream-reviews.md) history. ## Decision conformance matrix diff --git a/specification/upstream-reviews.md b/specification/upstream-reviews.md new file mode 100644 index 0000000..a34bed7 --- /dev/null +++ b/specification/upstream-reviews.md @@ -0,0 +1,66 @@ +# Upstream authority review history + +This append-only record preserves reviewed changes to the authorities monitored +by [`monitoring.json`](monitoring.json). A monitoring digest changes only after +the corresponding upstream delta has been classified against the applicable +specification decisions. + +## 2026-09-03: Go releases feed + +- **Authority:** `go-releases` +- **URL:** https://go.dev/dl/?mode=json&include=all +- **Previous SHA-256:** + `c0696d6e5708cce9644204513ee4ecb994f3fd748065c54b0890158c34631207` +- **Reviewed SHA-256:** + `638127a053a86576fc235aa196b26145c6f2fce8ce839ded767212a18d1c9415` +- **Retrieved and reviewed:** 2026-09-03 +- **Applicability:** `ROUTER-DEC-001` and `ROUTER-DEC-005` for the newer + escaped-path redirect behavior; no current decision for the Go 1.26.7 h2c + deadline fix +- **Disposition:** Behavior-neutral for the selected Go 1.26.6 contracts. + +The feed added Go 1.26.8 at commit +`c293dd49cbe25e1fe8d97d94a5cb618e7b6d831e` and Go 1.27.1 at commit +`862c888e612ac346c7c4d99c9392bdfd265f33b0` after the previous review. +Comparing Go 1.26.6 with Go 1.26.8 shows that `request.go` and `url.go` are +byte-identical. The only `server.go` change clears connection deadlines when an +HTTP/1 connection upgrades to unencrypted HTTP/2; the router does not own +server connections, deadlines, or h2c lifecycle. + +Go 1.27 changed escaped-path `ServeMux` redirect serialization, which directly +intersects `ROUTER-DEC-001` and `ROUTER-DEC-005`. That change was separately +reviewed and the router now preserves the selected Go 1.26.6 redirect wire +behavior on later toolchains through focused executable evidence. No other +candidate decision is affected by the reviewed release delta. + +The monitored `server.go`, `request.go`, and `url.go` URLs and SHA-256 values +were independently verified against the immutable `go1.26.6` tag. The selected +source and minimum supported Go version remain unchanged. Reconsider these +decisions if the minimum supported Go version changes or a versioned +compatibility decision adopts newer redirect serialization. + +## 2026-09-03: RFC 9110 errata + +- **Authority:** `rfc9110-errata` +- **URL:** https://errata.rfc-editor.org/search/?rfc_number=9110&presentation=records +- **Previous SHA-256:** + `38bd006c96f8963d58573f704c5313a5f81968b90738c03ade0b036ec7bbdf4b` +- **Reviewed SHA-256:** + `1f6790054c0cdb2f2a70a94fa2b9c73b09a4ee0578a32b4a3006ed0ecfaac86d` +- **Retrieved and reviewed:** 2026-09-03 +- **Applicability:** `ROUTER-DEC-003` +- **Disposition:** Behavior-neutral because generated `Allow` field values + already use comma-space separation. + +[Errata ID 9162](https://errata.rfc-editor.org/eid9162/) was reported on +2026-09-01 as a Technical erratum against RFC 9110 Section 5.2. It proposes +changing the repeated-field combination wording from values separated by a +comma to values separated by comma plus space so the rule matches its example. +The erratum remains Reported, not Verified, and does not revise the immutable +RFC 9110 source. + +`ROUTER-DEC-003` owns `Allow` construction, and the router already joins its +sorted method values with comma plus space into one field value. No selected +behavior, decision, source binding, or executable evidence changes. Reconsider +this disposition if Errata ID 9162 becomes Verified or the router later accepts +or combines repeated list-valued HTTP field lines.