← All docs

ISC-WF-1: workflow extension (rulesets, overrides, language variants)

The Interscript Configuration Syntax (ISC) describes each transliteration system as a self-contained map. ISC-WF-1 extends the language with three additive constructs for reuse and specialization: named rulesets, use-time overrides, and language conditioning. The constructs are defined by the normative specification ISC-WF-1 and are additive: any map that does not use them transliterates byte-identically under runtimes with and without the extension.

W1 — named rulesets

A ruleset is a named block of rules that never runs on its own. A stage pulls it in with use, which expands the ruleset’s items at that position:

ruleset romanize_descenders {
  parallel {
    sub "җ" "ž̧"
    sub "қ" "ķ"
    sub "ҫ" "ş"
  }
}

stage main {
  use romanize_descenders
  parallel {
    sub "а" "a"
  }
}

Rulesets compose with dependencies: after dependency "id" as alias, a ruleset from that map is referenced as use alias.<name>. Expansion is recursive; a reference cycle is a load error.

W2 — use with override

A use directive may carry an override block. Rows whose source string matches an override row exactly are replaced by it; all other rows pass through; new rows are added. The whole expansion still applies as one longest-match pass:

stage main {
  use romanize_descenders override {
    sub "қ" "k̦"   # this map's tradition uses the comma-below form
  }
  parallel {
    sub "а" "a"
  }
}

An override row is complete: it replaces the imported row’s output and any constraints, and it may carry its own language guard.

W3 — language conditioning

A map can declare the languages it serves, and individual rows can be guarded by a language selected at call time:

system "ISO:rus-Cyrl:Latn:9-1995" {
  languages kur ckv
}
stage main {
  parallel {
    sub "қ" "ķ"            # generic
    sub "қ" "k̦" when kur   # Kurdish tradition
  }
}

Rules whose guard lists the selected language apply; guard-applicable rows take precedence over an unguarded row with the same source string; with no language selected every guard is inert and the map behaves as if the guarded rows were absent.

Availability

The construct semantics are specified in ISC-WF-1. Runtime support is landing across the Interscript runtimes (Ruby reference implementation first, then TypeScript, Python and Rust); each landing is gated by the corpus additivity proof, so maps that do not use these constructs are never affected.