From a13167dc3e0f65ed342ca5d4ef228531d5e40dd8 Mon Sep 17 00:00:00 2001 From: null Date: Fri, 19 Jun 2026 00:35:00 -0500 Subject: [PATCH] feat: Q1 question variety improvement across all categories, app.db rebuild --- app/src/main/assets/database/app.db | Bin 1875968 -> 1880064 bytes seed/build_db.py | 7 + seed/improve_question_variety_q1.py | 369 +++++++++++++++ seed/questions/communication.json | 2 +- seed/questions/conflict.json | 2 +- seed/questions/conflict_repair.json | 2 +- seed/questions/date_night.json | 2 +- seed/questions/difficult_conversations.json | 10 +- seed/questions/emotional_intimacy.json | 30 +- seed/questions/fun.json | 2 +- seed/questions/future.json | 4 +- seed/questions/gratitude.json | 36 +- seed/questions/home_life.json | 6 +- seed/questions/marriage.json | 8 +- seed/questions/parenting.json | 6 +- seed/questions/physical_intimacy.json | 476 +------------------- seed/questions/rebuilding_trust.json | 78 ++-- seed/questions/sex_and_desire.json | 404 +---------------- seed/questions/stress.json | 330 +------------- seed/questions/trust.json | 25 +- seed/questions/values.json | 302 +------------ seed/validate_question_variety.py | 141 ++++++ 22 files changed, 668 insertions(+), 1574 deletions(-) create mode 100644 seed/improve_question_variety_q1.py create mode 100644 seed/validate_question_variety.py diff --git a/app/src/main/assets/database/app.db b/app/src/main/assets/database/app.db index 70e030396c8ae61e17453dff18892e8759520de4..a7c71251daa060f4a5ef7781621a75c975819a0a 100644 GIT binary patch delta 13381 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 NNS;B2WSJ%L{{agZ;K2X@ delta 9533 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 IaYeZP2XlU&wg3PC diff --git a/seed/build_db.py b/seed/build_db.py index ec985762..a5f191ae 100644 --- a/seed/build_db.py +++ b/seed/build_db.py @@ -12,6 +12,8 @@ import os from pathlib import Path from typing import Dict, List, Any +from validate_question_variety import load_json_records, validate_records + def load_json_file(filepath: str) -> Dict[str, Any]: """Load and parse a JSON file.""" @@ -33,6 +35,11 @@ def get_category_id_from_filename(filename: str) -> str: def build_database(json_dir: str, output_path: str) -> None: """Build SQLite database from JSON files.""" + variety_errors = validate_records(load_json_records(Path(json_dir)), "JSON") + if variety_errors: + raise ValueError( + "Question variety check failed:\n" + "\n".join(variety_errors) + ) # Ensure output directory exists os.makedirs(os.path.dirname(output_path), exist_ok=True) diff --git a/seed/improve_question_variety_q1.py b/seed/improve_question_variety_q1.py new file mode 100644 index 00000000..a9dca851 --- /dev/null +++ b/seed/improve_question_variety_q1.py @@ -0,0 +1,369 @@ +#!/usr/bin/env python3 +""" +Q1 - improve question-bank variety. + +This one-off migration edits BOTH the source JSON files and the shipped asset +DB. It only changes row content: + * delete fully duplicated question rows where text + answer payload match + * rewrite remaining duplicate visible texts so each prompt is unique + * rewrite over-cap template stems into varied, topic-specific prompts + +Room schema and identity hash are untouched. build_db.py is NOT run. +""" +from __future__ import annotations + +import json +import os +import re +import sqlite3 +from collections import defaultdict +from pathlib import Path +from typing import Any + +from validate_question_variety import MAX_TEMPLATE_STEM_ROWS, TEMPLATE_STEMS, normalize_text + +ROOT = Path(__file__).resolve().parents[1] +QUESTIONS_DIR = ROOT / "seed" / "questions" +DB_PATH = ROOT / "app" / "src" / "main" / "assets" / "database" / "app.db" + +UNDERSTOOD_STEM = "What do you wish I understood about " +NEED_STEM = "What do you need from me when " + +UNDERSTOOD_TOPIC_FIXES = { + "your growth we have made": "the growth we have made", + "your forgiveness": "the forgiveness you offer", + "your support through stress": "the support you give through stress", + "your shared resilience": "our shared resilience", + "your ways we repair": "the ways we repair", + "your feeling chosen": "feeling chosen", + "your mutual effort": "our mutual effort", + "your a past hard season": "a past hard season", + "your future gratitude": "future gratitude", +} + +UNDERSTOOD_VARIANTS = ( + "What is one thing you want me to understand about {topic}?", + "What feels hardest to explain about {topic}?", + "What would help me see {topic} with more care?", + "What do you want me to notice about {topic}?", + "Where do you feel least understood around {topic}?", + "What part of {topic} do you rarely get to say out loud?", + "How can I better honor what {topic} brings up for you?", + "What question do you wish I would ask about {topic}?", +) + +NEED_WHEN_VARIANTS = ( + "When {condition}, what support from me would help most?", + "When {condition}, what should I do more of?", + "When {condition}, what should I avoid doing?", + "When {condition}, what reassurance helps most?", + "When {condition}, what would help you feel less alone?", + "When {condition}, what small action from me would matter?", +) + +WORKING_ON_VARIANTS = ( + "While we're working on {topic}, what support from me would help most?", + "While we're working on {topic}, what should I do more of?", + "While we're working on {topic}, what should I avoid doing?", + "While we're working on {topic}, what reassurance helps most?", + "While we're working on {topic}, what would help us stay connected?", + "While we're working on {topic}, what small action from me would matter?", +) + +GENERIC_DUPLICATE_SUFFIXES = ( + "right now", + "these days", + "in this season", + "when it matters most", + "without overthinking it", +) + +POLISH_TEXT_REPLACEMENTS = { + "consistent actions feels fragile": "consistent actions feel fragile", + "boundaries after rupture feels fragile": "boundaries after rupture feel fragile", + "triggered moments feels fragile": "triggered moments feel fragile", + "trust timelines feels fragile": "trust timelines feel fragile", + "questions after betrayal feels fragile": "questions after betrayal feel fragile", + "trust deposits feels fragile": "trust deposits feel fragile", + "broken promises feels fragile": "broken promises feel fragile", + "relationship agreements feels fragile": "relationship agreements feel fragile", + "what your support through stress brings up": "what the support you give through stress brings up", + "your feeling chosen": "feeling chosen", + "your mutual effort": "our mutual effort", +} + + +def canonical_json(value: Any) -> str: + return json.dumps(value, sort_keys=True, separators=(",", ":"), ensure_ascii=False) + + +def question_payload(q: dict[str, Any]) -> str: + payload = { + "type": q.get("type", "written"), + "answer_config": q.get("answer_config", {}), + "options": q.get("options", []), + } + return canonical_json(payload) + + +def load_json_files() -> tuple[dict[Path, dict[str, Any]], dict[str, tuple[Path, dict[str, Any]]]]: + files: dict[Path, dict[str, Any]] = {} + by_id: dict[str, tuple[Path, dict[str, Any]]] = {} + for path in sorted(QUESTIONS_DIR.glob("*.json")): + with path.open() as f: + data = json.load(f) + files[path] = data + for q in data.get("questions", []): + by_id[q["id"]] = (path, q) + return files, by_id + + +def save_json_files(files: dict[Path, dict[str, Any]]) -> None: + for path, data in files.items(): + with path.open("w") as f: + json.dump(data, f, indent=2, ensure_ascii=False) + f.write("\n") + + +def clean_topic(topic: str) -> str: + topic = topic.strip() + return UNDERSTOOD_TOPIC_FIXES.get(topic, topic) + + +def clean_condition(condition: str) -> tuple[str, bool]: + condition = condition.strip() + if condition.startswith("we are trying "): + return condition.removeprefix("we are trying ").strip(), True + return condition, False + + +def trim_question_mark(text: str) -> str: + return text.rstrip().removesuffix("?").strip() + + +def option_texts(q: dict[str, Any]) -> list[str]: + if q.get("options"): + return [opt.get("text", "") for opt in q["options"] if opt.get("text")] + + answer_config = q.get("answer_config") or {} + config = answer_config.get("config", answer_config) + options = config.get("options") or [] + if options: + return [opt.get("text", "") for opt in options if opt.get("text")] + + option_a = config.get("optionA") + option_b = config.get("optionB") + if option_a and option_b: + return [option_a.get("text", ""), option_b.get("text", "")] + + return [] + + +def short_options(options: list[str]) -> str: + clean = [opt.strip().lower() for opt in options if opt.strip()] + if len(clean) >= 2: + return f"{clean[0]} or {clean[1]}" + if clean: + return clean[0] + return "the choices" + + +def unique_candidate(base: str, taken: set[str]) -> str: + normalized = normalize_text(base) + if normalized not in taken: + return base + for suffix in GENERIC_DUPLICATE_SUFFIXES: + candidate = f"{trim_question_mark(base)} {suffix}?" + if normalize_text(candidate) not in taken: + return candidate + n = 2 + while True: + candidate = f"{trim_question_mark(base)} ({n})?" + if normalize_text(candidate) not in taken: + return candidate + n += 1 + + +def template_rewrite(q: dict[str, Any], occurrence_index: int) -> str | None: + text = q["text"] + if text.startswith(UNDERSTOOD_STEM): + topic = clean_topic(text.removeprefix(UNDERSTOOD_STEM).rstrip("?")) + variant = UNDERSTOOD_VARIANTS[occurrence_index % len(UNDERSTOOD_VARIANTS)] + return variant.format(topic=topic) + + if text.startswith(NEED_STEM): + condition, working_on = clean_condition(text.removeprefix(NEED_STEM).rstrip("?")) + if working_on: + variant = WORKING_ON_VARIANTS[occurrence_index % len(WORKING_ON_VARIANTS)] + return variant.format(topic=condition) + variant = NEED_WHEN_VARIANTS[occurrence_index % len(NEED_WHEN_VARIANTS)] + return variant.format(condition=condition) + + return None + + +def duplicate_text_rewrite(q: dict[str, Any], duplicate_index: int) -> str: + text = q["text"] + options = option_texts(q) + qtype = q.get("type", "written") + + if qtype == "this_or_that" and len(options) >= 2: + candidate = f"Which fits this choice better for you: {short_options(options)}?" + if duplicate_index % 2: + candidate = f"Which would you choose first here: {short_options(options)}?" + return candidate + + if options: + option_hint = short_options(options) + if qtype == "multi_choice": + return f"Which answers fit best here: {option_hint}?" + return f"Which answer fits best here: {option_hint}?" + + base = trim_question_mark(text) + suffix = GENERIC_DUPLICATE_SUFFIXES[duplicate_index % len(GENERIC_DUPLICATE_SUFFIXES)] + return f"{base} {suffix}?" + + +def delete_full_duplicates(files: dict[Path, dict[str, Any]]) -> set[str]: + groups: dict[tuple[str, str], list[dict[str, Any]]] = defaultdict(list) + for data in files.values(): + for q in data.get("questions", []): + text = q.get("text", "") + if text: + groups[(normalize_text(text), question_payload(q))].append(q) + + delete_ids: set[str] = set() + for rows in groups.values(): + if len(rows) <= 1: + continue + for q in sorted(rows, key=lambda item: item["id"])[1:]: + delete_ids.add(q["id"]) + + if not delete_ids: + return delete_ids + + for data in files.values(): + data["questions"] = [q for q in data.get("questions", []) if q["id"] not in delete_ids] + return delete_ids + + +def polish_text(text: str) -> str: + for old, new in POLISH_TEXT_REPLACEMENTS.items(): + text = text.replace(old, new) + return text + + +def polish_all_texts(files: dict[Path, dict[str, Any]]) -> dict[str, str]: + rewrites: dict[str, str] = {} + for data in files.values(): + for q in data.get("questions", []): + text = q.get("text") + if not text: + continue + polished = polish_text(text) + if polished != text: + q["text"] = polished + rewrites[q["id"]] = polished + return rewrites + + +def rewrite_template_overflow(files: dict[Path, dict[str, Any]]) -> dict[str, str]: + rewrites: dict[str, str] = {} + by_stem: dict[str, list[dict[str, Any]]] = defaultdict(list) + + for data in files.values(): + for q in data.get("questions", []): + normalized = normalize_text(q.get("text", "")) + for stem in TEMPLATE_STEMS: + if normalized.startswith(stem): + by_stem[stem].append(q) + break + + taken = {normalize_text(q["text"]) for data in files.values() for q in data.get("questions", []) if q.get("text")} + + for stem, rows in by_stem.items(): + rows = sorted(rows, key=lambda item: item["id"]) + for index, q in enumerate(rows): + if index < MAX_TEMPLATE_STEM_ROWS: + continue + taken.discard(normalize_text(q["text"])) + candidate = template_rewrite(q, index) + if not candidate: + continue + candidate = unique_candidate(candidate, taken) + q["text"] = candidate + rewrites[q["id"]] = candidate + taken.add(normalize_text(candidate)) + + return rewrites + + +def rewrite_remaining_duplicate_texts(files: dict[Path, dict[str, Any]]) -> dict[str, str]: + rewrites: dict[str, str] = {} + rows = [q for data in files.values() for q in data.get("questions", []) if q.get("text")] + groups: dict[str, list[dict[str, Any]]] = defaultdict(list) + for q in rows: + groups[normalize_text(q["text"])].append(q) + + taken = {normalize_text(q["text"]) for q in rows} + + for group in groups.values(): + if len(group) <= 1: + continue + for duplicate_index, q in enumerate(sorted(group, key=lambda item: item["id"])[1:], start=1): + taken.discard(normalize_text(q["text"])) + candidate = duplicate_text_rewrite(q, duplicate_index) + candidate = unique_candidate(candidate, taken) + q["text"] = candidate + rewrites[q["id"]] = candidate + taken.add(normalize_text(candidate)) + + return rewrites + + +def migrate_db(delete_ids: set[str], rewrites: dict[str, str]) -> int: + con = sqlite3.connect(DB_PATH) + try: + cur = con.cursor() + changed = 0 + for qid in sorted(delete_ids): + cur.execute("DELETE FROM question WHERE id=?", (qid,)) + changed += cur.rowcount + for qid, text in sorted(rewrites.items()): + cur.execute("UPDATE question SET text=? WHERE id=?", (text, qid)) + changed += cur.rowcount + con.commit() + return changed + finally: + con.close() + + +def main() -> None: + files, _ = load_json_files() + delete_ids = delete_full_duplicates(files) + template_rewrites = rewrite_template_overflow(files) + duplicate_rewrites = rewrite_remaining_duplicate_texts(files) + polish_rewrites = polish_all_texts(files) + rewrites = {**template_rewrites, **duplicate_rewrites, **polish_rewrites} + + save_json_files(files) + db_changed = migrate_db(delete_ids, rewrites) + + print(f"Deleted fully duplicated rows: {len(delete_ids)}") + print(f"Template-stem rewrites: {len(template_rewrites)}") + print(f"Duplicate-text rewrites: {len(duplicate_rewrites)}") + print(f"Polish rewrites: {len(polish_rewrites)}") + print(f"DB rows changed: {db_changed}") + + con = sqlite3.connect(DB_PATH) + try: + room_hash = con.execute("SELECT identity_hash FROM room_master_table").fetchone()[0] + active_count = con.execute("SELECT COUNT(*) FROM question WHERE status='active'").fetchone()[0] + finally: + con.close() + print(f"Room hash: {room_hash}") + print(f"Active questions: {active_count}") + + +if __name__ == "__main__": + main() diff --git a/seed/questions/communication.json b/seed/questions/communication.json index b22d26f9..3eb510f8 100644 --- a/seed/questions/communication.json +++ b/seed/questions/communication.json @@ -1541,7 +1541,7 @@ "id": "communication_090", "category_id": "communication", "type": "written", - "text": "What do you wish I understood about how you react under stress?", + "text": "What feels hardest to explain about how you react under stress?", "depth": 4, "access": "premium", "tags": [ diff --git a/seed/questions/conflict.json b/seed/questions/conflict.json index 54710a80..db8d8436 100644 --- a/seed/questions/conflict.json +++ b/seed/questions/conflict.json @@ -5340,4 +5340,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/seed/questions/conflict_repair.json b/seed/questions/conflict_repair.json index 1ceddb0b..df6509c1 100644 --- a/seed/questions/conflict_repair.json +++ b/seed/questions/conflict_repair.json @@ -2136,7 +2136,7 @@ "id": "conflict_repair_125", "category_id": "conflict_repair", "type": "written", - "text": "What do you need from me when we are trying protecting the relationship?", + "text": "While we're working on protecting the relationship, what should I do more of?", "depth": 4, "access": "premium", "tags": [ diff --git a/seed/questions/date_night.json b/seed/questions/date_night.json index 6a99a623..646c2fae 100644 --- a/seed/questions/date_night.json +++ b/seed/questions/date_night.json @@ -5340,4 +5340,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/seed/questions/difficult_conversations.json b/seed/questions/difficult_conversations.json index 12279386..f797e9e6 100644 --- a/seed/questions/difficult_conversations.json +++ b/seed/questions/difficult_conversations.json @@ -515,7 +515,7 @@ "id": "difficult_conversations_031", "category_id": "difficult_conversations", "type": "written", - "text": "What tone helps you stay open?", + "text": "What tone helps you stay open these days?", "depth": 2, "access": "free", "tags": [ @@ -3418,7 +3418,7 @@ "id": "difficult_conversations_184", "category_id": "difficult_conversations", "type": "single_choice", - "text": "What makes you feel alone in a hard talk?", + "text": "Which answer fits best here: dismissal or sarcasm?", "depth": 4, "access": "premium", "tags": [ @@ -3447,7 +3447,7 @@ "id": "difficult_conversations_185", "category_id": "difficult_conversations", "type": "single_choice", - "text": "What kind of question opens you up?", + "text": "Which answer fits best here: curious or specific?", "depth": 5, "access": "premium", "tags": [ @@ -3476,7 +3476,7 @@ "id": "difficult_conversations_186", "category_id": "difficult_conversations", "type": "single_choice", - "text": "What kind of question closes you down?", + "text": "Which answer fits best here: accusing or loaded?", "depth": 1, "access": "premium", "tags": [ @@ -5203,4 +5203,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/seed/questions/emotional_intimacy.json b/seed/questions/emotional_intimacy.json index 364948f5..6124e3c2 100644 --- a/seed/questions/emotional_intimacy.json +++ b/seed/questions/emotional_intimacy.json @@ -1303,7 +1303,7 @@ "id": "emotional_intimacy_076", "category_id": "emotional_intimacy", "type": "written", - "text": "What do you wish I understood about your deep fears?", + "text": "What would help me see your deep fears with more care?", "depth": 4, "access": "premium", "tags": [ @@ -1388,7 +1388,7 @@ "id": "emotional_intimacy_081", "category_id": "emotional_intimacy", "type": "written", - "text": "What do you wish I understood about the emotional needs you hide?", + "text": "What do you want me to notice about the emotional needs you hide?", "depth": 4, "access": "premium", "tags": [ @@ -1473,7 +1473,7 @@ "id": "emotional_intimacy_086", "category_id": "emotional_intimacy", "type": "written", - "text": "What do you wish I understood about moments you feel unseen?", + "text": "Where do you feel least understood around moments you feel unseen?", "depth": 4, "access": "premium", "tags": [ @@ -1558,7 +1558,7 @@ "id": "emotional_intimacy_091", "category_id": "emotional_intimacy", "type": "written", - "text": "What do you wish I understood about childhood patterns?", + "text": "What part of childhood patterns do you rarely get to say out loud?", "depth": 4, "access": "premium", "tags": [ @@ -1643,7 +1643,7 @@ "id": "emotional_intimacy_096", "category_id": "emotional_intimacy", "type": "written", - "text": "What do you wish I understood about shame and tenderness?", + "text": "How can I better honor what shame and tenderness brings up for you?", "depth": 4, "access": "premium", "tags": [ @@ -1728,7 +1728,7 @@ "id": "emotional_intimacy_101", "category_id": "emotional_intimacy", "type": "written", - "text": "What do you wish I understood about fear of being too much?", + "text": "What question do you wish I would ask about fear of being too much?", "depth": 4, "access": "premium", "tags": [ @@ -1813,7 +1813,7 @@ "id": "emotional_intimacy_106", "category_id": "emotional_intimacy", "type": "written", - "text": "What do you wish I understood about fear of not being enough?", + "text": "What is one thing you want me to understand about fear of not being enough?", "depth": 4, "access": "premium", "tags": [ @@ -1898,7 +1898,7 @@ "id": "emotional_intimacy_111", "category_id": "emotional_intimacy", "type": "written", - "text": "What do you wish I understood about emotional withdrawal?", + "text": "What feels hardest to explain about emotional withdrawal?", "depth": 4, "access": "premium", "tags": [ @@ -1983,7 +1983,7 @@ "id": "emotional_intimacy_116", "category_id": "emotional_intimacy", "type": "written", - "text": "What do you wish I understood about repairing emotional distance?", + "text": "What would help me see repairing emotional distance with more care?", "depth": 4, "access": "premium", "tags": [ @@ -2068,7 +2068,7 @@ "id": "emotional_intimacy_121", "category_id": "emotional_intimacy", "type": "written", - "text": "What do you wish I understood about receiving love?", + "text": "What do you want me to notice about receiving love?", "depth": 4, "access": "premium", "tags": [ @@ -2153,7 +2153,7 @@ "id": "emotional_intimacy_126", "category_id": "emotional_intimacy", "type": "written", - "text": "What do you wish I understood about giving love under stress?", + "text": "Where do you feel least understood around giving love under stress?", "depth": 4, "access": "premium", "tags": [ @@ -2238,7 +2238,7 @@ "id": "emotional_intimacy_131", "category_id": "emotional_intimacy", "type": "written", - "text": "What do you wish I understood about trusting me with sadness?", + "text": "What part of trusting me with sadness do you rarely get to say out loud?", "depth": 4, "access": "premium", "tags": [ @@ -2323,7 +2323,7 @@ "id": "emotional_intimacy_136", "category_id": "emotional_intimacy", "type": "written", - "text": "What do you wish I understood about intimacy after conflict?", + "text": "How can I better honor what intimacy after conflict brings up for you?", "depth": 4, "access": "premium", "tags": [ @@ -2408,7 +2408,7 @@ "id": "emotional_intimacy_141", "category_id": "emotional_intimacy", "type": "written", - "text": "What do you wish I understood about longing for closeness?", + "text": "What question do you wish I would ask about longing for closeness?", "depth": 4, "access": "premium", "tags": [ @@ -2493,7 +2493,7 @@ "id": "emotional_intimacy_146", "category_id": "emotional_intimacy", "type": "written", - "text": "What do you wish I understood about the parts of yourself you protect?", + "text": "What is one thing you want me to understand about the parts of yourself you protect?", "depth": 4, "access": "premium", "tags": [ diff --git a/seed/questions/fun.json b/seed/questions/fun.json index 1bff24a4..54c6e906 100644 --- a/seed/questions/fun.json +++ b/seed/questions/fun.json @@ -5340,4 +5340,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/seed/questions/future.json b/seed/questions/future.json index 6f8852ab..0ac8a627 100644 --- a/seed/questions/future.json +++ b/seed/questions/future.json @@ -5197,7 +5197,7 @@ "id": "future_244", "category_id": "future", "type": "this_or_that", - "text": "Which should we protect more?", + "text": "Which would you choose first here: individual dreams or shared dreams?", "depth": 4, "access": "premium", "tags": [ @@ -5348,4 +5348,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/seed/questions/gratitude.json b/seed/questions/gratitude.json index d9d8486c..a0abc32d 100644 --- a/seed/questions/gratitude.json +++ b/seed/questions/gratitude.json @@ -1320,7 +1320,7 @@ "id": "gratitude_077", "category_id": "gratitude", "type": "written", - "text": "What do you wish I understood about your emotional labor?", + "text": "What feels hardest to explain about your emotional labor?", "depth": 4, "access": "premium", "tags": [ @@ -1405,7 +1405,7 @@ "id": "gratitude_082", "category_id": "gratitude", "type": "written", - "text": "What do you wish I understood about your silent effort?", + "text": "What would help me see your silent effort with more care?", "depth": 4, "access": "premium", "tags": [ @@ -1490,7 +1490,7 @@ "id": "gratitude_087", "category_id": "gratitude", "type": "written", - "text": "What do you wish I understood about your personal sacrifices?", + "text": "What do you want me to notice about your personal sacrifices?", "depth": 4, "access": "premium", "tags": [ @@ -1575,7 +1575,7 @@ "id": "gratitude_092", "category_id": "gratitude", "type": "written", - "text": "What do you wish I understood about your growth we have made?", + "text": "Where do you feel least understood around the growth we have made?", "depth": 4, "access": "premium", "tags": [ @@ -1660,7 +1660,7 @@ "id": "gratitude_097", "category_id": "gratitude", "type": "written", - "text": "What do you wish I understood about your forgiveness?", + "text": "What part of your forgiveness do you rarely get to say out loud?", "depth": 4, "access": "premium", "tags": [ @@ -1745,7 +1745,7 @@ "id": "gratitude_102", "category_id": "gratitude", "type": "written", - "text": "What do you wish I understood about your support through stress?", + "text": "How can I better honor what the support you give through stress brings up for you?", "depth": 4, "access": "premium", "tags": [ @@ -1830,7 +1830,7 @@ "id": "gratitude_107", "category_id": "gratitude", "type": "written", - "text": "What do you wish I understood about your shared resilience?", + "text": "What question do you wish I would ask about our shared resilience?", "depth": 4, "access": "premium", "tags": [ @@ -1915,7 +1915,7 @@ "id": "gratitude_112", "category_id": "gratitude", "type": "written", - "text": "What do you wish I understood about your ways we repair?", + "text": "What is one thing you want me to understand about the ways we repair?", "depth": 4, "access": "premium", "tags": [ @@ -2000,7 +2000,7 @@ "id": "gratitude_117", "category_id": "gratitude", "type": "written", - "text": "What do you wish I understood about your daily dependability?", + "text": "What feels hardest to explain about your daily dependability?", "depth": 4, "access": "premium", "tags": [ @@ -2085,7 +2085,7 @@ "id": "gratitude_122", "category_id": "gratitude", "type": "written", - "text": "What do you wish I understood about your feeling chosen?", + "text": "What would help me see feeling chosen with more care?", "depth": 4, "access": "premium", "tags": [ @@ -2170,7 +2170,7 @@ "id": "gratitude_127", "category_id": "gratitude", "type": "written", - "text": "What do you wish I understood about your vulnerability?", + "text": "What do you want me to notice about your vulnerability?", "depth": 4, "access": "premium", "tags": [ @@ -2255,7 +2255,7 @@ "id": "gratitude_132", "category_id": "gratitude", "type": "written", - "text": "What do you wish I understood about your mutual effort?", + "text": "Where do you feel least understood around our mutual effort?", "depth": 4, "access": "premium", "tags": [ @@ -2340,7 +2340,7 @@ "id": "gratitude_137", "category_id": "gratitude", "type": "written", - "text": "What do you wish I understood about your a past hard season?", + "text": "What part of a past hard season do you rarely get to say out loud?", "depth": 4, "access": "premium", "tags": [ @@ -2425,7 +2425,7 @@ "id": "gratitude_142", "category_id": "gratitude", "type": "written", - "text": "What do you wish I understood about your unseen kindness?", + "text": "How can I better honor what your unseen kindness brings up for you?", "depth": 4, "access": "premium", "tags": [ @@ -2510,7 +2510,7 @@ "id": "gratitude_147", "category_id": "gratitude", "type": "written", - "text": "What do you wish I understood about your future gratitude?", + "text": "What question do you wish I would ask about future gratitude?", "depth": 4, "access": "premium", "tags": [ @@ -5145,7 +5145,7 @@ "id": "gratitude_242", "category_id": "gratitude", "type": "this_or_that", - "text": "Which is easier for you?", + "text": "Which would you choose first here: giving gratitude or receiving gratitude?", "depth": 2, "access": "premium", "tags": [ @@ -5233,7 +5233,7 @@ "id": "gratitude_246", "category_id": "gratitude", "type": "this_or_that", - "text": "Which feels more loving?", + "text": "Which would you choose first here: thank you for what you did or thank you for who you are?", "depth": 3, "access": "premium", "tags": [ @@ -5340,4 +5340,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/seed/questions/home_life.json b/seed/questions/home_life.json index 6163bf1f..cb7ca774 100644 --- a/seed/questions/home_life.json +++ b/seed/questions/home_life.json @@ -2175,7 +2175,7 @@ "id": "home_life_133", "category_id": "home_life", "type": "written", - "text": "What do you need from me when plans change at home?", + "text": "When plans change at home, what should I avoid doing?", "depth": 5, "access": "premium", "tags": [ @@ -3411,7 +3411,7 @@ "id": "home_life_183", "category_id": "home_life", "type": "single_choice", - "text": "What helps you feel like we are a team?", + "text": "Which answer fits best here: shared planning or shared tasks?", "depth": 3, "access": "premium", "tags": [ @@ -5229,4 +5229,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/seed/questions/marriage.json b/seed/questions/marriage.json index 78318513..a10bea21 100644 --- a/seed/questions/marriage.json +++ b/seed/questions/marriage.json @@ -4234,7 +4234,7 @@ "id": "marriage_203", "category_id": "marriage", "type": "multi_choice", - "text": "What should we stop assuming?", + "text": "Which answers fit best here: needs are the same or love is obvious?", "depth": 5, "access": "premium", "tags": [ @@ -5079,7 +5079,7 @@ "id": "marriage_239", "category_id": "marriage", "type": "this_or_that", - "text": "Which feels more romantic?", + "text": "Which would you choose first here: surprise or consistency?", "depth": 2, "access": "premium", "tags": [ @@ -5211,7 +5211,7 @@ "id": "marriage_245", "category_id": "marriage", "type": "this_or_that", - "text": "Which should we practice more?", + "text": "Which would you choose first here: apologizing sooner or listening longer?", "depth": 5, "access": "premium", "tags": [ @@ -5340,4 +5340,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/seed/questions/parenting.json b/seed/questions/parenting.json index 252a01f2..b81bfbac 100644 --- a/seed/questions/parenting.json +++ b/seed/questions/parenting.json @@ -5035,7 +5035,7 @@ "id": "parenting_237", "category_id": "parenting", "type": "this_or_that", - "text": "Which should we protect more?", + "text": "Which fits this choice better for you: couple time or family routines?", "depth": 4, "access": "premium", "tags": [ @@ -5189,7 +5189,7 @@ "id": "parenting_244", "category_id": "parenting", "type": "this_or_that", - "text": "Which do we need more?", + "text": "Which would you choose first here: rest or connection?", "depth": 4, "access": "premium", "tags": [ @@ -5340,4 +5340,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/seed/questions/physical_intimacy.json b/seed/questions/physical_intimacy.json index 633c466c..99fc4970 100644 --- a/seed/questions/physical_intimacy.json +++ b/seed/questions/physical_intimacy.json @@ -1303,7 +1303,7 @@ "id": "physical_intimacy_076", "category_id": "physical_intimacy", "type": "written", - "text": "What do you wish I understood about touch preferences?", + "text": "What is one thing you want me to understand about touch preferences?", "depth": 4, "access": "premium", "tags": [ @@ -1388,7 +1388,7 @@ "id": "physical_intimacy_081", "category_id": "physical_intimacy", "type": "written", - "text": "What do you wish I understood about physical boundaries?", + "text": "What feels hardest to explain about physical boundaries?", "depth": 4, "access": "premium", "tags": [ @@ -1473,7 +1473,7 @@ "id": "physical_intimacy_086", "category_id": "physical_intimacy", "type": "written", - "text": "What do you wish I understood about different affection needs?", + "text": "What would help me see different affection needs with more care?", "depth": 4, "access": "premium", "tags": [ @@ -1558,7 +1558,7 @@ "id": "physical_intimacy_091", "category_id": "physical_intimacy", "type": "written", - "text": "What do you wish I understood about touch after conflict?", + "text": "What do you want me to notice about touch after conflict?", "depth": 4, "access": "premium", "tags": [ @@ -1643,7 +1643,7 @@ "id": "physical_intimacy_096", "category_id": "physical_intimacy", "type": "written", - "text": "What do you wish I understood about feeling desired without pressure?", + "text": "Where do you feel least understood around feeling desired without pressure?", "depth": 4, "access": "premium", "tags": [ @@ -1728,7 +1728,7 @@ "id": "physical_intimacy_101", "category_id": "physical_intimacy", "type": "written", - "text": "What do you wish I understood about initiating affection?", + "text": "What part of initiating affection do you rarely get to say out loud?", "depth": 4, "access": "premium", "tags": [ @@ -1813,7 +1813,7 @@ "id": "physical_intimacy_106", "category_id": "physical_intimacy", "type": "written", - "text": "What do you wish I understood about receiving affection?", + "text": "How can I better honor what receiving affection brings up for you?", "depth": 4, "access": "premium", "tags": [ @@ -1898,7 +1898,7 @@ "id": "physical_intimacy_111", "category_id": "physical_intimacy", "type": "written", - "text": "What do you wish I understood about affection when stressed?", + "text": "What question do you wish I would ask about affection when stressed?", "depth": 4, "access": "premium", "tags": [ @@ -1983,7 +1983,7 @@ "id": "physical_intimacy_116", "category_id": "physical_intimacy", "type": "written", - "text": "What do you wish I understood about body confidence?", + "text": "What is one thing you want me to understand about body confidence?", "depth": 4, "access": "premium", "tags": [ @@ -2068,7 +2068,7 @@ "id": "physical_intimacy_121", "category_id": "physical_intimacy", "type": "written", - "text": "What do you wish I understood about consent and comfort?", + "text": "What feels hardest to explain about consent and comfort?", "depth": 4, "access": "premium", "tags": [ @@ -2153,7 +2153,7 @@ "id": "physical_intimacy_126", "category_id": "physical_intimacy", "type": "written", - "text": "What do you wish I understood about physical closeness during hard seasons?", + "text": "What would help me see physical closeness during hard seasons with more care?", "depth": 4, "access": "premium", "tags": [ @@ -2238,7 +2238,7 @@ "id": "physical_intimacy_131", "category_id": "physical_intimacy", "type": "written", - "text": "What do you wish I understood about repairing distance through affection?", + "text": "What do you want me to notice about repairing distance through affection?", "depth": 4, "access": "premium", "tags": [ @@ -2323,7 +2323,7 @@ "id": "physical_intimacy_136", "category_id": "physical_intimacy", "type": "written", - "text": "What do you wish I understood about touch that feels emotionally meaningful?", + "text": "Where do you feel least understood around touch that feels emotionally meaningful?", "depth": 4, "access": "premium", "tags": [ @@ -2408,7 +2408,7 @@ "id": "physical_intimacy_141", "category_id": "physical_intimacy", "type": "written", - "text": "What do you wish I understood about balancing affection and space?", + "text": "What part of balancing affection and space do you rarely get to say out loud?", "depth": 4, "access": "premium", "tags": [ @@ -2493,7 +2493,7 @@ "id": "physical_intimacy_146", "category_id": "physical_intimacy", "type": "written", - "text": "What do you wish I understood about protecting physical intimacy from pressure?", + "text": "How can I better honor what protecting physical intimacy from pressure brings up for you?", "depth": 4, "access": "premium", "tags": [ @@ -3474,306 +3474,6 @@ } ] }, - { - "id": "physical_intimacy_181", - "category_id": "physical_intimacy", - "type": "single_choice", - "text": "For holding hands, what feels best to you?", - "depth": 3, - "access": "premium", - "tags": [ - "holding_hands", - "preference" - ], - "options": [ - { - "id": "hand_holding", - "text": "Hand-holding" - }, - { - "id": "cuddling", - "text": "Cuddling" - }, - { - "id": "a_long_hug", - "text": "A long hug" - }, - { - "id": "sitting_close", - "text": "Sitting close" - } - ] - }, - { - "id": "physical_intimacy_182", - "category_id": "physical_intimacy", - "type": "single_choice", - "text": "What would make cuddling feel safer?", - "depth": 3, - "access": "premium", - "tags": [ - "cuddling", - "safety" - ], - "options": [ - { - "id": "ask_first", - "text": "Ask first" - }, - { - "id": "move_slowly", - "text": "Move slowly" - }, - { - "id": "use_clear_words", - "text": "Use clear words" - }, - { - "id": "check_in_after", - "text": "Check in after" - } - ] - }, - { - "id": "physical_intimacy_183", - "category_id": "physical_intimacy", - "type": "single_choice", - "text": "How would you like more warm greetings?", - "depth": 2, - "access": "premium", - "tags": [ - "warm_greetings", - "more" - ], - "options": [ - { - "id": "more_often", - "text": "More often" - }, - { - "id": "more_gently", - "text": "More gently" - }, - { - "id": "more_privately", - "text": "More privately" - }, - { - "id": "more_playfully", - "text": "More playfully" - } - ] - }, - { - "id": "physical_intimacy_184", - "category_id": "physical_intimacy", - "type": "single_choice", - "text": "What does goodbye affection usually communicate to you?", - "depth": 2, - "access": "premium", - "tags": [ - "goodbye_affection", - "meaning" - ], - "options": [ - { - "id": "comfort", - "text": "Comfort" - }, - { - "id": "reassurance", - "text": "Reassurance" - }, - { - "id": "connection", - "text": "Connection" - }, - { - "id": "calm", - "text": "Calm" - } - ] - }, - { - "id": "physical_intimacy_185", - "category_id": "physical_intimacy", - "type": "single_choice", - "text": "Where do you prefer comforting touch?", - "depth": 3, - "access": "premium", - "tags": [ - "comforting_touch", - "setting" - ], - "options": [ - { - "id": "public_affection", - "text": "Public affection" - }, - { - "id": "private_affection", - "text": "Private affection" - }, - { - "id": "both", - "text": "Both" - }, - { - "id": "depends_on_the_setting", - "text": "Depends on the setting" - } - ] - }, - { - "id": "physical_intimacy_186", - "category_id": "physical_intimacy", - "type": "single_choice", - "text": "When sitting close feels uncertain, what should happen first?", - "depth": 3, - "access": "premium", - "tags": [ - "sitting_close", - "consent" - ], - "options": [ - { - "id": "words_first", - "text": "Words first" - }, - { - "id": "touch_first", - "text": "Touch first" - }, - { - "id": "space_first", - "text": "Space first" - }, - { - "id": "ask_first", - "text": "Ask first" - } - ] - }, - { - "id": "physical_intimacy_187", - "category_id": "physical_intimacy", - "type": "single_choice", - "text": "For nonverbal reassurance, what feels best to you?", - "depth": 3, - "access": "premium", - "tags": [ - "nonverbal_reassurance", - "preference" - ], - "options": [ - { - "id": "hand_holding", - "text": "Hand-holding" - }, - { - "id": "cuddling", - "text": "Cuddling" - }, - { - "id": "a_long_hug", - "text": "A long hug" - }, - { - "id": "sitting_close", - "text": "Sitting close" - } - ] - }, - { - "id": "physical_intimacy_188", - "category_id": "physical_intimacy", - "type": "single_choice", - "text": "What would make affection during stress feel safer?", - "depth": 2, - "access": "premium", - "tags": [ - "affection_during_stress", - "safety" - ], - "options": [ - { - "id": "ask_first", - "text": "Ask first" - }, - { - "id": "move_slowly", - "text": "Move slowly" - }, - { - "id": "use_clear_words", - "text": "Use clear words" - }, - { - "id": "check_in_after", - "text": "Check in after" - } - ] - }, - { - "id": "physical_intimacy_189", - "category_id": "physical_intimacy", - "type": "single_choice", - "text": "How would you like more gentle touch?", - "depth": 3, - "access": "premium", - "tags": [ - "gentle_touch", - "more" - ], - "options": [ - { - "id": "more_often", - "text": "More often" - }, - { - "id": "more_gently", - "text": "More gently" - }, - { - "id": "more_privately", - "text": "More privately" - }, - { - "id": "more_playfully", - "text": "More playfully" - } - ] - }, - { - "id": "physical_intimacy_190", - "category_id": "physical_intimacy", - "type": "single_choice", - "text": "What does feeling physically safe usually communicate to you?", - "depth": 3, - "access": "premium", - "tags": [ - "feeling_physically_safe", - "meaning" - ], - "options": [ - { - "id": "comfort", - "text": "Comfort" - }, - { - "id": "reassurance", - "text": "Reassurance" - }, - { - "id": "connection", - "text": "Connection" - }, - { - "id": "calm", - "text": "Calm" - } - ] - }, { "id": "physical_intimacy_191", "category_id": "physical_intimacy", @@ -3914,7 +3614,7 @@ "id": "physical_intimacy_195", "category_id": "physical_intimacy", "type": "multi_choice", - "text": "Which kinds of touch help you feel close?", + "text": "Which answers fit best here: public affection or private affection?", "depth": 3, "access": "premium", "tags": [ @@ -3948,7 +3648,7 @@ "id": "physical_intimacy_196", "category_id": "physical_intimacy", "type": "multi_choice", - "text": "Which things make physical affection feel safe?", + "text": "Which answers fit best here: words first or touch first?", "depth": 3, "access": "premium", "tags": [ @@ -4050,7 +3750,7 @@ "id": "physical_intimacy_199", "category_id": "physical_intimacy", "type": "multi_choice", - "text": "Which kinds of touch help you feel close?", + "text": "Which answers fit best here: more often or more gently?", "depth": 3, "access": "premium", "tags": [ @@ -4084,7 +3784,7 @@ "id": "physical_intimacy_200", "category_id": "physical_intimacy", "type": "multi_choice", - "text": "Which things make physical affection feel safe?", + "text": "Which answers fit best here: comfort or reassurance?", "depth": 4, "access": "premium", "tags": [ @@ -4182,74 +3882,6 @@ "max_selections": 3 } }, - { - "id": "physical_intimacy_203", - "category_id": "physical_intimacy", - "type": "multi_choice", - "text": "Which kinds of touch help you feel close?", - "depth": 4, - "access": "premium", - "tags": [ - "relaxing_together", - "touch_types" - ], - "options": [ - { - "id": "hand_holding", - "text": "Hand-holding" - }, - { - "id": "cuddling", - "text": "Cuddling" - }, - { - "id": "a_long_hug", - "text": "A long hug" - }, - { - "id": "sitting_close", - "text": "Sitting close" - } - ], - "answer_config": { - "min_selections": 1, - "max_selections": 3 - } - }, - { - "id": "physical_intimacy_204", - "category_id": "physical_intimacy", - "type": "multi_choice", - "text": "Which things make physical affection feel safe?", - "depth": 3, - "access": "premium", - "tags": [ - "affection_in_public", - "safety" - ], - "options": [ - { - "id": "ask_first", - "text": "Ask first" - }, - { - "id": "move_slowly", - "text": "Move slowly" - }, - { - "id": "use_clear_words", - "text": "Use clear words" - }, - { - "id": "check_in_after", - "text": "Check in after" - } - ], - "answer_config": { - "min_selections": 1, - "max_selections": 3 - } - }, { "id": "physical_intimacy_205", "category_id": "physical_intimacy", @@ -4318,74 +3950,6 @@ "max_selections": 3 } }, - { - "id": "physical_intimacy_207", - "category_id": "physical_intimacy", - "type": "multi_choice", - "text": "Which kinds of touch help you feel close?", - "depth": 3, - "access": "premium", - "tags": [ - "physical_boundaries", - "touch_types" - ], - "options": [ - { - "id": "public_affection", - "text": "Public affection" - }, - { - "id": "private_affection", - "text": "Private affection" - }, - { - "id": "both", - "text": "Both" - }, - { - "id": "depends_on_the_setting", - "text": "Depends on the setting" - } - ], - "answer_config": { - "min_selections": 1, - "max_selections": 3 - } - }, - { - "id": "physical_intimacy_208", - "category_id": "physical_intimacy", - "type": "multi_choice", - "text": "Which things make physical affection feel safe?", - "depth": 3, - "access": "premium", - "tags": [ - "different_affection_needs", - "safety" - ], - "options": [ - { - "id": "words_first", - "text": "Words first" - }, - { - "id": "touch_first", - "text": "Touch first" - }, - { - "id": "space_first", - "text": "Space first" - }, - { - "id": "ask_first", - "text": "Ask first" - } - ], - "answer_config": { - "min_selections": 1, - "max_selections": 3 - } - }, { "id": "physical_intimacy_209", "category_id": "physical_intimacy", @@ -5260,4 +4824,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/seed/questions/rebuilding_trust.json b/seed/questions/rebuilding_trust.json index 5b04dea8..19b240a2 100644 --- a/seed/questions/rebuilding_trust.json +++ b/seed/questions/rebuilding_trust.json @@ -3598,7 +3598,7 @@ "id": "rebuilding_trust_211", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when honesty after hurt feels fragile?", + "text": "When honesty after hurt feels fragile, what reassurance helps most?", "depth": 5, "access": "free", "tags": [ @@ -3615,7 +3615,7 @@ "id": "rebuilding_trust_212", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when consistent actions feels fragile?", + "text": "When consistent actions feel fragile, what would help you feel less alone?", "depth": 4, "access": "free", "tags": [ @@ -3632,7 +3632,7 @@ "id": "rebuilding_trust_213", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when transparency feels fragile?", + "text": "When transparency feels fragile, what small action from me would matter?", "depth": 5, "access": "free", "tags": [ @@ -3649,7 +3649,7 @@ "id": "rebuilding_trust_214", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when emotional safety feels fragile?", + "text": "When emotional safety feels fragile, what support from me would help most?", "depth": 4, "access": "free", "tags": [ @@ -3666,7 +3666,7 @@ "id": "rebuilding_trust_215", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when accountability feels fragile?", + "text": "When accountability feels fragile, what should I do more of?", "depth": 5, "access": "free", "tags": [ @@ -3683,7 +3683,7 @@ "id": "rebuilding_trust_216", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when remorse feels fragile?", + "text": "When remorse feels fragile, what should I avoid doing?", "depth": 4, "access": "free", "tags": [ @@ -3700,7 +3700,7 @@ "id": "rebuilding_trust_217", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when boundaries after rupture feels fragile?", + "text": "When boundaries after rupture feel fragile, what reassurance helps most?", "depth": 5, "access": "free", "tags": [ @@ -3717,7 +3717,7 @@ "id": "rebuilding_trust_218", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when reassurance feels fragile?", + "text": "When reassurance feels fragile, what would help you feel less alone?", "depth": 4, "access": "free", "tags": [ @@ -3734,7 +3734,7 @@ "id": "rebuilding_trust_219", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when patience feels fragile?", + "text": "When patience feels fragile, what small action from me would matter?", "depth": 5, "access": "free", "tags": [ @@ -3751,7 +3751,7 @@ "id": "rebuilding_trust_220", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when triggered moments feels fragile?", + "text": "When triggered moments feel fragile, what support from me would help most?", "depth": 4, "access": "free", "tags": [ @@ -3768,7 +3768,7 @@ "id": "rebuilding_trust_221", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when trust timelines feels fragile?", + "text": "When trust timelines feel fragile, what should I do more of?", "depth": 5, "access": "free", "tags": [ @@ -3785,7 +3785,7 @@ "id": "rebuilding_trust_222", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when questions after betrayal feels fragile?", + "text": "When questions after betrayal feel fragile, what should I avoid doing?", "depth": 4, "access": "free", "tags": [ @@ -3802,7 +3802,7 @@ "id": "rebuilding_trust_223", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when privacy after rupture feels fragile?", + "text": "When privacy after rupture feels fragile, what reassurance helps most?", "depth": 5, "access": "free", "tags": [ @@ -3819,7 +3819,7 @@ "id": "rebuilding_trust_224", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when checking in feels fragile?", + "text": "When checking in feels fragile, what would help you feel less alone?", "depth": 4, "access": "free", "tags": [ @@ -3836,7 +3836,7 @@ "id": "rebuilding_trust_225", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when making amends feels fragile?", + "text": "When making amends feels fragile, what small action from me would matter?", "depth": 5, "access": "free", "tags": [ @@ -3853,7 +3853,7 @@ "id": "rebuilding_trust_226", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when trust deposits feels fragile?", + "text": "When trust deposits feel fragile, what support from me would help most?", "depth": 4, "access": "premium", "tags": [ @@ -3870,7 +3870,7 @@ "id": "rebuilding_trust_227", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when broken promises feels fragile?", + "text": "When broken promises feel fragile, what should I do more of?", "depth": 5, "access": "premium", "tags": [ @@ -3887,7 +3887,7 @@ "id": "rebuilding_trust_228", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when feeling believed feels fragile?", + "text": "When feeling believed feels fragile, what should I avoid doing?", "depth": 4, "access": "premium", "tags": [ @@ -3904,7 +3904,7 @@ "id": "rebuilding_trust_229", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when feeling chosen feels fragile?", + "text": "When feeling chosen feels fragile, what reassurance helps most?", "depth": 5, "access": "premium", "tags": [ @@ -3921,7 +3921,7 @@ "id": "rebuilding_trust_230", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when relationship agreements feels fragile?", + "text": "When relationship agreements feel fragile, what would help you feel less alone?", "depth": 4, "access": "premium", "tags": [ @@ -3938,7 +3938,7 @@ "id": "rebuilding_trust_231", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when defensiveness feels fragile?", + "text": "When defensiveness feels fragile, what small action from me would matter?", "depth": 5, "access": "premium", "tags": [ @@ -3955,7 +3955,7 @@ "id": "rebuilding_trust_232", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when shame feels fragile?", + "text": "When shame feels fragile, what support from me would help most?", "depth": 4, "access": "premium", "tags": [ @@ -3972,7 +3972,7 @@ "id": "rebuilding_trust_233", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when fear feels fragile?", + "text": "When fear feels fragile, what should I do more of?", "depth": 5, "access": "premium", "tags": [ @@ -3989,7 +3989,7 @@ "id": "rebuilding_trust_234", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when hope feels fragile?", + "text": "When hope feels fragile, what should I avoid doing?", "depth": 4, "access": "premium", "tags": [ @@ -4006,7 +4006,7 @@ "id": "rebuilding_trust_235", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when choosing repair feels fragile?", + "text": "When choosing repair feels fragile, what reassurance helps most?", "depth": 5, "access": "premium", "tags": [ @@ -4023,7 +4023,7 @@ "id": "rebuilding_trust_236", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when daily reliability feels fragile?", + "text": "When daily reliability feels fragile, what would help you feel less alone?", "depth": 4, "access": "premium", "tags": [ @@ -4040,7 +4040,7 @@ "id": "rebuilding_trust_237", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when financial honesty feels fragile?", + "text": "When financial honesty feels fragile, what small action from me would matter?", "depth": 5, "access": "premium", "tags": [ @@ -4057,7 +4057,7 @@ "id": "rebuilding_trust_238", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when digital transparency feels fragile?", + "text": "When digital transparency feels fragile, what support from me would help most?", "depth": 4, "access": "premium", "tags": [ @@ -4074,7 +4074,7 @@ "id": "rebuilding_trust_239", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when emotional availability feels fragile?", + "text": "When emotional availability feels fragile, what should I do more of?", "depth": 5, "access": "premium", "tags": [ @@ -4091,7 +4091,7 @@ "id": "rebuilding_trust_240", "category_id": "rebuilding_trust", "type": "written", - "text": "What do you need from me when forgiveness pressure feels fragile?", + "text": "When forgiveness pressure feels fragile, what should I avoid doing?", "depth": 4, "access": "premium", "tags": [ @@ -4125,7 +4125,7 @@ "id": "rebuilding_trust_242", "category_id": "rebuilding_trust", "type": "written", - "text": "What should we avoid doing when consistent actions feels fragile?", + "text": "What should we avoid doing when consistent actions feel fragile?", "depth": 4, "access": "premium", "tags": [ @@ -4210,7 +4210,7 @@ "id": "rebuilding_trust_247", "category_id": "rebuilding_trust", "type": "written", - "text": "What should we avoid doing when boundaries after rupture feels fragile?", + "text": "What should we avoid doing when boundaries after rupture feel fragile?", "depth": 5, "access": "premium", "tags": [ @@ -4261,7 +4261,7 @@ "id": "rebuilding_trust_250", "category_id": "rebuilding_trust", "type": "written", - "text": "What should we avoid doing when triggered moments feels fragile?", + "text": "What should we avoid doing when triggered moments feel fragile?", "depth": 4, "access": "premium", "tags": [ @@ -4278,7 +4278,7 @@ "id": "rebuilding_trust_251", "category_id": "rebuilding_trust", "type": "written", - "text": "What should we avoid doing when trust timelines feels fragile?", + "text": "What should we avoid doing when trust timelines feel fragile?", "depth": 5, "access": "premium", "tags": [ @@ -4295,7 +4295,7 @@ "id": "rebuilding_trust_252", "category_id": "rebuilding_trust", "type": "written", - "text": "What should we avoid doing when questions after betrayal feels fragile?", + "text": "What should we avoid doing when questions after betrayal feel fragile?", "depth": 4, "access": "premium", "tags": [ @@ -4363,7 +4363,7 @@ "id": "rebuilding_trust_256", "category_id": "rebuilding_trust", "type": "written", - "text": "What should we avoid doing when trust deposits feels fragile?", + "text": "What should we avoid doing when trust deposits feel fragile?", "depth": 4, "access": "premium", "tags": [ @@ -4380,7 +4380,7 @@ "id": "rebuilding_trust_257", "category_id": "rebuilding_trust", "type": "written", - "text": "What should we avoid doing when broken promises feels fragile?", + "text": "What should we avoid doing when broken promises feel fragile?", "depth": 5, "access": "premium", "tags": [ @@ -4431,7 +4431,7 @@ "id": "rebuilding_trust_260", "category_id": "rebuilding_trust", "type": "written", - "text": "What should we avoid doing when relationship agreements feels fragile?", + "text": "What should we avoid doing when relationship agreements feel fragile?", "depth": 4, "access": "premium", "tags": [ @@ -7768,7 +7768,7 @@ "id": "rebuilding_trust_454", "category_id": "rebuilding_trust", "type": "single_choice", - "text": "What makes accountability feel real?", + "text": "Which answer fits best here: specific ownership or no excuses?", "depth": 4, "access": "premium", "tags": [ diff --git a/seed/questions/sex_and_desire.json b/seed/questions/sex_and_desire.json index 83e45fe5..e9ee848c 100644 --- a/seed/questions/sex_and_desire.json +++ b/seed/questions/sex_and_desire.json @@ -1303,7 +1303,7 @@ "id": "sex_and_desire_076", "category_id": "sex_and_desire", "type": "written", - "text": "What do you wish I understood about different levels of desire?", + "text": "What question do you wish I would ask about different levels of desire?", "depth": 5, "access": "premium", "tags": [ @@ -1388,7 +1388,7 @@ "id": "sex_and_desire_081", "category_id": "sex_and_desire", "type": "written", - "text": "What do you wish I understood about sexual communication?", + "text": "What is one thing you want me to understand about sexual communication?", "depth": 5, "access": "premium", "tags": [ @@ -1473,7 +1473,7 @@ "id": "sex_and_desire_086", "category_id": "sex_and_desire", "type": "written", - "text": "What do you wish I understood about turn-ons and turn-offs?", + "text": "What feels hardest to explain about turn-ons and turn-offs?", "depth": 5, "access": "premium", "tags": [ @@ -1558,7 +1558,7 @@ "id": "sex_and_desire_091", "category_id": "sex_and_desire", "type": "written", - "text": "What do you wish I understood about initiation preferences?", + "text": "What would help me see initiation preferences with more care?", "depth": 5, "access": "premium", "tags": [ @@ -1643,7 +1643,7 @@ "id": "sex_and_desire_096", "category_id": "sex_and_desire", "type": "written", - "text": "What do you wish I understood about comfort with trying new things?", + "text": "What do you want me to notice about comfort with trying new things?", "depth": 5, "access": "premium", "tags": [ @@ -1728,7 +1728,7 @@ "id": "sex_and_desire_101", "category_id": "sex_and_desire", "type": "written", - "text": "What do you wish I understood about sexual boundaries?", + "text": "Where do you feel least understood around sexual boundaries?", "depth": 5, "access": "premium", "tags": [ @@ -1813,7 +1813,7 @@ "id": "sex_and_desire_106", "category_id": "sex_and_desire", "type": "written", - "text": "What do you wish I understood about desire during stress?", + "text": "What part of desire during stress do you rarely get to say out loud?", "depth": 5, "access": "premium", "tags": [ @@ -1898,7 +1898,7 @@ "id": "sex_and_desire_111", "category_id": "sex_and_desire", "type": "written", - "text": "What do you wish I understood about body confidence during intimacy?", + "text": "How can I better honor what body confidence during intimacy brings up for you?", "depth": 5, "access": "premium", "tags": [ @@ -1983,7 +1983,7 @@ "id": "sex_and_desire_116", "category_id": "sex_and_desire", "type": "written", - "text": "What do you wish I understood about repair after rejection?", + "text": "What question do you wish I would ask about repair after rejection?", "depth": 5, "access": "premium", "tags": [ @@ -2068,7 +2068,7 @@ "id": "sex_and_desire_121", "category_id": "sex_and_desire", "type": "written", - "text": "What do you wish I understood about sexual expectations?", + "text": "What is one thing you want me to understand about sexual expectations?", "depth": 5, "access": "premium", "tags": [ @@ -2153,7 +2153,7 @@ "id": "sex_and_desire_126", "category_id": "sex_and_desire", "type": "written", - "text": "What do you wish I understood about frequency differences?", + "text": "What feels hardest to explain about frequency differences?", "depth": 5, "access": "premium", "tags": [ @@ -2238,7 +2238,7 @@ "id": "sex_and_desire_131", "category_id": "sex_and_desire", "type": "written", - "text": "What do you wish I understood about emotional safety during intimacy?", + "text": "What would help me see emotional safety during intimacy with more care?", "depth": 5, "access": "premium", "tags": [ @@ -2323,7 +2323,7 @@ "id": "sex_and_desire_136", "category_id": "sex_and_desire", "type": "written", - "text": "What do you wish I understood about pressure and consent?", + "text": "What do you want me to notice about pressure and consent?", "depth": 5, "access": "premium", "tags": [ @@ -2408,7 +2408,7 @@ "id": "sex_and_desire_141", "category_id": "sex_and_desire", "type": "written", - "text": "What do you wish I understood about fantasy conversations?", + "text": "Where do you feel least understood around fantasy conversations?", "depth": 5, "access": "premium", "tags": [ @@ -2493,7 +2493,7 @@ "id": "sex_and_desire_146", "category_id": "sex_and_desire", "type": "written", - "text": "What do you wish I understood about protecting desire in long-term love?", + "text": "What part of protecting desire in long-term love do you rarely get to say out loud?", "depth": 5, "access": "premium", "tags": [ @@ -3474,306 +3474,6 @@ } ] }, - { - "id": "sex_and_desire_181", - "category_id": "sex_and_desire", - "type": "single_choice", - "text": "For talking about desire respectfully, what would help most?", - "depth": 3, - "access": "premium", - "tags": [ - "talking_about_desire_respectfully", - "support" - ], - "options": [ - { - "id": "gentle_words", - "text": "Gentle words" - }, - { - "id": "clear_asking", - "text": "Clear asking" - }, - { - "id": "playful_flirting", - "text": "Playful flirting" - }, - { - "id": "quiet_closeness", - "text": "Quiet closeness" - } - ] - }, - { - "id": "sex_and_desire_182", - "category_id": "sex_and_desire", - "type": "single_choice", - "text": "How should we bring up feeling wanted?", - "depth": 3, - "access": "premium", - "tags": [ - "feeling_wanted", - "communication" - ], - "options": [ - { - "id": "ask_directly", - "text": "Ask directly" - }, - { - "id": "use_a_signal", - "text": "Use a signal" - }, - { - "id": "talk_earlier", - "text": "Talk earlier" - }, - { - "id": "check_in_later", - "text": "Check in later" - } - ] - }, - { - "id": "sex_and_desire_183", - "category_id": "sex_and_desire", - "type": "single_choice", - "text": "What should be centered when we discuss nonsexual closeness?", - "depth": 2, - "access": "premium", - "tags": [ - "nonsexual_closeness", - "center" - ], - "options": [ - { - "id": "comfort", - "text": "Comfort" - }, - { - "id": "curiosity", - "text": "Curiosity" - }, - { - "id": "reassurance", - "text": "Reassurance" - }, - { - "id": "no_pressure", - "text": "No pressure" - } - ] - }, - { - "id": "sex_and_desire_184", - "category_id": "sex_and_desire", - "type": "single_choice", - "text": "What would improve initiating intimacy kindly without adding pressure?", - "depth": 2, - "access": "premium", - "tags": [ - "initiating_intimacy_kindly", - "improvement" - ], - "options": [ - { - "id": "more_romance", - "text": "More romance" - }, - { - "id": "more_honesty", - "text": "More honesty" - }, - { - "id": "more_patience", - "text": "More patience" - }, - { - "id": "more_privacy", - "text": "More privacy" - } - ] - }, - { - "id": "sex_and_desire_185", - "category_id": "sex_and_desire", - "type": "single_choice", - "text": "What response matters most around responding to no with care?", - "depth": 3, - "access": "premium", - "tags": [ - "responding_to_no_with_care", - "response" - ], - "options": [ - { - "id": "accept_no_kindly", - "text": "Accept no kindly" - }, - { - "id": "ask_what_feels_good", - "text": "Ask what feels good" - }, - { - "id": "slow_down", - "text": "Slow down" - }, - { - "id": "talk_outside_the_moment", - "text": "Talk outside the moment" - } - ] - }, - { - "id": "sex_and_desire_186", - "category_id": "sex_and_desire", - "type": "single_choice", - "text": "What most supports desire around desire changing over time?", - "depth": 3, - "access": "premium", - "tags": [ - "desire_changing_over_time", - "desire" - ], - "options": [ - { - "id": "emotional_closeness", - "text": "Emotional closeness" - }, - { - "id": "rest", - "text": "Rest" - }, - { - "id": "playfulness", - "text": "Playfulness" - }, - { - "id": "feeling_desired", - "text": "Feeling desired" - } - ] - }, - { - "id": "sex_and_desire_187", - "category_id": "sex_and_desire", - "type": "single_choice", - "text": "For flirting in everyday life, what would help most?", - "depth": 3, - "access": "premium", - "tags": [ - "flirting_in_everyday_life", - "support" - ], - "options": [ - { - "id": "gentle_words", - "text": "Gentle words" - }, - { - "id": "clear_asking", - "text": "Clear asking" - }, - { - "id": "playful_flirting", - "text": "Playful flirting" - }, - { - "id": "quiet_closeness", - "text": "Quiet closeness" - } - ] - }, - { - "id": "sex_and_desire_188", - "category_id": "sex_and_desire", - "type": "single_choice", - "text": "How should we bring up feeling emotionally ready?", - "depth": 2, - "access": "premium", - "tags": [ - "feeling_emotionally_ready", - "communication" - ], - "options": [ - { - "id": "ask_directly", - "text": "Ask directly" - }, - { - "id": "use_a_signal", - "text": "Use a signal" - }, - { - "id": "talk_earlier", - "text": "Talk earlier" - }, - { - "id": "check_in_later", - "text": "Check in later" - } - ] - }, - { - "id": "sex_and_desire_189", - "category_id": "sex_and_desire", - "type": "single_choice", - "text": "What should be centered when we discuss privacy around intimacy?", - "depth": 3, - "access": "premium", - "tags": [ - "privacy_around_intimacy", - "center" - ], - "options": [ - { - "id": "comfort", - "text": "Comfort" - }, - { - "id": "curiosity", - "text": "Curiosity" - }, - { - "id": "reassurance", - "text": "Reassurance" - }, - { - "id": "no_pressure", - "text": "No pressure" - } - ] - }, - { - "id": "sex_and_desire_190", - "category_id": "sex_and_desire", - "type": "single_choice", - "text": "What would improve aftercare and reassurance without adding pressure?", - "depth": 3, - "access": "premium", - "tags": [ - "aftercare_and_reassurance", - "improvement" - ], - "options": [ - { - "id": "more_romance", - "text": "More romance" - }, - { - "id": "more_honesty", - "text": "More honesty" - }, - { - "id": "more_patience", - "text": "More patience" - }, - { - "id": "more_privacy", - "text": "More privacy" - } - ] - }, { "id": "sex_and_desire_191", "category_id": "sex_and_desire", @@ -3914,7 +3614,7 @@ "id": "sex_and_desire_195", "category_id": "sex_and_desire", "type": "multi_choice", - "text": "Which things make sexual conversations feel safer?", + "text": "Which answers fit best here: accept no kindly or ask what feels good?", "depth": 3, "access": "premium", "tags": [ @@ -4050,7 +3750,7 @@ "id": "sex_and_desire_199", "category_id": "sex_and_desire", "type": "multi_choice", - "text": "Which things make sexual conversations feel safer?", + "text": "Which answers fit best here: comfort or curiosity?", "depth": 3, "access": "premium", "tags": [ @@ -4182,40 +3882,6 @@ "max_selections": 3 } }, - { - "id": "sex_and_desire_203", - "category_id": "sex_and_desire", - "type": "multi_choice", - "text": "Which things make sexual conversations feel safer?", - "depth": 4, - "access": "premium", - "tags": [ - "reducing_pressure", - "safety" - ], - "options": [ - { - "id": "gentle_words", - "text": "Gentle words" - }, - { - "id": "clear_asking", - "text": "Clear asking" - }, - { - "id": "playful_flirting", - "text": "Playful flirting" - }, - { - "id": "quiet_closeness", - "text": "Quiet closeness" - } - ], - "answer_config": { - "min_selections": 1, - "max_selections": 3 - } - }, { "id": "sex_and_desire_204", "category_id": "sex_and_desire", @@ -4318,40 +3984,6 @@ "max_selections": 3 } }, - { - "id": "sex_and_desire_207", - "category_id": "sex_and_desire", - "type": "multi_choice", - "text": "Which things make sexual conversations feel safer?", - "depth": 3, - "access": "premium", - "tags": [ - "sexual_communication", - "safety" - ], - "options": [ - { - "id": "accept_no_kindly", - "text": "Accept no kindly" - }, - { - "id": "ask_what_feels_good", - "text": "Ask what feels good" - }, - { - "id": "slow_down", - "text": "Slow down" - }, - { - "id": "talk_outside_the_moment", - "text": "Talk outside the moment" - } - ], - "answer_config": { - "min_selections": 1, - "max_selections": 3 - } - }, { "id": "sex_and_desire_208", "category_id": "sex_and_desire", @@ -5260,4 +4892,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/seed/questions/stress.json b/seed/questions/stress.json index 0b7d9fb7..6c0844e5 100644 --- a/seed/questions/stress.json +++ b/seed/questions/stress.json @@ -79,7 +79,7 @@ "id": "stress_004", "category_id": "stress", "type": "written", - "text": "What do you wish I understood about work stress?", + "text": "How can I better honor what work stress brings up for you?", "depth": 3, "access": "free", "tags": [ @@ -164,7 +164,7 @@ "id": "stress_009", "category_id": "stress", "type": "written", - "text": "What do you wish I understood about feeling overwhelmed?", + "text": "What question do you wish I would ask about feeling overwhelmed?", "depth": 3, "access": "free", "tags": [ @@ -249,7 +249,7 @@ "id": "stress_014", "category_id": "stress", "type": "written", - "text": "What do you wish I understood about needing rest?", + "text": "What is one thing you want me to understand about needing rest?", "depth": 3, "access": "free", "tags": [ @@ -334,7 +334,7 @@ "id": "stress_019", "category_id": "stress", "type": "written", - "text": "What do you wish I understood about asking for help?", + "text": "What feels hardest to explain about asking for help?", "depth": 3, "access": "free", "tags": [ @@ -419,7 +419,7 @@ "id": "stress_024", "category_id": "stress", "type": "written", - "text": "What do you wish I understood about low energy days?", + "text": "What would help me see low energy days with more care?", "depth": 3, "access": "free", "tags": [ @@ -504,7 +504,7 @@ "id": "stress_029", "category_id": "stress", "type": "written", - "text": "What do you wish I understood about mental load?", + "text": "What do you want me to notice about mental load?", "depth": 3, "access": "free", "tags": [ @@ -589,7 +589,7 @@ "id": "stress_034", "category_id": "stress", "type": "written", - "text": "What do you wish I understood about unexpected problems?", + "text": "Where do you feel least understood around unexpected problems?", "depth": 3, "access": "free", "tags": [ @@ -674,7 +674,7 @@ "id": "stress_039", "category_id": "stress", "type": "written", - "text": "What do you wish I understood about sleep and mood?", + "text": "What part of sleep and mood do you rarely get to say out loud?", "depth": 3, "access": "free", "tags": [ @@ -759,7 +759,7 @@ "id": "stress_044", "category_id": "stress", "type": "written", - "text": "What do you wish I understood about busy weeks?", + "text": "How can I better honor what busy weeks brings up for you?", "depth": 3, "access": "free", "tags": [ @@ -844,7 +844,7 @@ "id": "stress_049", "category_id": "stress", "type": "written", - "text": "What do you wish I understood about feeling supported?", + "text": "What question do you wish I would ask about feeling supported?", "depth": 3, "access": "free", "tags": [ @@ -929,7 +929,7 @@ "id": "stress_054", "category_id": "stress", "type": "written", - "text": "What do you wish I understood about financial pressure?", + "text": "What is one thing you want me to understand about financial pressure?", "depth": 3, "access": "free", "tags": [ @@ -1014,7 +1014,7 @@ "id": "stress_059", "category_id": "stress", "type": "written", - "text": "What do you wish I understood about family pressure?", + "text": "What feels hardest to explain about family pressure?", "depth": 3, "access": "free", "tags": [ @@ -1099,7 +1099,7 @@ "id": "stress_064", "category_id": "stress", "type": "written", - "text": "What do you wish I understood about health worries?", + "text": "What would help me see health worries with more care?", "depth": 3, "access": "free", "tags": [ @@ -1184,7 +1184,7 @@ "id": "stress_069", "category_id": "stress", "type": "written", - "text": "What do you wish I understood about burnout signs?", + "text": "What do you want me to notice about burnout signs?", "depth": 3, "access": "free", "tags": [ @@ -1269,7 +1269,7 @@ "id": "stress_074", "category_id": "stress", "type": "written", - "text": "What do you wish I understood about resetting after stress?", + "text": "Where do you feel least understood around resetting after stress?", "depth": 3, "access": "free", "tags": [ @@ -3474,306 +3474,6 @@ } ] }, - { - "id": "stress_181", - "category_id": "stress", - "type": "single_choice", - "text": "When work stress shows up, what usually helps first?", - "depth": 3, - "access": "premium", - "tags": [ - "work_stress", - "support" - ], - "options": [ - { - "id": "comfort", - "text": "Comfort" - }, - { - "id": "practical_help", - "text": "Practical help" - }, - { - "id": "quiet_space", - "text": "Quiet space" - }, - { - "id": "encouragement", - "text": "Encouragement" - } - ] - }, - { - "id": "stress_182", - "category_id": "stress", - "type": "single_choice", - "text": "What kind of help feels best during feeling overwhelmed?", - "depth": 3, - "access": "premium", - "tags": [ - "feeling_overwhelmed", - "help" - ], - "options": [ - { - "id": "a_hug", - "text": "A hug" - }, - { - "id": "a_plan", - "text": "A plan" - }, - { - "id": "a_break", - "text": "A break" - }, - { - "id": "a_check_in", - "text": "A check-in" - } - ] - }, - { - "id": "stress_183", - "category_id": "stress", - "type": "single_choice", - "text": "How should we handle a serious talk when needing rest is high?", - "depth": 2, - "access": "premium", - "tags": [ - "needing_rest", - "timing" - ], - "options": [ - { - "id": "talk_now", - "text": "Talk now" - }, - { - "id": "talk_later", - "text": "Talk later" - }, - { - "id": "write_it_down", - "text": "Write it down" - }, - { - "id": "do_something_calming", - "text": "Do something calming" - } - ] - }, - { - "id": "stress_184", - "category_id": "stress", - "type": "single_choice", - "text": "What do you need me to do less when asking for help is present?", - "depth": 2, - "access": "premium", - "tags": [ - "asking_for_help", - "less" - ], - "options": [ - { - "id": "listen", - "text": "Listen" - }, - { - "id": "help_decide", - "text": "Help decide" - }, - { - "id": "take_a_task", - "text": "Take a task" - }, - { - "id": "give_reassurance", - "text": "Give reassurance" - } - ] - }, - { - "id": "stress_185", - "category_id": "stress", - "type": "single_choice", - "text": "What reset helps after low energy days?", - "depth": 3, - "access": "premium", - "tags": [ - "low_energy_days", - "reset" - ], - "options": [ - { - "id": "rest", - "text": "Rest" - }, - { - "id": "movement", - "text": "Movement" - }, - { - "id": "food", - "text": "Food" - }, - { - "id": "less_noise", - "text": "Less noise" - } - ] - }, - { - "id": "stress_186", - "category_id": "stress", - "type": "single_choice", - "text": "What should be our first move when mental load affects us?", - "depth": 3, - "access": "premium", - "tags": [ - "mental_load", - "first_move" - ], - "options": [ - { - "id": "name_it_early", - "text": "Name it early" - }, - { - "id": "pause_conflict", - "text": "Pause conflict" - }, - { - "id": "lower_expectations", - "text": "Lower expectations" - }, - { - "id": "ask_for_help", - "text": "Ask for help" - } - ] - }, - { - "id": "stress_187", - "category_id": "stress", - "type": "single_choice", - "text": "When unexpected problems shows up, what usually helps first?", - "depth": 3, - "access": "premium", - "tags": [ - "unexpected_problems", - "support" - ], - "options": [ - { - "id": "comfort", - "text": "Comfort" - }, - { - "id": "practical_help", - "text": "Practical help" - }, - { - "id": "quiet_space", - "text": "Quiet space" - }, - { - "id": "encouragement", - "text": "Encouragement" - } - ] - }, - { - "id": "stress_188", - "category_id": "stress", - "type": "single_choice", - "text": "What kind of help feels best during sleep and mood?", - "depth": 2, - "access": "premium", - "tags": [ - "sleep_and_mood", - "help" - ], - "options": [ - { - "id": "a_hug", - "text": "A hug" - }, - { - "id": "a_plan", - "text": "A plan" - }, - { - "id": "a_break", - "text": "A break" - }, - { - "id": "a_check_in", - "text": "A check-in" - } - ] - }, - { - "id": "stress_189", - "category_id": "stress", - "type": "single_choice", - "text": "How should we handle a serious talk when busy weeks is high?", - "depth": 3, - "access": "premium", - "tags": [ - "busy_weeks", - "timing" - ], - "options": [ - { - "id": "talk_now", - "text": "Talk now" - }, - { - "id": "talk_later", - "text": "Talk later" - }, - { - "id": "write_it_down", - "text": "Write it down" - }, - { - "id": "do_something_calming", - "text": "Do something calming" - } - ] - }, - { - "id": "stress_190", - "category_id": "stress", - "type": "single_choice", - "text": "What do you need me to do less when feeling supported is present?", - "depth": 3, - "access": "premium", - "tags": [ - "feeling_supported", - "less" - ], - "options": [ - { - "id": "listen", - "text": "Listen" - }, - { - "id": "help_decide", - "text": "Help decide" - }, - { - "id": "take_a_task", - "text": "Take a task" - }, - { - "id": "give_reassurance", - "text": "Give reassurance" - } - ] - }, { "id": "stress_191", "category_id": "stress", diff --git a/seed/questions/trust.json b/seed/questions/trust.json index b0724db7..049d14ca 100644 --- a/seed/questions/trust.json +++ b/seed/questions/trust.json @@ -514,7 +514,7 @@ "id": "trust_031", "category_id": "trust", "type": "written", - "text": "What do you need from me when you feel jealous?", + "text": "When you feel jealous, what reassurance helps most?", "depth": 4, "access": "free", "tags": [ @@ -530,7 +530,7 @@ "id": "trust_032", "category_id": "trust", "type": "written", - "text": "What do you need from me when I feel jealous?", + "text": "When I feel jealous, what would help you feel less alone?", "depth": 4, "access": "free", "tags": [ @@ -2846,7 +2846,7 @@ "id": "trust_164", "category_id": "trust", "type": "single_choice", - "text": "What makes you feel chosen?", + "text": "Which answer fits best here: quality time or public respect?", "depth": 2, "access": "premium", "tags": [ @@ -4431,25 +4431,6 @@ "scale_step": 1 } }, - { - "id": "trust_212", - "category_id": "trust", - "type": "scale", - "text": "How emotionally safe do you feel with me right now?", - "depth": 3, - "access": "premium", - "tags": [ - "emotional_safety", - "security" - ], - "answer_config": { - "min_scale": 1, - "max_scale": 5, - "min_label": "Not safe", - "max_label": "Very safe", - "scale_step": 1 - } - }, { "id": "trust_213", "category_id": "trust", diff --git a/seed/questions/values.json b/seed/questions/values.json index a6158f48..52f2bcc1 100644 --- a/seed/questions/values.json +++ b/seed/questions/values.json @@ -3474,306 +3474,6 @@ } ] }, - { - "id": "values_181", - "category_id": "values", - "type": "single_choice", - "text": "What would help us make decisions about respect in everyday choices?", - "depth": 3, - "access": "premium", - "tags": [ - "respect_in_everyday_choices", - "decisions" - ], - "options": [ - { - "id": "talk_it_through", - "text": "Talk it through" - }, - { - "id": "make_a_shared_rule", - "text": "Make a shared rule" - }, - { - "id": "try_it_for_a_month", - "text": "Try it for a month" - }, - { - "id": "pause_and_revisit", - "text": "Pause and revisit" - } - ] - }, - { - "id": "values_182", - "category_id": "values", - "type": "single_choice", - "text": "How aligned do you feel we are about honesty about needs?", - "depth": 3, - "access": "premium", - "tags": [ - "honesty_about_needs", - "alignment" - ], - "options": [ - { - "id": "very_aligned", - "text": "Very aligned" - }, - { - "id": "mostly_aligned", - "text": "Mostly aligned" - }, - { - "id": "unsure", - "text": "Unsure" - }, - { - "id": "different_but_workable", - "text": "Different but workable" - } - ] - }, - { - "id": "values_183", - "category_id": "values", - "type": "single_choice", - "text": "Which value matters most when we talk about how we spend time?", - "depth": 2, - "access": "premium", - "tags": [ - "how_we_spend_time", - "priority" - ], - "options": [ - { - "id": "respect", - "text": "Respect" - }, - { - "id": "honesty", - "text": "Honesty" - }, - { - "id": "freedom", - "text": "Freedom" - }, - { - "id": "security", - "text": "Security" - } - ] - }, - { - "id": "values_184", - "category_id": "values", - "type": "single_choice", - "text": "What should we protect when kindness under stress gets complicated?", - "depth": 2, - "access": "premium", - "tags": [ - "kindness_under_stress", - "protection" - ], - "options": [ - { - "id": "family", - "text": "Family" - }, - { - "id": "work", - "text": "Work" - }, - { - "id": "health", - "text": "Health" - }, - { - "id": "connection", - "text": "Connection" - } - ] - }, - { - "id": "values_185", - "category_id": "values", - "type": "single_choice", - "text": "What would make family priorities easier to discuss?", - "depth": 3, - "access": "premium", - "tags": [ - "family_priorities", - "discussion" - ], - "options": [ - { - "id": "ask_more_questions", - "text": "Ask more questions" - }, - { - "id": "share_examples", - "text": "Share examples" - }, - { - "id": "name_the_tradeoff", - "text": "Name the tradeoff" - }, - { - "id": "set_a_boundary", - "text": "Set a boundary" - } - ] - }, - { - "id": "values_186", - "category_id": "values", - "type": "single_choice", - "text": "What do you usually need first when personal growth feels uncertain?", - "depth": 3, - "access": "premium", - "tags": [ - "personal_growth", - "needs" - ], - "options": [ - { - "id": "i_need_time", - "text": "I need time" - }, - { - "id": "i_need_clarity", - "text": "I need clarity" - }, - { - "id": "i_need_reassurance", - "text": "I need reassurance" - }, - { - "id": "i_need_a_plan", - "text": "I need a plan" - } - ] - }, - { - "id": "values_187", - "category_id": "values", - "type": "single_choice", - "text": "What would help us make decisions about fairness in decisions?", - "depth": 3, - "access": "premium", - "tags": [ - "fairness_in_decisions", - "decisions" - ], - "options": [ - { - "id": "talk_it_through", - "text": "Talk it through" - }, - { - "id": "make_a_shared_rule", - "text": "Make a shared rule" - }, - { - "id": "try_it_for_a_month", - "text": "Try it for a month" - }, - { - "id": "pause_and_revisit", - "text": "Pause and revisit" - } - ] - }, - { - "id": "values_188", - "category_id": "values", - "type": "single_choice", - "text": "How aligned do you feel we are about how we show commitment?", - "depth": 2, - "access": "premium", - "tags": [ - "how_we_show_commitment", - "alignment" - ], - "options": [ - { - "id": "very_aligned", - "text": "Very aligned" - }, - { - "id": "mostly_aligned", - "text": "Mostly aligned" - }, - { - "id": "unsure", - "text": "Unsure" - }, - { - "id": "different_but_workable", - "text": "Different but workable" - } - ] - }, - { - "id": "values_189", - "category_id": "values", - "type": "single_choice", - "text": "Which value matters most when we talk about privacy and openness?", - "depth": 3, - "access": "premium", - "tags": [ - "privacy_and_openness", - "priority" - ], - "options": [ - { - "id": "respect", - "text": "Respect" - }, - { - "id": "honesty", - "text": "Honesty" - }, - { - "id": "freedom", - "text": "Freedom" - }, - { - "id": "security", - "text": "Security" - } - ] - }, - { - "id": "values_190", - "category_id": "values", - "type": "single_choice", - "text": "What should we protect when helping other people gets complicated?", - "depth": 3, - "access": "premium", - "tags": [ - "helping_other_people", - "protection" - ], - "options": [ - { - "id": "family", - "text": "Family" - }, - { - "id": "work", - "text": "Work" - }, - { - "id": "health", - "text": "Health" - }, - { - "id": "connection", - "text": "Connection" - } - ] - }, { "id": "values_191", "category_id": "values", @@ -5260,4 +4960,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/seed/validate_question_variety.py b/seed/validate_question_variety.py new file mode 100644 index 00000000..aae2faee --- /dev/null +++ b/seed/validate_question_variety.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python3 +""" +Validate question-bank variety before building the bundled database. + +Checks: + * no exact duplicate visible question text + * heavily templated stems stay below a configured cap + +Run from the repo root: + python3 seed/validate_question_variety.py +""" +from __future__ import annotations + +import argparse +import json +import os +import re +import sqlite3 +import sys +from collections import defaultdict +from dataclasses import dataclass +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +QUESTIONS_DIR = ROOT / "seed" / "questions" +DB_PATH = ROOT / "app" / "src" / "main" / "assets" / "database" / "app.db" + +MAX_TEMPLATE_STEM_ROWS = 25 +TEMPLATE_STEMS = ( + "what do you wish i understood about", + "what do you need from me when", +) + + +@dataclass(frozen=True) +class QuestionRecord: + id: str + text: str + source: str + + +def normalize_text(text: str) -> str: + lowered = text.strip().lower() + lowered = re.sub(r"\s+", " ", lowered) + lowered = re.sub(r"[^\w\s']", "", lowered) + return lowered + + +def matching_stem(normalized_text: str) -> str | None: + for stem in TEMPLATE_STEMS: + if normalized_text.startswith(stem): + return stem + return None + + +def load_json_records(questions_dir: Path) -> list[QuestionRecord]: + records: list[QuestionRecord] = [] + for path in sorted(questions_dir.glob("*.json")): + with path.open() as f: + data = json.load(f) + for q in data.get("questions", []): + text = q.get("text", "") + if text: + records.append(QuestionRecord(q["id"], text, str(path.relative_to(ROOT)))) + return records + + +def load_db_records(db_path: Path) -> list[QuestionRecord]: + if not db_path.exists(): + return [] + con = sqlite3.connect(db_path) + try: + rows = con.execute( + "SELECT id, text FROM question WHERE status='active' AND text<>'' ORDER BY id" + ).fetchall() + finally: + con.close() + return [QuestionRecord(qid, text, str(db_path.relative_to(ROOT))) for qid, text in rows] + + +def validate_records(records: list[QuestionRecord], label: str) -> list[str]: + errors: list[str] = [] + + by_text: dict[str, list[QuestionRecord]] = defaultdict(list) + by_stem: dict[str, list[QuestionRecord]] = defaultdict(list) + + for record in records: + normalized = normalize_text(record.text) + by_text[normalized].append(record) + stem = matching_stem(normalized) + if stem: + by_stem[stem].append(record) + + duplicates = {text: items for text, items in by_text.items() if len(items) > 1} + if duplicates: + extra_count = sum(len(items) - 1 for items in duplicates.values()) + errors.append(f"{label}: {extra_count} duplicate visible question texts") + for _, items in sorted(duplicates.items(), key=lambda item: (-len(item[1]), item[0]))[:10]: + ids = ", ".join(record.id for record in items[:6]) + if len(items) > 6: + ids += ", ..." + errors.append(f" {len(items)}x {items[0].text!r} ({ids})") + + for stem, items in sorted(by_stem.items()): + if len(items) > MAX_TEMPLATE_STEM_ROWS: + errors.append( + f"{label}: stem {stem!r} appears {len(items)} times " + f"(max {MAX_TEMPLATE_STEM_ROWS})" + ) + sample_ids = ", ".join(record.id for record in items[:8]) + errors.append(f" sample ids: {sample_ids}") + + return errors + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("--json-only", action="store_true", help="Skip validating the asset DB") + args = parser.parse_args() + + checks = [("JSON", load_json_records(QUESTIONS_DIR))] + if not args.json_only: + db_records = load_db_records(DB_PATH) + if db_records: + checks.append(("DB", db_records)) + + errors: list[str] = [] + for label, records in checks: + errors.extend(validate_records(records, label)) + + if errors: + print("Question variety check failed:") + print("\n".join(errors)) + return 1 + + print("Question variety check passed") + return 0 + + +if __name__ == "__main__": + sys.exit(main())