@instruments/taxonomy 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -31
- package/dist/chunk-4ECRPD2I.js +7508 -0
- package/dist/chunk-CTKOLWGS.js +23 -0
- package/dist/chunk-FCMCKNQF.js +103 -0
- package/dist/chunk-WIRA24HM.js +42 -0
- package/dist/crosswalks/designshop.d.ts +33 -0
- package/dist/crosswalks/designshop.js +363 -0
- package/dist/crosswalks/materialgraph.d.ts +41 -0
- package/dist/crosswalks/materialgraph.js +178 -0
- package/dist/crosswalks/miu.d.ts +3 -0
- package/dist/crosswalks/miu.js +9 -3
- package/dist/estate/index.d.ts +233 -0
- package/dist/estate/index.js +1808 -0
- package/dist/index.d.ts +282 -10
- package/dist/index.js +168 -143
- package/dist/mapping-pvHk5VjC.d.ts +31 -0
- package/dist/match-CWzTEuL-.d.ts +403 -0
- package/dist/taste.d.ts +155 -0
- package/dist/taste.js +14 -0
- package/package.json +27 -8
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import {
|
|
2
|
+
approximates,
|
|
3
|
+
constitutive,
|
|
4
|
+
declined
|
|
5
|
+
} from "../chunk-WIRA24HM.js";
|
|
6
|
+
import {
|
|
7
|
+
TAXONOMY_SNAPSHOT_VERSION
|
|
8
|
+
} from "../chunk-FCMCKNQF.js";
|
|
9
|
+
import {
|
|
10
|
+
defineAlternatives,
|
|
11
|
+
defineBundle
|
|
12
|
+
} from "../chunk-4ECRPD2I.js";
|
|
13
|
+
|
|
14
|
+
// src/crosswalks/materialgraph.ts
|
|
15
|
+
var MATERIALGRAPH_CROSSWALK_VERSION = "materialgraph-2026-08-27.1";
|
|
16
|
+
var MATERIALGRAPH_SOURCE_SYSTEM = "materialgraph";
|
|
17
|
+
var MATERIALGRAPH_SNAPSHOT = "2026-08-27";
|
|
18
|
+
var MATERIALGRAPH_SOURCE_FIELDS = ["role", "character"];
|
|
19
|
+
var MATERIALGRAPH_COMPOSITIONAL_ROLES = {
|
|
20
|
+
accent: "accent",
|
|
21
|
+
feature_surface: "constitutive"
|
|
22
|
+
};
|
|
23
|
+
var SCALE_SHIFT = "A claim about a MATERIAL answered by a term about a ROOM. The two substitute in retrieval most of the time and not always, which is what `close` says and what `resolved` could not.";
|
|
24
|
+
var LADDER = "One rung of the quiet/restrained/expressive/bold presence ladder. MOOD is unordered and has no term for this rung, so the association is published and the ordering is lost. See the header.";
|
|
25
|
+
var READS_AS = "A `reads-as` claim with nothing to point at. The predicate exists in `term.ts`; the target vocabulary - a natural/synthetic and soft/hard reading register - is not authored on any axis, and minting one would be a new axis. Searched 2026-08-27 across all 23 axes; absent.";
|
|
26
|
+
var MATERIALGRAPH_CROSSWALK = {
|
|
27
|
+
/* oxlint-disable sort-keys -- rows follow the upstream dictionary order, so a reader can check
|
|
28
|
+
this file against `material-semantics-core.ts` and `-aesthetics.ts` without reordering. */
|
|
29
|
+
role: {
|
|
30
|
+
wall_finish: approximates(
|
|
31
|
+
"broad",
|
|
32
|
+
"`application.wall` is every use of a wall face - panelling, tiling, cladding - and the source names one of them. The canon covers more than the source claimed. Note the collision with `material-family.wall-finish`, which is the same two words asking what the thing is MADE OF; this row is about where it goes.",
|
|
33
|
+
"application.wall"
|
|
34
|
+
),
|
|
35
|
+
flooring: constitutive("application.flooring"),
|
|
36
|
+
ceiling: constitutive("application.ceiling"),
|
|
37
|
+
// `element.millwork` already carries `joinery` and `casework` as alt labels: the canon has
|
|
38
|
+
// ruled that the British and American words name one thing, and this row follows that ruling
|
|
39
|
+
// rather than re-opening it.
|
|
40
|
+
joinery: constitutive("application.millwork"),
|
|
41
|
+
upholstery: constitutive("application.upholstery"),
|
|
42
|
+
drapery: constitutive("application.vh_drapery"),
|
|
43
|
+
// `application.countertop` gained `worksurface` as an alt label for this row. One surface, two
|
|
44
|
+
// national names, one term.
|
|
45
|
+
worksurface: constitutive("application.countertop"),
|
|
46
|
+
casegoods: approximates(
|
|
47
|
+
"close",
|
|
48
|
+
"A role answered by a product kind. `product_category.storage` carries `casegoods` as an alt label, so the words agree; the claims do not quite, because the source says what the material is DOING and the canon says what the product IS.",
|
|
49
|
+
"product_category.storage"
|
|
50
|
+
),
|
|
51
|
+
trim: constitutive("application.trim"),
|
|
52
|
+
accent: declined(
|
|
53
|
+
"Compositional, not a product property: the same material is an accent in one scheme and the field in the next. Its destination is the bundle role `accent` in `match.ts` - see MATERIALGRAPH_COMPOSITIONAL_ROLES."
|
|
54
|
+
),
|
|
55
|
+
feature_surface: declined(
|
|
56
|
+
"Compositional, as `accent` is. Its destination is the bundle role `constitutive`: a feature surface is the one you cannot remove without changing what the scheme is."
|
|
57
|
+
),
|
|
58
|
+
other: declined(
|
|
59
|
+
"A routing bucket with no content. `other` on a closed axis is a positive classification; on this one it names nothing at all, and the honest canonical value is null."
|
|
60
|
+
)
|
|
61
|
+
},
|
|
62
|
+
character: {
|
|
63
|
+
quiet: approximates("close", SCALE_SHIFT, "mood.calm"),
|
|
64
|
+
expressive: approximates("related", LADDER, "mood.dramatic"),
|
|
65
|
+
restrained: approximates(
|
|
66
|
+
"related",
|
|
67
|
+
`${LADDER} \`mood.austere\` is the nearest room-scale term and it overstates: austerity is renunciation, restraint is only quietness of means.`,
|
|
68
|
+
"mood.austere"
|
|
69
|
+
),
|
|
70
|
+
bold: approximates("related", LADDER, "mood.dramatic"),
|
|
71
|
+
// The one row in this dictionary that reads the same at both scales: a rustic material and a
|
|
72
|
+
// rustic room are the same idiom, which is what TAX-14 found and this keeps.
|
|
73
|
+
rustic: approximates("close", SCALE_SHIFT, "style.rustic"),
|
|
74
|
+
crafted: approximates(
|
|
75
|
+
"related",
|
|
76
|
+
"A READING answered by a production FACT, and the two come apart in both directions: a printed laminate can read as crafted, and a machine-finished handmade tile can read as neither. Association only.",
|
|
77
|
+
"construction.handcrafted"
|
|
78
|
+
),
|
|
79
|
+
refined: declined(
|
|
80
|
+
"The machine-precise register has no canonical term. `mood.quiet-luxury` is about expense being legible and `finish.treatment.polished` is about a surface operation; refined is about precision of execution and is neither. Searched 2026-08-27; absent."
|
|
81
|
+
),
|
|
82
|
+
// TAX-14 recorded this as `lossy` - "`serious` understates the social convention `formal`
|
|
83
|
+
// carries". That verdict is SKOS's `closeMatch`, reached independently and now spelled in the
|
|
84
|
+
// published vocabulary rather than in a bespoke one.
|
|
85
|
+
formal: approximates(
|
|
86
|
+
"close",
|
|
87
|
+
`${SCALE_SHIFT} \`mood.serious\` also understates the social convention \`formal\` carries.`,
|
|
88
|
+
"mood.serious"
|
|
89
|
+
),
|
|
90
|
+
casual: approximates("close", SCALE_SHIFT, "mood.domestic"),
|
|
91
|
+
natural_reading: declined(READS_AS),
|
|
92
|
+
synthetic_reading: declined(READS_AS),
|
|
93
|
+
soft_reading: declined(READS_AS),
|
|
94
|
+
hard_reading: declined(READS_AS)
|
|
95
|
+
}
|
|
96
|
+
/* oxlint-enable sort-keys */
|
|
97
|
+
};
|
|
98
|
+
var canonicaliseMaterialGraph = (input) => {
|
|
99
|
+
const base = {
|
|
100
|
+
crosswalkVersion: MATERIALGRAPH_CROSSWALK_VERSION,
|
|
101
|
+
provenance: input.provenance,
|
|
102
|
+
sourceField: input.sourceField,
|
|
103
|
+
sourceSystem: MATERIALGRAPH_SOURCE_SYSTEM,
|
|
104
|
+
sourceValue: input.sourceValue,
|
|
105
|
+
taxonomySnapshotVersion: TAXONOMY_SNAPSHOT_VERSION
|
|
106
|
+
};
|
|
107
|
+
const mapping = MATERIALGRAPH_CROSSWALK[input.sourceField][input.sourceValue];
|
|
108
|
+
if (mapping === void 0) {
|
|
109
|
+
return { ...base, status: "unresolved" };
|
|
110
|
+
}
|
|
111
|
+
if (mapping.status === "declined") {
|
|
112
|
+
return { ...base, reason: mapping.reason, status: "declined" };
|
|
113
|
+
}
|
|
114
|
+
if (mapping.status === "ambiguous") {
|
|
115
|
+
return {
|
|
116
|
+
...base,
|
|
117
|
+
alternatives: defineAlternatives(
|
|
118
|
+
mapping.alternatives,
|
|
119
|
+
"source-ambiguous"
|
|
120
|
+
),
|
|
121
|
+
match: mapping.match,
|
|
122
|
+
status: "ambiguous",
|
|
123
|
+
...mapping.note === void 0 ? {} : { note: mapping.note }
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
...base,
|
|
128
|
+
canonical: defineBundle(mapping.assertions),
|
|
129
|
+
match: mapping.match,
|
|
130
|
+
status: "resolved",
|
|
131
|
+
...mapping.note === void 0 ? {} : { note: mapping.note }
|
|
132
|
+
};
|
|
133
|
+
};
|
|
134
|
+
var MATERIALGRAPH_ROLE_VALUES = [
|
|
135
|
+
"wall_finish",
|
|
136
|
+
"flooring",
|
|
137
|
+
"ceiling",
|
|
138
|
+
"joinery",
|
|
139
|
+
"upholstery",
|
|
140
|
+
"drapery",
|
|
141
|
+
"accent",
|
|
142
|
+
"worksurface",
|
|
143
|
+
"casegoods",
|
|
144
|
+
"feature_surface",
|
|
145
|
+
"trim",
|
|
146
|
+
"other"
|
|
147
|
+
];
|
|
148
|
+
var MATERIALGRAPH_CHARACTER_VALUES = [
|
|
149
|
+
"quiet",
|
|
150
|
+
"expressive",
|
|
151
|
+
"restrained",
|
|
152
|
+
"bold",
|
|
153
|
+
"rustic",
|
|
154
|
+
"crafted",
|
|
155
|
+
"refined",
|
|
156
|
+
"formal",
|
|
157
|
+
"casual",
|
|
158
|
+
"natural_reading",
|
|
159
|
+
"synthetic_reading",
|
|
160
|
+
"soft_reading",
|
|
161
|
+
"hard_reading"
|
|
162
|
+
];
|
|
163
|
+
var MATERIALGRAPH_SOURCE_VALUES = {
|
|
164
|
+
character: MATERIALGRAPH_CHARACTER_VALUES,
|
|
165
|
+
role: MATERIALGRAPH_ROLE_VALUES
|
|
166
|
+
};
|
|
167
|
+
export {
|
|
168
|
+
MATERIALGRAPH_CHARACTER_VALUES,
|
|
169
|
+
MATERIALGRAPH_COMPOSITIONAL_ROLES,
|
|
170
|
+
MATERIALGRAPH_CROSSWALK,
|
|
171
|
+
MATERIALGRAPH_CROSSWALK_VERSION,
|
|
172
|
+
MATERIALGRAPH_ROLE_VALUES,
|
|
173
|
+
MATERIALGRAPH_SNAPSHOT,
|
|
174
|
+
MATERIALGRAPH_SOURCE_FIELDS,
|
|
175
|
+
MATERIALGRAPH_SOURCE_SYSTEM,
|
|
176
|
+
MATERIALGRAPH_SOURCE_VALUES,
|
|
177
|
+
canonicaliseMaterialGraph
|
|
178
|
+
};
|
package/dist/crosswalks/miu.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { MaterialFamily, Sector, Application } from '../index.js';
|
|
2
|
+
import '../match-CWzTEuL-.js';
|
|
3
|
+
import '../mapping-pvHk5VjC.js';
|
|
4
|
+
import '../taste.js';
|
|
2
5
|
|
|
3
6
|
declare const MIU_MATERIAL_FAMILIES: readonly ["wood", "wood_veneer", "engineered_wood", "bamboo", "cork", "natural_stone", "terrazzo", "ceramic_porcelain", "glass", "metal", "concrete", "plaster", "clay", "brick", "paint_coating", "wallcovering", "laminate", "solid_surface", "mineral_composite", "resin", "linoleum", "vinyl", "rubber", "carpet", "rug", "textile", "leather", "acoustic_felt", "acoustic_composite", "recycled_composite", "paper_cardboard", "biobased_composite", "greenery_planting", "lighting", "hardware", "digital_media", "water_feature", "mixed_material", "color_palette_only", "unknown"];
|
|
4
7
|
type MiuMaterialFamily = (typeof MIU_MATERIAL_FAMILIES)[number];
|
package/dist/crosswalks/miu.js
CHANGED
|
@@ -378,9 +378,15 @@ var MIU_SURFACE_APPLICATION_TO_CANONICAL = {
|
|
|
378
378
|
// Epistemic sentinel.
|
|
379
379
|
unknown: null
|
|
380
380
|
};
|
|
381
|
-
var MIU_MATERIAL_FAMILY_SET = new Set(
|
|
382
|
-
|
|
383
|
-
|
|
381
|
+
var MIU_MATERIAL_FAMILY_SET = new Set(
|
|
382
|
+
MIU_MATERIAL_FAMILIES
|
|
383
|
+
);
|
|
384
|
+
var MIU_PROJECT_SECTOR_SET = new Set(
|
|
385
|
+
MIU_PROJECT_SECTORS
|
|
386
|
+
);
|
|
387
|
+
var MIU_SURFACE_APPLICATION_SET = new Set(
|
|
388
|
+
MIU_SURFACE_APPLICATIONS
|
|
389
|
+
);
|
|
384
390
|
var isMiuMaterialFamily = (value) => MIU_MATERIAL_FAMILY_SET.has(value);
|
|
385
391
|
var isMiuProjectSector = (value) => MIU_PROJECT_SECTOR_SET.has(value);
|
|
386
392
|
var isMiuSurfaceApplication = (value) => MIU_SURFACE_APPLICATION_SET.has(value);
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { C as CanonicalAlternatives } from '../match-CWzTEuL-.js';
|
|
2
|
+
|
|
3
|
+
declare const DECOMPOSITION: readonly Row[];
|
|
4
|
+
|
|
5
|
+
type Verdict =
|
|
6
|
+
/** Maps faithfully onto one or more canonical terms. Nothing is lost. */
|
|
7
|
+
"decomposed"
|
|
8
|
+
/** Decomposes, but the compound carries meaning the parts do not. Needs an anchor as well. */
|
|
9
|
+
| "lossy"
|
|
10
|
+
/** The canon can express both readings; the source cannot be safely mapped to one. Declines. */
|
|
11
|
+
| "ambiguous"
|
|
12
|
+
/** A real term, but answering a question outside the interiors aesthetic axes. */
|
|
13
|
+
| "out-of-axis"
|
|
14
|
+
/** Resists decomposition. Must be carried as an anchor, not a concept. */
|
|
15
|
+
| "residue";
|
|
16
|
+
/** Why an `out-of-axis` term is out of axis. */
|
|
17
|
+
type OutOfAxisReason =
|
|
18
|
+
/** Describes a material, not a room. Belongs on the material half of the canon. */
|
|
19
|
+
"material-property"
|
|
20
|
+
/** A query-router marker with no descriptive content at all. */
|
|
21
|
+
| "query-marker"
|
|
22
|
+
/** Answers an axis that already exists here (sector, space, typology). */
|
|
23
|
+
| "other-canonical-axis"
|
|
24
|
+
/** A real question no axis here answers yet, and the gap is declared rather than absorbed. */
|
|
25
|
+
| "axis-not-authored";
|
|
26
|
+
interface Row {
|
|
27
|
+
/** The vocabulary id from `./sources.ts`. */
|
|
28
|
+
source: string;
|
|
29
|
+
/** The source term, verbatim. */
|
|
30
|
+
term: string;
|
|
31
|
+
verdict: Verdict;
|
|
32
|
+
/** Canonical targets asserted together. `evokes(...)` marks a relation rather than a term. */
|
|
33
|
+
onto: readonly string[];
|
|
34
|
+
/** Typed disjunction when the source is known to mean one of several bundles but cannot say which. */
|
|
35
|
+
alternatives?: CanonicalAlternatives;
|
|
36
|
+
/** Canonical terms that had to be minted on an EXISTING axis to hold this source term. */
|
|
37
|
+
mintedTerm?: readonly string[];
|
|
38
|
+
/** Canonical terms that only exist because a WHOLE AXIS had to be created. */
|
|
39
|
+
mintedAxis?: readonly string[];
|
|
40
|
+
reason?: OutOfAxisReason;
|
|
41
|
+
note?: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
declare const ESTATE_REPOS: readonly ["materia", "architizer", "designround", "designshop", "materialgraph", "samplize"];
|
|
45
|
+
type EstateRepo = (typeof ESTATE_REPOS)[number];
|
|
46
|
+
interface ConceptCell {
|
|
47
|
+
source: string;
|
|
48
|
+
repo: EstateRepo;
|
|
49
|
+
/** The source's own spelling, verbatim. This is the thing the page exists to show. */
|
|
50
|
+
term: string;
|
|
51
|
+
row: Row;
|
|
52
|
+
}
|
|
53
|
+
interface Concept {
|
|
54
|
+
/** The canonical head term, fully qualified. `evokes(...)` wrappers are stripped. */
|
|
55
|
+
canonical: string;
|
|
56
|
+
/** True when the canon reaches this concept by a relation rather than by assertion. */
|
|
57
|
+
viaEvokes: boolean;
|
|
58
|
+
/** Distinct repositories carrying a term that heads here. The row's sort key. */
|
|
59
|
+
reach: number;
|
|
60
|
+
/**
|
|
61
|
+
* How many repositories could plausibly have reached this concept: those carrying any vocabulary
|
|
62
|
+
* on the same axis.
|
|
63
|
+
*
|
|
64
|
+
* NOT the repository count, and the difference started mattering the moment samplize joined the
|
|
65
|
+
* census. Samplize's vocabulary is colour and nothing else, so it can never reach `style.rustic`
|
|
66
|
+
* and counting it against that row would report a disagreement where there is only a different
|
|
67
|
+
* subject. Six repositories, but only five of them have anything to say about style, and only
|
|
68
|
+
* three about colour.
|
|
69
|
+
*/
|
|
70
|
+
couldReach: number;
|
|
71
|
+
cells: readonly ConceptCell[];
|
|
72
|
+
/** Rows whose crosswalk declines, and rows carried as anchors. The page marks both. */
|
|
73
|
+
declines: number;
|
|
74
|
+
anchors: number;
|
|
75
|
+
/**
|
|
76
|
+
* How many distinct WORDINGS the sources use, after folding case and separators.
|
|
77
|
+
*
|
|
78
|
+
* The number that says whether a row is a real disagreement. `reach` of 5 with one wording means
|
|
79
|
+
* five repositories writing the same word five ways, which a crosswalk fixes trivially. `reach`
|
|
80
|
+
* of 5 with five wordings means five different ideas about what to call the thing, which it does
|
|
81
|
+
* not. Measured across the whole corpus, only one of the twenty shared concepts is spelling-only,
|
|
82
|
+
* so casing turns out to be a rounding error rather than the story - but a reader looking at
|
|
83
|
+
* `rustic / Rustic / Rustic & Artisan` cannot tell that without being told.
|
|
84
|
+
*/
|
|
85
|
+
wordings: number;
|
|
86
|
+
}
|
|
87
|
+
declare const concepts: () => readonly Concept[];
|
|
88
|
+
/** One axis's worth of the matrix: its concepts, and only the repositories that speak about it. */
|
|
89
|
+
interface AxisDisagreement {
|
|
90
|
+
axis: string;
|
|
91
|
+
concepts: readonly Concept[];
|
|
92
|
+
repos: readonly EstateRepo[];
|
|
93
|
+
/** Concepts on this axis that more than one repository reaches. */
|
|
94
|
+
shared: number;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* The disagreement matrix, split one table per axis.
|
|
98
|
+
*
|
|
99
|
+
* ONE TABLE MIXING AXES IS SPARSE BY CONSTRUCTION, and the sparseness is not a finding. Each
|
|
100
|
+
* repository speaks about some axes and not others: samplize's vocabulary is colour and nothing
|
|
101
|
+
* else, so against every style concept it is a column of dashes. Rendered as one table that reads
|
|
102
|
+
* as six repositories disagreeing when it is really six repositories talking about different
|
|
103
|
+
* subjects, and it costs enough width to break the canonical identifiers across three lines.
|
|
104
|
+
*
|
|
105
|
+
* Split by axis, every table is dense and each makes its own point. Style is the argument, at five
|
|
106
|
+
* repositories and twenty-three concepts. Place is the sharpest, because every repository reaches
|
|
107
|
+
* it and every concept on it is shared - which is the axis the design review said was the gap.
|
|
108
|
+
*
|
|
109
|
+
* An axis is only worth a table if more than one repository speaks about it and there is more than
|
|
110
|
+
* a handful to show; the rest are reported as a count rather than drawn.
|
|
111
|
+
*/
|
|
112
|
+
declare const disagreementsByAxis: ({ minConcepts, }?: {
|
|
113
|
+
minConcepts?: number;
|
|
114
|
+
}) => readonly AxisDisagreement[];
|
|
115
|
+
/** The dictionaries as columns, in the order the matrix renders them. */
|
|
116
|
+
declare const MATRIX_COLUMNS: readonly {
|
|
117
|
+
id: string;
|
|
118
|
+
repo: EstateRepo;
|
|
119
|
+
label: string;
|
|
120
|
+
}[];
|
|
121
|
+
/** The headline the disagreement page opens with, computed rather than asserted. */
|
|
122
|
+
declare const agreementSummary: () => {
|
|
123
|
+
concepts: number;
|
|
124
|
+
reachedByAll: number;
|
|
125
|
+
reachedByFourOrMore: number;
|
|
126
|
+
distinctSpellings: number;
|
|
127
|
+
exactStringMatchesAcrossRepos: number;
|
|
128
|
+
/** Concepts more than one repository reaches. */
|
|
129
|
+
shared: number;
|
|
130
|
+
/** Repositories in the census. Not every one speaks about every axis. */
|
|
131
|
+
repos: number;
|
|
132
|
+
/** Of those, the ones where every source uses the same word and differs only in spelling. */
|
|
133
|
+
spellingOnly: number;
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* The share of the DesignShop corpus the two ambiguous style values account for, as a percentage.
|
|
137
|
+
*
|
|
138
|
+
* A SHARE AND NOT A COUNT, and the distinction is the whole reason this function exists rather than
|
|
139
|
+
* a consumer reading `DESIGNSHOP_SCHEME_STYLE_COUNTS` directly. The underlying figures are a third
|
|
140
|
+
* party's catalogue volumes and are not ours to publish. The claim anything downstream actually
|
|
141
|
+
* needs is that `Modern` and `Contemporary` sit at comparable volume and together account for a
|
|
142
|
+
* large slice of the corpus - which a percentage carries exactly as well and a count carries no
|
|
143
|
+
* better.
|
|
144
|
+
*
|
|
145
|
+
* Exported so no page has to hand-type the number. A figure typed by hand is a figure that drifts
|
|
146
|
+
* from its data, and one derived from counts nobody may publish is the same disclosure a layer
|
|
147
|
+
* down.
|
|
148
|
+
*/
|
|
149
|
+
declare const ambiguousStyleShare: () => number;
|
|
150
|
+
|
|
151
|
+
interface ResidueReport {
|
|
152
|
+
/** Every term across all seven estate vocabularies. */
|
|
153
|
+
total: number;
|
|
154
|
+
/** Terms that were never aesthetic vocabulary: query markers and material properties. */
|
|
155
|
+
excluded: number;
|
|
156
|
+
/** The denominator the headline is quoted against. */
|
|
157
|
+
aesthetic: number;
|
|
158
|
+
decomposed: number;
|
|
159
|
+
lossy: number;
|
|
160
|
+
ambiguous: number;
|
|
161
|
+
/** Terms that resist decomposition entirely and can only be carried as anchors. */
|
|
162
|
+
residue: number;
|
|
163
|
+
outOfAxis: number;
|
|
164
|
+
/** `decomposed` as a share of `aesthetic`. TAX-14's threshold was 80 per cent. */
|
|
165
|
+
cleanRate: number;
|
|
166
|
+
/**
|
|
167
|
+
* The circularity guard. The axes here were authored after reading these terms, so the headline
|
|
168
|
+
* rate is partly fitted to its own inputs. This is the share that decomposes onto canon that
|
|
169
|
+
* existed BEFORE the test - vendored from materialgraph, colorscope and architizer, or already
|
|
170
|
+
* published in this package. It is the floor the design would have reached with no new authoring
|
|
171
|
+
* at all, and it is the number to argue with.
|
|
172
|
+
*/
|
|
173
|
+
preExistingRate: number;
|
|
174
|
+
preExisting: number;
|
|
175
|
+
/** Source terms that needed a term minted on an axis that already existed. */
|
|
176
|
+
neededMintedTerm: number;
|
|
177
|
+
/** Source terms that needed a whole axis that did not exist. */
|
|
178
|
+
neededMintedAxis: number;
|
|
179
|
+
}
|
|
180
|
+
declare const residueReport: () => ResidueReport;
|
|
181
|
+
declare const mintingDemand: () => {
|
|
182
|
+
onExistingAxes: readonly (readonly [string, number])[];
|
|
183
|
+
onNewAxes: readonly (readonly [string, number])[];
|
|
184
|
+
};
|
|
185
|
+
/** Per-source decomposition rate, over the aesthetic subset. */
|
|
186
|
+
declare const rateBySource: () => readonly {
|
|
187
|
+
source: string;
|
|
188
|
+
decomposed: number;
|
|
189
|
+
terms: number;
|
|
190
|
+
}[];
|
|
191
|
+
/** Every row the canon could not take cleanly. The site publishes this list in full. */
|
|
192
|
+
declare const unresolved: () => readonly Row[];
|
|
193
|
+
/** Real questions the estate asks that no axis here answers yet. Declared, never absorbed. */
|
|
194
|
+
declare const declaredGaps: () => readonly Row[];
|
|
195
|
+
|
|
196
|
+
type VocabularyKind =
|
|
197
|
+
/** A closed enum a writer must choose from. */
|
|
198
|
+
"enum"
|
|
199
|
+
/** A keyword set matched against free text. */
|
|
200
|
+
| "keyword-set"
|
|
201
|
+
/** Free-text prose used as an embedding anchor; the label is a handle, not a value. */
|
|
202
|
+
| "embedding-anchor"
|
|
203
|
+
/** Uncontrolled free text captured from a third party's index. */
|
|
204
|
+
| "captured-free-text";
|
|
205
|
+
interface EstateVocabulary {
|
|
206
|
+
id: string;
|
|
207
|
+
name: string;
|
|
208
|
+
repo: string;
|
|
209
|
+
file: string;
|
|
210
|
+
snapshot: string;
|
|
211
|
+
kind: VocabularyKind;
|
|
212
|
+
/** What question the vocabulary was built to answer, in the authors' own framing. */
|
|
213
|
+
purpose: string;
|
|
214
|
+
terms: readonly string[];
|
|
215
|
+
}
|
|
216
|
+
declare const MATERIA_SCENE_MOOD: EstateVocabulary;
|
|
217
|
+
declare const MATERIA_INTENT_KEYWORDS: EstateVocabulary;
|
|
218
|
+
declare const ARCHITIZER_STYLES: EstateVocabulary;
|
|
219
|
+
declare const DESIGNROUND_STYLE_ANCHORS: EstateVocabulary;
|
|
220
|
+
declare const DESIGNSHOP_SCHEME_STYLES: EstateVocabulary;
|
|
221
|
+
/**
|
|
222
|
+
* Scheme counts over the 1,922 schemes carrying at least one product. Bands, not counts, are what
|
|
223
|
+
* gets published (see `Term.usage`); the raw figures live here because the decomposition test has
|
|
224
|
+
* to weight by usage and cannot do that from a band.
|
|
225
|
+
*/
|
|
226
|
+
declare const DESIGNSHOP_SCHEME_STYLE_COUNTS: Readonly<Record<string, number>>;
|
|
227
|
+
declare const DESIGNSHOP_PRODUCT_STYLES: EstateVocabulary;
|
|
228
|
+
declare const MATERIALGRAPH_MS_STYLE: EstateVocabulary;
|
|
229
|
+
declare const MATERIALGRAPH_MS_MOOD: EstateVocabulary;
|
|
230
|
+
declare const MATERIALGRAPH_MS_CHARACTER: EstateVocabulary;
|
|
231
|
+
declare const ESTATE_VOCABULARIES: readonly EstateVocabulary[];
|
|
232
|
+
|
|
233
|
+
export { ARCHITIZER_STYLES, type AxisDisagreement, type Concept, type ConceptCell, DECOMPOSITION, DESIGNROUND_STYLE_ANCHORS, DESIGNSHOP_PRODUCT_STYLES, DESIGNSHOP_SCHEME_STYLES, DESIGNSHOP_SCHEME_STYLE_COUNTS, ESTATE_REPOS, ESTATE_VOCABULARIES, type EstateRepo, type EstateVocabulary, MATERIALGRAPH_MS_CHARACTER, MATERIALGRAPH_MS_MOOD, MATERIALGRAPH_MS_STYLE, MATERIA_INTENT_KEYWORDS, MATERIA_SCENE_MOOD, MATRIX_COLUMNS, type OutOfAxisReason, type ResidueReport, type Row, type Verdict, type VocabularyKind, agreementSummary, ambiguousStyleShare, concepts, declaredGaps, disagreementsByAxis, mintingDemand, rateBySource, residueReport, unresolved };
|