Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
6a1e615
Implement Image and Infobox counting
Feb 6, 2026
ed938af
This feature counts incoming and outgoing links for the submitted art…
Feb 13, 2026
52b7dc2
Add detailed reference counts to the database
Feb 28, 2026
2ac66d2
Fix the alembic migrations and repush the old commits
Mar 16, 2026
96509da
DB ready for autoscoring
hridyesh-gupta Mar 20, 2026
359280a
Frontend ready for automated scoring
hridyesh-gupta Mar 20, 2026
f9f8e76
Merge branch 'feature/auto-mode-database'
hridyesh-gupta Mar 20, 2026
58128ef
Minor changes
hridyesh-gupta Mar 20, 2026
f3083ab
Merge branch 'feature/auto-mode-database'
hridyesh-gupta Mar 20, 2026
96a6c6e
Minor changes
hridyesh-gupta Mar 20, 2026
2819aff
Merge branch 'feature/auto-mode-ui'
hridyesh-gupta Mar 20, 2026
e06a866
Implemented the category crawler
hridyesh-gupta Mar 20, 2026
508d6d4
Implement the category importer
hridyesh-gupta Mar 21, 2026
20b052d
Implement automated scoring feature for the articles
hridyesh-gupta Mar 25, 2026
4bd9923
Minor view change
hridyesh-gupta Mar 25, 2026
af95f21
Hide the mulit parameter toggle in automated scoring mode
hridyesh-gupta Mar 25, 2026
b83a27d
Minor view changes
hridyesh-gupta Mar 25, 2026
14939da
feat: add automated scoring database support (#192)
hridyesh-gupta Mar 25, 2026
14b725f
feat: add automated scoring mode UI in contest creation and editing (…
hridyesh-gupta Mar 25, 2026
e80d6b5
Merge branch 'dev' into feature/category-crawler
hridyesh-gupta Mar 25, 2026
32b88f8
feat: add bulk article import from Wikipedia categories (#194)
hridyesh-gupta Mar 25, 2026
34e7ca7
feat: add automated evaluation engine with score breakdown (#195)
hridyesh-gupta Mar 25, 2026
77bb7fc
feat: add submission filter tabs and improved edit experience for aut…
hridyesh-gupta Mar 25, 2026
773bf12
fix: breaking template and category auto-attachment
hridyesh-gupta Apr 2, 2026
015fa54
fix: breaking template and category auto-attachment (#197)
hridyesh-gupta Apr 2, 2026
ee14b50
fix: pylint errors blocking CI
hridyesh-gupta Apr 6, 2026
0225b69
feat: remove filters, add alphabetical sorting, fix trusted members icon
GauriGupta21 Apr 14, 2026
334a353
feat: dashboard UI updates and some more frontend chnages
GauriGupta21 Apr 16, 2026
dd7a661
feat: remove filters, add alphabetical sorting, fix trusted members i…
GauriGupta21 Apr 17, 2026
0e9252d
feat: dashboard UI updates and some more frontend chnages (#201)
GauriGupta21 Apr 17, 2026
840c586
fix: alert z-index issue and contest view UI improvements
GauriGupta21 Apr 17, 2026
41da368
fix: alert z-index issue and contest view UI improvements (#202)
GauriGupta21 Apr 18, 2026
0352080
fix(models): add article_byte_count alias for misleading article_word…
hridyesh-gupta May 19, 2026
3abf13b
fix(automated): read min_bytes and min_references from common contest…
hridyesh-gupta May 19, 2026
8ce58db
Add mwparserfromhell for accurate reference counting
hridyesh-gupta May 19, 2026
9e9ccc6
feat: metadata pagination, crawler batching, submission deletion, dom…
hridyesh-gupta May 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions CRITICAL_ISSUES_REPORT.md
Original file line number Diff line number Diff line change
Expand Up @@ -270,15 +270,15 @@ def update_contest(contest_id):

### Immediate (Before Any Production Deployment)

1. ✅ **Fix hardcoded secrets** - Remove `'rohank10'` defaults
2. ✅ **Secure debug endpoint** - Add authentication or remove
3. ✅ **Revoke OAuth credentials** - Generate new ones, move to env vars
4. ✅ **Disable debug mode** - Use environment variable
1. **Fix hardcoded secrets** - Remove `'rohank10'` defaults
2. **Secure debug endpoint** - Add authentication or remove
3. **Revoke OAuth credentials** - Generate new ones, move to env vars
4. **Disable debug mode** - Use environment variable

### High Priority (Before Next Release)

5. ✅ **Fix database password default** - Require DATABASE_URL
6. ✅ **Add error handler** - Fix update_contest route
5. **Fix database password default** - Require DATABASE_URL
6. **Add error handler** - Fix update_contest route

### Additional Recommendations

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
"""add_automated_settings_column

Revision ID: 0f85a2313fbd
Revises: 2b7c1a9d4c3e
Create Date: 2026-03-17

Adds automated_settings column to contests table for automated scoring mode.
This column stores eligibility criteria and evaluation parameters as JSON.
"""

from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import mysql

# revision identifiers, used by Alembic.
revision = '0f85a2313fbd'
down_revision = '2b7c1a9d4c3e'
branch_labels = None
depends_on = None


def upgrade():
"""
Add automated_settings column to contests table.

Structure stored as JSON:
{
"enabled": true,
"eligibility": {
"min_edits": 100,
"min_outgoing_links": 3
},
"evaluation": {
"points_per_accepted": 10,
"points_per_byte": 0.001,
"points_per_incoming_link": 2,
"points_per_outgoing_link": 1,
"points_per_category": 1,
"points_per_new_reference": 3,
"points_per_reused_reference": 1,
"points_per_infobox": 5,
"points_per_image": 2
}
}
"""
op.add_column(
'contests',
sa.Column(
'automated_settings',
sa.Text(),
nullable=True,
comment='Automated scoring configuration (eligibility + evaluation criteria)'
)
)


def downgrade():
"""Remove automated_settings column from contests table."""
op.drop_column('contests', 'automated_settings')
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
"""add incoming and outgoing links columns

Revision ID: 195a1fb1d56e
Revises: f1a2b3c4d5e6
Create Date: 2026-02-06 17:25:37.027375

"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy import inspect

# revision identifiers, used by Alembic.
revision = '195a1fb1d56e'
down_revision = "f1a2b3c4d5e6"
branch_labels = None
depends_on = None


def upgrade() -> None:
conn = op.get_bind()
inspector = inspect(conn)
columns = [col["name"] for col in inspector.get_columns("submissions")]

if "incoming_links" not in columns:
op.add_column(
"submissions",
sa.Column("incoming_links", sa.Integer(), nullable=True),
)

if "outgoing_links" not in columns:
op.add_column(
"submissions",
sa.Column("outgoing_links", sa.Integer(), nullable=True),
)


def downgrade() -> None:
conn = op.get_bind()
inspector = inspect(conn)
columns = [col["name"] for col in inspector.get_columns("submissions")]

if "outgoing_links" in columns:
op.drop_column("submissions", "outgoing_links")

if "incoming_links" in columns:
op.drop_column("submissions", "incoming_links")
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
"""add_evaluation_details_columns

Revision ID: 1a2b3c4d5e6f
Revises: 0f85a2313fbd
Create Date: 2026-03-21

Adds evaluation_reason and score_breakdown columns to submissions table
for displaying automated scoring details.
"""

from alembic import op
import sqlalchemy as sa

# revision identifiers, used by Alembic.
revision = '1a2b3c4d5e6f'
down_revision = '0f85a2313fbd'
branch_labels = None
depends_on = None


def upgrade():
"""Add evaluation_reason and score_breakdown columns to submissions table."""
op.add_column(
'submissions',
sa.Column(
'evaluation_reason',
sa.Text(),
nullable=True,
comment='Reason for rejection or success message from automated evaluation'
)
)
op.add_column(
'submissions',
sa.Column(
'score_breakdown',
sa.Text(),
nullable=True,
comment='JSON breakdown of score calculation for automated scoring'
)
)


def downgrade():
"""Remove evaluation_reason and score_breakdown columns from submissions table."""
op.drop_column('submissions', 'score_breakdown')
op.drop_column('submissions', 'evaluation_reason')
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
"""Add ref_new_count and ref_reused_count columns to submissions table

Revision ID: 2b7c1a9d4c3e
Revises: 195a1fb1d56e

"""

from alembic import op
import sqlalchemy as sa
from sqlalchemy import inspect


revision = "2b7c1a9d4c3e"
down_revision = "195a1fb1d56e"
branch_labels = None
depends_on = None


def upgrade() -> None:
conn = op.get_bind()
inspector = inspect(conn)
columns = [col["name"] for col in inspector.get_columns("submissions")]

if "ref_new_count" not in columns:
op.add_column(
"submissions",
sa.Column("ref_new_count", sa.Integer(), nullable=True, server_default="0"),
)

if "ref_reused_count" not in columns:
op.add_column(
"submissions",
sa.Column("ref_reused_count", sa.Integer(), nullable=True, server_default="0"),
)


def downgrade() -> None:
conn = op.get_bind()
inspector = inspect(conn)
columns = [col["name"] for col in inspector.get_columns("submissions")]

if "ref_reused_count" in columns:
op.drop_column("submissions", "ref_reused_count")

if "ref_new_count" in columns:
op.drop_column("submissions", "ref_new_count")
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
"""Add image_count and infobox_count columns to submissions table

Revision ID: f1a2b3c4d5e6
Revises: b3f7a9c2d1e4

"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy import inspect


revision = "f1a2b3c4d5e6"
down_revision = "b3f7a9c2d1e4"
branch_labels = None
depends_on = None


def upgrade() -> None:
conn = op.get_bind()
inspector = inspect(conn)
columns = [col["name"] for col in inspector.get_columns("submissions")]

if "image_count" not in columns:
op.add_column(
"submissions",
sa.Column("image_count", sa.Integer(), nullable=True),
)

if "infobox_count" not in columns:
op.add_column(
"submissions",
sa.Column("infobox_count", sa.Integer(), nullable=True),
)


def downgrade() -> None:
conn = op.get_bind()
inspector = inspect(conn)
columns = [col["name"] for col in inspector.get_columns("submissions")]

if "infobox_count" in columns:
op.drop_column("submissions", "infobox_count")

if "image_count" in columns:
op.drop_column("submissions", "image_count")
Loading
Loading