feat: remove formal/informal LDA analysis from the bicorder (v1.3.0)

The two-family cluster classification is a research finding, not a
diagnostic; embedding it in the tool caused recurring bugs:

- ascii_bicorder.py had an inverted LDA sign (institutional mapped to 9,
  not 1) and a stale term check ('bureaucratic') that silently disabled
  the calculation after the Feb 2026 rename — output was always null
- The web app and Python script had divergent sign conventions and
  divergent version-mismatch behavior (skip vs. continue with stale model)

Changes:
- bicorder.json: drop the formal/informal analysis gradient; version 1.3.0
- ascii_bicorder.py: remove all LDA/model machinery; keep hardness and
  polarization as the only automated analyses
- App.svelte: remove classifier import, model constant, LDA calculation,
  and form-recommendation reactive block; dispatch automated analyses by
  term_left instead of array index
- Delete bicorder-classifier.ts and FormRecommendation.svelte (the latter
  was imported but never rendered)
- AnalysisTransitionBanner: remove recommendation alert and prop; fix
  hardcoded index checks that referenced the removed gradient
- vite.config.ts / vite-env.d.ts: stop loading bicorder_model.json

The cluster classifier lives on as research in analysis/ (scripts and
model untouched there). bicorder.txt regenerated.
This commit is contained in:
Protocolbot committed 2026-09-23 07:58:11 -06:00
1 parent fb3bebcea0
commit 8c40ca076b
9 files changed
+67 -1040

No files matched your search

+38 -51
View File
@@ -1,20 +1,18 @@
{
"name": "Protocol Bicorder",
"schema": "bicorder.schema.json",
"version": "1.2.6",
"version": "1.3.0",
"description": "A diagnostic tool for the study of protocols",
"author": "Nathan Schneider",
"date_modified": "2026-02-21",
"date_modified": "2026-09-22",
"metadata": {
"protocol": null,
"description": null,
"analyst": null,
"standpoint": null,
"timestamp": null,
"shortform": true
"protocol": null,
"description": null,
"analyst": null,
"standpoint": null,
"timestamp": null,
"shortform": true
},
"diagnostic": [
{
"set_name": "Design",
@@ -242,47 +240,36 @@
]
}
],
"analysis": [
{
"term_left": "hardness",
"term_left_description": "The protocol tends toward properties characterized by hardness",
"term_right": "softness",
"term_right_description": "The protocol tends toward properties characterized by softness",
"instructions": "Take all the 'value' fields in the gradients above and determine a mean. Round it to the nearest integer. That is the 'value' here.",
"automated": true,
"value": null,
"notes": null
},
{
"term_left": "polarized",
"term_left_description": "The analyst tended toward more extreme high or low readings",
"term_right": "centrist",
"term_right_description": "The analyst tended toward readings at the middle of the gradients",
"instructions": "Take all the 'value' fields in the gradients above. Assess their degree of polarization. For instance, if all the values are either 1 or 9, the output would be 1, and if all of them are 5, the output would be 9.",
"automated": true,
"value": null,
"notes": null
},
{
"term_left": "formal",
"term_left_description": "Exhibits bureaucratic characteristics with centralized control and predictable enforcement",
"term_right": "informal",
"term_right_description": "Exhibits relational characteristics with distributed coordination embedded in culture",
"instructions": "Based on the diagnostic readings, calculate the protocol's position using Linear Discriminant Analysis. The LDA score is scaled to the 1-9 range, where 1 represents strongly formal protocols and 9 represents strongly informal protocols. A score of 5 indicates a protocol near the boundary exhibiting characteristics of both families.",
"automated": true,
"value": null,
"notes": null
},
{
"term_left": "not useful",
"term_left_description": "The bicorder was not useful or relevant for analyzing this protocol",
"term_right": "very useful",
"term_right_description": "The bicorder was very useful and relevant for analyzing this protocol",
"instructions": "Evaluate the usefulness of this bicorder as a tool for analyzing this protocol, considering whether the gradient terms seemed revealing or irrelevant.",
"automated": false,
"value": null,
"notes": null
}
{
"term_left": "hardness",
"term_left_description": "The protocol tends toward properties characterized by hardness",
"term_right": "softness",
"term_right_description": "The protocol tends toward properties characterized by softness",
"instructions": "Take all the 'value' fields in the gradients above and determine a mean. Round it to the nearest integer. That is the 'value' here.",
"automated": true,
"value": null,
"notes": null
},
{
"term_left": "polarized",
"term_left_description": "The analyst tended toward more extreme high or low readings",
"term_right": "centrist",
"term_right_description": "The analyst tended toward readings at the middle of the gradients",
"instructions": "Take all the 'value' fields in the gradients above. Assess their degree of polarization. For instance, if all the values are either 1 or 9, the output would be 1, and if all of them are 5, the output would be 9.",
"automated": true,
"value": null,
"notes": null
},
{
"term_left": "not useful",
"term_left_description": "The bicorder was not useful or relevant for analyzing this protocol",
"term_right": "very useful",
"term_right_description": "The bicorder was very useful and relevant for analyzing this protocol",
"instructions": "Evaluate the usefulness of this bicorder as a tool for analyzing this protocol, considering whether the gradient terms seemed revealing or irrelevant.",
"automated": false,
"value": null,
"notes": null
}
]
}