DrillStack

rendered, live
the wire — click a line to scrub
the contract — DrillStack in catalog.json
{
  "type": "object",
  "properties": {
    "component": {
      "const": "DrillStack"
    },
    "levels": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "description": "Breadcrumb text and the level's accessible name."
          },
          "componentId": {
            "type": "string",
            "description": "ComponentId of the level's content, already on the surface."
          }
        },
        "required": [
          "title",
          "componentId"
        ],
        "additionalProperties": false
      },
      "description": "The drill path, surface first. Each level names a component already on the surface."
    },
    "activeIndex": {
      "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/DataBinding",
      "description": "Data binding for the visible depth, always {\"path\": ...}. Push a level by writing the index with updateDataModel — never by re-sending the stack. Required."
    },
    "dismissAction": {
      "$ref": "https://a2ui.org/specification/v1_0/common_types.json#/$defs/Action",
      "description": "Optional: fired when the user dismisses the whole stack."
    }
  },
  "required": [
    "levels",
    "activeIndex"
  ]
}
the prompt-pack — paste into your agent
### DrillStack — four depths on one page

The container that keeps surface → synthesis → impact → source in one place. Levels name
components already on the surface; the visible depth is data.

| prop            | type                             | notes                                                         |
| --------------- | -------------------------------- | ------------------------------------------------------------- |
| `levels`        | {title, componentId}[], required | surface first; each title is its level's accessible name      |
| `activeIndex`   | `{"path"}`, required             | bound depth — push/pop by writing the index, never re-sending |
| `dismissAction` | action                           | optional whole-stack dismissal                                |

```
{"id":"drill","component":"DrillStack","levels":[{"title":"Insights","componentId":"insight_ra"},{"title":"Affected accounts","componentId":"impact_table"}],"activeIndex":{"path":"/drill/depth"}}
```

To push the second level:

```
{"version":"v1.0","updateDataModel":{"surfaceId":"i1","path":"/drill/depth","value":1}}
```