Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/components/advanced/ProportionAnalyzer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
} from '../../lib/calculator/cut-grades';

const GIRDLE_OPTIONS: { value: GirdleThickness | ''; label: string }[] = [
{ value: '', label: 'not measured' },
{ value: '', label: 'not measured' },
{ value: 'extremely-thin', label: 'Extremely thin (chipping risk)' },
{ value: 'very-thin', label: 'Very thin' },
{ value: 'thin', label: 'Thin' },
Expand All @@ -24,7 +24,7 @@ const GIRDLE_OPTIONS: { value: GirdleThickness | ''; label: string }[] = [
];

const CULET_OPTIONS: { value: CuletSize | ''; label: string }[] = [
{ value: '', label: 'not measured' },
{ value: '', label: 'not measured' },
{ value: 'none', label: 'None / pointed' },
{ value: 'very-small', label: 'Very small' },
{ value: 'small', label: 'Small' },
Expand Down
2 changes: 1 addition & 1 deletion src/components/calculator/HannemanRI.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import { usePagination } from '../../hooks/usePagination';
type Row = HannemanCriteria;

const RELIEF_OPTIONS: { value: Relief; label: string }[] = [
{ value: 'unknown', label: 'skip this row' },
{ value: 'unknown', label: '(skip this row)' },
{ value: 'lower', label: 'Stone shows lower relief (RI < liquid)' },
{ value: 'equal', label: 'Stone disappears / equal (RI ≈ liquid)' },
{ value: 'higher', label: 'Stone shows higher relief (RI > liquid)' },
Expand Down
4 changes: 2 additions & 2 deletions src/components/lab/UvFluorescenceLookup.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import { Pagination } from '../ui';
import { usePagination } from '../../hooks/usePagination';

const INTENSITY_OPTIONS: { value: UvIntensity; label: string }[] = [
{ value: 'unknown', label: 'skip this band' },
{ value: 'unknown', label: 'skip this band' },
{ value: 'inert', label: 'Inert (no reaction)' },
{ value: 'weak', label: 'Weak' },
{ value: 'moderate', label: 'Moderate' },
Expand All @@ -29,7 +29,7 @@ const INTENSITY_OPTIONS: { value: UvIntensity; label: string }[] = [
];

const COLOR_OPTIONS = [
{ value: '', label: 'any colour' },
{ value: '', label: 'any colour' },
{ value: 'red', label: 'Red' },
{ value: 'orange', label: 'Orange' },
{ value: 'yellow', label: 'Yellow' },
Expand Down
2 changes: 1 addition & 1 deletion src/components/optical/OpticSignReasoner.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ const SIGN_LABEL: Record<OpticSign, string> = {
'+': 'positive',
'-': 'negative',
'+/-': 'either sign (variable)',
'n/a': 'not applicable',
'n/a': '(not applicable)',
};

export function OpticSignReasoner() {
Expand Down
2 changes: 1 addition & 1 deletion src/components/tools/ToolsHub.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ export function ToolsHub() {
<div className="max-w-3xl pb-8 border-b border-slate-200">
<h1 className="text-4xl font-bold text-slate-900">Tools</h1>
<p className="mt-4 text-lg text-slate-600">
Calculators for the bench: SG by hydrostatic weighing, RI lookup, birefringence, critical angle, carat estimation, and unit conversion &mdash; alongside dichroscope, polariscope, and Chelsea-filter references.
Calculators for the bench: SG by hydrostatic weighing, RI lookup, birefringence, critical angle, carat estimation, and unit conversion. Also includes dichroscope, polariscope, and Chelsea-filter references.
</p>
</div>

Expand Down
2 changes: 1 addition & 1 deletion src/content/questions/equipment/ri-reading-004.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ options:
Tanzanite (zoisite) is orthorhombic and biaxial, with RI 1.691–1.704 and very
strong trichroism (blue/violet/burgundy) [ref:read-gemmology-3e]. Its RI range does not reach 1.718, and
it would show two variable shadow edges (Pattern VI or VII) on the refractometer,
not a single constant edge. Additionally, tanzanite shows striking pleochroism
not a single constant edge. Tanzanite shows striking pleochroism
(described as one of the strongest trichroic gems), which would be immediately
apparent when rotating the stone, contradicting the single constant reading [ref:read-gemmology-3e].
rationaleCorrect: |
Expand Down
2 changes: 1 addition & 1 deletion src/content/questions/equipment/ri-reading-005.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ options:
is different: the edges actually pass through each other, converging from the
same side and then diverging on the other side [ref:read-gemmology-3e]. A student confusing "touching"
with "crossing" will pick Pattern VII, but crossing behaviour is the criterion
for Pattern V [ref:anderson-gem-testing]. Additionally, Pattern VII allows optic sign determination from the
for Pattern V [ref:anderson-gem-testing]. Pattern VII allows optic sign determination from the
refractometer, while Pattern V typically does not.
rationaleCorrect: |
Pattern V is uniquely identified by shadow edges that cross each other during rotation;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ options:
The hexagonal system is uniaxial (like trigonal), producing dichroism only – not
trichroism [ref:read-gemmology-3e]. A sixfold axis does not create three optically distinct directions
in terms of absorption; the gem still has only two principal vibration directions
(ordinary and extraordinary). Additionally, RI 1.620–1.640 does not match
(ordinary and extraordinary). RI 1.620–1.640 does not match
hexagonal beryl (RI 1.577–1.583) [ref:read-gemmology-3e].
rationaleCorrect: |
Tourmaline is trigonal (point group 3m), uniaxial negative, RI 1.620–1.640,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ options:
A tetragonal gem viewed exactly down its c-axis would appear isotropic on the
polariscope in that specific orientation. However, the question states the test
was confirmed on two different facets, making it very unlikely that both facets
happen to be cut perpendicular to the c-axis [ref:read-gemmology-3e]. Furthermore, a tetragonal gem would
happen to be cut perpendicular to the c-axis [ref:read-gemmology-3e]. A tetragonal gem would also
give two shadow edges on the refractometer in any orientation that is not exactly
down the optic axis – the refractometer reading of a single constant edge on
multiple facets strongly implies true isotropy, not an accident of orientation.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ rationaleCorrect: |
plane is roughly horizontal – any sharp blow from above drives directly along the
cleavage. Diamond has four equivalent {111} cleavage directions; no common ring
orientation is perpendicular to all four simultaneously, so cleavage is harder to
exploit accidentally [ref:read-gemmology-3e]. Additionally, topaz hardness 8 (vs. diamond 10) means
exploit accidentally [ref:read-gemmology-3e]. Topaz hardness 8 (vs. diamond 10) also means
topaz surfaces wear more quickly. For ring settings: topaz should be set in
protective bezels; diamond in prong settings is acceptable given its superior
hardness and distributed cleavage geometry.
Expand Down
4 changes: 2 additions & 2 deletions src/content/questions/fundamentals/phys-prop-003.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ options:
measured SG of 3.34 falls in both ranges. Similarly, spot RI near 1.66 falls in
both species' ranges. The spectroscope provides a definitive single test: peridot
shows a characteristic iron absorption spectrum with bands at approximately 493 nm
and related features in the blue-green [ref:read-gemmology-3e]; jadeite lacks this spectrum. Additionally,
peridot's single-crystal nature means it will show birefringence (which a cabochon
and related features in the blue-green [ref:read-gemmology-3e]; jadeite lacks this spectrum.
Peridot's single-crystal nature means it will show birefringence (which a cabochon
spot reading may approximate), whereas jadeite's polycrystalline aggregate produces
no net birefringence [ref:read-gemmology-3e].
- text: "Hardness testing: jadeite has hardness 6.5–7 and peridot 6.5–7, so hardness testing is the fastest single test and will separate them"
Expand Down
2 changes: 1 addition & 1 deletion src/content/questions/fundamentals/phys-prop-004.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ options:
isCorrect: false
rationale: |
Glass can achieve RI 1.718 by adding heavy-metal oxides, but glass SG at that RI
would be approximately 4.5–5.0 (high-lead glass), not 3.42 [ref:read-gemmology-3e]. Additionally, quartz
would be approximately 4.5–5.0 (high-lead glass), not 3.42 [ref:read-gemmology-3e]. Quartz
has RI 1.544–1.553, not 1.434 [ref:read-gemmology-3e] – Stone B's RI of 1.434 is far below any quartz value.
- text: "Stone A: grossular garnet (RI ~1.73–1.76, SG ~3.58); Stone B: apatite (RI ~1.63, SG ~3.20) – both close matches by SG"
isCorrect: false
Expand Down
4 changes: 2 additions & 2 deletions src/content/questions/fundamentals/phys-prop-006.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ options:
compositional range (Mg replaced by Fe, Zn, Mn) does slightly shift SG, but
the maximum for gem spinel is approximately 3.63–3.72 for iron-bearing varieties,
not 4.00 [ref:read-gemmology-3e]. A difference of 0.40 SG units cannot be explained by locality variation;
4.00 is a diagnostic, species-level value for corundum, not spinel [ref:read-gemmology-3e]. Additionally,
visible birefringence (double image) under a loupe in Stone B rules out any cubic
4.00 is a diagnostic, species-level value for corundum, not spinel [ref:read-gemmology-3e].
Visible birefringence (double image) under a loupe in Stone B rules out any cubic
mineral including spinel.
- text: "Stone A is blue topaz (RI ~1.62, SG ~3.50); Stone B is blue sapphire – blue topaz can appear similar to spinel but is biaxial"
isCorrect: false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ options:
from Kenya forms in metasomatic calc-silicate rocks and contains typical inclusions
such as apatite, graphite, and diopside – not fibrous actinolite halos from chromite [ref:gubelin-koivula-vol1].
The horsetail inclusion is specific to demantoid from the Ural deposits (and
occasionally other andradite localities) [ref:gubelin-koivula-vol1]. Additionally, tsavorite RI is
occasionally other andradite localities) [ref:gubelin-koivula-vol1]. Tsavorite RI is
approximately 1.740–1.760, within the standard refractometer range [ref:read-gemmology-3e] – it would give
a visible shadow edge, contradicting the "no shadow edge" observation.
- text: "Chrome tourmaline; chrome tourmaline contains fibrous inclusions radiating from a chromite crystal in characteristic horsetail patterns"
Expand All @@ -36,7 +36,7 @@ options:
Chrome tourmaline does not show horsetail inclusions. Tourmaline inclusions include
growth tubes parallel to the c-axis, fluid inclusions, and occasionally mineral
crystals, but not the characteristic radial byssolite fibres from a chromite centre
that define the horsetail [ref:gubelin-koivula-vol3]. Furthermore, chrome tourmaline RI is 1.620–1.640 [ref:read-gemmology-3e] –
that define the horsetail [ref:gubelin-koivula-vol3]. Chrome tourmaline RI is 1.620–1.640 [ref:read-gemmology-3e] –
it gives a clear shadow edge on the refractometer. The "no shadow edge" observation
eliminates tourmaline before microscopy even begins.
rationaleCorrect: |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ options:
double refraction [ref:read-gemmology-3e]. Pyrope is cubic and should appear predominantly dark; ADR is
an irregular strain effect, not systematic double refraction. The stone described
lights up clearly at four positions, which is the behaviour of a genuinely doubly
refractive gem (corundum), not ADR from a garnet [ref:read-gemmology-3e]. Additionally, pyrope RI is
refractive gem (corundum), not ADR from a garnet [ref:read-gemmology-3e]. Pyrope RI is
1.730–1.760 and SG 3.65–3.87 – both below the measured values [ref:read-gemmology-3e].
rationaleCorrect: |
The ruby/spinel/pyrope discrimination is the most historically important near-miss
Expand Down
2 changes: 1 addition & 1 deletion src/content/questions/species/green-stone-001.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ options:
rationale: |
Tsavorite (chrome/vanadium grossular garnet) is cubic and therefore isotropic –
it shows no dichroism or pleochroism [ref:read-gemmology-3e]. The strong dichroism observed in this stone
eliminates any cubic gem, including all garnets. Additionally, tsavorite SG is
eliminates any cubic gem, including all garnets. Tsavorite SG is also
approximately 3.58–3.73, clearly higher than the measured 2.71 [ref:read-gemmology-3e]. The spot RI of
approximately 1.58 is also far below tsavorite's RI of approximately 1.740–1.760 [ref:read-gemmology-3e].
rationaleCorrect: |
Expand Down
2 changes: 1 addition & 1 deletion src/content/questions/species/green-stone-003.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ options:
rationale: |
Tsavorite (green grossular) has RI approximately 1.740–1.760, which IS within the
standard refractometer range – it gives a clear shadow edge in the 1.740–1.760
region [ref:read-gemmology-3e]. Tsavorite does not exceed the refractometer limit. Additionally, tsavorite
region [ref:read-gemmology-3e]. Tsavorite does not exceed the refractometer limit. Tsavorite
SG is approximately 3.57–3.73, clearly lower than the measured 3.84 [ref:read-gemmology-3e].
- text: "Diamond; colourless diamonds can appear green from colouring inclusions, and the above-range RI and isotropic behaviour both confirm diamond"
isCorrect: false
Expand Down
2 changes: 1 addition & 1 deletion src/content/questions/species/red-stone-garnet-001.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ options:
uniformly dark between crossed polars – it would not show patchy, irregular
lightening [ref:read-gemmology-3e]. Patchy lightening is specifically the pattern of ADR (anomalous double
refraction) in cubic minerals, not the pattern of a uniaxial stone viewed down
its optic axis. Moreover, ruby has RI 1.762–1.770 and SG 3.99–4.01 [ref:read-gemmology-3e]; the measured
its optic axis. Ruby has RI 1.762–1.770 and SG 3.99–4.01 [ref:read-gemmology-3e]; the measured
RI ~1.75 and SG 3.82 are both below corundum values. Two properties eliminate ruby.
- text: "Red glass; glass can give a single constant shadow edge and irregular polariscope patterns; the SG of 3.82 is consistent with lead glass used as a ruby simulant"
isCorrect: false
Expand Down
2 changes: 1 addition & 1 deletion src/lib/knowledge-version.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export const KNOWLEDGE_VERSION = 'v1.3.0';
export const KNOWLEDGE_VERSION = 'v1.4.0';

export const KNOWLEDGE_REPO_URL = 'https://github.com/gemmology-dev/gemmology-knowledge';

Expand Down
2 changes: 1 addition & 1 deletion src/pages/404.astro
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ const popularPages = [
</div>
<h1 class="text-3xl sm:text-4xl font-semibold text-slate-900 mb-3">Lost in the lattice</h1>
<p class="text-slate-600 mb-8 max-w-md">
This page doesn&apos;t crystallise. The URL you followed doesn&apos;t correspond to a known structure &mdash; it may have been moved or never existed.
This page doesn&apos;t crystallise. The URL you followed doesn&apos;t correspond to a known structure; it may have been moved or never existed.
</p>

<div class="flex flex-wrap justify-center gap-4 mb-12">
Expand Down
14 changes: 7 additions & 7 deletions src/pages/docs/cdl.astro
Original file line number Diff line number Diff line change
Expand Up @@ -681,7 +681,7 @@ cubic[m3m]:core:({111} + {100})[phantom:3]`} />

<p>
Named forms (like <code>octahedron</code>, <code>prism</code>) are not treated as
labels &mdash; they are resolved to their Miller indices directly. Labels must be identifiers
labels; they are resolved to their Miller indices directly. Labels must be identifiers
that are not known named forms.
</p>

Expand Down Expand Up @@ -1013,12 +1013,12 @@ value = NUMBER | IDENTIFIER`} />
<p>CDL text is processed through these stages:</p>

<ol>
<li><strong>Doc comment extraction</strong> &mdash; <code>#!</code> lines are captured as metadata</li>
<li><strong>Comment stripping</strong> &mdash; <code>#</code> and <code>/* */</code> are removed</li>
<li><strong>Definition pre-processing</strong> &mdash; <code>@name = ...</code> lines are extracted and <code>$name</code> references are resolved by text substitution</li>
<li><strong>Lexing</strong> &mdash; remaining text is tokenized</li>
<li><strong>Parsing</strong> &mdash; tokens are parsed into the AST: system, point group, form tree, modifications, twin, phenomenon</li>
<li><strong>Validation</strong> &mdash; point group checked against system</li>
<li><strong>Doc comment extraction:</strong> <code>#!</code> lines are captured as metadata</li>
<li><strong>Comment stripping:</strong> <code>#</code> and <code>/* */</code> are removed</li>
<li><strong>Definition pre-processing:</strong> <code>@name = ...</code> lines are extracted and <code>$name</code> references are resolved by text substitution</li>
<li><strong>Lexing:</strong> remaining text is tokenised</li>
<li><strong>Parsing:</strong> tokens are parsed into the AST (system, point group, form tree, modifications, twin, phenomenon)</li>
<li><strong>Validation:</strong> point group checked against system</li>
</ol>

<Card padding="md" class="mt-12 bg-crystal-50 border-crystal-200">
Expand Down
8 changes: 4 additions & 4 deletions src/pages/docs/quickstart.astro
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,9 @@ print(desc.forms) # [CrystalForm({111}, scale=1.0)]`} />

<p>The CDL expression breaks down as:</p>
<ul>
<li><code>cubic</code> - Crystal system</li>
<li><code>[m3m]</code> - Point group (highest cubic symmetry)</li>
<li><code>{'{'}111{'}'}</code> - Miller indices for octahedral form</li>
<li><code>cubic</code>: crystal system</li>
<li><code>[m3m]</code>: point group (highest cubic symmetry)</li>
<li><code>{'{'}111{'}'}</code>: Miller indices for the octahedral form</li>
</ul>

<h3>Step 2: Generate 3D geometry</h3>
Expand Down Expand Up @@ -149,7 +149,7 @@ cdl --list-twins`} />
<Card padding="md" class="mt-8 bg-crystal-50 border-crystal-200">
<h3 class="text-lg font-semibold text-crystal-900 mt-0">CDL Playground</h3>
<p class="text-crystal-700 mb-4">
Experiment with CDL expressions directly in your browser - no installation needed.
Experiment with CDL expressions directly in your browser (no installation needed).
</p>
<Button href="/playground" variant="primary" size="md">
Open Playground
Expand Down
Loading
Loading