Add the crux of options that need fixing from jnap's survey
[catagits/Catalyst-Runtime.git] / TODO
diff --git a/TODO b/TODO
index be81bbe..c131e71 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,82 +1,93 @@
-Back-compat investigation:
+# Known Bugs:
 
-  - Get engines tested:
-    - Catalyst-Engine-Zeus
-    - Catalyst-Engine-XMPP2
-    - Catalyst-Engine-HTTPEngine
-    - Catalyst-Engine-HTTP-Prefork
-    - Catalyst-Engine-SCGI
-    - Catalyst-Engine-Wx
+   - Bug ->go or ->visit causes actions which have Args or CaptureArgs called
+     twice when called via ->go or ->visit.
 
-Known issues:
-     - CatalystX-Imports, Class::MOP doesn't consider anon subs in the symbol 
-       table as methods, tests + fix, or explanation and documentation?
-       (rafl & phaylon)
-     - Catalyst-Log-Log4perl Deep recursion on subroutine "MockApp::setup" 
-       (rafl)
-     
-     - Catalyst-Plugin-Cache dies due to mk_accessors('meta')
-     
-     - CatalystX-CRUD and CatalystX-CRUD-ModelAdapter-DBIC
-       fail tests against 5.80 (karpet)
+     Test app: http://github.com/bobtfish/catalyst-app-bug-go_chain/tree/master
 
-     - Catalyst-Plugin-Authorization-ACL fails as 
-       Catalyst::Dispatcher::_do_forward does not fix arguments if you throw
-       an exception. Needs a test case (Caelum)
-     
-     - Catalyst::Plugin::Authentication new release.
-     
-     - Catalyst::Action::RenderView
-     - Catalyst::Plugin::DebugCookie
-       - Conflict with each other: $c->config->{debug}->{foo} = 'bar'
-         now breaks, unsure why..
+# Compatibility warnings to add:
 
-  - Fix memory leaks (I already tried Devel::Leak::Object, but no joy).
+  - $self->config should warn as config should only ever be called as a
+    class method (TESTS).
 
-Cleanups:
+# Proposed functionality / feature additions:
 
-  - Update Test suite to not assume MyApp ISA Controller
-    - After that set up attr handlers that will output helpful error messages 
-      when you do it as well as how to fix it.
+## Log setup needs to be less lame
 
-  - Eliminate all instances of $instance->{$key}, I think the only thing
-    left is lib/Catalyst/Engine/HTTP.pm: $self->{inputbuf}, which I haven't
-    touched as it is used as an lvalue in a lot of places (t0m)
+So Catalyst::Plugin::Log::* can die
+in a fire. Having $c->log_class would be a good start. kane volunteered
+to do some of this.
 
-  - Find whatever in the test suite craps a file called GLOB(0xfoo) onto my 
-    disk and fix it. (Believed to be in the optional TEST_HTTP tests?) (t0m)
+Simple example: Catalyst::Plugin::Log::Colorful should just be a
+subclass of Catalyst::Log, no ::Plugin:: needed.
 
-Documentation:
+See also: Catalyst::Plugin::Log::Dispatch and
+http://github.com/willert/catalyst-plugin-log4perl-simple/tree
 
-   - Manual / Tutorial updates
+# REFACTORING
 
-       - extends in components with attributes must be inside a BEGIN block.
+##  PSGI
 
-       - How to write Moosified Catalyst components.
+###  Blockers
 
-   - Fix the Roadmap to be less full of lies.
-      
-   - Document all other known failure cases / upgrade issues.
-   
-   - Tidy up / finish off incompatibility warnings etc.
-   
-   - Catalyst/Upgrading.pod
+  * Test all the options work on all of the scripts
+  * Fix nginx middlewares so that they are generic, or can somehow
+    be used by people with their own .psgi files
+  * Fix a sane / nicer way to do custom engines.
 
-Reported bugs:
+#### Script survey
 
-   - Issues with TWMC not being loaded when it used to be in 5.70 
-     (Bill Moseley)
+##### myapp_web_fastcgi.pl
 
-Profiling:
+Looks to me like we are mapping --deamon to --detach but I think the modern Plack FCGI handler prefers --deamonize
 
-  - vs 5.70 and optimisation as needed.
+Although --pidfile is supported --pid seems to be preferred, and if we are bothering to map, why not map for the future?
 
-Tests:
+##### myapp_web_server.pl
 
-  - Moosified test application?
+--fork, this gets passed and Plack doesn’t complain, but it doesn’t fork.  Maybe we could just detect this switch and complain about it (say you should use plackup and Starman, for example?)
 
-  - Test & document warnings from back-compat methods in Catalyst::Dispatcher
-  
-  - Test & document warnings from plugin method on Catalyst
+--keepalive, passed, no complaint but doesn’t really seem to do anything.
 
+--pidfile, --background, these also seem to do nothing.
+
+###  Nice to have
+
+  * <@rafl> i've been thinking of maybe providing
+    MyApp->apply_default_middlewares($psgi_app)
+  * Capture arguments that the plack engine component was run with somewhere,
+    to more easily support custom args from scripts (e.g. Gitalist's 
+    --git_dir)
+  * throw away the restarter and allow using the restarters Plack provides
+  * remove per-request state from the engine instance
+  * be smarter about how we use PSGI - not every response needs to be delayed
+    and streaming
+
+##  The horrible hack for plugin setup - replacing it:
+
+ * Have a look at the Devel::REPL BEFORE_PLUGIN stuff
+   I wonder if what we need is that combined with plugins-as-roles
+
+## App / ctx split:
+
+  NOTE - these are notes that t0m thought up after doing back compat for
+         catalyst_component_class, may be inaccurate, wrong or missing things
+         bug mst (at least) to correct before trying more than the first 2
+         steps. Please knock yourself out on the first two however :)
+
+  - Eliminate actions in MyApp from the main test suite
+  - Uncomment warning in C::C::register_action_methods, add tests it works
+    by mocking out the logging..
+  - Remove MyApp @ISA controller (ask metaclass if it has attributes, and if
+                                  so you need back compat :/)
+  - Make Catalyst::Context, move the per request stuff in there, handles from
+    main app class to delegate
+  - Make an instance of the app class which is a global variable
+  - Make new instance of the context class, not the app class per-request
+  - Remove the components as class data, move to instance data on the app
+    class (you probably have to do this for _all_ the class data, good luck!)
+  - Make it possible for users to spin up different instances of the app class
+    (with different config etc each)
+  - Profit! (Things like changing the complete app config per vhost, i.e.
+    writing a config loader / app class role which dispatches per vhost to
+    differently configured apps is piss easy)