bcquality/custom/knowledge/mcp/write-shebang-integrity.md
Michael Dieringer dd5637b1db Custom-laget bestaar nu begge CI-checks: 72 validator-fejl -> 0
Normalisering af alle 39 custom knowledge-filer til READ-kontraktens
skema (validate_frontmatter.py + Test-KnowledgeIndex.ps1 begge groenne):

- R01/R02: 28 filer manglede frontmatter eller brugte aeldre skemaer
  (title/category/severity/rule-id m.fl.) - alle har nu praecis de 6
  kraevede noegler; keywords haandskrevet pr. fil da de driver
  worklist-selektionen i INDEX/knowledge-index
- R09: manglende Description-sektion - regel-agtige foersteoverskrifter
  (Core Rule/Rule/Regel/Core Principle) omdoebt, eller sektion indsat
  efter titlen hvor intro-tekst fandtes
- R10: fenced code blocks konverteret til 4-space indrykkede blokke
  i alle filer (indhold uaendret)
- R11: 4 filer over 100 linjer fortaettet redaktionelt uden semantisk
  tab (ai-eval-scores 143->100, git-lifecycle 121->97,
  permission-sets 113->99, test-feature-scenario-tags 105->91)
- R05: AL0197->al0197, add_repo->add-repo; keyword-lister trimmet
  til maks 10

Ingen regler er fjernet eller aendret i betydning - kun form.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-01 23:47:31 +02:00

2.1 KiB

bc-version domain keywords technologies countries application-area
all
mcp
write
shebang
script-integrity
encoding
al
w1
all

Shebang-integritet ved deploy af script-filer

Description

Når en script-fil med shebang-linje (.js, .sh, .ps1) skrives via Claude Codes Write-værktøj på Windows, skal linje 1 i den deployede fil verificeres umiddelbart efter skrivning.

Den verificerede linje skal matche den forventede shebang præcist, f.eks.:

#!/usr/bin/env node

Baggrund

På Windows håndteres strenge internt via PowerShell-laget. PowerShell behandler # som kommentar-tegn. Hvis filindhold sendes gennem en ikke-quoted streng eller heredoc, kan #! i shebangens første linje reduceres til !/... — et gyldigt men syntaktisk ugyldigt JavaScript-udtryk.

Node.js parser da !/usr/bin/env node som logisk NOT på et regex-udtryk med ugyldige flags og kaster en SyntaxError ved opstart. Fejlen er stille: broen starter ikke, MCP-tools afvises uden dialog, og brugeren opdager det typisk kun ved at undres over manglende godkendelsesdialog.

Konsekvens af brud

MCP-serveren starter ikke. Alle mcp__businesscentral__*-kald afvises automatisk. Brugeren ser ingen fejlbesked i Claude Code — kaldet afvises blot.

Verifikation (påkrævet efter enhver write af script-fil)

with open(deployed_path, "r", encoding="utf-8") as f:
    line1 = f.readline().rstrip()
assert line1 == expected_shebang, f"Shebang fejl: forventet {expected_shebang!r}, fik {line1!r}"

Alternativt med Read-værktøjet: læs linje 1 og sammenlign med forventet shebang. Stop setup-processen og genskriv filen hvis de ikke matcher.

Eksempel (fejlscenarie observeret 2026-06-29)

bc-mcp-bridge.js fik !/usr/bin/env node (mangler #) efter en CURABIS Standard-opdatering. BC MCP var ude af drift i ukendt periode. Opdaget ved at brugeren efterspurgte MCP-data og ingen godkendelsesdialog dukkede op.

Gælder for

  • ~/.claude/bc-mcp-bridge.js (og fremtidige bridge-varianter)
  • Enhver .js- eller .sh-fil med shebang deployeret via CURABIS Standard-setup