Curve blueprints prototype

Table of Contents

Item Where
Prototype the prototype
Gemini review none
Group Market data prototypes

1. Summary

The curve blueprint screens, as one plain page: the list of the party's blueprints, the record page a row opens with five tabs, and the four dialogs the record opens. A curve blueprint is the recipe one curve is built from.

The page argues five things. A blueprint is a record a person maintains, so it is a list and a record page rather than a workbench with three modes. Its pillars are parts of it, ordered by maturity and not by the order a person typed. Its check is a tab, because what a recipe must satisfy is something a person reads beside the recipe and not a third of the act of authoring it. The published sets that stand on it belong on the same page, so a person sees what a change reaches before making it. And every coded value wears the label catalogue's badge, or else the code, and never a pill the screen made up. The page also draws the Market data card the screen gets on its area page.

It is throwaway. It reads no service, it holds no session, and every value on it is mock data. It exists because the journeys settle what a blueprint is and nothing yet settles what a person sees while reading one, testing one or ending one.

2. Detail

2.1. The question

The Qt app has the bootstrapping screens and the web has none. The workflows exist: the CurveBuilderWorkbench defines a recipe, builds it and publishes it from three tabs of one window, and the IrCurveBootstrapConfigController opens it. What the web has no answer for is the shape. The Record screen standard gives a record a list, a record page, tabs, dialogs and states; the Qt window is none of those, and copying it would put a desktop apparatus in front of a web session.

So the question this prototype answers is: does the bootstrapping job read as a record screen, with the same parts as every other record kind, and which of the Qt window's parts does it need?

The answer it draws is five tabs: the recipe, its pillars, its check, the sets it fed, and its history. The Qt window's three tabs map onto the first three; the last two are the record standard's.

2.2. The surfaces

Switch with the bottom bar, or with the query string.

Surface Query What it draws
The area page ?surface=area The Market data area's cards, with this screen's card first
List ? or ?state=rows The party's blueprints, the filters, the states and the pager
Record page ?bp=USD-SOFR-1D&tab=details One blueprint, on one of its five tabs
Add dialog ?bp=USD-SOFR-1D&dlg=add The record dialog, empty
Edit dialog ?bp=USD-SOFR-1D&dlg=edit The record dialog, with the current values
Copy dialog ?bp=USD-SOFR-1D&dlg=copy The record dialog, carrying the conventions and the pillar count
Pillar dialog ?bp=GBP-SONIA-1D&dlg=pillar One pillar's three fields
Delete dialog ?bp=USD-SOFR-3M&dlg=delete What the delete loses, and the reason it can be refused
Record picker ?bp=USD-SOFR-6M&dlg=edit&pick=discount The picker inside the dialog: the currency's funding blueprints

The tab is in the address, so a link reopens the page where it was left: ?tab=check, ?tab=sets, ?tab=history.

2.3. The list

The list follows the record standard: the breadcrumb Home › Market data › Curve blueprints, the plural as the title, one sentence, a search, two filters, the table and the pager.

Column What it holds
Name The record's own name, in the first column. Under it, one line of state: No pillars yet, Never published, or No set in use since <date>
Currency The currency the curve is quoted in
Role FUNDING or PROJECTION, as its label badge
Index tenor The tenor of the index the curve stands for, as its code
Interpolation The method that joins the pillars, as its label badge
Day count The day count applied, as its label badge
Pillars How many parts the blueprint holds, right-aligned
Version The record's version
Last changed Relative, with the exact value on hover in the product

Two filters stand beside the search: a currency select and a role select. The search covers the name, the currency and the output series. A row opens the record page.

RS-LIST-21 gives the list its states, and the prototype draws each one:

  • No records. "There are no curve blueprints yet." It says what a blueprint is, and offers Add.
  • Nothing matches. "No curve blueprints match the search." and a way to clear it.
  • First load. "Loading…" in the body of the table.
  • Error. The words of the server and Retry, and never a modal box.
  • After a delete. One success notice, and the list without the row.

