Skip to content

Adding curly braces (children) to relationships crashes outline/breadcrumb provider #34

Description

@AlanMcBee

It took me forever to figure this out, but I've definitely repro'd.

Using:

VSCode Version: 1.107.1 (user setup)
Commit: 994fd12f8d3a5aa16f17d42c041e5809167e845a
Date: 2025-12-17T14:15:14.850Z
Electron: 39.2.3
ElectronBuildId: 12895514
Chromium: 142.0.7444.175
Node.js: 22.21.1
V8: 14.2.231.21-electron.0
OS: Windows_NT x64 10.0.26100

archicionado.cornifer v 1.2.2

Description

Notating a relationsnip with children using a curly-brace syntax seems to cause the provider to crash, which blanks out the Outline panel as well as the Breadcrumb line.

Notes

According to https://docs.structurizr.com/dsl/language#relationship, the curly-brace syntax used to add children to a relationship is allowed for explicit relationships, but my experiments show that Structurizr Lite (not the vNext) will honor them for implicit relationships as well.

When I add curly-brace syntax to a relationship, the VSCode Extension host reports lines like the following in the log:

2026-01-05 14:47:49.265 [error] [archicionado.cornifer] provider FAILED
2026-01-05 14:47:49.265 [error] TypeError: Cannot read properties of undefined (reading 'children')
	at Object.provideDocumentSymbols (c:\Users\AMcBee\.vscode\extensions\archicionado.cornifer-1.2.2\dist\extension.js:1:91656)
	at RN.provideDocumentSymbols (file:///c:/Users/AMcBee/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:144:140615)
	at file:///c:/Users/AMcBee/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:144:170144
	at si.G (file:///c:/Users/AMcBee/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:144:169435)
	at si.$provideDocumentSymbols (file:///c:/Users/AMcBee/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:144:170132)
	at l5.S (file:///c:/Users/AMcBee/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:125043)
	at l5.Q (file:///c:/Users/AMcBee/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:124823)
	at l5.M (file:///c:/Users/AMcBee/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:123874)
	at l5.L (file:///c:/Users/AMcBee/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:123017)
	at _d.value (file:///c:/Users/AMcBee/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:121814)
	at I.C (file:///c:/Users/AMcBee/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2328)
	at I.fire (file:///c:/Users/AMcBee/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2546)
	at Vo.fire (file:///c:/Users/AMcBee/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:9454)
	at _d.value (file:///c:/Users/AMcBee/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:404:9330)
	at I.C (file:///c:/Users/AMcBee/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2328)
	at I.fire (file:///c:/Users/AMcBee/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2546)
	at Vo.fire (file:///c:/Users/AMcBee/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:9454)
	at MessagePortMain.<anonymous> (file:///c:/Users/AMcBee/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:404:7564)
	at MessagePortMain.emit (node:events:519:28)
	at MessagePortMain._internalPort.emit (node:electron/js2c/utility_init:2:2949)

Here's the DSL I used to repro, which displays correctly in Structurizr Lite (using the structurizr/lite:latest Docker image from DockerHub):

Implicit relationship:

workspace "name" "description" {
	!identifiers hierarchical
	!impliedRelationships false

	model {
		someone = person "someone" "description" "tags-person"
		ss = softwareSystem "ssName" "description" "tags-ss" {
			ctr = container "ctrName" "description" "technology" "tags-ctr" {
				someone -> ctr  "uses" "personA" "personB"
				-> someone  "is used by" "personA" {
					tags "personB"
				}
			}
		}

	}
	views {
		container ss "ssCtr" "description" {
			include *
			include *->*
		}
	}
}

Explicit relationship:

workspace "name" "description" {
	!identifiers hierarchical
	!impliedRelationships false

	model {
		someone = person "someone" "description" "tags-person"
		ss = softwareSystem "ssName" "description" "tags-ss" {
			ctr = container "ctrName" "description" "technology" "tags-ctr" {

			}
		}

		someone -> ss.ctr "uses" "personA" "personB"
		ss.ctr -> someone "is used by" "personA" {
			tags "personB"
		}
	}
	views {
		container ss "ssCtr" "description" {
			include *
			include *->*
		}
	}
}

In both cases, commenting out the curly-brace notation on the relationships (the "is used by" relationships) will allow the provider to work correctly.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions