Veritula – Meta
#3431·Dennis HackethalOP, about 2 months agoThe bounty initiator’s card will have to be authorized when starting the bounty. Card authorizations presumably have a deadline, so resetting the deadline won’t be an option.
Couldn’t I re-authorize the card?
#2524·Dennis HackethalOP revised 4 months agoI’m not sure yet, but I’m playing with the idea that the criticism can’t have any pending counter-criticisms by some deadline. Each counter-criticism could reset the deadline to give everyone ample time to respond.
The bounty initiator’s card will have to be authorized when starting the bounty. Card authorizations presumably have a deadline, so resetting the deadline won’t be an option.
#3424·Dennis HackethalOP, about 2 months agoRather than set a fixed amount for each unproblematic criticism (#3421), the ceiling could be divided among all criticisms equally.
But that would mean that the first criticism receives a payout at the same time the last criticism receives a payout. That creates an incentive to ignore new bounties in favor of older ones.
Unlike #3424, however, having a set amount per criticisms means there’s zero incentive for anyone to submit more criticisms, whereas divvying up the amount among criticisms means the incentive is gradually reduced, and it’s up to people to decide for themselves whether the reduction is still worth contributing.
Unlike #3424, however, having a set amount per criticisms means there’s zero incentive for anyone to submit more criticisms, whereas divvying up the amount among criticisms means the incentive is gradually reduced, and it’s up to people to decide for themselves whether contributions are still worth making.
Unlike #3424, however, having a set amount per criticisms means there’s zero incentive for anyone to submit more criticisms, whereas divvying up the amount among criticisms means the incentive is gradually reduced, and it’s up to people to decide for themselves whether the reduction is still worth contributing.
Unlike #3424, however, having a set amount per criticisms means there’s zero incentive for anyone to submit more criticisms, whereas divvying up the amount among criticisms means the incentive is gradually reduced, and it’s up to people to decide for themselves whether the reduction is still worth contributing.
#3423·Dennis HackethalOP, about 2 months agoThat could be a good thing in that people won’t completely overwhelm OP with criticisms.
Unlike #3424, however, having a set amount per criticisms means there’s zero incentive for anyone to submit more criticisms, whereas divvying up the amount among criticisms means the incentive is gradually reduced, and it’s up to people to decide for themselves whether the reduction is still worth contributing.
#2811·Dennis HackethalOP revised 3 months agoFeature idea: pay people to criticize your idea.
You submit an idea with a ‘criticism bounty’ of ten bucks per criticism received, say.
The amount should be arbitrarily customizable.
There could then be a page for bounties at /bounties. And a page listing a user’s bounties at /:username/bounties.
Rather than set a fixed amount for each unproblematic criticism (#3421), the ceiling could be divided among all criticisms equally.
#3422·Dennis HackethalOP, about 2 months agoBut that means that additional criticisms don’t get any payout.
That could be a good thing in that people won’t completely overwhelm OP with criticisms.
#3421·Dennis HackethalOP, about 2 months agoThe initiator of the bounty could choose a ceiling for the total they are willing to spend. They could additionally specify the amount per unproblematic criticism.
For example, a user would indicate that they are willing to spend a total of $100 at $10 per criticism.
But that means that additional criticisms don’t get any payout.
#2811·Dennis HackethalOP revised 3 months agoFeature idea: pay people to criticize your idea.
You submit an idea with a ‘criticism bounty’ of ten bucks per criticism received, say.
The amount should be arbitrarily customizable.
There could then be a page for bounties at /bounties. And a page listing a user’s bounties at /:username/bounties.
The initiator of the bounty could choose a ceiling for the total they are willing to spend. They could additionally specify the amount per unproblematic criticism.
For example, a user would indicate that they are willing to spend a total of $100 at $10 per criticism.
Idea: voice spaces, like Twitter spaces, except an AI generates a transcript and automatically turns it into a discussion tree, with criticism chains and all.
#3409·Dennis HackethalOP, about 2 months agoBenjamin suggests making it clearer that you can use Veritula by yourself.
Done, see #3413.
Benjamin suggests making it clearer that you can use Veritula by yourself.
#3372·Dennis HackethalOP revised about 2 months agoI’ve asked Gemini to explain it:
1. Auto-Closure (Insertion State)
When the user inputs an opening delimiter, the system immediately injects the corresponding closing delimiter and places the caret (cursor) between them.
Input: (
Buffer State: (|)
Logic: insert(opening_char) + insert(closing_char) + move_caret(-1)
2. Type-Through (Escape State)
If the caret is positioned immediately before a closing delimiter that was autopaired, and the user types that specific closing delimiter, the system suppresses the character insertion and instead advances the caret.
Context: [text|]
Input: ]
Buffer State: [text]| (Not [text]])
Logic: if (next_char == input_char) { move_caret(+1); prevent_default(); }
3. Atomic Deletion (Regression State)
If the caret is between an empty pair of delimiters, a backspace event deletes both the opening and closing characters simultaneously, returning the buffer to the pre-insertion state.
Context: (|)
Input: Backspace
Buffer State: |
Logic: if (prev_char == open && next_char == close) { delete_range(caret-1, caret+1); }
4. Selection Wrapping (Transformation State)
If a text range is selected (highlighted) and an opening delimiter is typed, the system wraps the selection rather than replacing it.
Context: |selected_text|
Input: [[
Buffer State: [[selected_text]]
Logic: surround_selection(input_pair)
5. Markdown-Specific Heuristics
Obsidian applies context-aware logic for Markdown syntax (e.g., * or _). It often checks word boundaries to determine if the user intends to bold/italicize or use a bullet point.
Context (Start of line): | + * + Space -> Bullet list (autopair disabled/consumed by formatting).
Context (Middle of line): word | + * -> word *|* (autopair enabled for italics).
I have implemented 1-4. Give it a try. I think 5 is out of scope for now but I may revisit it at some point. If auto-closing asterisks are a problem at the start of a line (when making lists), use a hyphen instead.
#3397·Dennis HackethalOP revised about 2 months agoI can take this opportunity to replace manual markdown with a proper text editor. Then there’s no need for autopaired brackets.
The editor will need to support:
- Automatic links to ideas like #123
- Links to @mentions like @dennis-hackethal
- Safe link formatting
- Disabling of turbo links
- Namespaced footnotes
- Custom blockquote format
- Protection against XSS
- Retention of formatting when pasting
On second thought, implementing a proper text editor would take more work than I initially realized, and is far beyond the scope of what Benjamin is requesting anyway. I can revisit this idea later.
I can take this opportunity to replace manual markdown with a proper text editor. Then there’s no need for autopaired brackets.
The editor will need to support:
- Automatic links to ideas like #123
- Links to @mentions like @dennis-hackethal
- Safe link formatting
- Disabling of turbo links
- Namespaced footnotes
- Custom blockquote format
- Protection against XSS
I can take this opportunity to replace manual markdown with a proper text editor. Then there’s no need for autopaired brackets.
The editor will need to support:
- Automatic links to ideas like #123
- Links to @mentions like @dennis-hackethal
- Safe link formatting
- Disabling of turbo links
- Namespaced footnotes
- Custom blockquote format
- Protection against XSS
- Retention of formatting when pasting
#3171·Benjamin Davies, 2 months agoObsidian autopairs markdown syntax and brackets. I like it a lot and would like Veritula to have something similar!
I can take this opportunity to replace manual markdown with a proper text editor. Then there’s no need for autopaired brackets.
The editor will need to support:
- Automatic links to ideas like #123
- Links to @mentions like @dennis-hackethal
- Safe link formatting
- Disabling of turbo links
- Namespaced footnotes
- Custom blockquote format
- Protection against XSS
Escape special characters
I’ve asked Gemini to explain it:
1. Auto-Closure (Insertion State)
When the user inputs an opening delimiter, the system immediately injects the corresponding closing delimiter and places the caret (cursor) between them.
Input: (
Buffer State: (|)
Logic: insert(openingchar) + insert(closingchar) + move_caret(-1)
2. Type-Through (Escape State)
If the caret is positioned immediately before a closing delimiter that was autopaired, and the user types that specific closing delimiter, the system suppresses the character insertion and instead advances the caret.
Context: [text|]
Input: ]
Buffer State: [text]| (Not [text]])
Logic: if (nextchar == inputchar) { movecaret(+1); preventdefault(); }
3. Atomic Deletion (Regression State)
If the caret is between an empty pair of delimiters, a backspace event deletes both the opening and closing characters simultaneously, returning the buffer to the pre-insertion state.
Context: (|)
Input: Backspace
Buffer State: |
Logic: if (prevchar == open && nextchar == close) { delete_range(caret-1, caret+1); }
4. Selection Wrapping (Transformation State)
If a text range is selected (highlighted) and an opening delimiter is typed, the system wraps the selection rather than replacing it.
Context: |selected_text|
Input: [[
Buffer State: [[selected_text]]
Logic: surroundselection(inputpair)
5. Markdown-Specific Heuristics
Obsidian applies context-aware logic for Markdown syntax (e.g., * or _). It often checks word boundaries to determine if the user intends to bold/italicize or use a bullet point.
Context (Start of line): | + * + Space -> Bullet list (autopair disabled/consumed by formatting).
Context (Middle of line): word | + * -> word | (autopair enabled for italics).
I’ve asked Gemini to explain it:
1. Auto-Closure (Insertion State)
When the user inputs an opening delimiter, the system immediately injects the corresponding closing delimiter and places the caret (cursor) between them.
Input: (
Buffer State: (|)
Logic: insert(opening_char) + insert(closing_char) + move_caret(-1)
2. Type-Through (Escape State)
If the caret is positioned immediately before a closing delimiter that was autopaired, and the user types that specific closing delimiter, the system suppresses the character insertion and instead advances the caret.
Context: [text|]
Input: ]
Buffer State: [text]| (Not [text]])
Logic: if (next_char == input_char) { move_caret(+1); prevent_default(); }
3. Atomic Deletion (Regression State)
If the caret is between an empty pair of delimiters, a backspace event deletes both the opening and closing characters simultaneously, returning the buffer to the pre-insertion state.
Context: (|)
Input: Backspace
Buffer State: |
Logic: if (prev_char == open && next_char == close) { delete_range(caret-1, caret+1); }
4. Selection Wrapping (Transformation State)
If a text range is selected (highlighted) and an opening delimiter is typed, the system wraps the selection rather than replacing it.
Context: |selected_text|
Input: [[
Buffer State: [[selected_text]]
Logic: surround_selection(input_pair)
5. Markdown-Specific Heuristics
Obsidian applies context-aware logic for Markdown syntax (e.g., * or _). It often checks word boundaries to determine if the user intends to bold/italicize or use a bullet point.
Context (Start of line): | + * + Space -> Bullet list (autopair disabled/consumed by formatting).
Context (Middle of line): word | + * -> word *|* (autopair enabled for italics).