Two facts of the model shape the table. The blueprint has a name – a required column the record carries, such as USD-SOFR-ACME – so the list draws it and nothing parses the output series' oresmd URI for one. And the key is a UUID that RS-LIST-13 keeps out of a table, so the name is the readable handle the list has: the name is what a person searches by, sorts by and opens a row with.

2.4. The record page

The header carries the record's name as its title and in the breadcrumb, the lead line <currency> · index tenor <tenor> · <role> · version <n> and the access mark, and three actions: Copy blueprint, then Edit, then Delete. Copy is the kind's own action, in the place RS-PAGE-03 gives one, and it is the whole of the Qt window's New from Existing… button.

The tabs are Details, Pillars, Check, Published sets and History, in the standard's order: the record's fields, then a part, then the kind's own view, then a related plural, then the timeline.

  • Details. The fields in the field table's order: name, currency, index tenor, role, discount curve, interpolation method, day count, tenor convention, split tenor, output series and Used by. The name is the first fact, because it is what the record is. A value that names another record is a link: the discount curve opens that blueprint, the output series is the market series' URI and opens the series, and Used by lists the projection blueprints that discount off this one, each by its name. A funding blueprint has no discount curve, and the field draws a dash. The tab ends with the last-changed line. A blueprint with no pillars says so in a notice that opens the Pillars tab. A blueprint whose sets have all ended says so in a notice that names the withdrawal and the account that took it.
  • Pillars. The parts panel of RS-RELATED-04 to RS-RELATED-06: one row per pillar in maturity order, with the sequence, the start and end tenor, the curve role, the version, who changed it and when, and History, Edit and Delete on the row. Add stands beside the panel's title. The panel's one paragraph says what a pillar is, because the Qt window's paragraph is the only teaching either screen has, and that the order follows the end tenor rather than the order typed.
  • Check. The recipe's own checks, what the market supplies, the points, two charts and the findings. It has a section of its own below.
  • Published sets. The sets published from this blueprint, newest first: the published as-of, the party, the publisher, the published instant, the points and the state. A row opens the published record. A blueprint nobody published from says "None yet." and names the publish journey. The sets are read and never changed here: a withdrawal is its own act with a reason.
  • History. The shared timeline, as the record standard states it: the blueprint's versions and every pillar's versions, newest first, each entry named by its part, with the field-level difference behind Details, the current version marked, and Revert on the older ones.

2.5. The Check tab

The tab carries the as-of, then the checks, then what the market supplied, then the points and the two lines, then the findings.

Part What it draws
As-of The instant the test reads, now by default, in the address so a link reopens it
The recipe's checks Six checks with Pass or Fail: at least one pillar; each pillar matures after the one before it; every DEPOSIT pillar starts at SPOT; the split tenor is the last pillar's end tenor, or a tenor inside the ladder for the two-segment method; a PROJECTION names a FUNDING blueprint of its currency and not itself; the blueprint it names is not a projection
A failed check The finding in words, and the act that fixes it: Open the pillars, Edit the blueprint, Add a pillar
What the market supplies One row for each pillar, Observed or No rate, where no rate names the instant the market had nothing
The points The pillar, its date, the discount factor and the instantaneous forward, in maturity order
The two lines The discount factors and the forwards, one chart each, plain SVG, the pillar tenors along the bottom
Findings What the screen derived from the points, and one line that says the screen derived it

A recipe that fails its own check stops before the market is read: the tab says so, names every failed check, and draws no points. That is the validation failure state. A recipe that passes but whose market has no rate for one pillar still builds, and the points table draws a muted dash for the gap, the chart breaks its line, and one finding names the gap.

The tab never shows an unrun check as passed. Before the test it says Not run on every check and Not checked yet above them.

2.6. The dialogs

The record dialog is the standard's: one dialog, no tabs, two columns, the fields in the field table's order, the label above the control, one line of small faint text under a value that needs it, Cancel and the primary button in the footer.

