From 161ba3b136496eb36ac72af9c9053ae8bd515b8d Mon Sep 17 00:00:00 2001 From: Protocolbot Date: Wed, 23 Sep 2026 14:27:51 -0600 Subject: [PATCH] =?UTF-8?q?fix:=20carry=20institutional=E2=86=92formal=20r?= =?UTF-8?q?ename=20through=20analysis=20rename=20maps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nathan renamed the Design gradient 'institutional' → 'formal' (v1.4.0). The analysis scripts carry historical rename maps that route old data (elite/institutional) into the current bicorder.json gradient names, and those maps still stopped at 'institutional' — so old readings would have silently misaligned against the v1.4.0 structure. - bicorder_classifier.py / export_model_for_js.py: add institutional_vs_vernacular → formal_vs_vernacular, keep elite→formal - json_to_csv.py TERM_RENAMES: same two-step route - convert_csv_to_json.py GRADIENT_MAPPINGS: elite_vs_vernacular now maps to 'formal' - bicorder_classifier.py demo ratings: use the current dimension name - analysis/README.md: example run name 1.3.0 → 1.4.0 --- analysis/README.md | 4 ++-- analysis/scripts/bicorder_classifier.py | 9 +++++---- analysis/scripts/convert_csv_to_json.py | 2 +- analysis/scripts/export_model_for_js.py | 3 ++- analysis/scripts/json_to_csv.py | 3 ++- 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/analysis/README.md b/analysis/README.md index 0bd5a8c..38f89af 100644 --- a/analysis/README.md +++ b/analysis/README.md @@ -18,11 +18,11 @@ Runs: ### Adding a new run (e.g. re-running on edited gradients) -1. Make a new run directory keyed by bicorder version, e.g. `data/synthetic_1.3.0/`. +1. Make a new run directory keyed by bicorder version, e.g. `data/synthetic_1.4.0/`. 2. Point `bicorder_batch.py` at the shared input and the new output: ```bash python3 scripts/bicorder_batch.py data/protocols_edited.csv \ - -o data/synthetic_1.3.0/readings.csv \ + -o data/synthetic_1.4.0/readings.csv \ -b bicorder.json \ -m -a "" -s "" ``` diff --git a/analysis/scripts/bicorder_classifier.py b/analysis/scripts/bicorder_classifier.py index 3e16375..a9453f4 100644 --- a/analysis/scripts/bicorder_classifier.py +++ b/analysis/scripts/bicorder_classifier.py @@ -36,7 +36,8 @@ _BICORDER_JSON = Path(__file__).parent.parent.parent / 'bicorder.json' # Historical column renames: maps old CSV column names → current bicorder.json names. # Add an entry here whenever gradient terms are renamed in bicorder.json. _COLUMN_RENAMES = { - 'Design_elite_vs_vernacular': 'Design_institutional_vs_vernacular', + 'Design_elite_vs_vernacular': 'Design_formal_vs_vernacular', + 'Design_institutional_vs_vernacular': 'Design_formal_vs_vernacular', 'Entanglement_exclusive_vs_non-exclusive': 'Entanglement_monopolistic_vs_pluralistic', 'Experience_sufficient_vs_insufficient': 'Experience_sufficient_vs_limited', 'Experience_Kafka_vs_Whitehead': 'Experience_restraining_vs_liberating', @@ -313,7 +314,7 @@ def main(): print("\nExample 1: Community-Based Protocol") print("-" * 80) ratings_relational = { - 'Design_elite_vs_vernacular': 9, # Very vernacular + 'Design_formal_vs_vernacular': 9, # Very vernacular 'Design_explicit_vs_implicit': 8, # More implicit 'Entanglement_flocking_vs_swarming': 9, # Swarming 'Entanglement_obligatory_vs_voluntary': 9, # Voluntary @@ -328,7 +329,7 @@ def main(): print("Example 2: Institutional Protocol") print("-" * 80) ratings_institutional = { - 'Design_elite_vs_vernacular': 1, # Elite + 'Design_formal_vs_vernacular': 1, # Formal 'Design_explicit_vs_implicit': 1, # Very explicit 'Entanglement_flocking_vs_swarming': 1, # Flocking 'Entanglement_obligatory_vs_voluntary': 1, # Obligatory @@ -344,7 +345,7 @@ def main(): print("Example 3: Boundary Protocol (mixed characteristics)") print("-" * 80) ratings_boundary = { - 'Design_elite_vs_vernacular': 5, # Middle + 'Design_formal_vs_vernacular': 5, # Middle 'Design_explicit_vs_implicit': 4, # Slightly implicit 'Entanglement_flocking_vs_swarming': 5, # Middle 'Entanglement_obligatory_vs_voluntary': 6, # Slightly voluntary diff --git a/analysis/scripts/convert_csv_to_json.py b/analysis/scripts/convert_csv_to_json.py index e6f4e7c..b6525e9 100644 --- a/analysis/scripts/convert_csv_to_json.py +++ b/analysis/scripts/convert_csv_to_json.py @@ -19,7 +19,7 @@ GRADIENT_MAPPINGS = [ # Design set ("explicit_vs_implicit", "Design", "explicit", "implicit"), ("precise_vs_interpretive", "Design", "precise", "interpretive"), - ("elite_vs_vernacular", "Design", "institutional", "vernacular"), # Changed: elite → institutional + ("elite_vs_vernacular", "Design", "formal", "vernacular"), # Changed: elite → institutional → formal ("documenting_vs_enabling", "Design", "documenting", "enabling"), ("static_vs_malleable", "Design", "static", "malleable"), ("technical_vs_social", "Design", "technical", "social"), diff --git a/analysis/scripts/export_model_for_js.py b/analysis/scripts/export_model_for_js.py index 541c793..c7aab92 100644 --- a/analysis/scripts/export_model_for_js.py +++ b/analysis/scripts/export_model_for_js.py @@ -28,7 +28,8 @@ BICORDER_JSON = Path(__file__).parent.parent.parent / 'bicorder.json' # Historical column renames: maps old CSV column names → current bicorder.json names. # Add an entry here whenever gradient terms are renamed in bicorder.json. COLUMN_RENAMES = { - 'Design_elite_vs_vernacular': 'Design_institutional_vs_vernacular', + 'Design_elite_vs_vernacular': 'Design_formal_vs_vernacular', + 'Design_institutional_vs_vernacular': 'Design_formal_vs_vernacular', 'Entanglement_exclusive_vs_non-exclusive': 'Entanglement_monopolistic_vs_pluralistic', 'Experience_sufficient_vs_insufficient': 'Experience_sufficient_vs_limited', 'Experience_Kafka_vs_Whitehead': 'Experience_restraining_vs_liberating', diff --git a/analysis/scripts/json_to_csv.py b/analysis/scripts/json_to_csv.py index 995cfb8..3126df2 100644 --- a/analysis/scripts/json_to_csv.py +++ b/analysis/scripts/json_to_csv.py @@ -24,7 +24,8 @@ from pathlib import Path # Map old term pairs to current column names (matches COLUMN_RENAMES in other scripts). # Keys are (term_left, term_right) as found in older JSON files. TERM_RENAMES = { - ('elite', 'vernacular'): ('institutional', 'vernacular'), + ('elite', 'vernacular'): ('formal', 'vernacular'), + ('institutional', 'vernacular'): ('formal', 'vernacular'), ('exclusive', 'non-exclusive'): ('monopolistic', 'pluralistic'), ('insufficient', 'sufficient'): ('sufficient', 'limited'), # note: order swapped in old versions ('Kafka', 'Whitehead'): ('restraining', 'liberating'),