{
  "project": "simocracy-v2",
  "run": "gathering-ftc-layout-parity",
  "date": "2026-04-24",
  "simocracyCommit": "94cf72d",
  "target": "local production build at http://127.0.0.1:3000",
  "viewport": { "width": 1440, "height": 900 },
  "result": "pass",
  "reference": {
    "name": "FtC SF",
    "url": "/ftc-sf",
    "canvas": { "x": 0, "y": 56, "width": 1440, "height": 836 },
    "sidebar": { "x": 720, "y": 56, "width": 720, "height": 836 },
    "sidebarRule": "absolute top-0 right-0 bottom-0 w-full md:w-1/2"
  },
  "pages": [
    {
      "name": "Events gallery",
      "url": "/events",
      "coveredRoutes": [
        "/events/did%3Aplc%3Aawtx57rxuisy4sf4kzzr3uhf/3mijiollfqs2i",
        "/ftc-sf",
        "/events/did%3Aplc%3A4a4ekfv5ks66ogf52xh5u5mg/3mk6xwaltgs22",
        "/events/did%3Aplc%3Aqc42fmqqlsmdq7jiypiiigww/3miucq2jbzo2s"
      ],
      "result": "pass"
    },
    {
      "name": "Flourishing Floor Digital Twin Experiment",
      "url": "/events/did%3Aplc%3A4a4ekfv5ks66ogf52xh5u5mg/3mk6xwaltgs22",
      "canvas": { "x": 0, "y": 56, "width": 1440, "height": 836 },
      "sidebarAfterBuildingClick": { "x": 720, "y": 56, "width": 720, "height": 836 },
      "matchesFtcSf": true
    },
    {
      "name": "GainForest Data Council",
      "url": "/events/did%3Aplc%3Aqc42fmqqlsmdq7jiypiiigww/3miucq2jbzo2s",
      "canvas": { "x": 0, "y": 56, "width": 1440, "height": 836 },
      "sidebarAfterBuildingClick": { "x": 720, "y": 56, "width": 720, "height": 836 },
      "matchesFtcSf": true
    },
    {
      "name": "Senate canonical route",
      "url": "/senate",
      "canvas": { "x": 0, "y": 56, "width": 1440, "height": 836 },
      "sidebarAfterBuildingClick": { "x": 720, "y": 56, "width": 720, "height": 836 },
      "matchesFtcSf": true
    },
    {
      "name": "Senate event-card route",
      "url": "/events/did%3Aplc%3Aawtx57rxuisy4sf4kzzr3uhf/3mijiollfqs2i",
      "canvas": { "x": 0, "y": 56, "width": 1440, "height": 836 },
      "sidebarAfterBuildingClick": { "x": 720, "y": 56, "width": 720, "height": 836 },
      "matchesFtcSf": true
    }
  ],
  "sourceAssertions": [
    {
      "file": "hooks/useWalkingAvatars.ts",
      "assertion": "GatheringWorld can opt into backgroundPlacement='ftc-tower'. The ftc-tower placement computes targetH = canvasHeight * 0.7, scale = min(canvasWidth * 0.95 / naturalWidth, targetH / naturalHeight), dx = 0, and dy = centered. The same computeBgPlacement result is used for render drawImage, collision map construction, precise click fallback, and selected-building outline."
    },
    {
      "file": "components/events/gathering-world.tsx",
      "assertion": "Generic gathering pages pass backgroundPlacement='ftc-tower', render an edge-to-edge rounded-none canvas in a bg-background full-viewport container, and use a building info sidebar with the FtC SF geometry classes absolute top-0 right-0 bottom-0 w-full md:w-1/2."
    },
    {
      "file": "app/events/[did]/[rkey]/page.tsx and app/senate/page.tsx",
      "assertion": "Both wrappers use h-[calc(100vh-4rem)] overflow-hidden bg-background, matching the /ftc-sf page wrapper."
    }
  ]
}