The name is asked first and is required: it is typed, and no control derives it.

Field Control Asked when
Name A text field, required, first Always
Output series A record picker over the market series the party holds Always
Currency A record picker over the currencies Always
Index tenor A select over the tenors 1D, 3M and 6M Always
Role A select over FUNDING and PROJECTION Always
Discount curve A record picker over the currency's FUNDING blueprints The role is PROJECTION
Interpolation method A select over the three methods Always
Day count A select over the day counts Always
Tenor convention A select over the conventions Always
Split tenor A select over the tenors The method is FLAT_FORWARD_THEN_LOG_LINEAR

One field the Qt window draws is absent, on purpose. Source series is not asked at all: the config names no input series, and each pillar reads the series its own tenor, role and index resolve to, so its picker is not needed.

Output series is asked, and the note was reversed on 2026-10-28 when the screen was built. The draft drew it as a value that follows from the currency, the index tenor and the role, so that the server could mint it and the dialog would not ask (RS-WRITE-07). It does not follow: a curve's oresmd URI carries the index name (DISCOUNT/RATE/USD/USD-SOFR-FOMC), and the config holds the currency and the index tenor and not the index, so no operation can compose the identity the record is keyed by. The field is therefore a record picker over the series the party holds, it is required, and it is the record's natural key, so one series names one blueprint and a copy names another.

The series is not the name, and the screen never makes one from the other. The record carries the name a person typed, in a column of its own; the series is the URI the curve is published into, which Details draws and no title uses.

The pillar dialog asks for three fields: the start tenor, the end tenor and the curve role, each a select over the codes the system keeps, and says that the sequence follows the end tenor. The copy dialog is the record dialog with the conventions and the pillar count carried over and the name, the output series, the currency, the index tenor and the role blank, because those are what make it another curve. The delete dialog says what is lost, and refuses in the server's own words when a projection names the blueprint as its discount curve.

2.7. The coded values and the label catalogue

A coded value is drawn one way and only one way, as the application's CodedValue does it: a pill in the label catalogue's own shape and colours when the catalogue paints the code, and the code itself when it does not. The prototype carries one renderer for that, coded(domain, code), and every coded value on the page goes through it. The pill is the app's Label: a filled pill, 11 pixels, the badge's background and text colour, the badge's own name inside it, and the badge's description on hover. The screen never builds a pill of its own, and it never paints a value the catalogue does not paint.

Value Domain In the catalogue today Drawn as
Curve family role, FUNDING and PROJECTION curve_family_role No entry Badge, proposed below
Interpolation method interpolation_method No entry Badge, proposed below
Day count convention day_count_convention No entry Badge, proposed below
Tenor convention tenor_convention No entry Badge, proposed below
Pillar curve role, DEPOSIT, FRA and SWAP bootstrap_curve_role No entry Badge, proposed below
Published set state curve_publish_state No entry Badge, proposed below; the published-curves prototype draws the same three words
Index tenor, pillar tenors, split tenor none The catalogue paints a tenor's unit and kind (tenor_unit, tenor_kind), and no domain keys a tenor code Plain: the code, monospace
Currency none The catalogue paints a currency's tier and nature, and neither is drawn here Plain: the code, monospace
Output series' type and metric none No entry Plain: the words the series carries
Party party_type A mapping for each party type Not drawn: the list is scoped to the session's party, so no cell shows one

Six domains are proposed, and the note states them as proposals and not as fact: the seed holds no entry for any of the six. Until it does, the product screen draws the same codes plain, exactly as CodedValue does for a field the catalogue has not painted. The proposal is what the catalogue needs, and it is one row for each code:

