Extract architectural decisions from conversation context for ADR generation.
Signal TypeExamplesExplicit markers[ADR], "decided:", "the decision is"Choice patterns"let's go with X", "we'll use Y", "choosing Z"Trade-off discussions"X vs Y", "pros/cons", "considering alternatives"Problem-solution pairs"the problem is... so we'll..."
Text marked with [ADR] is always extracted:
text
[ADR] Using PostgreSQL for user data storage due to ACID requirements
These receive confidence: "high" automatically.
Patterns detected without explicit tags require confidence assessment:
ConfidenceCriteriahighClear statement of choice with rationalemediumImplied decision from action takenlowContextual inference, may need verification
json
{
"decisions": [
{
"title": "Use PostgreSQL for user data",
"problem": "Need ACID transactions for financial records",
"chosen_option": "PostgreSQL",
"alternatives_discussed": ["MongoDB", "SQLite"],
"drivers": ["ACID compliance", "team familiarity"],
"confidence": "high",
"source_context": "Discussion about database selection in planning phase"
}
]
}
FieldRequiredDescriptiontitleYesConcise decision summaryproblemYesProblem or context driving the decisionchosen_optionYesThe selected solution or approachalternatives_discussedNoOther options mentioned (empty array if none)driversNoFactors influencing the decisionconfidenceYeshigh, medium, or low``source_contextNoBrief description of where decision appeared
[ADR] tagged contentRun these in order after the workflow above and before returning output. Each step has an objective pass condition.
[ADR] inventory — Capture every [ADR] segment from the full source (verbatim in working notes). Pass: a second pass over the same source adds no new [ADR] blocks.[ADR] decision (see Merge Related Decisions). Pass: at most one row per distinct decision.decisions[] item has non-empty title, problem, chosen_option; confidence ∈ { high, medium, low}; alternatives_discussed is an array (use [] if none); other optional fields per table.confidence: "low", source_context states what was missing, weak, or contradictory. Pass: a reader can see why the rating is not higher.text
"We decided to use Redis for caching because of its sub-millisecond latency
and native TTL support. Memcached was considered but lacks persistence."
Extracts:
text
"Let's go with TypeScript for the frontend since we're already using it
in the backend."
Extracts:
text
"The API seems to be working well with REST endpoints."
Extracts:
Always capture sufficient context for the ADR writer:
If multiple statements relate to the same decision, consolidate them:
When decisions are unclear or contradictory:
source_contextlow