All Gotchas

This is the current consolidated list of confirmed HiStruct/FCS gotchas. Each entry includes the symptom, likely cause, and the fix or workaround that actually helps in practice.


1. Interactive reload in console mode does not always pick up changes

Symptom

Cause

Fix / workaround

Example

{"reload":true}

2. .fcsconfig.json EngineVersion must be specific

Symptom

Cause

Fix / workaround

Example

{
  "EngineVersion": "e4.trans"
}

3. fli.exe needs a real TTY for interactive mode

Symptom

Cause

Fix / workaround

Example


4. --fcs requires an absolute path

Symptom

Cause

Fix / workaround

Example

--fcs D:\Projects\MyComponent\main.fcs

5. Assignment syntax: := vs =

Symptom

Cause

Fix / workaround

Example

height := 5.0
obj = { Width = 3.0, Height = height }

6. Parentheses are required in geometry expressions

Symptom

Cause

Fix / workaround

Example

Origin = {(span/2), 0, (height + offset)}

7. Lazy evaluation means variables reflect the latest value

Symptom

Cause

Fix / workaround

Example

x := 1
p := x
x := 2
# p may resolve using the latest x depending on context

8. GClass parameter typos create new variables silently

Symptom

Cause

Fix / workaround

Example

gclass {gcDoor} filename "door.fcs" parameters { Heigth = 2.1 }

If the child expects Height, this silently fails.


9. File paths in FCS should use forward slashes

Symptom

Cause

Fix / workaround

Example

filename "Components/door.fcs"

10. --i-json output may contain non-JSON first lines

Symptom

Cause

Fix / workaround

Example


11. The agent account may not have palette admin rights

Symptom

Cause

Fix / workaround

Example


12. .fcscdm and .fcscdx files must be UTF-16 encoded

Symptom

Cause

Fix / workaround

Example


13. Booster LocalComponentsFolder resolution is indirect

Symptom

Cause

Fix / workaround

Example


14. Wrong space route key can cause silent 403 or empty results

Symptom

Cause

Fix / workaround

Example


15. Check UserSession before blaming auth code

Symptom

Cause

Fix / workaround

Example


16. Views.fcscdx must include ProjectionSettingsFile

Symptom

Cause

Fix / workaround

Example


17. Local component versions are file-timestamp based

Symptom

Cause

Fix / workaround

Example


18. Shift+R refresh requires Admin role

Symptom

Cause

Fix / workaround

Example


19. Booster auto-detects file changes

Symptom

Cause

Fix / workaround

Example


20. SkiaSharp fails in Engine container — missing native dependencies

Symptom

Cause

Fix / workaround

Example


21. Quick vs non-quick trigger dispatch affects which container runs your code

Symptom

Cause

Fix / workaround

Example


22. Init constraint stores wrong/empty value in multi-step triggers

Symptom

Cause

Fix / workaround

  1. Always use Init := expr (lazy) for Init attributes
  2. Use string constraint references ("myConstraint") instead of direct object embedding — strings are resolved at execution time
  3. Both can be combined for double safety

Example

# BEFORE (broken): Init evaluated eagerly before steps 1-2 run
detectBuildingsTrigger := {
   Constraints = [
      recognitionTrigger.Constraints,
      vectorizeTrigger.Constraints,     # Init = maskSmoothGeom → {} because maskBase64 is empty
   ],
}

# AFTER (correct): string refs + lazy Init
vectorizeConstraint := {
   Variable = "buildingOutlines",
   Init := maskSmoothGeom.ToPersistenceString(-8),    # lazy + string persistence
}
detectBuildingsTrigger := {
   Constraints = ["recognitionConstraint", "downloadMaskConstraint", "vectorizeConstraint"],
}

23. Cannot store FcsBufferedGeometry in PVC

Symptom

Cause

Fix / workaround

Example

buildingOutlines := ""   # ItemString in PVC

# In trigger constraint:
Init := maskSmoothGeom.ToPersistenceString(-8)

# In scene:
gblock {gb} gcomposite [Fcs.Geometry.Composite(Fcs.Geometry.Buffered.Parse(buildingOutlines))]

Quick triage checklist

When something breaks, check these first:

  1. Is the path absolute where required?
  2. Is the file encoding correct?
  3. Is the route key correct?
  4. Does UserSession show the expected roles?
  5. Is the component instance pinned to an older timestamped version?
  6. Are you using the correct interactive mode for the tool?
  7. Did you include required view/projection files?
  8. Does the container have the required native dependencies (SkiaSharp, fontconfig)?