Domain Code Badge Name in the pill Colour
curve_family_role FUNDING curve_family_role_funding Funding #22c55e
curve_family_role PROJECTION curve_family_role_projection Projection #3b82f6
interpolation_method LOG_LINEAR_DISCOUNT interpolation_method_log_linear Log-linear discount #7c3aed
interpolation_method FLAT_FORWARD_THEN_LOG_LINEAR interpolation_method_flat_forward Flat forward then log-linear #7c3aed
interpolation_method CUBIC_SPLINE interpolation_method_cubic_spline Cubic spline #7c3aed
day_count_convention A360, A365, A365F, 30/360 day_count_a360 and three more The code #6b7280
tenor_convention RATES_SPOT_FORWARD, RATES_SPOT_FOMC tenor_convention_spot_forward and one more Rates, spot forward; Rates, spot FOMC #0ea5e9
bootstrap_curve_role DEPOSIT, FRA, SWAP bootstrap_curve_role_deposit and two more Deposit; FRA; Swap #14b8a6
curve_publish_state Published, Withdrawn, Superseded curve_publish_state_published and two more The state's word #22c55e, #ef4444, #6b7280

The colours are the palette's own, not new ones: #22c55e is the catalogue's success, #3b82f6 its info, #7c3aed its primary, #14b8a6 and #0ea5e9 its other informational tones, #6b7280 its secondary, and #ef4444 its danger. One domain carries one colour except the curve family role, whose two codes are painted apart because the value says which curve a curve depends on.

Two things on the page are not coded values and are drawn as words: Observed and No rate say what the market holds for a pillar, and Built and Built with gaps say what the test returned. They are the screen's own sentences about a read, so they carry a semantic colour and no pill, and the screen invents no catalogue entry for them.

A dialog keeps its select's own text: a control shows the option the person chose, and the badge is for a value that is read, not for a control. The prototype draws both, and the note records the difference rather than leaving it to be found.

2.8. The card on the Market data area

The screen is one card on the Market data area page, in the words and the shape the other cards carry. The area's cards are defined once in web/src/shell/cards.ts, listed in AREA_CARDS in the order the page draws them, and worded in web/src/i18n/locales/*.ts.

Field Value
Card id curveBlueprints
Title key marketdata.curveBlueprints.title, whose words are Curve blueprints
One line marketdata.curveBlueprints.lead: "The recipes each curve is built from: its pillars, its conventions and the sets it fed."
Route /market-data/curve-blueprints, added to PATHS in web/src/shell/paths.ts
Record page /market-data/curve-blueprints/:key
Read refdata::ir_curve_bootstrap_configs:read, the permission the generated handler checks
Icon document
Order First in AREA_CARDS.marketdata, before synthetic, because a blueprint is where a curve starts
Menu The area's entry in MENU in web/src/shell/areas.ts gains the read, so a person who may read a blueprint is offered the area

The prototype draws the area page at ?surface=area, with the card first and the four cards the area draws today beside it. Those four keep the words they already carry, so a reviewer reads the new card against them and not in isolation.

The card's words name the record and stop there, as the other cards do: a blueprint's pillars, its conventions and the sets it fed. It does not say bootstrap and it does not say config, because the screen says neither.

2.9. The states

Switch with the bottom bar, or with the query string.

