docs← Back to article

Markdown for LLMs

EXTERNAL_UNAVAILABLE — An outside dataset the question needs is not pinned

The source Markdown for this article. Copy it into your assistant or download it as a text file.

Download this articlePlain text ↗
# EXTERNAL_UNAVAILABLE — An outside dataset the question needs is not pinned

## What it means

Some package functions read from datasets kept outside the package: zone
tables, tariff schedules, reference lists. The package declares which
dataset it needs and under what binding, and the case pins the exact
snapshot to read. When no snapshot is pinned for that binding, the read
has no source, and the question that depends on it ends here instead of
reading whatever happens to be at hand.

This status is about the missing pin, not the package. The function and
the rules around it are fine; the dataset they should read was never
attached to the case.

## When you see it

```law
language "law.core" version "0.2";
package demo.diagnostics version "0.1.0";
namespace "urn:law:demo:diagnostics";

entity Applicant;
relation resident(a: Applicant) kind empirical;
relation zone_bonus(a: Applicant) kind institutional;

external snapshot function zone_table(a: Applicant) -> Decimal {
    capability "demo-zones";
    snapshot_from context.zone_data;
}

rule ZoneBonus strict {
    for a: Applicant;
    when resident(a) and zone_table(a) >= 2;
    then zone_bonus(a);
}
```

```lawtest
language "law.core" version "0.2";
package demo.diagnostics version "0.1.0";
namespace "urn:law:demo:diagnostics";

test "missing zone dataset" {
    given {
        context { legal_time @2026-03-01; decision_time @2026-03-01T09:00:00Z; knowledge_time @2026-03-01T09:00:00Z; timezone "UTC"; }
        assert resident(entity_ref("urn:demo:diagnostics:ann")) { origin case_input; }
    }
    evaluate truth(zone_bonus(entity_ref("urn:demo:diagnostics:ann")));
    expect evaluation_status == EXTERNAL_UNAVAILABLE;
}
```

The zone table should arrive as a pinned dataset, and this case pins
none. The bonus question ends here.

## What to do

Pin the exact dataset snapshot the function binding names and attach it
to the case, then ask again. The pin must identify the data precisely —
an unpinned or mismatched dataset is refused rather than read loosely.

## Related

- [Testing a package](/language/testing-a-package/) — how scenarios pin outcomes.
- [NON_EXECUTABLE](/diagnostics/NON_EXECUTABLE/) — when the call itself has no runnable body.