Surface State What it shows
Area ?surface=area The Market data cards, with this screen's card first and its route and read stated
List ?state=none There are no curve blueprints yet
List ?state=nomatch No curve blueprint matches the search
List ?state=loading Loading, in the body of the table
List ?state=error The error and Retry
List ?state=removed The list after a delete, and what the delete left behind
Record ?bp=USD-SOFR-1D The recipe, its output series and the blueprints it is used by
Record ?bp=GBP-SONIA-1D&tab=pillars A blueprint with no pillars
Record ?bp=USD-SOFR-1D&tab=check Every check passing, nine points and two lines
Record ?bp=SEK-STIBOR-6M&tab=check A validation failure: two checks fail and the build never runs
Record ?bp=USD-SOFR-1D&tab=check&check=miss A pillar the market cannot fill, and a curve built across the gap
Record ?bp=USD-SOFR-1D&tab=check&check=notrun Not checked yet
Record ?bp=USD-SOFR-1D&tab=sets A blueprint that feeds published sets
Record ?bp=EUR-EURIBOR-6M&tab=sets A blueprint nobody has published from
Record ?bp=JPY-TONA-6M A blueprint whose sets have all ended, on its Details tab
Record ?bp=JPY-TONA-6M&tab=check A curve whose forwards jump, and the finding it reads
Record ?bp=USD-SOFR-1D&tab=history The blueprint and its pillars in one stream
Dialog ?bp=USD-SOFR-1D&dlg=add The record dialog, empty
Dialog ?bp=USD-SOFR-1D&dlg=copy The copy, and what it carries
Dialog ?bp=USD-SOFR-6M&dlg=edit&pick=discount The record picker, over one currency's funding blueprints
Dialog ?bp=USD-SOFR-1D&dlg=delete A delete the server refuses
Dialog ?bp=USD-SOFR-3M&dlg=delete A delete it allows, and what is lost

2.10. Covering the journeys

The prototype does not mirror the journeys step by step. It carries their intent, and this table says how each one lands on a screen, and what it does not draw.

2.10.1. Maintain the curve blueprints

Step Intent How the prototype covers it What it does not draw
1 List the party's blueprints The list, with the name first, the state line under it, and the role, the interpolation method and the day count as their label badges The column menu that hides and orders columns, and the audit columns (RS-LIST-13)
2 Search and filter The search over name and currency, the currency and role filters, and the no-match state A server search: the prototype filters on the page, and RS-LIST-04 wants the filter on the contract
3 Open a blueprint and read its fields The Details tab, the fields in the field table's order, each coded value as its label badge or its code, the output series and Used by as links The output series' own read, which is a different component's screen
4 Read the pillars The Pillars tab in maturity order, with the empty state and its Add Nothing
5 Add a blueprint The Add dialog: the output series as a picker over the party's series, six more fields, the discount curve for a projection and the split tenor for the two-segment method A series created from the dialog: a series is chosen, never made here
6 Define the pillars The Add a pillar dialog's three fields, over the parts panel, whose rows carry the pillar's role as its label badge Editing a pillar: the dialog is drawn in its Add state only, though it is the same shape
7 Read the order, and the refusal a DEPOSIT gets The panel says the order follows the end tenor; the Check tab names a DEPOSIT that does not start at SPOT and the act that fixes it The message under the start tenor field: the standard puts a failed field's message under the field (RS-WRITE-05), and the dialog is not drawn with one
8 Change a blueprint The Edit dialog with the current values, the version it claims, and the discount curve asked when the role becomes PROJECTION The notice for a role change the server refuses, because a projection still discounts off the blueprint; the delete dialog's refusal is the pattern it would use
9 Copy a blueprint The Copy dialog: the conventions and the pillar count carried over, the currency, the index tenor and the role asked The reason each copied pillar carries: the journey leaves it open
10 Check the recipe The Check tab, and its own journey below The check's result held against a version: nothing holds one
11 Read the published sets The Published sets tab, with the sets and the empty state The published record's page, which the published-curves prototype draws
12 Read what it feeds The output series and Used by on Details The link to the list filtered by this blueprint when more than three name it: no filter exists to carry it
13 Read the history The History tab: the blueprint's versions and its pillars' in one rail, with the difference of each The event chart over the entries; Revert is drawn as its words and no dialog
14 Delete a blueprint The delete dialog in both states: what is lost, and the refusal while a projection names it; then the list's notice The delete that succeeds: nothing on the page writes
15 Leave The breadcrumb, which leads back to the Market data area and its card, and the bar's controls Nothing

The journey's retire has no home on the page, because the record has no status and no end date. The nearest expression is drawn: a blueprint whose published sets have all ended says so in the list's state line and in a notice on Details, and names the withdrawal that ended it. The state reads "no set in use" and never "retired", so the page claims no field the model lacks. The journey records the gap, and this note repeats it: retire is a status column, or it is nothing.

2.10.2. Check that a curve blueprint builds

Step Intent How the prototype covers it What it does not draw
1 Arrive at the blueprint The record page, opened from the list The arrival from a failed bootstrap: nothing today links a failure to its blueprint
2 Open the Check tab The tab with the as-of and Run the test, and Not checked yet before a run The instant a person names: Earlier instant sets one mock value rather than opening a date field, which the standard has no field kind for
3 Read the recipe's own checks Six checks, each Pass or Fail, each with the act that fixes it, and Not run before the test A check the server answers: the screen answers all six from what it read, and says so
4 Read what the market must supply The pillar table with Observed or No rate The series each pillar resolved to: no read answers it for a whole recipe
5 Read the built curve The points table and the two lines Nothing
6 Read the finding The findings panel, and the line that says the screen derived it The server's own diagnostics, which no operation returns
7 Fix the recipe The buttons a failed check carries: Open the pillars, Edit the blueprint, Add a pillar The field-level correction, for the reason step 7 of the other journey gives
8 Run it again Run the test again, and the result replacing the last one The clearing of a result after a save: nothing writes
9 Leave The tabs and the breadcrumb The publish, which this journey never takes and the page never offers

2.10.3. What the journeys ask for that the page does not draw

Four things are deliberately absent, and each is either a part the standard does not have or a server answer that does not exist.

  • A retire action. The record has no status, so the page draws the state and offers no action. The journey leaves it open.
  • A field-level message under a wrong field. RS-WRITE-05 asks for one, and the only wrong value the page knows how to draw is a pillar that the Check tab judges. Adding a fourth state to the pillar dialog would invent a pattern for one case; the Check tab is the pattern the page has.
  • A result held against a version. Nothing holds the test's result, so the tab shows the reading of the person who ran it. The journey records it.
  • A save that writes the recipe and its pillars together. The page draws one write at a time, because no operation composes them; the journey records it.

2.11. What is fake

Everything on the page is mock data: eight blueprints, their pillars, their published sets, their history, the currencies, the tenors and the accounts are hard-coded literals. There is no server, no session and no build step. The mock clock is 7 October 2026, 17:00 UTC, and every relative time is measured from it.

The curves are computed from a formula, not from a market. Each blueprint carries a base rate, the pillars carry tenors, and the discount factor at each pillar is the compound of the base rate over the pillar's years; the forward rate is the ratio of two adjacent discount factors. That gives a smooth curve, which is what the tab needs to look sane, and it is not a curve anyone could price from.

Three of the eight blueprints exist for one state each: GBP-SONIA-1D has no pillars, SEK-STIBOR-6M fails two checks (a deposit that starts at 3M, and two pillars that both end at 10Y), and JPY-TONA-6M has a bumped discount factor so that its forwards jump and a finding has something to say. USD-SOFR-1D carries three published sets and is named by another blueprint's discount curve, so the Published sets tab and the Used by value both have something to hold.

The label catalogue on the page is a proposal and not a read: the six domains the curve screens need are not in the seed, so the prototype carries the rows the note sets out, and a product screen would draw the same codes plain until the catalogue paints them. The area page's five cards are the app's own words for four of them and this prototype's words for the fifth, and the four are drawn to show the new card in context.

The reviewer should know two assumptions. The role of a blueprint and the currency it is quoted in are drawn as the fields the model holds, and the curve code is a stand-in for the output series' URI: the model stores the series by id and the record does not hold the URI, so the screen reads it from the series. The name is not a stand-in for anything: it is the record's own column, and it is what the page titles the record by. And the party is always the session's, because the list read scopes by party and the page has no party filter of its own.

2.12. Where the code lives

The prototype is doc/prototypes/market_data/curve-blueprints/. The directory holds one file, index.html, with its CSS and its JavaScript inline: no framework, no prototype.css, no prototype.js, and no build step. The site build copies the directory as it stands and adds nothing to it.

The product screens would live here:

Part Where
The list and the record page A new CurveBlueprintsPage and CurveBlueprintPage under projects/ores.web/packages/web/src/marketdata/, with a route at /market-data/curve-blueprints and a path in shell/paths.ts
The parts panel The shared PartsPanel in web/src/refdata/records.tsx
The dialogs RecordDialog, RemoveRecordDialog and RecordPicker, from the shared parts; the pillar dialog is the same RecordDialog over the pillar kind
The History tab The shared Timeline in web/src/timeline/
The two charts web/src/marketdata/LineChart.tsx, as the check tab draws them
The list, the record and the writes The BFF's record routes, which need an entry in REFDATA_RECORDS in wire-protocol/src/records.ts and a write schema in bff/src/records.ts; the subjects exist in the generated protocol
The check A read over marketdata.v1.ops.compute_curve, which has a handler and no web route, and the checks the screen derives
The area card A curveBlueprints entry in web/src/shell/cards.ts, its id in AREA_CARDS.marketdata, its route in PATHS, its read in the Market data entry of MENU, and its two strings in each locale
The label badges Six domains in the badge seed, projects/ores.sql/populate/dq/dq_badge_system_populate.sql, and nothing in the screen: the screen reads CodedValue and the catalogue paints what it paints

Three reads are missing, and the note names them where the screen draws them: a filter by bootstrap_config_id on the pillars and on the published curves, and one operation that answers a blueprint's dependants.

2.13. The verdict

Open. It is offered for sign-off as the shape of the two journeys' screens: the list with its state line, the record page with five tabs and no button that repeats one, the pillars as parts in maturity order, the Check tab with its six checks and its two lines, the published sets on the record, four dialogs with nine fields between them, the label catalogue's badges on every coded value, and the screen's card on the Market data area.

What sign-off settles is that the Qt window is not the web's layout: a record page is where a person acts on a blueprint, and the test is a tab a person arrives at rather than the third panel of an editor.

2.14. What it does not settle

The badge catalogue. Six domains carry the codes this screen draws, and the seed holds none of them. Whether the seed gains all six, whether the curve family role keeps two colours where the other five domains carry one, and whether the three words of a published set state belong to this screen or to the published-curves one, are the catalogue's decisions. The prototype's rows are the proposal the note sets out, and a screen draws plain until the catalogue is seeded.

The place in the menu. The Menu structure gives Market data five entries and none of them is Curves. This page uses the journeys' word and stands at /market-data/curve-blueprints; whether the area gains a Curves entry, and whether the published curves of the published-curves prototype sit beside it, is the menu's decision and not this prototype's.

The key in the address. The record's key is a UUID and the readable handle is now the record's name. The prototype uses the curve code the published-curves screen already uses; the address still needs one of the two, and the journeys leave it open.

The name is settled, and it is settled in the database. ir_curve_bootstrap_config carries a required name that the person types in the Add and Copy dialogs, the list draws in its first cell, the record header and breadcrumb draw as the title, and Details draws as its first fact. The output series stays a property on Details, drawn as its URI and linked, and the screen makes no name out of it. The name is unique per tenant and per party among the active rows, by a declared unique index, so a party never holds two blueprints of one name.

The check's home. The Check tab is the kind's own tab, and the standard's tab table names field groups and related plurals. The published-curves prototype drew a comparison tab and left the same question open; the two should be settled together.

Retire. A status column, or nothing. The prototype draws the state a person can infer and names it in the standard's words rather than inventing a badge.

The pillars' edit. The pillar dialog is drawn in its Add state. Whether the parts panel edits a pillar in a dialog, as RS-RELATED-06 says, or in the table, is settled by the standard and not drawn here.

The channel of a finding. The screen derives the forward rate, the jump and the missing rate, because the server returns none of them. How much of a diagnostic a screen may derive is open.

3. See also

Emacs 29.3 (Org mode 9.6.15)